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

Commit b3a3ffa8 authored by Brian Isganitis's avatar Brian Isganitis Committed by Android (Google) Code Review
Browse files

Merge "Remove nav button controller dependency on TIS." into main

parents da82c82a 79d0569d
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.taskbar.TaskbarNavButtonController.TaskbarNavButtonCallbacks;
import com.android.launcher3.taskbar.unfold.NonDestroyableScopedUnfoldTransitionProgressProvider;
import com.android.launcher3.uioverrides.QuickstepLauncher;
import com.android.launcher3.util.DisplayController;
@@ -70,7 +71,6 @@ import com.android.launcher3.util.SimpleBroadcastReceiver;
import com.android.quickstep.AllAppsActionManager;
import com.android.quickstep.RecentsActivity;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.TouchInteractionService;
import com.android.quickstep.util.AssistUtils;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.unfold.UnfoldTransitionProgressProvider;
@@ -209,15 +209,18 @@ public class TaskbarManager {

    @SuppressLint("WrongConstant")
    public TaskbarManager(
            TouchInteractionService service, AllAppsActionManager allAppsActionManager) {
            Context context,
            AllAppsActionManager allAppsActionManager,
            TaskbarNavButtonCallbacks navCallbacks) {

        Display display =
                service.getSystemService(DisplayManager.class).getDisplay(DEFAULT_DISPLAY);
        mContext = service.createWindowContext(display,
                context.getSystemService(DisplayManager.class).getDisplay(DEFAULT_DISPLAY);
        mContext = context.createWindowContext(display,
                ENABLE_TASKBAR_NAVBAR_UNIFICATION ? TYPE_NAVIGATION_BAR : TYPE_NAVIGATION_BAR_PANEL,
                null);
        mAllAppsActionManager = allAppsActionManager;
        mNavigationBarPanelContext = ENABLE_TASKBAR_NAVBAR_UNIFICATION
                ? service.createWindowContext(display, TYPE_NAVIGATION_BAR_PANEL, null)
                ? context.createWindowContext(display, TYPE_NAVIGATION_BAR_PANEL, null)
                : null;
        if (enableTaskbarNoRecreate()) {
            mWindowManager = mContext.getSystemService(WindowManager.class);
@@ -234,8 +237,11 @@ public class TaskbarManager {
                }
            };
        }
        mNavButtonController = new TaskbarNavButtonController(service,
                SystemUiProxy.INSTANCE.get(mContext), new Handler(),
        mNavButtonController = new TaskbarNavButtonController(
                context,
                navCallbacks,
                SystemUiProxy.INSTANCE.get(mContext),
                new Handler(),
                AssistUtils.newInstance(mContext));
        mComponentCallbacks = new ComponentCallbacks() {
            private Configuration mOldConfig = mContext.getResources().getConfiguration();
+23 −9
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SY
import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING;

import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
@@ -47,10 +48,8 @@ import com.android.launcher3.statehandlers.DesktopVisibilityController;
import com.android.launcher3.testing.TestLogging;
import com.android.launcher3.testing.shared.TestProtocol;
import com.android.quickstep.LauncherActivityInterface;
import com.android.quickstep.OverviewCommandHelper;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.TaskUtils;
import com.android.quickstep.TouchInteractionService;
import com.android.quickstep.util.AssistUtils;

import java.io.PrintWriter;
@@ -106,7 +105,8 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa
    private static final int SCREEN_UNPIN_COMBO = BUTTON_BACK | BUTTON_RECENTS;
    private int mLongPressedButtons = 0;

    private final TouchInteractionService mService;
    private final Context mContext;
    private final TaskbarNavButtonCallbacks mCallbacks;
    private final SystemUiProxy mSystemUiProxy;
    private final Handler mHandler;
    private final AssistUtils mAssistUtils;
@@ -114,9 +114,14 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa

    private final Runnable mResetLongPress = this::resetScreenUnpin;

    public TaskbarNavButtonController(TouchInteractionService service,
            SystemUiProxy systemUiProxy, Handler handler, AssistUtils assistUtils) {
        mService = service;
    public TaskbarNavButtonController(
            Context context,
            TaskbarNavButtonCallbacks callbacks,
            SystemUiProxy systemUiProxy,
            Handler handler,
            AssistUtils assistUtils) {
        mContext = context;
        mCallbacks = callbacks;
        mSystemUiProxy = systemUiProxy;
        mHandler = handler;
        mAssistUtils = assistUtils;
@@ -286,7 +291,7 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa
            desktopVisibilityController.onHomeActionTriggered();
        }

        mService.getOverviewCommandHelper().addCommand(OverviewCommandHelper.TYPE_HOME);
        mCallbacks.onNavigateHome();
    }

    private void navigateToOverview() {
@@ -295,7 +300,7 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa
        }
        TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "onOverviewToggle");
        TaskUtils.closeSystemWindowsAsync(CLOSE_SYSTEM_WINDOWS_REASON_RECENTS);
        mService.getOverviewCommandHelper().addCommand(OverviewCommandHelper.TYPE_TOGGLE);
        mCallbacks.onToggleOverview();
    }

    private void executeBack() {
@@ -310,7 +315,7 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa
        if (longClick) {
            mSystemUiProxy.notifyAccessibilityButtonLongClicked();
        } else {
            mSystemUiProxy.notifyAccessibilityButtonClicked(mService.getDisplayId());
            mSystemUiProxy.notifyAccessibilityButtonClicked(mContext.getDisplayId());
        }
    }

@@ -333,4 +338,13 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa
    private void showNotifications() {
        mSystemUiProxy.toggleNotificationPanel();
    }

    /** Callbacks for navigation buttons on Taskbar. */
    public interface TaskbarNavButtonCallbacks {
        /** Callback invoked when the home button is pressed. */
        default void onNavigateHome() {}

        /** Callback invoked when the overview button is pressed. */
        default void onToggleOverview() {}
    }
}
+14 −1
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ import com.android.launcher3.provider.RestoreDbTask;
import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.taskbar.TaskbarActivityContext;
import com.android.launcher3.taskbar.TaskbarManager;
import com.android.launcher3.taskbar.TaskbarNavButtonController.TaskbarNavButtonCallbacks;
import com.android.launcher3.testing.TestLogging;
import com.android.launcher3.testing.shared.ResourceUtils;
import com.android.launcher3.testing.shared.TestProtocol;
@@ -470,6 +471,18 @@ public class TouchInteractionService extends Service {

    private final ScreenOnTracker.ScreenOnListener mScreenOnListener = this::onScreenOnChanged;

    private final TaskbarNavButtonCallbacks mNavCallbacks = new TaskbarNavButtonCallbacks() {
        @Override
        public void onNavigateHome() {
            mOverviewCommandHelper.addCommand(OverviewCommandHelper.TYPE_HOME);
        }

        @Override
        public void onToggleOverview() {
            mOverviewCommandHelper.addCommand(OverviewCommandHelper.TYPE_TOGGLE);
        }
    };

    private ActivityManagerWrapper mAM;
    private OverviewCommandHelper mOverviewCommandHelper;
    private OverviewComponentObserver mOverviewComponentObserver;
@@ -500,7 +513,7 @@ public class TouchInteractionService extends Service {
        mDeviceState = new RecentsAnimationDeviceState(this, true);
        mAllAppsActionManager = new AllAppsActionManager(
                this, UI_HELPER_EXECUTOR, this::createAllAppsPendingIntent);
        mTaskbarManager = new TaskbarManager(this, mAllAppsActionManager);
        mTaskbarManager = new TaskbarManager(this, mAllAppsActionManager, mNavCallbacks);
        mRotationTouchHelper = mDeviceState.getRotationTouchHelper();
        mInputConsumer = InputConsumerController.getRecentsAnimationInputConsumer();

+27 −12
Original line number Diff line number Diff line
@@ -12,10 +12,10 @@ import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_HO
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_IME_SWITCH;
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_RECENTS;
import static com.android.launcher3.taskbar.TaskbarNavButtonController.SCREEN_PIN_LONG_PRESS_THRESHOLD;
import static com.android.quickstep.OverviewCommandHelper.TYPE_HOME;
import static com.android.quickstep.OverviewCommandHelper.TYPE_TOGGLE;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
@@ -31,7 +31,7 @@ import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;

import com.android.launcher3.logging.StatsLogManager;
import com.android.quickstep.OverviewCommandHelper;
import com.android.launcher3.taskbar.TaskbarNavButtonController.TaskbarNavButtonCallbacks;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.TouchInteractionService;
import com.android.quickstep.util.AssistUtils;
@@ -52,8 +52,6 @@ public class TaskbarNavButtonControllerTest {
    @Mock
    TouchInteractionService mockService;
    @Mock
    OverviewCommandHelper mockCommandHelper;
    @Mock
    Handler mockHandler;
    @Mock
    AssistUtils mockAssistUtils;
@@ -68,13 +66,26 @@ public class TaskbarNavButtonControllerTest {
    @Mock
    View mockView;

    private int mHomePressCount;
    private int mOverviewToggleCount;
    private final TaskbarNavButtonCallbacks mCallbacks = new TaskbarNavButtonCallbacks() {
        @Override
        public void onNavigateHome() {
            mHomePressCount++;
        }

        @Override
        public void onToggleOverview() {
            mOverviewToggleCount++;
        }
    };

    private TaskbarNavButtonController mNavButtonController;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        when(mockService.getDisplayId()).thenReturn(DISPLAY_ID);
        when(mockService.getOverviewCommandHelper()).thenReturn(mockCommandHelper);
        when(mockService.getApplicationContext())
                .thenReturn(InstrumentationRegistry.getInstrumentation().getTargetContext()
                        .getApplicationContext());
@@ -82,8 +93,12 @@ public class TaskbarNavButtonControllerTest {
        when(mockTaskbarControllers.getTaskbarActivityContext())
                .thenReturn(mockTaskbarActivityContext);
        doReturn(mockStatsLogManager).when(mockTaskbarActivityContext).getStatsLogManager();
        mNavButtonController = new TaskbarNavButtonController(mockService,
                mockSystemUiProxy, mockHandler, mockAssistUtils);
        mNavButtonController = new TaskbarNavButtonController(
                mockService,
                mCallbacks,
                mockSystemUiProxy,
                mockHandler,
                mockAssistUtils);
    }

    @Test
@@ -154,20 +169,20 @@ public class TaskbarNavButtonControllerTest {
    @Test
    public void testPressHome() {
        mNavButtonController.onButtonClick(BUTTON_HOME, mockView);
        verify(mockCommandHelper, times(1)).addCommand(TYPE_HOME);
        assertThat(mHomePressCount).isEqualTo(1);
    }

    @Test
    public void testPressRecents() {
        mNavButtonController.onButtonClick(BUTTON_RECENTS, mockView);
        verify(mockCommandHelper, times(1)).addCommand(TYPE_TOGGLE);
        assertThat(mOverviewToggleCount).isEqualTo(1);
    }

    @Test
    public void testPressRecentsWithScreenPinned() {
    public void testPressRecentsWithScreenPinned_noNavigationToOverview() {
        mNavButtonController.updateSysuiFlags(SYSUI_STATE_SCREEN_PINNING);
        mNavButtonController.onButtonClick(BUTTON_RECENTS, mockView);
        verify(mockCommandHelper, times(0)).addCommand(TYPE_TOGGLE);
        assertThat(mOverviewToggleCount).isEqualTo(0);
    }

    @Test