Merge "Do not allow app to start background activity after stop app switches triggered" into qt-dev

am: 02d9b9c35b

Change-Id: Ib4c2d91a12be63cea87f3bee198c17965d217f93
This commit is contained in:
Alan Stokes
2019-06-04 01:13:30 -07:00
committed by android-build-merger
2 changed files with 19 additions and 2 deletions

View File

@@ -509,6 +509,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
*/ */
private boolean mDidAppSwitch; private boolean mDidAppSwitch;
/**
* Last stop app switches time, apps finished before this time cannot start background activity
* even if they are in grace period.
*/
private long mLastStopAppSwitchesTime;
IActivityController mController = null; IActivityController mController = null;
boolean mControllerIsAMonkey = false; boolean mControllerIsAMonkey = false;
@@ -4749,6 +4755,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
enforceCallerIsRecentsOrHasPermission(STOP_APP_SWITCHES, "stopAppSwitches"); enforceCallerIsRecentsOrHasPermission(STOP_APP_SWITCHES, "stopAppSwitches");
synchronized (mGlobalLock) { synchronized (mGlobalLock) {
mAppSwitchesAllowedTime = SystemClock.uptimeMillis() + APP_SWITCH_DELAY_TIME; mAppSwitchesAllowedTime = SystemClock.uptimeMillis() + APP_SWITCH_DELAY_TIME;
mLastStopAppSwitchesTime = SystemClock.uptimeMillis();
mDidAppSwitch = false; mDidAppSwitch = false;
getActivityStartController().schedulePendingActivityLaunches(APP_SWITCH_DELAY_TIME); getActivityStartController().schedulePendingActivityLaunches(APP_SWITCH_DELAY_TIME);
} }
@@ -4765,6 +4772,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
} }
} }
long getLastStopAppSwitchesTime() {
return mLastStopAppSwitchesTime;
}
void onStartActivitySetDidAppSwitch() { void onStartActivitySetDidAppSwitch() {
if (mDidAppSwitch) { if (mDidAppSwitch) {
// This is the second allowed switch since we stopped switches, so now just generally // This is the second allowed switch since we stopped switches, so now just generally

View File

@@ -402,12 +402,18 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
if (mAllowBackgroundActivityStarts) { if (mAllowBackgroundActivityStarts) {
return true; return true;
} }
// allow if any activity in the caller has either started or finished very recently // allow if any activity in the caller has either started or finished very recently, and
// it must be started or finished after last stop app switches time.
final long now = SystemClock.uptimeMillis(); final long now = SystemClock.uptimeMillis();
if (now - mLastActivityLaunchTime < ACTIVITY_BG_START_GRACE_PERIOD_MS if (now - mLastActivityLaunchTime < ACTIVITY_BG_START_GRACE_PERIOD_MS
|| now - mLastActivityFinishTime < ACTIVITY_BG_START_GRACE_PERIOD_MS) { || now - mLastActivityFinishTime < ACTIVITY_BG_START_GRACE_PERIOD_MS) {
// if activity is started and finished before stop app switch time, we should not
// let app to be able to start background activity even it's in grace period.
if (mLastActivityLaunchTime > mAtm.getLastStopAppSwitchesTime()
|| mLastActivityFinishTime > mAtm.getLastStopAppSwitchesTime()) {
return true; return true;
} }
}
// allow if the proc is instrumenting with background activity starts privs // allow if the proc is instrumenting with background activity starts privs
if (mInstrumentingWithBackgroundActivityStartPrivileges) { if (mInstrumentingWithBackgroundActivityStartPrivileges) {
return true; return true;