diff options
| author | 2016-04-07 19:19:15 -0700 | |
|---|---|---|
| committer | 2016-04-09 01:18:40 +0000 | |
| commit | af80db4489d591837e114e75f5040d75b61e6804 (patch) | |
| tree | 2e2f730ca98c53484a692aeeca9f10c8bb564328 | |
| parent | 7b3936977fb6db8fcef5605d4ee2df48a4465663 (diff) | |
Fix a few issues with non-resizable info activity
- If stack doesn't have focus, we execute TASK_TO_FRONT transition.
Set the correct animation for this transition type.
- Make sure to execute app transition when we are finishing an
activity that isn't resumed.
- Correctly set mAnimatingExit for the case if the activity is
already paused.
Bug: 27327287
Bug: 27154882
Change-Id: I253938727ba0eea76ebadba242315bd2d305d0b4
3 files changed, 87 insertions, 40 deletions
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index 5db35b1b1ef4..f560a138ba22 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -49,6 +49,9 @@ <style name="Animation.ForcedResizable" parent="@android:style/Animation"> <item name="android:activityOpenEnterAnimation">@anim/forced_resizable_enter</item> + + <!-- If the target stack doesn't have focus, we do a task to front animation. --> + <item name="android:taskToFrontEnterAnimation">@anim/forced_resizable_enter</item> <item name="android:activityCloseExitAnimation">@anim/forced_resizable_exit</item> </style> diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index fdcc2429c033..2e9947a9e0d9 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -28,47 +28,78 @@ import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE; import static android.content.pm.ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE; import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING; import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS; - import static android.content.res.Configuration.SCREENLAYOUT_UNDEFINED; -import static com.android.server.am.ActivityManagerDebugConfig.*; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ADD_REMOVE; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_APP; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_CLEANUP; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_CONFIGURATION; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_CONTAINERS; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_LOCKSCREEN; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_PAUSE; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_RELEASE; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_RESULTS; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SAVED_STATE; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SCREENSHOTS; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_STACK; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_STATES; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SWITCH; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_TASKS; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_TRANSITION; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_USER_LEAVING; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_VISIBILITY; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_ADD_REMOVE; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_APP; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_CLEANUP; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_CONFIGURATION; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_CONTAINERS; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_PAUSE; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_RELEASE; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_RESULTS; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_SAVED_STATE; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_SCREENSHOTS; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_STACK; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_STATES; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_SWITCH; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_TASKS; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_TRANSITION; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_USER_LEAVING; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_VISIBILITY; +import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; +import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.am.ActivityManagerService.LOCK_SCREEN_SHOWN; -import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE; import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE; - +import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE; import static com.android.server.am.ActivityRecord.STARTING_WINDOW_REMOVED; import static com.android.server.am.ActivityRecord.STARTING_WINDOW_SHOWN; import static com.android.server.am.ActivityStackSupervisor.FindTaskResult; import static com.android.server.am.ActivityStackSupervisor.MOVING; import static com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS; - -import android.graphics.Point; -import android.graphics.Rect; -import android.util.ArraySet; - -import com.android.internal.app.IVoiceInteractor; -import com.android.internal.content.ReferrerIntent; -import com.android.internal.os.BatteryStatsImpl; -import com.android.server.Watchdog; -import com.android.server.am.ActivityManagerService.ItemMatcher; -import com.android.server.am.ActivityStackSupervisor.ActivityContainer; -import com.android.server.wm.AppTransition; -import com.android.server.wm.TaskGroup; -import com.android.server.wm.WindowManagerService; +import static com.android.server.wm.AppTransition.TRANSIT_ACTIVITY_CLOSE; +import static com.android.server.wm.AppTransition.TRANSIT_ACTIVITY_OPEN; +import static com.android.server.wm.AppTransition.TRANSIT_NONE; +import static com.android.server.wm.AppTransition.TRANSIT_TASK_CLOSE; +import static com.android.server.wm.AppTransition.TRANSIT_TASK_OPEN; +import static com.android.server.wm.AppTransition.TRANSIT_TASK_OPEN_BEHIND; +import static com.android.server.wm.AppTransition.TRANSIT_TASK_TO_BACK; +import static com.android.server.wm.AppTransition.TRANSIT_TASK_TO_FRONT; import android.app.Activity; import android.app.ActivityManager; +import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityManager.StackId; import android.app.ActivityOptions; import android.app.AppGlobals; import android.app.IActivityController; import android.app.ResultInfo; -import android.app.ActivityManager.RunningTaskInfo; import android.content.ComponentName; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.res.Configuration; import android.graphics.Bitmap; +import android.graphics.Point; +import android.graphics.Rect; import android.net.Uri; import android.os.Binder; import android.os.Bundle; @@ -83,10 +114,20 @@ import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.service.voice.IVoiceInteractionSession; +import android.util.ArraySet; import android.util.EventLog; import android.util.Slog; import android.view.Display; +import com.android.internal.app.IVoiceInteractor; +import com.android.internal.content.ReferrerIntent; +import com.android.internal.os.BatteryStatsImpl; +import com.android.server.Watchdog; +import com.android.server.am.ActivityManagerService.ItemMatcher; +import com.android.server.am.ActivityStackSupervisor.ActivityContainer; +import com.android.server.wm.TaskGroup; +import com.android.server.wm.WindowManagerService; + import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.ref.WeakReference; @@ -2232,11 +2273,11 @@ final class ActivityStack { "Prepare close transition: prev=" + prev); if (mNoAnimActivities.contains(prev)) { anim = false; - mWindowManager.prepareAppTransition(AppTransition.TRANSIT_NONE, false); + mWindowManager.prepareAppTransition(TRANSIT_NONE, false); } else { mWindowManager.prepareAppTransition(prev.task == next.task - ? AppTransition.TRANSIT_ACTIVITY_CLOSE - : AppTransition.TRANSIT_TASK_CLOSE, false); + ? TRANSIT_ACTIVITY_CLOSE + : TRANSIT_TASK_CLOSE, false); } mWindowManager.setAppVisibility(prev.appToken, false); } else { @@ -2244,22 +2285,22 @@ final class ActivityStack { "Prepare open transition: prev=" + prev); if (mNoAnimActivities.contains(next)) { anim = false; - mWindowManager.prepareAppTransition(AppTransition.TRANSIT_NONE, false); + mWindowManager.prepareAppTransition(TRANSIT_NONE, false); } else { mWindowManager.prepareAppTransition(prev.task == next.task - ? AppTransition.TRANSIT_ACTIVITY_OPEN + ? TRANSIT_ACTIVITY_OPEN : next.mLaunchTaskBehind - ? AppTransition.TRANSIT_TASK_OPEN_BEHIND - : AppTransition.TRANSIT_TASK_OPEN, false); + ? TRANSIT_TASK_OPEN_BEHIND + : TRANSIT_TASK_OPEN, false); } } } else { if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare open transition: no previous"); if (mNoAnimActivities.contains(next)) { anim = false; - mWindowManager.prepareAppTransition(AppTransition.TRANSIT_NONE, false); + mWindowManager.prepareAppTransition(TRANSIT_NONE, false); } else { - mWindowManager.prepareAppTransition(AppTransition.TRANSIT_ACTIVITY_OPEN, false); + mWindowManager.prepareAppTransition(TRANSIT_ACTIVITY_OPEN, false); } } @@ -2602,14 +2643,14 @@ final class ActivityStack { if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare open transition: starting " + r); if ((r.intent.getFlags() & Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) { - mWindowManager.prepareAppTransition(AppTransition.TRANSIT_NONE, keepCurTransition); + mWindowManager.prepareAppTransition(TRANSIT_NONE, keepCurTransition); mNoAnimActivities.add(r); } else { mWindowManager.prepareAppTransition(newTask ? r.mLaunchTaskBehind - ? AppTransition.TRANSIT_TASK_OPEN_BEHIND - : AppTransition.TRANSIT_TASK_OPEN - : AppTransition.TRANSIT_ACTIVITY_OPEN, keepCurTransition); + ? TRANSIT_TASK_OPEN_BEHIND + : TRANSIT_TASK_OPEN + : TRANSIT_ACTIVITY_OPEN, keepCurTransition); mNoAnimActivities.remove(r); } addConfigOverride(r, task); @@ -3361,13 +3402,13 @@ final class ActivityStack { finishActivityResultsLocked(r, resultCode, resultData); + final boolean endTask = index <= 0; + final int transit = endTask ? TRANSIT_TASK_CLOSE : TRANSIT_ACTIVITY_CLOSE; if (mResumedActivity == r) { - boolean endTask = index <= 0; + if (DEBUG_VISIBILITY || DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare close transition: finishing " + r); - mWindowManager.prepareAppTransition(endTask - ? AppTransition.TRANSIT_TASK_CLOSE - : AppTransition.TRANSIT_ACTIVITY_CLOSE, false); + mWindowManager.prepareAppTransition(transit, false); // Tell window manager to prepare for this one to be removed. mWindowManager.setAppVisibility(r.appToken, false); @@ -3387,7 +3428,9 @@ final class ActivityStack { // it is done pausing; else we can just directly finish it here. if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Finish not pausing: " + r); if (r.visible) { + mWindowManager.prepareAppTransition(transit, false); mWindowManager.setAppVisibility(r.appToken, false); + mWindowManager.executeAppTransition(); } return finishCurrentActivityLocked(r, FINISH_AFTER_PAUSE, oomAdj) == null; } else { @@ -4129,7 +4172,7 @@ final class ActivityStack { if (noAnimation) { ActivityOptions.abort(options); } else { - updateTransitLocked(AppTransition.TRANSIT_TASK_TO_FRONT, options); + updateTransitLocked(TRANSIT_TASK_TO_FRONT, options); } return; } @@ -4159,13 +4202,13 @@ final class ActivityStack { if (DEBUG_TRANSITION) Slog.v(TAG_TRANSITION, "Prepare to front transition: task=" + tr); if (noAnimation) { - mWindowManager.prepareAppTransition(AppTransition.TRANSIT_NONE, false); + mWindowManager.prepareAppTransition(TRANSIT_NONE, false); if (r != null) { mNoAnimActivities.add(r); } ActivityOptions.abort(options); } else { - updateTransitLocked(AppTransition.TRANSIT_TASK_TO_FRONT, options); + updateTransitLocked(TRANSIT_TASK_TO_FRONT, options); } mStackSupervisor.resumeFocusedStackTopActivityLocked(); @@ -4268,7 +4311,7 @@ final class ActivityStack { } } - mWindowManager.prepareAppTransition(AppTransition.TRANSIT_TASK_TO_BACK, false); + mWindowManager.prepareAppTransition(TRANSIT_TASK_TO_BACK, false); mWindowManager.moveTaskToBottom(taskId); if (VALIDATE_TOKENS) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 5c9d313c1db9..57f38d16e84c 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -4193,6 +4193,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowManagerPolicy.TRANSIT_EXIT); } } + win.mAnimatingExit = true; changed = true; win.setDisplayLayoutNeeded(); } |