Merge changes Idb555b01,If8acf31b into nyc-dev
am: 831ecc8
* commit '831ecc81f982282bdcc2121c2fa3ece22ac997e0':
Show forced resizable based on top activity
Don't move forced resizable info activity to the front
Change-Id: I30248e5462149359c9200aef069245b9950e639a
This commit is contained in:
@@ -159,6 +159,12 @@ public class ActivityOptions {
|
||||
*/
|
||||
private static final String KEY_LAUNCH_TASK_ID = "android.activity.launchTaskId";
|
||||
|
||||
/**
|
||||
* See {@link #setAvoidMoveToFront}.
|
||||
* @hide
|
||||
*/
|
||||
private static final String KEY_DONT_MOVE_TO_FRONT = "android.activity.dontMoveToFront";
|
||||
|
||||
/**
|
||||
* Where the docked stack should be positioned.
|
||||
* @hide
|
||||
@@ -232,6 +238,7 @@ public class ActivityOptions {
|
||||
private int mLaunchStackId = INVALID_STACK_ID;
|
||||
private int mLaunchTaskId = -1;
|
||||
private int mDockCreateMode = DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
|
||||
private boolean mAvoidMoveToFront;
|
||||
private AppTransitionAnimationSpec mAnimSpecs[];
|
||||
|
||||
/**
|
||||
@@ -774,6 +781,7 @@ public class ActivityOptions {
|
||||
}
|
||||
mLaunchStackId = opts.getInt(KEY_LAUNCH_STACK_ID, INVALID_STACK_ID);
|
||||
mLaunchTaskId = opts.getInt(KEY_LAUNCH_TASK_ID, -1);
|
||||
mAvoidMoveToFront = opts.getBoolean(KEY_DONT_MOVE_TO_FRONT, false);
|
||||
mDockCreateMode = opts.getInt(KEY_DOCK_CREATE_MODE, DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT);
|
||||
if (opts.containsKey(KEY_ANIM_SPECS)) {
|
||||
Parcelable[] specs = opts.getParcelableArray(KEY_ANIM_SPECS);
|
||||
@@ -950,6 +958,23 @@ public class ActivityOptions {
|
||||
return mLaunchTaskId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set's whether the task should be moved to the front. This is different from
|
||||
* {@link #getLaunchTaskBehind()} as we don't want to have an animation at all when launching
|
||||
* an activity that shouldn't be moved to the front.
|
||||
* @hide
|
||||
*/
|
||||
public void setAvoidMoveToFront(boolean avoidMoveToFront) {
|
||||
mAvoidMoveToFront = avoidMoveToFront;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public boolean getAvoidMoveToFront() {
|
||||
return mAvoidMoveToFront;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public int getDockCreateMode() {
|
||||
return mDockCreateMode;
|
||||
@@ -1103,6 +1128,7 @@ public class ActivityOptions {
|
||||
}
|
||||
b.putInt(KEY_LAUNCH_STACK_ID, mLaunchStackId);
|
||||
b.putInt(KEY_LAUNCH_TASK_ID, mLaunchTaskId);
|
||||
b.putBoolean(KEY_DONT_MOVE_TO_FRONT, mAvoidMoveToFront);
|
||||
b.putInt(KEY_DOCK_CREATE_MODE, mDockCreateMode);
|
||||
if (mAnimSpecs != null) {
|
||||
b.putParcelableArray(KEY_ANIM_SPECS, mAnimSpecs);
|
||||
|
||||
@@ -111,6 +111,7 @@ public class ForcedResizableInfoActivityController {
|
||||
Intent intent = new Intent(mContext, ForcedResizableInfoActivity.class);
|
||||
ActivityOptions options = ActivityOptions.makeBasic();
|
||||
options.setLaunchTaskId(mPendingTaskIds.valueAt(i));
|
||||
options.setAvoidMoveToFront(true);
|
||||
mContext.startActivity(intent, options.toBundle());
|
||||
}
|
||||
mPendingTaskIds.clear();
|
||||
|
||||
@@ -21,6 +21,7 @@ import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID;
|
||||
import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
|
||||
import static android.content.pm.ActivityInfo.RESIZE_MODE_CROP_WINDOWS;
|
||||
import static android.content.pm.ActivityInfo.FLAG_ALWAYS_FOCUSABLE;
|
||||
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
|
||||
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_AND_PIPABLE;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_CONFIGURATION;
|
||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SWITCH;
|
||||
@@ -822,6 +823,11 @@ final class ActivityRecord {
|
||||
return !isHomeActivity() && (isResizeable() || service.mForceResizableActivities);
|
||||
}
|
||||
|
||||
boolean isNonResizableOrForced() {
|
||||
return !isHomeActivity() && info.resizeMode != RESIZE_MODE_RESIZEABLE
|
||||
&& info.resizeMode != RESIZE_MODE_RESIZEABLE_AND_PIPABLE;
|
||||
}
|
||||
|
||||
boolean supportsPictureInPicture() {
|
||||
return !isHomeActivity() && info.resizeMode == RESIZE_MODE_RESIZEABLE_AND_PIPABLE;
|
||||
}
|
||||
|
||||
@@ -3508,6 +3508,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
|
||||
return;
|
||||
}
|
||||
|
||||
final ActivityRecord topActivity = task.getTopActivity();
|
||||
if (!task.canGoInDockedStack() || forceNonResizable) {
|
||||
// Display a warning toast that we tried to put a non-dockable task in the docked stack.
|
||||
mService.mHandler.sendEmptyMessage(NOTIFY_ACTIVITY_DISMISSING_DOCKED_STACK_MSG);
|
||||
@@ -3515,9 +3516,9 @@ public final class ActivityStackSupervisor implements DisplayListener {
|
||||
// Dismiss docked stack. If task appeared to be in docked stack but is not resizable -
|
||||
// we need to move it to top of fullscreen stack, otherwise it will be covered.
|
||||
moveTasksToFullscreenStackLocked(DOCKED_STACK_ID, actualStackId == DOCKED_STACK_ID);
|
||||
} else if (task.mResizeMode == RESIZE_MODE_FORCE_RESIZEABLE) {
|
||||
String packageName = task.getTopActivity() != null
|
||||
? task.getTopActivity().appInfo.packageName : null;
|
||||
} else if (topActivity != null && topActivity.isNonResizableOrForced()
|
||||
&& !topActivity.noDisplay) {
|
||||
String packageName = topActivity.appInfo.packageName;
|
||||
mService.mHandler.obtainMessage(NOTIFY_FORCED_RESIZABLE_MSG, task.taskId, 0,
|
||||
packageName).sendToTarget();
|
||||
}
|
||||
|
||||
@@ -171,6 +171,7 @@ class ActivityStarter {
|
||||
private boolean mMovedToFront;
|
||||
private boolean mNoAnimation;
|
||||
private boolean mKeepCurTransition;
|
||||
private boolean mAvoidMoveToFront;
|
||||
|
||||
private IVoiceInteractionSession mVoiceSession;
|
||||
private IVoiceInteractor mVoiceInteractor;
|
||||
@@ -207,6 +208,7 @@ class ActivityStarter {
|
||||
mMovedToFront = false;
|
||||
mNoAnimation = false;
|
||||
mKeepCurTransition = false;
|
||||
mAvoidMoveToFront = false;
|
||||
|
||||
mVoiceSession = null;
|
||||
mVoiceInteractor = null;
|
||||
@@ -1223,6 +1225,18 @@ class ActivityStarter {
|
||||
mDoResume = false;
|
||||
}
|
||||
|
||||
if (mOptions != null && mOptions.getLaunchTaskId() != -1 && mOptions.getAvoidMoveToFront()) {
|
||||
final TaskRecord task = mSupervisor.anyTaskForIdLocked(mOptions.getLaunchTaskId());
|
||||
final ActivityRecord top = task != null ? task.getTopActivity() : null;
|
||||
if (top != null && !top.visible) {
|
||||
|
||||
// The caller specifies that we'd like to be avoided to be moved to the front, so be
|
||||
// it!
|
||||
mDoResume = false;
|
||||
mAvoidMoveToFront = true;
|
||||
}
|
||||
}
|
||||
|
||||
mNotTop = (mLaunchFlags & FLAG_ACTIVITY_PREVIOUS_IS_TOP) != 0 ? r : null;
|
||||
|
||||
mInTask = inTask;
|
||||
@@ -1419,8 +1433,9 @@ class ActivityStarter {
|
||||
ActivityRecord curTop = (focusStack == null)
|
||||
? null : focusStack.topRunningNonDelayedActivityLocked(mNotTop);
|
||||
|
||||
if (curTop != null && (curTop.task != intentActivity.task ||
|
||||
curTop.task != focusStack.topTask())) {
|
||||
if (curTop != null
|
||||
&& (curTop.task != intentActivity.task || curTop.task != focusStack.topTask())
|
||||
&& !mAvoidMoveToFront) {
|
||||
mStartActivity.intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
|
||||
if (mSourceRecord == null || (mSourceStack.topActivity() != null &&
|
||||
mSourceStack.topActivity().task == mSourceRecord.task)) {
|
||||
@@ -1631,7 +1646,7 @@ class ActivityStarter {
|
||||
mTargetStack.moveToFront("sourceStackToFront");
|
||||
}
|
||||
final TaskRecord topTask = mTargetStack.topTask();
|
||||
if (topTask != sourceTask) {
|
||||
if (topTask != sourceTask && !mAvoidMoveToFront) {
|
||||
mTargetStack.moveTaskToFrontLocked(sourceTask, mNoAnimation, mOptions,
|
||||
mStartActivity.appTimeTracker, "sourceTaskToFront");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user