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

Commit e4018379 authored by Vinit Nayak's avatar Vinit Nayak
Browse files

Pass button nav long press assistant availability to Launcher

* Currently we're passing in assistantAvailability, but that's
specific to gesture nav. For button nav even if assistant
isn't available, we show the UI to encourage user to sign in to
enable assistant
* Separate signals used for button vs gesture nav

Bug: 255909545
Test: Existing tests pass, updated/added test in launcher
Change-Id: Id8fba0d07826ff1013a078f81512d44d3d88a1ab
parent b638b557
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -46,8 +46,9 @@ oneway interface IOverviewProxy {

    /**
     * Sent when device assistant changes its default assistant whether it is available or not.
     * @param longPressHomeEnabled if 3-button nav assistant can be invoked or not
     */
    void onAssistantAvailable(boolean available) = 13;
    void onAssistantAvailable(boolean available, boolean longPressHomeEnabled) = 13;

    /**
     * Sent when the assistant changes how visible it is to the user.
+6 −5
Original line number Diff line number Diff line
@@ -185,7 +185,7 @@ public final class NavBarHelper implements
    public void registerNavTaskStateUpdater(NavbarTaskbarStateUpdater listener) {
        mA11yEventListeners.add(listener);
        listener.updateAccessibilityServicesState();
        listener.updateAssistantAvailable(mAssistantAvailable);
        listener.updateAssistantAvailable(mAssistantAvailable, mLongPressHomeEnabled);
    }

    public void removeNavTaskStateUpdater(NavbarTaskbarStateUpdater listener) {
@@ -198,9 +198,10 @@ public final class NavBarHelper implements
        }
    }

    private void dispatchAssistantEventUpdate(boolean assistantAvailable) {
    private void dispatchAssistantEventUpdate(boolean assistantAvailable,
            boolean longPressHomeEnabled) {
        for (NavbarTaskbarStateUpdater listener : mA11yEventListeners) {
            listener.updateAssistantAvailable(assistantAvailable);
            listener.updateAssistantAvailable(assistantAvailable, longPressHomeEnabled);
        }
    }

@@ -311,7 +312,7 @@ public final class NavBarHelper implements
        mAssistantAvailable = assistantAvailableForUser
                && mAssistantTouchGestureEnabled
                && QuickStepContract.isGesturalMode(mNavBarMode);
        dispatchAssistantEventUpdate(mAssistantAvailable);
        dispatchAssistantEventUpdate(mAssistantAvailable, mLongPressHomeEnabled);
    }

    public boolean getLongPressHomeEnabled() {
@@ -366,7 +367,7 @@ public final class NavBarHelper implements
     */
    public interface NavbarTaskbarStateUpdater {
        void updateAccessibilityServicesState();
        void updateAssistantAvailable(boolean available);
        void updateAssistantAvailable(boolean available, boolean longPressHomeEnabled);
    }

    /** Data class to help Taskbar/Navbar initiate state correctly when switching between the two.*/
+8 −5
Original line number Diff line number Diff line
@@ -335,15 +335,16 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
                }

                @Override
                public void updateAssistantAvailable(boolean available) {
                public void updateAssistantAvailable(boolean available,
                        boolean longPressHomeEnabled) {
                    // TODO(b/198002034): Content observers currently can still be called back after
                    //  being unregistered, and in this case we can ignore the change if the nav bar
                    //  has been destroyed already
                    if (mView == null) {
                        return;
                    }
                    mLongPressHomeEnabled = mNavBarHelper.getLongPressHomeEnabled();
                    updateAssistantEntrypoints(available);
                    mLongPressHomeEnabled = longPressHomeEnabled;
                    updateAssistantEntrypoints(available, longPressHomeEnabled);
                }
            };

@@ -1485,10 +1486,12 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
                .commitUpdate(mDisplayId);
    }

    private void updateAssistantEntrypoints(boolean assistantAvailable) {
    private void updateAssistantEntrypoints(boolean assistantAvailable,
            boolean longPressHomeEnabled) {
        if (mOverviewProxyService.getProxy() != null) {
            try {
                mOverviewProxyService.getProxy().onAssistantAvailable(assistantAvailable);
                mOverviewProxyService.getProxy().onAssistantAvailable(assistantAvailable,
                        longPressHomeEnabled);
            } catch (RemoteException e) {
                Log.w(TAG, "Unable to send assistant availability data to launcher");
            }
+7 −4
Original line number Diff line number Diff line
@@ -112,8 +112,9 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
                }

                @Override
                public void updateAssistantAvailable(boolean available) {
                    updateAssistantAvailability(available);
                public void updateAssistantAvailable(boolean available,
                        boolean longPressHomeEnabled) {
                    updateAssistantAvailability(available, longPressHomeEnabled);
                }
            };
    private int mDisabledFlags;
@@ -309,13 +310,15 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
        return (mSysUiState.getFlags() & View.STATUS_BAR_DISABLE_RECENT) == 0;
    }

    private void updateAssistantAvailability(boolean assistantAvailable) {
    private void updateAssistantAvailability(boolean assistantAvailable,
            boolean longPressHomeEnabled) {
        if (mOverviewProxyService.getProxy() == null) {
            return;
        }

        try {
            mOverviewProxyService.getProxy().onAssistantAvailable(assistantAvailable);
            mOverviewProxyService.getProxy().onAssistantAvailable(assistantAvailable,
                    longPressHomeEnabled);
        } catch (RemoteException e) {
            Log.e(TAG, "onAssistantAvailable() failed, available: " + assistantAvailable, e);
        }
+6 −6
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ public class NavBarHelperTest extends SysuiTestCase {
        verify(mNavbarTaskbarStateUpdater, times(1))
                .updateAccessibilityServicesState();
        verify(mNavbarTaskbarStateUpdater, times(1))
                .updateAssistantAvailable(anyBoolean());
                .updateAssistantAvailable(anyBoolean(), anyBoolean());
    }

    @Test
@@ -160,14 +160,14 @@ public class NavBarHelperTest extends SysuiTestCase {
        verify(mNavbarTaskbarStateUpdater, times(1))
                .updateAccessibilityServicesState();
        verify(mNavbarTaskbarStateUpdater, times(1))
                .updateAssistantAvailable(anyBoolean());
                .updateAssistantAvailable(anyBoolean(), anyBoolean());

        mNavBarHelper.onConnectionChanged(true);
        // assert no more callbacks fired
        verify(mNavbarTaskbarStateUpdater, times(1))
                .updateAccessibilityServicesState();
        verify(mNavbarTaskbarStateUpdater, times(2))
                .updateAssistantAvailable(anyBoolean());
                .updateAssistantAvailable(anyBoolean(), anyBoolean());
    }

    @Test
@@ -180,7 +180,7 @@ public class NavBarHelperTest extends SysuiTestCase {
        verify(mNavbarTaskbarStateUpdater, times(2))
                .updateAccessibilityServicesState();
        verify(mNavbarTaskbarStateUpdater, times(1))
                .updateAssistantAvailable(anyBoolean());
                .updateAssistantAvailable(anyBoolean(), anyBoolean());
    }

    @Test
@@ -193,7 +193,7 @@ public class NavBarHelperTest extends SysuiTestCase {
        verify(mNavbarTaskbarStateUpdater, times(1))
                .updateAccessibilityServicesState();
        verify(mNavbarTaskbarStateUpdater, times(2))
                .updateAssistantAvailable(anyBoolean());
                .updateAssistantAvailable(anyBoolean(), anyBoolean());
    }

    @Test
@@ -212,7 +212,7 @@ public class NavBarHelperTest extends SysuiTestCase {
        verify(mNavbarTaskbarStateUpdater, times(1))
                .updateAccessibilityServicesState();
        verify(mNavbarTaskbarStateUpdater, times(1))
                .updateAssistantAvailable(anyBoolean());
                .updateAssistantAvailable(anyBoolean(), anyBoolean());
    }

    @Test