diff options
| author | 2018-04-18 19:34:21 +0000 | |
|---|---|---|
| committer | 2018-04-18 19:34:21 +0000 | |
| commit | 5513302b43710b799a86d5b2b47faaf8b4ca1d44 (patch) | |
| tree | 98c0a2ea0ece67c1070cdec37e8e5d4530e23eb1 | |
| parent | 654cd3a2266c0bc98f1ac5f0e15d7074e55a2fa1 (diff) | |
| parent | f993016ac6375ddb18f61a98b62e8a01aa890a55 (diff) | |
Merge "Fix regression in assist data fetching and canceling" into pi-dev
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 17 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/RecentsAnimation.java | 33 |
2 files changed, 32 insertions, 18 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index bf647fddbdce..92cf1d5221be 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -5282,22 +5282,7 @@ public class ActivityManagerService extends IActivityManager.Stub final RecentsAnimation anim = new RecentsAnimation(this, mStackSupervisor, mActivityStartController, mWindowManager, mUserController, callingPid); anim.startRecentsActivity(intent, recentsAnimationRunner, recentsComponent, - recentsUid); - } - - // If provided, kick off the request for the assist data in the background. Do not hold - // the AM lock as this will just proxy directly to the assist data receiver provided. - if (assistDataReceiver != null) { - final AppOpsManager appOpsManager = (AppOpsManager) - mContext.getSystemService(Context.APP_OPS_SERVICE); - final AssistDataReceiverProxy proxy = new AssistDataReceiverProxy( - assistDataReceiver, recentsPackage); - final AssistDataRequester requester = new AssistDataRequester(mContext, this, - mWindowManager, appOpsManager, proxy, this, OP_ASSIST_STRUCTURE, OP_NONE); - requester.requestAssistData(topVisibleActivities, - true /* fetchData */, false /* fetchScreenshots */, - true /* allowFetchData */, false /* allowFetchScreenshots */, - recentsUid, recentsPackage); + recentsUid, assistDataReceiver); } } finally { Binder.restoreCallingIdentity(origId); diff --git a/services/core/java/com/android/server/am/RecentsAnimation.java b/services/core/java/com/android/server/am/RecentsAnimation.java index 06b5e20de972..f2ed6a29e412 100644 --- a/services/core/java/com/android/server/am/RecentsAnimation.java +++ b/services/core/java/com/android/server/am/RecentsAnimation.java @@ -17,6 +17,8 @@ package com.android.server.am; import static android.app.ActivityManager.START_TASK_TO_FRONT; +import static android.app.AppOpsManager.OP_ASSIST_STRUCTURE; +import static android.app.AppOpsManager.OP_NONE; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; @@ -30,7 +32,10 @@ import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_O import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_TOP; import android.app.ActivityOptions; +import android.app.AppOpsManager; +import android.app.IAssistDataReceiver; import android.content.ComponentName; +import android.content.Context; import android.content.Intent; import android.os.RemoteException; import android.os.Trace; @@ -58,6 +63,7 @@ class RecentsAnimation implements RecentsAnimationCallbacks { private final int mCallingPid; private int mTargetActivityType; + private AssistDataRequester mAssistDataRequester; // The stack to restore the target stack behind when the animation is finished private ActivityStack mRestoreTargetBehindStack; @@ -75,8 +81,10 @@ class RecentsAnimation implements RecentsAnimationCallbacks { } void startRecentsActivity(Intent intent, IRecentsAnimationRunner recentsAnimationRunner, - ComponentName recentsComponent, int recentsUid) { - if (DEBUG) Slog.d(TAG, "startRecentsActivity(): intent=" + intent); + ComponentName recentsComponent, int recentsUid, + IAssistDataReceiver assistDataReceiver) { + if (DEBUG) Slog.d(TAG, "startRecentsActivity(): intent=" + intent + + " assistDataReceiver=" + assistDataReceiver); Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "RecentsAnimation#startRecentsActivity"); if (!mWindowManager.canStartRecentsAnimation()) { @@ -120,6 +128,20 @@ class RecentsAnimation implements RecentsAnimationCallbacks { mWindowManager.deferSurfaceLayout(); try { + // Kick off the assist data request in the background before showing the target activity + if (assistDataReceiver != null) { + final AppOpsManager appOpsManager = (AppOpsManager) + mService.mContext.getSystemService(Context.APP_OPS_SERVICE); + final AssistDataReceiverProxy proxy = new AssistDataReceiverProxy( + assistDataReceiver, recentsComponent.getPackageName()); + mAssistDataRequester = new AssistDataRequester(mService.mContext, mService, + mWindowManager, appOpsManager, proxy, this, OP_ASSIST_STRUCTURE, OP_NONE); + mAssistDataRequester.requestAssistData(mStackSupervisor.getTopVisibleActivities(), + true /* fetchData */, false /* fetchScreenshots */, + true /* allowFetchData */, false /* allowFetchScreenshots */, + recentsUid, recentsComponent.getPackageName()); + } + final ActivityDisplay display; if (hasExistingActivity) { // Move the recents activity into place for the animation if it is not top most @@ -184,6 +206,13 @@ class RecentsAnimation implements RecentsAnimationCallbacks { if (DEBUG) Slog.d(TAG, "onAnimationFinished(): controller=" + mWindowManager.getRecentsAnimationController() + " reorderMode=" + reorderMode); + + // Cancel the associated assistant data request + if (mAssistDataRequester != null) { + mAssistDataRequester.cancel(); + mAssistDataRequester = null; + } + if (mWindowManager.getRecentsAnimationController() == null) return; // Just to be sure end the launch hint in case the target activity was never launched. |