Merge "Don't allow non-showOnLock activity to be next on finish." into pi-dev

This commit is contained in:
TreeHugger Robot
2018-05-11 17:39:36 +00:00
committed by Android (Google) Code Review
2 changed files with 38 additions and 8 deletions

View File

@@ -1224,7 +1224,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
ActivityRecord topRunningActivityLocked(boolean considerKeyguardState) {
final ActivityStack focusedStack = mFocusedStack;
ActivityRecord r = focusedStack.topRunningActivityLocked();
if (r != null) {
if (r != null && isValidTopRunningActivity(r, considerKeyguardState)) {
return r;
}
@@ -1257,12 +1257,11 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
continue;
}
final boolean keyguardLocked = getKeyguardController().isKeyguardLocked();
// This activity can be considered the top running activity if we are not
// considering the locked state, the keyguard isn't locked, or we can show when
// locked.
if (!considerKeyguardState || !keyguardLocked || topActivity.canShowWhenLocked()) {
if (isValidTopRunningActivity(topActivity, considerKeyguardState)) {
return topActivity;
}
}
@@ -1270,6 +1269,25 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
return null;
}
/**
* Verifies an {@link ActivityRecord} can be the top activity based on keyguard state and
* whether we are considering it.
*/
private boolean isValidTopRunningActivity(ActivityRecord record,
boolean considerKeyguardState) {
if (!considerKeyguardState) {
return true;
}
final boolean keyguardLocked = getKeyguardController().isKeyguardLocked();
if (!keyguardLocked) {
return true;
}
return record.canShowWhenLocked();
}
@VisibleForTesting
void getRunningTasks(int maxNum, List<RunningTaskInfo> list,
@ActivityType int ignoreActivityType, @WindowingMode int ignoreWindowingMode,

View File

@@ -325,13 +325,12 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
}
/**
* Verifies the correct activity is returned when querying the top running activity with an
* empty focused stack.
* Verifies the correct activity is returned when querying the top running activity.
*/
@Test
public void testNonFocusedTopRunningActivity() throws Exception {
public void testTopRunningActivity() throws Exception {
// Create stack to hold focus
final ActivityStack focusedStack = mService.mStackSupervisor.getDefaultDisplay()
final ActivityStack emptyStack = mService.mStackSupervisor.getDefaultDisplay()
.createStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, true /* onTop */);
final KeyguardController keyguard = mSupervisor.getKeyguardController();
@@ -340,7 +339,7 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
final ActivityRecord activity = new ActivityBuilder(mService).setCreateTask(true)
.setStack(stack).build();
mSupervisor.mFocusedStack = focusedStack;
mSupervisor.mFocusedStack = emptyStack;
doAnswer((InvocationOnMock invocationOnMock) -> {
final SparseIntArray displayIds = invocationOnMock.<SparseIntArray>getArgument(0);
@@ -359,6 +358,12 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
assertEquals(null, mService.mStackSupervisor.topRunningActivityLocked(
true /* considerKeyguardState */));
// Change focus to stack with activity.
mSupervisor.mFocusedStack = stack;
assertEquals(activity, mService.mStackSupervisor.topRunningActivityLocked());
assertEquals(null, mService.mStackSupervisor.topRunningActivityLocked(
true /* considerKeyguardState */));
// Add activity that should be shown on the keyguard.
final ActivityRecord showWhenLockedActivity = new ActivityBuilder(mService)
.setCreateTask(true)
@@ -370,6 +375,13 @@ public class ActivityStackSupervisorTests extends ActivityTestsBase {
assertEquals(showWhenLockedActivity, mService.mStackSupervisor.topRunningActivityLocked());
assertEquals(showWhenLockedActivity, mService.mStackSupervisor.topRunningActivityLocked(
true /* considerKeyguardState */));
// Change focus back to empty stack
mSupervisor.mFocusedStack = emptyStack;
// Ensure the show when locked activity is returned when not the focused stack
assertEquals(showWhenLockedActivity, mService.mStackSupervisor.topRunningActivityLocked());
assertEquals(showWhenLockedActivity, mService.mStackSupervisor.topRunningActivityLocked(
true /* considerKeyguardState */));
}
/**