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:
Jorim Jaggi
2016-04-28 04:04:38 +00:00
committed by android-build-merger
5 changed files with 55 additions and 6 deletions

View File

@@ -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);

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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();
}

View File

@@ -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");
}