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

Commit 1b4b23e9 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Fix camera not launching immediately from Keyguard

Seems like a line got lost in one of the many refactors :-)

Also adds debug statements for UnknownAppVisibilityController.

Test: Launch camera from lockscreen, make sure no delay.
Change-Id: Idb49b8dcfd2ce351a62d46d93a917a791d38caa1
parent 9dd7f4ec
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -413,6 +413,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
        boolean delayed = setVisibility(null, false, TRANSIT_UNSET, true, voiceInteraction);
        boolean delayed = setVisibility(null, false, TRANSIT_UNSET, true, voiceInteraction);


        mService.mOpeningApps.remove(this);
        mService.mOpeningApps.remove(this);
        mService.mUnknownAppVisibilityController.appRemoved(this);
        waitingToShow = false;
        waitingToShow = false;
        if (mService.mClosingApps.contains(this)) {
        if (mService.mClosingApps.contains(this)) {
            delayed = true;
            delayed = true;
+22 −0
Original line number Original line Diff line number Diff line
@@ -16,8 +16,13 @@


package com.android.server.wm;
package com.android.server.wm;


import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_UNKNOWN_APP_VISIBILITY;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;

import android.annotation.NonNull;
import android.annotation.NonNull;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.Slog;


import com.android.server.wm.WindowManagerService.H;
import com.android.server.wm.WindowManagerService.H;


@@ -31,6 +36,8 @@ import java.io.PrintWriter;
 */
 */
class UnknownAppVisibilityController {
class UnknownAppVisibilityController {


    private static final String TAG = TAG_WITH_CLASS_NAME ? "UnknownAppVisibility" : TAG_WM;

    /**
    /**
     * We are currently waiting until the app is done resuming.
     * We are currently waiting until the app is done resuming.
     */
     */
@@ -78,6 +85,9 @@ class UnknownAppVisibilityController {
    }
    }


    void appRemoved(@NonNull AppWindowToken appWindow) {
    void appRemoved(@NonNull AppWindowToken appWindow) {
        if (DEBUG_UNKNOWN_APP_VISIBILITY) {
            Slog.d(TAG, "App removed appWindow=" + appWindow);
        }
        mUnknownApps.remove(appWindow);
        mUnknownApps.remove(appWindow);
    }
    }


@@ -86,6 +96,9 @@ class UnknownAppVisibilityController {
     * it is resumed and relaid out to resolve the visibility.
     * it is resumed and relaid out to resolve the visibility.
     */
     */
    void notifyLaunched(@NonNull AppWindowToken appWindow) {
    void notifyLaunched(@NonNull AppWindowToken appWindow) {
        if (DEBUG_UNKNOWN_APP_VISIBILITY) {
            Slog.d(TAG, "App launched appWindow=" + appWindow);
        }
        mUnknownApps.put(appWindow, UNKNOWN_STATE_WAITING_RESUME);
        mUnknownApps.put(appWindow, UNKNOWN_STATE_WAITING_RESUME);
    }
    }


@@ -95,6 +108,9 @@ class UnknownAppVisibilityController {
    void notifyAppResumedFinished(@NonNull AppWindowToken appWindow) {
    void notifyAppResumedFinished(@NonNull AppWindowToken appWindow) {
        if (mUnknownApps.containsKey(appWindow)
        if (mUnknownApps.containsKey(appWindow)
                && mUnknownApps.get(appWindow) == UNKNOWN_STATE_WAITING_RESUME) {
                && mUnknownApps.get(appWindow) == UNKNOWN_STATE_WAITING_RESUME) {
            if (DEBUG_UNKNOWN_APP_VISIBILITY) {
                Slog.d(TAG, "App resume finished appWindow=" + appWindow);
            }
            mUnknownApps.put(appWindow, UNKNOWN_STATE_WAITING_RELAYOUT);
            mUnknownApps.put(appWindow, UNKNOWN_STATE_WAITING_RELAYOUT);
        }
        }
    }
    }
@@ -106,6 +122,9 @@ class UnknownAppVisibilityController {
        if (!mUnknownApps.containsKey(appWindow)) {
        if (!mUnknownApps.containsKey(appWindow)) {
            return;
            return;
        }
        }
        if (DEBUG_UNKNOWN_APP_VISIBILITY) {
            Slog.d(TAG, "App relayouted appWindow=" + appWindow);
        }
        int state = mUnknownApps.get(appWindow);
        int state = mUnknownApps.get(appWindow);
        if (state == UNKNOWN_STATE_WAITING_RELAYOUT) {
        if (state == UNKNOWN_STATE_WAITING_RELAYOUT) {
            mUnknownApps.put(appWindow, UNKNOWN_STATE_WAITING_VISIBILITY_UPDATE);
            mUnknownApps.put(appWindow, UNKNOWN_STATE_WAITING_VISIBILITY_UPDATE);
@@ -114,6 +133,9 @@ class UnknownAppVisibilityController {
    }
    }


    private void notifyVisibilitiesUpdated() {
    private void notifyVisibilitiesUpdated() {
        if (DEBUG_UNKNOWN_APP_VISIBILITY) {
            Slog.d(TAG, "Visibility updated DONE");
        }
        boolean changed = false;
        boolean changed = false;
        for (int i = mUnknownApps.size() - 1; i >= 0; i--) {
        for (int i = mUnknownApps.size() - 1; i >= 0; i--) {
            if (mUnknownApps.valueAt(i) == UNKNOWN_STATE_WAITING_VISIBILITY_UPDATE) {
            if (mUnknownApps.valueAt(i) == UNKNOWN_STATE_WAITING_VISIBILITY_UPDATE) {
+1 −0
Original line number Original line Diff line number Diff line
@@ -73,6 +73,7 @@ public class WindowManagerDebugConfig {
    static final boolean SHOW_LIGHT_TRANSACTIONS = false || SHOW_TRANSACTIONS;
    static final boolean SHOW_LIGHT_TRANSACTIONS = false || SHOW_TRANSACTIONS;
    static final boolean SHOW_STACK_CRAWLS = false;
    static final boolean SHOW_STACK_CRAWLS = false;
    static final boolean DEBUG_WINDOW_CROP = false;
    static final boolean DEBUG_WINDOW_CROP = false;
    static final boolean DEBUG_UNKNOWN_APP_VISIBILITY = false;


    static final String TAG_KEEP_SCREEN_ON = "DebugKeepScreenOn";
    static final String TAG_KEEP_SCREEN_ON = "DebugKeepScreenOn";
    static final boolean DEBUG_KEEP_SCREEN_ON = false;
    static final boolean DEBUG_KEEP_SCREEN_ON = false;