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

Commit 9f92bc26 authored by Chong Zhang's avatar Chong Zhang Committed by android-build-merger
Browse files

DO NOT MERGE -- Only use saved surface if started by launcher or moved to front

am: 813be138

Change-Id: Id64071882a0b90212b92234a4d0bdc67f2ee5e1a
parents efc1c4d5 813be138
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ interface IWindowManager
            in CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes,
            int icon, int logo, int windowFlags, IBinder transferFrom, boolean createIfNeeded);
    void setAppVisibility(IBinder token, boolean visible);
    void notifyAppResumed(IBinder token, boolean wasStopped);
    void notifyAppResumed(IBinder token, boolean wasStopped, boolean allowSavedSurface);
    void notifyAppStopped(IBinder token);
    void startAppFreezingScreen(IBinder token, int configChanges);
    void stopAppFreezingScreen(IBinder token, boolean force);
+8 −0
Original line number Diff line number Diff line
@@ -750,6 +750,14 @@ final class ActivityRecord {
                && intent.getType() == null;
    }

    static boolean isMainIntent(Intent intent) {
        return Intent.ACTION_MAIN.equals(intent.getAction())
                && intent.hasCategory(Intent.CATEGORY_LAUNCHER)
                && intent.getCategories().size() == 1
                && intent.getData() == null
                && intent.getType() == null;
    }

    private boolean canLaunchHomeActivity(int uid, ActivityRecord sourceRecord) {
        if (uid == Process.myUid() || uid == 0) {
            // System process can launch home activity.
+13 −1
Original line number Diff line number Diff line
@@ -2485,13 +2485,25 @@ final class ActivityStack {
                    }
                }

                boolean allowSavedSurface = true;
                if (next.newIntents != null) {
                    // Restrict saved surface to launcher start, or there is no intent at all
                    // (eg. task being brought to front). If the intent is something else,
                    // likely the app is going to show some specific page or view, instead of
                    // what's left last time.
                    for (int i = next.newIntents.size() - 1; i >= 0; i--) {
                        final Intent intent = next.newIntents.get(i);
                        if (intent != null && !ActivityRecord.isMainIntent(intent)) {
                            allowSavedSurface = false;
                            break;
                        }
                    }
                    next.app.thread.scheduleNewIntent(next.newIntents, next.appToken);
                }

                // Well the app will no longer be stopped.
                // Clear app token stopped state in window manager if needed.
                mWindowManager.notifyAppResumed(next.appToken, next.stopped);
                mWindowManager.notifyAppResumed(next.appToken, next.stopped, allowSavedSurface);

                EventLog.writeEvent(EventLogTags.AM_RESUME_ACTIVITY, next.userId,
                        System.identityHashCode(next), next.task.taskId, next.shortComponentName);
+6 −2
Original line number Diff line number Diff line
@@ -439,12 +439,16 @@ class AppWindowToken extends WindowToken {
     * Notify that the app is now resumed, and it was not stopped before, perform a clean
     * up of the surfaces
     */
    void notifyAppResumed(boolean wasStopped) {
        if (DEBUG_ADD_REMOVE) Slog.v(TAG, "notifyAppResumed: wasStopped=" + wasStopped + " " + this);
    void notifyAppResumed(boolean wasStopped, boolean allowSavedSurface) {
        if (DEBUG_ADD_REMOVE) Slog.v(TAG, "notifyAppResumed: wasStopped=" + wasStopped
                + " allowSavedSurface=" + allowSavedSurface + " " + this);
        mAppStopped = false;
        if (!wasStopped) {
            destroySurfaces(true /*cleanupOnResume*/);
        }
        if (!allowSavedSurface) {
            destroySavedSurfaces();
        }
    }

    /**
+2 −2
Original line number Diff line number Diff line
@@ -4479,7 +4479,7 @@ public class WindowManagerService extends IWindowManager.Stub
    }

    @Override
    public void notifyAppResumed(IBinder token, boolean wasStopped) {
    public void notifyAppResumed(IBinder token, boolean wasStopped, boolean allowSavedSurface) {
        if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,
                "notifyAppResumed()")) {
            throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
@@ -4492,7 +4492,7 @@ public class WindowManagerService extends IWindowManager.Stub
                Slog.w(TAG_WM, "Attempted to notify resumed of non-existing app token: " + token);
                return;
            }
            wtoken.notifyAppResumed(wasStopped);
            wtoken.notifyAppResumed(wasStopped, allowSavedSurface);
        }
    }

Loading