Loading quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +9 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.BubbleTextView; Loading @@ -66,6 +67,7 @@ import com.android.launcher3.dot.DotInfo; import com.android.launcher3.folder.Folder; import com.android.launcher3.folder.FolderIcon; import com.android.launcher3.logger.LauncherAtom; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.ItemInfo; Loading Loading @@ -244,6 +246,13 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mDeviceProfile.updateAllAppsIconSize(1, resources); // Leave all apps unscaled. } @VisibleForTesting @Override public StatsLogManager getStatsLogManager() { // Used to mock, can't mock a default interface method directly return super.getStatsLogManager(); } /** Creates LayoutParams for adding a view directly to WindowManager as a new window */ public WindowManager.LayoutParams createDefaultWindowLayoutParams() { WindowManager.LayoutParams windowLayoutParams = new WindowManager.LayoutParams( Loading quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +9 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.content.pm.ActivityInfo.Config; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.launcher3.taskbar.allapps.TaskbarAllAppsController; import com.android.systemui.shared.rotation.RotationButtonController; Loading Loading @@ -117,6 +118,7 @@ public class TaskbarControllers { taskbarPopupController.init(this); taskbarForceVisibleImmersiveController.init(this); taskbarAllAppsController.init(this, sharedState); navButtonController.init(this); mControllersToLog = new LoggableTaskbarController[] { taskbarDragController, navButtonController, navbarButtonsViewController, Loading Loading @@ -153,6 +155,7 @@ public class TaskbarControllers { taskbarPopupController.onDestroy(); taskbarForceVisibleImmersiveController.onDestroy(); taskbarAllAppsController.onDestroy(); navButtonController.onDestroy(); mControllersToLog = null; } Loading Loading @@ -185,6 +188,12 @@ public class TaskbarControllers { rotationButtonController.dumpLogs(prefix + "\t", pw); } @VisibleForTesting TaskbarActivityContext getTaskbarActivityContext() { // Used to mock return taskbarActivityContext; } protected interface LoggableTaskbarController { void dumpLogs(String prefix, PrintWriter pw); } Loading quickstep/src/com/android/launcher3/taskbar/TaskbarNavButtonController.java +46 −2 Original line number Diff line number Diff line Loading @@ -19,15 +19,27 @@ package com.android.launcher3.taskbar; import static com.android.internal.app.AssistUtils.INVOCATION_TYPE_HOME_BUTTON_LONG_PRESS; import static com.android.internal.app.AssistUtils.INVOCATION_TYPE_KEY; import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_A11Y_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_A11Y_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_BACK_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_HOME_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_IME_SWITCHER_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; import android.os.Bundle; import android.os.Handler; import android.util.Log; import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import com.android.launcher3.R; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.TestProtocol; import com.android.quickstep.OverviewCommandHelper; Loading @@ -49,6 +61,7 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa /** Allow some time in between the long press for back and recents. */ static final int SCREEN_PIN_LONG_PRESS_THRESHOLD = 200; static final int SCREEN_PIN_LONG_PRESS_RESET = SCREEN_PIN_LONG_PRESS_THRESHOLD + 100; private static final String TAG = TaskbarNavButtonController.class.getSimpleName(); private long mLastScreenPinLongPress; private boolean mScreenPinned; Loading Loading @@ -89,6 +102,7 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa private final TouchInteractionService mService; private final SystemUiProxy mSystemUiProxy; private final Handler mHandler; @Nullable private StatsLogManager mStatsLogManager; private final Runnable mResetLongPress = this::resetScreenUnpin; Loading @@ -102,18 +116,23 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa public void onButtonClick(@TaskbarButton int buttonType) { switch (buttonType) { case BUTTON_BACK: logEvent(LAUNCHER_TASKBAR_BACK_BUTTON_TAP); executeBack(); break; case BUTTON_HOME: logEvent(LAUNCHER_TASKBAR_HOME_BUTTON_TAP); navigateHome(); break; case BUTTON_RECENTS: logEvent(LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP); navigateToOverview(); break; case BUTTON_IME_SWITCH: logEvent(LAUNCHER_TASKBAR_IME_SWITCHER_BUTTON_TAP); showIMESwitcher(); break; case BUTTON_A11Y: logEvent(LAUNCHER_TASKBAR_A11Y_BUTTON_TAP); notifyA11yClick(false /* longClick */); break; case BUTTON_QUICK_SETTINGS: Loading @@ -128,15 +147,19 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa public boolean onButtonLongClick(@TaskbarButton int buttonType) { switch (buttonType) { case BUTTON_HOME: logEvent(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS); startAssistant(); return true; case BUTTON_A11Y: logEvent(LAUNCHER_TASKBAR_A11Y_BUTTON_LONGPRESS); notifyA11yClick(true /* longClick */); return true; case BUTTON_BACK: logEvent(LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS); return backRecentsLongpress(buttonType); case BUTTON_RECENTS: mLongPressedButtons |= buttonType; return determineScreenUnpin(); logEvent(LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS); return backRecentsLongpress(buttonType); case BUTTON_IME_SWITCH: default: return false; Loading Loading @@ -164,6 +187,11 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa } } private boolean backRecentsLongpress(@TaskbarButton int buttonType) { mLongPressedButtons |= buttonType; return determineScreenUnpin(); } /** * Checks if the user has long pressed back and recents buttons * "together" (within {@link #SCREEN_PIN_LONG_PRESS_THRESHOLD})ms Loading Loading @@ -210,6 +238,22 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa mScreenPinned = (sysuiFlags & SYSUI_STATE_SCREEN_PINNING) != 0; } public void init(TaskbarControllers taskbarControllers) { mStatsLogManager = taskbarControllers.getTaskbarActivityContext().getStatsLogManager(); } public void onDestroy() { mStatsLogManager = null; } private void logEvent(StatsLogManager.LauncherEvent event) { if (mStatsLogManager == null) { Log.w(TAG, "No stats log manager to log taskbar button event"); return; } mStatsLogManager.logger().log(event); } private void navigateHome() { mService.getOverviewCommandHelper().addCommand(OverviewCommandHelper.TYPE_HOME); } Loading quickstep/tests/src/com/android/launcher3/taskbar/TaskbarNavButtonControllerTest.java +65 −0 Original line number Diff line number Diff line package com.android.launcher3.taskbar; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_BACK_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_HOME_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_A11Y; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_BACK; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_HOME; Loading @@ -11,6 +17,7 @@ import static com.android.quickstep.OverviewCommandHelper.TYPE_TOGGLE; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -19,6 +26,7 @@ import android.os.Handler; import androidx.test.runner.AndroidJUnit4; import com.android.launcher3.logging.StatsLogManager; import com.android.quickstep.OverviewCommandHelper; import com.android.quickstep.SystemUiProxy; import com.android.quickstep.TouchInteractionService; Loading @@ -42,6 +50,14 @@ public class TaskbarNavButtonControllerTest { OverviewCommandHelper mockCommandHelper; @Mock Handler mockHandler; @Mock StatsLogManager mockStatsLogManager; @Mock StatsLogManager.StatsLogger mockStatsLogger; @Mock TaskbarControllers mockTaskbarControllers; @Mock TaskbarActivityContext mockTaskbarActivityContext; private TaskbarNavButtonController mNavButtonController; Loading @@ -50,6 +66,10 @@ public class TaskbarNavButtonControllerTest { MockitoAnnotations.initMocks(this); when(mockService.getDisplayId()).thenReturn(DISPLAY_ID); when(mockService.getOverviewCommandHelper()).thenReturn(mockCommandHelper); when(mockStatsLogManager.logger()).thenReturn(mockStatsLogger); when(mockTaskbarControllers.getTaskbarActivityContext()) .thenReturn(mockTaskbarActivityContext); doReturn(mockStatsLogManager).when(mockTaskbarActivityContext).getStatsLogManager(); mNavButtonController = new TaskbarNavButtonController(mockService, mockSystemUiProxy, mockHandler); } Loading Loading @@ -156,4 +176,49 @@ public class TaskbarNavButtonControllerTest { mNavButtonController.onButtonLongClick(BUTTON_HOME); verify(mockSystemUiProxy, times(0)).startAssistant(any()); } @Test public void testNoCallsToNullLogger() { mNavButtonController.onButtonClick(BUTTON_HOME); verify(mockStatsLogManager, times(0)).logger(); verify(mockStatsLogger, times(0)).log(any()); } @Test public void testNoCallsAfterNullingOut() { mNavButtonController.init(mockTaskbarControllers); mNavButtonController.onButtonClick(BUTTON_HOME); mNavButtonController.onDestroy(); mNavButtonController.onButtonClick(BUTTON_HOME); verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_HOME_BUTTON_TAP); verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS); } @Test public void testLogOnTap() { mNavButtonController.init(mockTaskbarControllers); mNavButtonController.onButtonClick(BUTTON_HOME); verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_HOME_BUTTON_TAP); verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS); } @Test public void testLogOnLongpress() { mNavButtonController.init(mockTaskbarControllers); mNavButtonController.onButtonLongClick(BUTTON_HOME); verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS); verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_HOME_BUTTON_TAP); } @Test public void testBackOverviewLogOnLongpress() { mNavButtonController.init(mockTaskbarControllers); mNavButtonController.onButtonLongClick(BUTTON_RECENTS); verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS); verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP); mNavButtonController.onButtonLongClick(BUTTON_BACK); verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS); verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_BACK_BUTTON_TAP); } } src/com/android/launcher3/logging/StatsLogManager.java +28 −1 Original line number Diff line number Diff line Loading @@ -552,7 +552,34 @@ public class StatsLogManager implements ResourceBasedOverride { @UiEvent(doc = "User scrolled on one of the all apps surfaces such as A-Z list, search " + "result page etc.") LAUNCHER_ALLAPPS_SCROLLED(985); LAUNCHER_ALLAPPS_SCROLLED(985), @UiEvent(doc = "User tapped taskbar home button") LAUNCHER_TASKBAR_HOME_BUTTON_TAP(1003), @UiEvent(doc = "User tapped taskbar back button") LAUNCHER_TASKBAR_BACK_BUTTON_TAP(1004), @UiEvent(doc = "User tapped taskbar overview/recents button") LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP(1005), @UiEvent(doc = "User tapped taskbar IME switcher button") LAUNCHER_TASKBAR_IME_SWITCHER_BUTTON_TAP(1006), @UiEvent(doc = "User tapped taskbar a11y button") LAUNCHER_TASKBAR_A11Y_BUTTON_TAP(1007), @UiEvent(doc = "User tapped taskbar home button") LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS(1008), @UiEvent(doc = "User tapped taskbar back button") LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS(1009), @UiEvent(doc = "User tapped taskbar overview/recents button") LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS(1010), @UiEvent(doc = "User tapped taskbar a11y button") LAUNCHER_TASKBAR_A11Y_BUTTON_LONGPRESS(1011); // ADD MORE Loading Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +9 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.BubbleTextView; Loading @@ -66,6 +67,7 @@ import com.android.launcher3.dot.DotInfo; import com.android.launcher3.folder.Folder; import com.android.launcher3.folder.FolderIcon; import com.android.launcher3.logger.LauncherAtom; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.ItemInfo; Loading Loading @@ -244,6 +246,13 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mDeviceProfile.updateAllAppsIconSize(1, resources); // Leave all apps unscaled. } @VisibleForTesting @Override public StatsLogManager getStatsLogManager() { // Used to mock, can't mock a default interface method directly return super.getStatsLogManager(); } /** Creates LayoutParams for adding a view directly to WindowManager as a new window */ public WindowManager.LayoutParams createDefaultWindowLayoutParams() { WindowManager.LayoutParams windowLayoutParams = new WindowManager.LayoutParams( Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +9 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.content.pm.ActivityInfo.Config; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import com.android.launcher3.taskbar.allapps.TaskbarAllAppsController; import com.android.systemui.shared.rotation.RotationButtonController; Loading Loading @@ -117,6 +118,7 @@ public class TaskbarControllers { taskbarPopupController.init(this); taskbarForceVisibleImmersiveController.init(this); taskbarAllAppsController.init(this, sharedState); navButtonController.init(this); mControllersToLog = new LoggableTaskbarController[] { taskbarDragController, navButtonController, navbarButtonsViewController, Loading Loading @@ -153,6 +155,7 @@ public class TaskbarControllers { taskbarPopupController.onDestroy(); taskbarForceVisibleImmersiveController.onDestroy(); taskbarAllAppsController.onDestroy(); navButtonController.onDestroy(); mControllersToLog = null; } Loading Loading @@ -185,6 +188,12 @@ public class TaskbarControllers { rotationButtonController.dumpLogs(prefix + "\t", pw); } @VisibleForTesting TaskbarActivityContext getTaskbarActivityContext() { // Used to mock return taskbarActivityContext; } protected interface LoggableTaskbarController { void dumpLogs(String prefix, PrintWriter pw); } Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarNavButtonController.java +46 −2 Original line number Diff line number Diff line Loading @@ -19,15 +19,27 @@ package com.android.launcher3.taskbar; import static com.android.internal.app.AssistUtils.INVOCATION_TYPE_HOME_BUTTON_LONG_PRESS; import static com.android.internal.app.AssistUtils.INVOCATION_TYPE_KEY; import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_A11Y_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_A11Y_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_BACK_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_HOME_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_IME_SWITCHER_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; import android.os.Bundle; import android.os.Handler; import android.util.Log; import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import com.android.launcher3.R; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.TestProtocol; import com.android.quickstep.OverviewCommandHelper; Loading @@ -49,6 +61,7 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa /** Allow some time in between the long press for back and recents. */ static final int SCREEN_PIN_LONG_PRESS_THRESHOLD = 200; static final int SCREEN_PIN_LONG_PRESS_RESET = SCREEN_PIN_LONG_PRESS_THRESHOLD + 100; private static final String TAG = TaskbarNavButtonController.class.getSimpleName(); private long mLastScreenPinLongPress; private boolean mScreenPinned; Loading Loading @@ -89,6 +102,7 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa private final TouchInteractionService mService; private final SystemUiProxy mSystemUiProxy; private final Handler mHandler; @Nullable private StatsLogManager mStatsLogManager; private final Runnable mResetLongPress = this::resetScreenUnpin; Loading @@ -102,18 +116,23 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa public void onButtonClick(@TaskbarButton int buttonType) { switch (buttonType) { case BUTTON_BACK: logEvent(LAUNCHER_TASKBAR_BACK_BUTTON_TAP); executeBack(); break; case BUTTON_HOME: logEvent(LAUNCHER_TASKBAR_HOME_BUTTON_TAP); navigateHome(); break; case BUTTON_RECENTS: logEvent(LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP); navigateToOverview(); break; case BUTTON_IME_SWITCH: logEvent(LAUNCHER_TASKBAR_IME_SWITCHER_BUTTON_TAP); showIMESwitcher(); break; case BUTTON_A11Y: logEvent(LAUNCHER_TASKBAR_A11Y_BUTTON_TAP); notifyA11yClick(false /* longClick */); break; case BUTTON_QUICK_SETTINGS: Loading @@ -128,15 +147,19 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa public boolean onButtonLongClick(@TaskbarButton int buttonType) { switch (buttonType) { case BUTTON_HOME: logEvent(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS); startAssistant(); return true; case BUTTON_A11Y: logEvent(LAUNCHER_TASKBAR_A11Y_BUTTON_LONGPRESS); notifyA11yClick(true /* longClick */); return true; case BUTTON_BACK: logEvent(LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS); return backRecentsLongpress(buttonType); case BUTTON_RECENTS: mLongPressedButtons |= buttonType; return determineScreenUnpin(); logEvent(LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS); return backRecentsLongpress(buttonType); case BUTTON_IME_SWITCH: default: return false; Loading Loading @@ -164,6 +187,11 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa } } private boolean backRecentsLongpress(@TaskbarButton int buttonType) { mLongPressedButtons |= buttonType; return determineScreenUnpin(); } /** * Checks if the user has long pressed back and recents buttons * "together" (within {@link #SCREEN_PIN_LONG_PRESS_THRESHOLD})ms Loading Loading @@ -210,6 +238,22 @@ public class TaskbarNavButtonController implements TaskbarControllers.LoggableTa mScreenPinned = (sysuiFlags & SYSUI_STATE_SCREEN_PINNING) != 0; } public void init(TaskbarControllers taskbarControllers) { mStatsLogManager = taskbarControllers.getTaskbarActivityContext().getStatsLogManager(); } public void onDestroy() { mStatsLogManager = null; } private void logEvent(StatsLogManager.LauncherEvent event) { if (mStatsLogManager == null) { Log.w(TAG, "No stats log manager to log taskbar button event"); return; } mStatsLogManager.logger().log(event); } private void navigateHome() { mService.getOverviewCommandHelper().addCommand(OverviewCommandHelper.TYPE_HOME); } Loading
quickstep/tests/src/com/android/launcher3/taskbar/TaskbarNavButtonControllerTest.java +65 −0 Original line number Diff line number Diff line package com.android.launcher3.taskbar; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_BACK_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_HOME_BUTTON_TAP; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_A11Y; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_BACK; import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_HOME; Loading @@ -11,6 +17,7 @@ import static com.android.quickstep.OverviewCommandHelper.TYPE_TOGGLE; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -19,6 +26,7 @@ import android.os.Handler; import androidx.test.runner.AndroidJUnit4; import com.android.launcher3.logging.StatsLogManager; import com.android.quickstep.OverviewCommandHelper; import com.android.quickstep.SystemUiProxy; import com.android.quickstep.TouchInteractionService; Loading @@ -42,6 +50,14 @@ public class TaskbarNavButtonControllerTest { OverviewCommandHelper mockCommandHelper; @Mock Handler mockHandler; @Mock StatsLogManager mockStatsLogManager; @Mock StatsLogManager.StatsLogger mockStatsLogger; @Mock TaskbarControllers mockTaskbarControllers; @Mock TaskbarActivityContext mockTaskbarActivityContext; private TaskbarNavButtonController mNavButtonController; Loading @@ -50,6 +66,10 @@ public class TaskbarNavButtonControllerTest { MockitoAnnotations.initMocks(this); when(mockService.getDisplayId()).thenReturn(DISPLAY_ID); when(mockService.getOverviewCommandHelper()).thenReturn(mockCommandHelper); when(mockStatsLogManager.logger()).thenReturn(mockStatsLogger); when(mockTaskbarControllers.getTaskbarActivityContext()) .thenReturn(mockTaskbarActivityContext); doReturn(mockStatsLogManager).when(mockTaskbarActivityContext).getStatsLogManager(); mNavButtonController = new TaskbarNavButtonController(mockService, mockSystemUiProxy, mockHandler); } Loading Loading @@ -156,4 +176,49 @@ public class TaskbarNavButtonControllerTest { mNavButtonController.onButtonLongClick(BUTTON_HOME); verify(mockSystemUiProxy, times(0)).startAssistant(any()); } @Test public void testNoCallsToNullLogger() { mNavButtonController.onButtonClick(BUTTON_HOME); verify(mockStatsLogManager, times(0)).logger(); verify(mockStatsLogger, times(0)).log(any()); } @Test public void testNoCallsAfterNullingOut() { mNavButtonController.init(mockTaskbarControllers); mNavButtonController.onButtonClick(BUTTON_HOME); mNavButtonController.onDestroy(); mNavButtonController.onButtonClick(BUTTON_HOME); verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_HOME_BUTTON_TAP); verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS); } @Test public void testLogOnTap() { mNavButtonController.init(mockTaskbarControllers); mNavButtonController.onButtonClick(BUTTON_HOME); verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_HOME_BUTTON_TAP); verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS); } @Test public void testLogOnLongpress() { mNavButtonController.init(mockTaskbarControllers); mNavButtonController.onButtonLongClick(BUTTON_HOME); verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS); verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_HOME_BUTTON_TAP); } @Test public void testBackOverviewLogOnLongpress() { mNavButtonController.init(mockTaskbarControllers); mNavButtonController.onButtonLongClick(BUTTON_RECENTS); verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS); verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP); mNavButtonController.onButtonLongClick(BUTTON_BACK); verify(mockStatsLogger, times(1)).log(LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS); verify(mockStatsLogger, times(0)).log(LAUNCHER_TASKBAR_BACK_BUTTON_TAP); } }
src/com/android/launcher3/logging/StatsLogManager.java +28 −1 Original line number Diff line number Diff line Loading @@ -552,7 +552,34 @@ public class StatsLogManager implements ResourceBasedOverride { @UiEvent(doc = "User scrolled on one of the all apps surfaces such as A-Z list, search " + "result page etc.") LAUNCHER_ALLAPPS_SCROLLED(985); LAUNCHER_ALLAPPS_SCROLLED(985), @UiEvent(doc = "User tapped taskbar home button") LAUNCHER_TASKBAR_HOME_BUTTON_TAP(1003), @UiEvent(doc = "User tapped taskbar back button") LAUNCHER_TASKBAR_BACK_BUTTON_TAP(1004), @UiEvent(doc = "User tapped taskbar overview/recents button") LAUNCHER_TASKBAR_OVERVIEW_BUTTON_TAP(1005), @UiEvent(doc = "User tapped taskbar IME switcher button") LAUNCHER_TASKBAR_IME_SWITCHER_BUTTON_TAP(1006), @UiEvent(doc = "User tapped taskbar a11y button") LAUNCHER_TASKBAR_A11Y_BUTTON_TAP(1007), @UiEvent(doc = "User tapped taskbar home button") LAUNCHER_TASKBAR_HOME_BUTTON_LONGPRESS(1008), @UiEvent(doc = "User tapped taskbar back button") LAUNCHER_TASKBAR_BACK_BUTTON_LONGPRESS(1009), @UiEvent(doc = "User tapped taskbar overview/recents button") LAUNCHER_TASKBAR_OVERVIEW_BUTTON_LONGPRESS(1010), @UiEvent(doc = "User tapped taskbar a11y button") LAUNCHER_TASKBAR_A11Y_BUTTON_LONGPRESS(1011); // ADD MORE Loading