Merge "Allow uid processes in foreground task to start activity in FG app switch state" into sc-v2-dev
This commit is contained in:
@@ -1278,9 +1278,6 @@ class ActivityStarter {
|
||||
// This is used to block background activity launch even if the app is still
|
||||
// visible to user after user clicking home button.
|
||||
final int appSwitchState = mService.getBalAppSwitchesState();
|
||||
final boolean appSwitchAllowed = appSwitchState == APP_SWITCH_ALLOW;
|
||||
final boolean appSwitchAllowedOrFg =
|
||||
appSwitchState == APP_SWITCH_ALLOW || appSwitchState == APP_SWITCH_FG_ONLY;
|
||||
|
||||
// don't abort if the callingUid has a visible window or is a persistent system process
|
||||
final int callingUidProcState = mService.mActiveUids.getUidState(callingUid);
|
||||
@@ -1293,6 +1290,8 @@ class ActivityStarter {
|
||||
|
||||
// Normal apps with visible app window will be allowed to start activity if app switching
|
||||
// is allowed, or apps like live wallpaper with non app visible window will be allowed.
|
||||
final boolean appSwitchAllowedOrFg =
|
||||
appSwitchState == APP_SWITCH_ALLOW || appSwitchState == APP_SWITCH_FG_ONLY;
|
||||
if (((appSwitchAllowedOrFg || mService.mActiveUids.hasNonAppVisibleWindow(callingUid))
|
||||
&& callingUidHasAnyVisibleWindow)
|
||||
|| isCallingUidPersistentSystemProcess) {
|
||||
@@ -1403,7 +1402,7 @@ class ActivityStarter {
|
||||
// don't abort if the callerApp or other processes of that uid are allowed in any way
|
||||
if (callerApp != null) {
|
||||
// first check the original calling process
|
||||
if (callerApp.areBackgroundActivityStartsAllowed(appSwitchAllowed)) {
|
||||
if (callerApp.areBackgroundActivityStartsAllowed(appSwitchState)) {
|
||||
if (DEBUG_ACTIVITY_STARTS) {
|
||||
Slog.d(TAG, "Background activity start allowed: callerApp process (pid = "
|
||||
+ callerApp.getPid() + ", uid = " + callerAppUid + ") is allowed");
|
||||
@@ -1417,7 +1416,7 @@ class ActivityStarter {
|
||||
for (int i = uidProcesses.size() - 1; i >= 0; i--) {
|
||||
final WindowProcessController proc = uidProcesses.valueAt(i);
|
||||
if (proc != callerApp
|
||||
&& proc.areBackgroundActivityStartsAllowed(appSwitchAllowed)) {
|
||||
&& proc.areBackgroundActivityStartsAllowed(appSwitchState)) {
|
||||
if (DEBUG_ACTIVITY_STARTS) {
|
||||
Slog.d(TAG,
|
||||
"Background activity start allowed: process " + proc.getPid()
|
||||
|
||||
@@ -20,6 +20,8 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_ACTIVIT
|
||||
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
|
||||
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
|
||||
import static com.android.server.wm.ActivityTaskManagerService.ACTIVITY_BG_START_GRACE_PERIOD_MS;
|
||||
import static com.android.server.wm.ActivityTaskManagerService.APP_SWITCH_ALLOW;
|
||||
import static com.android.server.wm.ActivityTaskManagerService.APP_SWITCH_FG_ONLY;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
@@ -70,13 +72,13 @@ class BackgroundLaunchProcessController {
|
||||
}
|
||||
|
||||
boolean areBackgroundActivityStartsAllowed(int pid, int uid, String packageName,
|
||||
boolean appSwitchAllowed, boolean isCheckingForFgsStart,
|
||||
int appSwitchState, boolean isCheckingForFgsStart,
|
||||
boolean hasActivityInVisibleTask, boolean hasBackgroundActivityStartPrivileges,
|
||||
long lastStopAppSwitchesTime, long lastActivityLaunchTime,
|
||||
long lastActivityFinishTime) {
|
||||
// If app switching is not allowed, we ignore all the start activity grace period
|
||||
// exception so apps cannot start itself in onPause() after pressing home button.
|
||||
if (appSwitchAllowed) {
|
||||
if (appSwitchState == APP_SWITCH_ALLOW) {
|
||||
// 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();
|
||||
@@ -111,7 +113,8 @@ class BackgroundLaunchProcessController {
|
||||
return true;
|
||||
}
|
||||
// Allow if the caller has an activity in any foreground task.
|
||||
if (appSwitchAllowed && hasActivityInVisibleTask) {
|
||||
if (hasActivityInVisibleTask
|
||||
&& (appSwitchState == APP_SWITCH_ALLOW || appSwitchState == APP_SWITCH_FG_ONLY)) {
|
||||
if (DEBUG_ACTIVITY_STARTS) {
|
||||
Slog.d(TAG, "[Process(" + pid
|
||||
+ ")] Activity start allowed: process has activity in foreground task");
|
||||
|
||||
@@ -37,7 +37,6 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_CONFI
|
||||
import static com.android.server.wm.ActivityTaskManagerDebugConfig.POSTFIX_RELEASE;
|
||||
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
|
||||
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
|
||||
import static com.android.server.wm.ActivityTaskManagerService.APP_SWITCH_ALLOW;
|
||||
import static com.android.server.wm.ActivityTaskManagerService.INSTRUMENTATION_KEY_DISPATCHING_TIMEOUT_MILLIS;
|
||||
import static com.android.server.wm.ActivityTaskManagerService.RELAUNCH_REASON_NONE;
|
||||
|
||||
@@ -513,19 +512,19 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
|
||||
*/
|
||||
@HotPath(caller = HotPath.START_SERVICE)
|
||||
public boolean areBackgroundFgsStartsAllowed() {
|
||||
return areBackgroundActivityStartsAllowed(mAtm.getBalAppSwitchesState() == APP_SWITCH_ALLOW,
|
||||
return areBackgroundActivityStartsAllowed(mAtm.getBalAppSwitchesState(),
|
||||
true /* isCheckingForFgsStart */);
|
||||
}
|
||||
|
||||
boolean areBackgroundActivityStartsAllowed(boolean appSwitchAllowed) {
|
||||
return areBackgroundActivityStartsAllowed(appSwitchAllowed,
|
||||
boolean areBackgroundActivityStartsAllowed(int appSwitchState) {
|
||||
return areBackgroundActivityStartsAllowed(appSwitchState,
|
||||
false /* isCheckingForFgsStart */);
|
||||
}
|
||||
|
||||
private boolean areBackgroundActivityStartsAllowed(boolean appSwitchAllowed,
|
||||
private boolean areBackgroundActivityStartsAllowed(int appSwitchState,
|
||||
boolean isCheckingForFgsStart) {
|
||||
return mBgLaunchController.areBackgroundActivityStartsAllowed(mPid, mUid, mInfo.packageName,
|
||||
appSwitchAllowed, isCheckingForFgsStart, hasActivityInVisibleTask(),
|
||||
appSwitchState, isCheckingForFgsStart, hasActivityInVisibleTask(),
|
||||
mInstrumentingWithBackgroundActivityStartPrivileges,
|
||||
mAtm.getLastStopAppSwitchesTime(),
|
||||
mLastActivityLaunchTime, mLastActivityFinishTime);
|
||||
|
||||
Reference in New Issue
Block a user