Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65153519 authored by Rubin Xu's avatar Rubin Xu Committed by android-build-merger
Browse files

Merge "Kill foreground apps when turning off work" into nyc-dev

am: 49425d61

* commit '49425d61':
  Kill foreground apps when turning off work

Change-Id: Iba7747bb70d2d193249f6b0610b3409d9bab038f
parents 01aecff5 49425d61
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -139,4 +139,9 @@ public abstract class ActivityManagerInternal {
     * minimized state.
     */
    public abstract void notifyDockedStackMinimizedChanged(boolean minimized);

    /**
     * Kill foreground apps from the specified user.
     */
    public abstract void killForegroundAppsForUser(int userHandle);
}
+30 −0
Original line number Diff line number Diff line
@@ -20985,6 +20985,36 @@ public final class ActivityManagerService extends ActivityManagerNative
                mStackSupervisor.setDockedStackMinimized(minimized);
            }
        }
        @Override
        public void killForegroundAppsForUser(int userHandle) {
            synchronized (ActivityManagerService.this) {
                final ArrayList<ProcessRecord> procs = new ArrayList<>();
                final int NP = mProcessNames.getMap().size();
                for (int ip = 0; ip < NP; ip++) {
                    final SparseArray<ProcessRecord> apps = mProcessNames.getMap().valueAt(ip);
                    final int NA = apps.size();
                    for (int ia = 0; ia < NA; ia++) {
                        final ProcessRecord app = apps.valueAt(ia);
                        if (app.persistent) {
                            // We don't kill persistent processes.
                            continue;
                        }
                        if (app.removed) {
                            procs.add(app);
                        } else if (app.userId == userHandle && app.foregroundActivities) {
                            app.removed = true;
                            procs.add(app);
                        }
                    }
                }
                final int N = procs.size();
                for (int i = 0; i < N; i++) {
                    removeProcessLocked(procs.get(i), false, true, "kill all fg");
                }
            }
        }
    }
    private final class SleepTokenImpl extends SleepToken {
+2 −0
Original line number Diff line number Diff line
@@ -667,6 +667,8 @@ public class UserManagerService extends IUserManager.Stub {
            long identity = Binder.clearCallingIdentity();
            try {
                if (enableQuietMode) {
                    LocalServices.getService(ActivityManagerInternal.class)
                            .killForegroundAppsForUser(userHandle);
                    ActivityManagerNative.getDefault().stopUser(userHandle, /* force */true, null);
                } else {
                    ActivityManagerNative.getDefault().startUserInBackground(userHandle);