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
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -4193,6 +4193,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
WindowManagerPolicy.TRANSIT_EXIT);
|
||||
}
|
||||
}
|
||||
win.mAnimatingExit = true;
|
||||
changed = true;
|
||||
win.setDisplayLayoutNeeded();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user