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

Commit 4801f789 authored by Winson Chung's avatar Winson Chung
Browse files

Listen for VIS window visibility changes in SysUI

Bug: 222308557
Bug: 216301097
Test: Manual, invoke assistant on the lockscreen and verify you can
      go back

Change-Id: I675a0c694b8d85e7cd67f7a550fe8e8ab85e9ad2
parent 48d602a8
Loading
Loading
Loading
Loading
+9 −3
Original line number Original line Diff line number Diff line
@@ -123,6 +123,8 @@ public class QuickStepContract {
    public static final int SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED = 1 << 23;
    public static final int SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED = 1 << 23;
    // The current app is in immersive mode
    // The current app is in immersive mode
    public static final int SYSUI_STATE_IMMERSIVE_MODE = 1 << 24;
    public static final int SYSUI_STATE_IMMERSIVE_MODE = 1 << 24;
    // The voice interaction session window is showing
    public static final int SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING = 1 << 25;


    @Retention(RetentionPolicy.SOURCE)
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({SYSUI_STATE_SCREEN_PINNING,
    @IntDef({SYSUI_STATE_SCREEN_PINNING,
@@ -149,7 +151,8 @@ public class QuickStepContract {
            SYSUI_STATE_DEVICE_DOZING,
            SYSUI_STATE_DEVICE_DOZING,
            SYSUI_STATE_BACK_DISABLED,
            SYSUI_STATE_BACK_DISABLED,
            SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED,
            SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED,
            SYSUI_STATE_IMMERSIVE_MODE
            SYSUI_STATE_IMMERSIVE_MODE,
            SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING
    })
    })
    public @interface SystemUiStateFlags {}
    public @interface SystemUiStateFlags {}


@@ -184,6 +187,7 @@ public class QuickStepContract {
        str.add((flags & SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED) != 0
        str.add((flags & SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED) != 0
                ? "bubbles_mange_menu_expanded" : "");
                ? "bubbles_mange_menu_expanded" : "");
        str.add((flags & SYSUI_STATE_IMMERSIVE_MODE) != 0 ? "immersive_mode" : "");
        str.add((flags & SYSUI_STATE_IMMERSIVE_MODE) != 0 ? "immersive_mode" : "");
        str.add((flags & SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING) != 0 ? "vis_win_showing" : "");
        return str.toString();
        return str.toString();
    }
    }


@@ -254,9 +258,11 @@ public class QuickStepContract {
     * disabled.
     * disabled.
     */
     */
    public static boolean isBackGestureDisabled(int sysuiStateFlags) {
    public static boolean isBackGestureDisabled(int sysuiStateFlags) {
        // Always allow when the bouncer/global actions is showing (even on top of the keyguard)
        // Always allow when the bouncer/global actions/voice session is showing (even on top of
        // the keyguard)
        if ((sysuiStateFlags & SYSUI_STATE_BOUNCER_SHOWING) != 0
        if ((sysuiStateFlags & SYSUI_STATE_BOUNCER_SHOWING) != 0
                || (sysuiStateFlags & SYSUI_STATE_DIALOG_SHOWING) != 0) {
                || (sysuiStateFlags & SYSUI_STATE_DIALOG_SHOWING) != 0
                || (sysuiStateFlags & SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING) != 0) {
            return false;
            return false;
        }
        }
        if ((sysuiStateFlags & SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY) != 0) {
        if ((sysuiStateFlags & SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY) != 0) {
+36 −0
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_D
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_TRACING_ENABLED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_TRACING_ENABLED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING;


import android.annotation.FloatRange;
import android.annotation.FloatRange;
import android.app.ActivityTaskManager;
import android.app.ActivityTaskManager;
@@ -77,6 +78,8 @@ import androidx.annotation.NonNull;


import com.android.internal.accessibility.dialog.AccessibilityButtonChooserActivity;
import com.android.internal.accessibility.dialog.AccessibilityButtonChooserActivity;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.AssistUtils;
import com.android.internal.app.IVoiceInteractionSessionListener;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.util.ScreenshotHelper;
import com.android.internal.util.ScreenshotHelper;
@@ -551,6 +554,30 @@ public class OverviewProxyService extends CurrentUserTracker implements
    private final IBinder.DeathRecipient mOverviewServiceDeathRcpt
    private final IBinder.DeathRecipient mOverviewServiceDeathRcpt
            = this::cleanupAfterDeath;
            = this::cleanupAfterDeath;


    private final IVoiceInteractionSessionListener mVoiceInteractionSessionListener =
            new IVoiceInteractionSessionListener.Stub() {
        @Override
        public void onVoiceSessionShown() {
            // Do nothing
        }

        @Override
        public void onVoiceSessionHidden() {
            // Do nothing
        }

        @Override
        public void onVoiceSessionWindowVisibilityChanged(boolean visible) {
            mContext.getMainExecutor().execute(() ->
                    OverviewProxyService.this.onVoiceSessionWindowVisibilityChanged(visible));
        }

        @Override
        public void onSetUiHints(Bundle hints) {
            // Do nothing
        }
    };

    @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
    @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
    @Inject
    @Inject
    public OverviewProxyService(Context context, CommandQueue commandQueue,
    public OverviewProxyService(Context context, CommandQueue commandQueue,
@@ -569,6 +596,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
            ScreenLifecycle screenLifecycle,
            ScreenLifecycle screenLifecycle,
            UiEventLogger uiEventLogger,
            UiEventLogger uiEventLogger,
            KeyguardUnlockAnimationController sysuiUnlockAnimationController,
            KeyguardUnlockAnimationController sysuiUnlockAnimationController,
            AssistUtils assistUtils,
            DumpManager dumpManager) {
            DumpManager dumpManager) {
        super(broadcastDispatcher);
        super(broadcastDispatcher);
        mContext = context;
        mContext = context;
@@ -640,6 +668,9 @@ public class OverviewProxyService extends CurrentUserTracker implements
        startConnectionToCurrentUser();
        startConnectionToCurrentUser();
        mStartingSurface = startingSurface;
        mStartingSurface = startingSurface;
        mSysuiUnlockAnimationController = sysuiUnlockAnimationController;
        mSysuiUnlockAnimationController = sysuiUnlockAnimationController;

        // Listen for assistant changes
        assistUtils.registerVoiceInteractionSessionListener(mVoiceInteractionSessionListener);
    }
    }


    @Override
    @Override
@@ -648,6 +679,11 @@ public class OverviewProxyService extends CurrentUserTracker implements
        internalConnectToCurrentUser();
        internalConnectToCurrentUser();
    }
    }


    public void onVoiceSessionWindowVisibilityChanged(boolean visible) {
        mSysUiState.setFlag(SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING, visible)
                .commitUpdate(mContext.getDisplayId());
    }

    public void notifyBackAction(boolean completed, int downX, int downY, boolean isButton,
    public void notifyBackAction(boolean completed, int downX, int downY, boolean isButton,
            boolean gestureSwipeLeft) {
            boolean gestureSwipeLeft) {
        try {
        try {