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";
|
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.
|
* Where the docked stack should be positioned.
|
||||||
* @hide
|
* @hide
|
||||||
@@ -232,6 +238,7 @@ public class ActivityOptions {
|
|||||||
private int mLaunchStackId = INVALID_STACK_ID;
|
private int mLaunchStackId = INVALID_STACK_ID;
|
||||||
private int mLaunchTaskId = -1;
|
private int mLaunchTaskId = -1;
|
||||||
private int mDockCreateMode = DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
|
private int mDockCreateMode = DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
|
||||||
|
private boolean mAvoidMoveToFront;
|
||||||
private AppTransitionAnimationSpec mAnimSpecs[];
|
private AppTransitionAnimationSpec mAnimSpecs[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -774,6 +781,7 @@ public class ActivityOptions {
|
|||||||
}
|
}
|
||||||
mLaunchStackId = opts.getInt(KEY_LAUNCH_STACK_ID, INVALID_STACK_ID);
|
mLaunchStackId = opts.getInt(KEY_LAUNCH_STACK_ID, INVALID_STACK_ID);
|
||||||
mLaunchTaskId = opts.getInt(KEY_LAUNCH_TASK_ID, -1);
|
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);
|
mDockCreateMode = opts.getInt(KEY_DOCK_CREATE_MODE, DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT);
|
||||||
if (opts.containsKey(KEY_ANIM_SPECS)) {
|
if (opts.containsKey(KEY_ANIM_SPECS)) {
|
||||||
Parcelable[] specs = opts.getParcelableArray(KEY_ANIM_SPECS);
|
Parcelable[] specs = opts.getParcelableArray(KEY_ANIM_SPECS);
|
||||||
@@ -950,6 +958,23 @@ public class ActivityOptions {
|
|||||||
return mLaunchTaskId;
|
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 */
|
/** @hide */
|
||||||
public int getDockCreateMode() {
|
public int getDockCreateMode() {
|
||||||
return mDockCreateMode;
|
return mDockCreateMode;
|
||||||
@@ -1103,6 +1128,7 @@ public class ActivityOptions {
|
|||||||
}
|
}
|
||||||
b.putInt(KEY_LAUNCH_STACK_ID, mLaunchStackId);
|
b.putInt(KEY_LAUNCH_STACK_ID, mLaunchStackId);
|
||||||
b.putInt(KEY_LAUNCH_TASK_ID, mLaunchTaskId);
|
b.putInt(KEY_LAUNCH_TASK_ID, mLaunchTaskId);
|
||||||
|
b.putBoolean(KEY_DONT_MOVE_TO_FRONT, mAvoidMoveToFront);
|
||||||
b.putInt(KEY_DOCK_CREATE_MODE, mDockCreateMode);
|
b.putInt(KEY_DOCK_CREATE_MODE, mDockCreateMode);
|
||||||
if (mAnimSpecs != null) {
|
if (mAnimSpecs != null) {
|
||||||
b.putParcelableArray(KEY_ANIM_SPECS, mAnimSpecs);
|
b.putParcelableArray(KEY_ANIM_SPECS, mAnimSpecs);
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ public class ForcedResizableInfoActivityController {
|
|||||||
Intent intent = new Intent(mContext, ForcedResizableInfoActivity.class);
|
Intent intent = new Intent(mContext, ForcedResizableInfoActivity.class);
|
||||||
ActivityOptions options = ActivityOptions.makeBasic();
|
ActivityOptions options = ActivityOptions.makeBasic();
|
||||||
options.setLaunchTaskId(mPendingTaskIds.valueAt(i));
|
options.setLaunchTaskId(mPendingTaskIds.valueAt(i));
|
||||||
|
options.setAvoidMoveToFront(true);
|
||||||
mContext.startActivity(intent, options.toBundle());
|
mContext.startActivity(intent, options.toBundle());
|
||||||
}
|
}
|
||||||
mPendingTaskIds.clear();
|
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.app.ActivityManager.StackId.PINNED_STACK_ID;
|
||||||
import static android.content.pm.ActivityInfo.RESIZE_MODE_CROP_WINDOWS;
|
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.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 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_CONFIGURATION;
|
||||||
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SWITCH;
|
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SWITCH;
|
||||||
@@ -822,6 +823,11 @@ final class ActivityRecord {
|
|||||||
return !isHomeActivity() && (isResizeable() || service.mForceResizableActivities);
|
return !isHomeActivity() && (isResizeable() || service.mForceResizableActivities);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isNonResizableOrForced() {
|
||||||
|
return !isHomeActivity() && info.resizeMode != RESIZE_MODE_RESIZEABLE
|
||||||
|
&& info.resizeMode != RESIZE_MODE_RESIZEABLE_AND_PIPABLE;
|
||||||
|
}
|
||||||
|
|
||||||
boolean supportsPictureInPicture() {
|
boolean supportsPictureInPicture() {
|
||||||
return !isHomeActivity() && info.resizeMode == RESIZE_MODE_RESIZEABLE_AND_PIPABLE;
|
return !isHomeActivity() && info.resizeMode == RESIZE_MODE_RESIZEABLE_AND_PIPABLE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3508,6 +3508,7 @@ public final class ActivityStackSupervisor implements DisplayListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final ActivityRecord topActivity = task.getTopActivity();
|
||||||
if (!task.canGoInDockedStack() || forceNonResizable) {
|
if (!task.canGoInDockedStack() || forceNonResizable) {
|
||||||
// Display a warning toast that we tried to put a non-dockable task in the docked stack.
|
// 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);
|
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 -
|
// 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.
|
// we need to move it to top of fullscreen stack, otherwise it will be covered.
|
||||||
moveTasksToFullscreenStackLocked(DOCKED_STACK_ID, actualStackId == DOCKED_STACK_ID);
|
moveTasksToFullscreenStackLocked(DOCKED_STACK_ID, actualStackId == DOCKED_STACK_ID);
|
||||||
} else if (task.mResizeMode == RESIZE_MODE_FORCE_RESIZEABLE) {
|
} else if (topActivity != null && topActivity.isNonResizableOrForced()
|
||||||
String packageName = task.getTopActivity() != null
|
&& !topActivity.noDisplay) {
|
||||||
? task.getTopActivity().appInfo.packageName : null;
|
String packageName = topActivity.appInfo.packageName;
|
||||||
mService.mHandler.obtainMessage(NOTIFY_FORCED_RESIZABLE_MSG, task.taskId, 0,
|
mService.mHandler.obtainMessage(NOTIFY_FORCED_RESIZABLE_MSG, task.taskId, 0,
|
||||||
packageName).sendToTarget();
|
packageName).sendToTarget();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -171,6 +171,7 @@ class ActivityStarter {
|
|||||||
private boolean mMovedToFront;
|
private boolean mMovedToFront;
|
||||||
private boolean mNoAnimation;
|
private boolean mNoAnimation;
|
||||||
private boolean mKeepCurTransition;
|
private boolean mKeepCurTransition;
|
||||||
|
private boolean mAvoidMoveToFront;
|
||||||
|
|
||||||
private IVoiceInteractionSession mVoiceSession;
|
private IVoiceInteractionSession mVoiceSession;
|
||||||
private IVoiceInteractor mVoiceInteractor;
|
private IVoiceInteractor mVoiceInteractor;
|
||||||
@@ -207,6 +208,7 @@ class ActivityStarter {
|
|||||||
mMovedToFront = false;
|
mMovedToFront = false;
|
||||||
mNoAnimation = false;
|
mNoAnimation = false;
|
||||||
mKeepCurTransition = false;
|
mKeepCurTransition = false;
|
||||||
|
mAvoidMoveToFront = false;
|
||||||
|
|
||||||
mVoiceSession = null;
|
mVoiceSession = null;
|
||||||
mVoiceInteractor = null;
|
mVoiceInteractor = null;
|
||||||
@@ -1223,6 +1225,18 @@ class ActivityStarter {
|
|||||||
mDoResume = false;
|
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;
|
mNotTop = (mLaunchFlags & FLAG_ACTIVITY_PREVIOUS_IS_TOP) != 0 ? r : null;
|
||||||
|
|
||||||
mInTask = inTask;
|
mInTask = inTask;
|
||||||
@@ -1419,8 +1433,9 @@ class ActivityStarter {
|
|||||||
ActivityRecord curTop = (focusStack == null)
|
ActivityRecord curTop = (focusStack == null)
|
||||||
? null : focusStack.topRunningNonDelayedActivityLocked(mNotTop);
|
? null : focusStack.topRunningNonDelayedActivityLocked(mNotTop);
|
||||||
|
|
||||||
if (curTop != null && (curTop.task != intentActivity.task ||
|
if (curTop != null
|
||||||
curTop.task != focusStack.topTask())) {
|
&& (curTop.task != intentActivity.task || curTop.task != focusStack.topTask())
|
||||||
|
&& !mAvoidMoveToFront) {
|
||||||
mStartActivity.intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
|
mStartActivity.intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
|
||||||
if (mSourceRecord == null || (mSourceStack.topActivity() != null &&
|
if (mSourceRecord == null || (mSourceStack.topActivity() != null &&
|
||||||
mSourceStack.topActivity().task == mSourceRecord.task)) {
|
mSourceStack.topActivity().task == mSourceRecord.task)) {
|
||||||
@@ -1631,7 +1646,7 @@ class ActivityStarter {
|
|||||||
mTargetStack.moveToFront("sourceStackToFront");
|
mTargetStack.moveToFront("sourceStackToFront");
|
||||||
}
|
}
|
||||||
final TaskRecord topTask = mTargetStack.topTask();
|
final TaskRecord topTask = mTargetStack.topTask();
|
||||||
if (topTask != sourceTask) {
|
if (topTask != sourceTask && !mAvoidMoveToFront) {
|
||||||
mTargetStack.moveTaskToFrontLocked(sourceTask, mNoAnimation, mOptions,
|
mTargetStack.moveTaskToFrontLocked(sourceTask, mNoAnimation, mOptions,
|
||||||
mStartActivity.appTimeTracker, "sourceTaskToFront");
|
mStartActivity.appTimeTracker, "sourceTaskToFront");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user