Merge "Look on all displays if can't launch on a source secondary one" into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
d883070267
@@ -2257,6 +2257,31 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get next valid stack for launching provided activity in the system. This will search across
|
||||||
|
* displays and stacks in last-focused order for a focusable and visible stack, except those
|
||||||
|
* that are on a currently focused display.
|
||||||
|
*
|
||||||
|
* @param r The activity that is being launched.
|
||||||
|
* @param currentFocus The display that previously had focus and thus needs to be ignored when
|
||||||
|
* searching for the next candidate.
|
||||||
|
* @return Next valid {@link ActivityStack}, null if not found.
|
||||||
|
*/
|
||||||
|
ActivityStack getNextValidLaunchStackLocked(@NonNull ActivityRecord r, int currentFocus) {
|
||||||
|
mWindowManager.getDisplaysInFocusOrder(mTmpOrderedDisplayIds);
|
||||||
|
for (int i = mTmpOrderedDisplayIds.size() - 1; i >= 0; --i) {
|
||||||
|
final int displayId = mTmpOrderedDisplayIds.get(i);
|
||||||
|
if (displayId == currentFocus) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
final ActivityStack stack = getValidLaunchStackOnDisplay(displayId, r);
|
||||||
|
if (stack != null) {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
ActivityRecord getHomeActivity() {
|
ActivityRecord getHomeActivity() {
|
||||||
return getHomeActivityForUser(mCurrentUser);
|
return getHomeActivityForUser(mCurrentUser);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2027,7 +2027,18 @@ class ActivityStarter {
|
|||||||
return mSupervisor.mFocusedStack;
|
return mSupervisor.mFocusedStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mSourceDisplayId == DEFAULT_DISPLAY) {
|
if (mSourceDisplayId != DEFAULT_DISPLAY) {
|
||||||
|
// Try to put the activity in a stack on a secondary display.
|
||||||
|
stack = mSupervisor.getValidLaunchStackOnDisplay(mSourceDisplayId, r);
|
||||||
|
if (stack == null) {
|
||||||
|
// If source display is not suitable - look for topmost valid stack in the system.
|
||||||
|
if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS,
|
||||||
|
"computeStackFocus: Can't launch on mSourceDisplayId=" + mSourceDisplayId
|
||||||
|
+ ", looking on all displays.");
|
||||||
|
stack = mSupervisor.getNextValidLaunchStackLocked(r, mSourceDisplayId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (stack == null) {
|
||||||
// We first try to put the task in the first dynamic stack on home display.
|
// We first try to put the task in the first dynamic stack on home display.
|
||||||
final ArrayList<ActivityStack> homeDisplayStacks = mSupervisor.mHomeStack.mStacks;
|
final ArrayList<ActivityStack> homeDisplayStacks = mSupervisor.mHomeStack.mStacks;
|
||||||
for (int stackNdx = homeDisplayStacks.size() - 1; stackNdx >= 0; --stackNdx) {
|
for (int stackNdx = homeDisplayStacks.size() - 1; stackNdx >= 0; --stackNdx) {
|
||||||
@@ -2043,8 +2054,6 @@ class ActivityStarter {
|
|||||||
bounds != null ? FREEFORM_WORKSPACE_STACK_ID :
|
bounds != null ? FREEFORM_WORKSPACE_STACK_ID :
|
||||||
FULLSCREEN_WORKSPACE_STACK_ID;
|
FULLSCREEN_WORKSPACE_STACK_ID;
|
||||||
stack = mSupervisor.getStack(stackId, CREATE_IF_NEEDED, ON_TOP);
|
stack = mSupervisor.getStack(stackId, CREATE_IF_NEEDED, ON_TOP);
|
||||||
} else {
|
|
||||||
stack = mSupervisor.getValidLaunchStackOnDisplay(mSourceDisplayId, r);
|
|
||||||
}
|
}
|
||||||
if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS, "computeStackFocus: New stack r="
|
if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS, "computeStackFocus: New stack r="
|
||||||
+ r + " stackId=" + stack.mStackId);
|
+ r + " stackId=" + stack.mStackId);
|
||||||
|
|||||||
Reference in New Issue
Block a user