Loading packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +3 −3 Original line number Diff line number Diff line Loading @@ -226,7 +226,7 @@ public class GlobalActionsDialog extends GlobalActionsDialogLite ActionsDialog dialog = new ActionsDialog(getContext(), mAdapter, mOverflowAdapter, this::getWalletViewController, mDepthController, mSysuiColorExtractor, mStatusBarService, mNotificationShadeWindowController, mSysUiState, this::onRotate, isKeyguardShowing(), mPowerAdapter); mSysUiState, this::onRotate, isKeyguardShowing(), mPowerAdapter, getEventLogger()); if (shouldShowLockMessage(dialog)) { dialog.showLockMessage(); Loading Loading @@ -294,11 +294,11 @@ public class GlobalActionsDialog extends GlobalActionsDialogLite SysuiColorExtractor sysuiColorExtractor, IStatusBarService statusBarService, NotificationShadeWindowController notificationShadeWindowController, SysUiState sysuiState, Runnable onRotateCallback, boolean keyguardShowing, MyPowerOptionsAdapter powerAdapter) { MyPowerOptionsAdapter powerAdapter, UiEventLogger uiEventLogger) { super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions, adapter, overflowAdapter, depthController, sysuiColorExtractor, statusBarService, notificationShadeWindowController, sysuiState, onRotateCallback, keyguardShowing, powerAdapter); onRotateCallback, keyguardShowing, powerAdapter, uiEventLogger); mWalletFactory = walletFactory; // Update window attributes Loading packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java +59 −6 Original line number Diff line number Diff line Loading @@ -249,7 +249,43 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene GA_SCREENSHOT_PRESS(347), @UiEvent(doc = "The global actions screenshot button was long pressed.") GA_SCREENSHOT_LONG_PRESS(348); GA_SCREENSHOT_LONG_PRESS(348), @UiEvent(doc = "The global actions power off button was pressed.") GA_SHUTDOWN_PRESS(802), @UiEvent(doc = "The global actions power off button was long pressed.") GA_SHUTDOWN_LONG_PRESS(803), @UiEvent(doc = "The global actions reboot button was pressed.") GA_REBOOT_PRESS(349), @UiEvent(doc = "The global actions reboot button was long pressed.") GA_REBOOT_LONG_PRESS(804), @UiEvent(doc = "The global actions lockdown button was pressed.") GA_LOCKDOWN_PRESS(354), // already created by cwren apparently @UiEvent(doc = "Power menu was opened via quick settings button.") GA_OPEN_QS(805), @UiEvent(doc = "Power menu was opened via power + volume up.") GA_OPEN_POWER_VOLUP(806), @UiEvent(doc = "Power menu was opened via long press on power.") GA_OPEN_LONG_PRESS_POWER(807), @UiEvent(doc = "Power menu was closed via long press on power.") GA_CLOSE_LONG_PRESS_POWER(808), @UiEvent(doc = "Power menu was dismissed by back gesture.") GA_CLOSE_BACK(809), @UiEvent(doc = "Power menu was dismissed by tapping outside dialog.") GA_CLOSE_TAP_OUTSIDE(810), @UiEvent(doc = "Power menu was closed via power + volume up.") GA_CLOSE_POWER_VOLUP(811); private final int mId; Loading Loading @@ -349,6 +385,10 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene return mContext; } protected UiEventLogger getEventLogger() { return mUiEventLogger; } /** * Show the global actions dialog (creating if necessary) * Loading Loading @@ -581,7 +621,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mAdapter, mOverflowAdapter, mDepthController, mSysuiColorExtractor, mStatusBarService, mNotificationShadeWindowController, mSysUiState, this::onRotate, mKeyguardShowing, mPowerAdapter); mSysUiState, this::onRotate, mKeyguardShowing, mPowerAdapter, mUiEventLogger); dialog.setOnDismissListener(this); dialog.setOnShowListener(this); Loading Loading @@ -679,13 +719,14 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene @VisibleForTesting final class ShutDownAction extends SinglePressAction implements LongPressAction { private ShutDownAction() { ShutDownAction() { super(R.drawable.ic_lock_power_off, R.string.global_action_power_off); } @Override public boolean onLongPress() { mUiEventLogger.log(GlobalActionsEvent.GA_SHUTDOWN_LONG_PRESS); if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) { mWindowManagerFuncs.reboot(true); return true; Loading @@ -705,6 +746,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene @Override public void onPress() { mUiEventLogger.log(GlobalActionsEvent.GA_SHUTDOWN_PRESS); // shutdown by making sure radio and power are handled accordingly. mWindowManagerFuncs.shutdown(); } Loading Loading @@ -807,12 +849,13 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene @VisibleForTesting final class RestartAction extends SinglePressAction implements LongPressAction { private RestartAction() { RestartAction() { super(R.drawable.ic_restart, R.string.global_action_restart); } @Override public boolean onLongPress() { mUiEventLogger.log(GlobalActionsEvent.GA_REBOOT_LONG_PRESS); if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) { mWindowManagerFuncs.reboot(true); return true; Loading @@ -832,6 +875,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene @Override public void onPress() { mUiEventLogger.log(GlobalActionsEvent.GA_REBOOT_PRESS); mWindowManagerFuncs.reboot(false); } } Loading Loading @@ -1062,6 +1106,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene public void onPress() { mLockPatternUtils.requireStrongAuth(STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN, UserHandle.USER_ALL); mUiEventLogger.log(GlobalActionsEvent.GA_LOCKDOWN_PRESS); try { mIWindowManager.lockNow(null); // Lock profiles (if any) on the background thread. Loading Loading @@ -2049,6 +2094,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene private ListPopupWindow mOverflowPopup; private Dialog mPowerOptionsDialog; protected final Runnable mOnRotateCallback; private UiEventLogger mUiEventLogger; protected ViewGroup mContainer; Loading @@ -2058,7 +2104,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene SysuiColorExtractor sysuiColorExtractor, IStatusBarService statusBarService, NotificationShadeWindowController notificationShadeWindowController, SysUiState sysuiState, Runnable onRotateCallback, boolean keyguardShowing, MyPowerOptionsAdapter powerAdapter) { MyPowerOptionsAdapter powerAdapter, UiEventLogger uiEventLogger) { super(context, themeRes); mContext = context; mAdapter = adapter; Loading @@ -2071,6 +2117,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mSysUiState = sysuiState; mOnRotateCallback = onRotateCallback; mKeyguardShowing = keyguardShowing; mUiEventLogger = uiEventLogger; // Window initialization Window window = getWindow(); Loading Loading @@ -2141,7 +2188,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mGlobalActionsLayout.setAdapter(mAdapter); mContainer = findViewById(com.android.systemui.R.id.global_actions_container); mContainer.setOnClickListener(v -> { // TODO: add logging (b/182830510) mUiEventLogger.log(GlobalActionsEvent.GA_CLOSE_TAP_OUTSIDE); cancel(); }); Loading Loading @@ -2217,6 +2264,12 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mColorExtractor.removeOnColorsChangedListener(this); } @Override public void onBackPressed() { super.onBackPressed(); mUiEventLogger.log(GlobalActionsEvent.GA_CLOSE_BACK); } @Override public void show() { super.show(); Loading packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java +5 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.widget.TextView; import android.widget.Toast; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.R; Loading Loading @@ -73,6 +74,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme private final View mPowerMenuLite; private final boolean mShowPMLiteButton; private GlobalActionsDialogLite mGlobalActionsDialog; private final UiEventLogger mUiEventLogger; private final UserInfoController.OnUserInfoChangedListener mOnUserInfoChangedListener = new UserInfoController.OnUserInfoChangedListener() { Loading Loading @@ -122,6 +124,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme startSettingsActivity(); } } else if (v == mPowerMenuLite) { mUiEventLogger.log(GlobalActionsDialogLite.GlobalActionsEvent.GA_OPEN_QS); mGlobalActionsDialog.showOrHideDialog(false, true); } } Loading @@ -139,7 +142,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme QuickQSPanelController quickQSPanelController, TunerService tunerService, MetricsLogger metricsLogger, FalsingManager falsingManager, @Named(PM_LITE_ENABLED) boolean showPMLiteButton, GlobalActionsDialogLite globalActionsDialog) { GlobalActionsDialogLite globalActionsDialog, UiEventLogger uiEventLogger) { super(view); mUserManager = userManager; mUserInfoController = userInfoController; Loading @@ -161,6 +164,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme mPowerMenuLite = mView.findViewById(R.id.pm_lite); mShowPMLiteButton = showPMLiteButton; mGlobalActionsDialog = globalActionsDialog; mUiEventLogger = uiEventLogger; } @Override Loading packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java +79 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.service.dreams.IDreamManager; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.IWindowManager; import android.view.View; import android.view.WindowManagerPolicyConstants; import androidx.test.filters.SmallTest; Loading Loading @@ -171,6 +172,44 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase { verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_POWER_MENU_CLOSE); } @Test public void testShouldLogClose_backButton() { mGlobalActionsDialogLite = spy(mGlobalActionsDialogLite); doReturn(4).when(mGlobalActionsDialogLite).getMaxShownPowerItems(); doReturn(true).when(mGlobalActionsDialogLite).shouldDisplayLockdown(any()); doReturn(true).when(mGlobalActionsDialogLite).shouldShowAction(any()); String[] actions = { GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY, GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN, GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER, GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART, }; doReturn(actions).when(mGlobalActionsDialogLite).getDefaultActions(); GlobalActionsDialogLite.ActionsDialogLite dialog = mGlobalActionsDialogLite.createDialog(); dialog.onBackPressed(); mTestableLooper.processAllMessages(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_CLOSE_BACK); } @Test public void testShouldLogOnTapOutside() { mGlobalActionsDialogLite = spy(mGlobalActionsDialogLite); doReturn(4).when(mGlobalActionsDialogLite).getMaxShownPowerItems(); doReturn(true).when(mGlobalActionsDialogLite).shouldDisplayLockdown(any()); doReturn(true).when(mGlobalActionsDialogLite).shouldShowAction(any()); String[] actions = { GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY, GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN, GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER, GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART, }; doReturn(actions).when(mGlobalActionsDialogLite).getDefaultActions(); GlobalActionsDialogLite.ActionsDialogLite dialog = mGlobalActionsDialogLite.createDialog(); View container = dialog.findViewById(com.android.systemui.R.id.global_actions_container); container.callOnClick(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_CLOSE_TAP_OUTSIDE); } @Test public void testShouldLogBugreportPress() throws InterruptedException { GlobalActionsDialog.BugReportAction bugReportAction = Loading Loading @@ -286,4 +325,44 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase { assertThat(mGlobalActionsDialogLite.mOverflowItems).isEmpty(); assertThat(mGlobalActionsDialogLite.mPowerItems).isEmpty(); } @Test public void testShouldLogLockdownPress() { GlobalActionsDialogLite.LockDownAction lockDownAction = mGlobalActionsDialogLite.new LockDownAction(); lockDownAction.onPress(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_LOCKDOWN_PRESS); } @Test public void testShouldLogShutdownPress() { GlobalActionsDialogLite.ShutDownAction shutDownAction = mGlobalActionsDialogLite.new ShutDownAction(); shutDownAction.onPress(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_SHUTDOWN_PRESS); } @Test public void testShouldLogShutdownLongPress() { GlobalActionsDialogLite.ShutDownAction shutDownAction = mGlobalActionsDialogLite.new ShutDownAction(); shutDownAction.onLongPress(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_SHUTDOWN_LONG_PRESS); } @Test public void testShouldLogRebootPress() { GlobalActionsDialogLite.RestartAction restartAction = mGlobalActionsDialogLite.new RestartAction(); restartAction.onPress(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_REBOOT_PRESS); } @Test public void testShouldLogRebootLongPress() { GlobalActionsDialogLite.RestartAction restartAction = mGlobalActionsDialogLite.new RestartAction(); restartAction.onLongPress(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_REBOOT_LONG_PRESS); } } packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java +31 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -35,6 +36,7 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.testing.FakeMetricsLogger; import com.android.systemui.Dependency; import com.android.systemui.R; Loading Loading @@ -82,6 +84,7 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { private QuickQSPanelController mQuickQSPanelController; private FakeTunerService mFakeTunerService; private MetricsLogger mMetricsLogger = new FakeMetricsLogger(); private FalsingManagerFake mFalsingManager; @Mock private SettingsButton mSettingsButton; Loading @@ -95,12 +98,15 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { private View mPowerMenuLiteView; @Mock private GlobalActionsDialogLite mGlobalActionsDialog; @Mock private UiEventLogger mUiEventLogger; private QSFooterViewController mController; @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); mFalsingManager = new FalsingManagerFake(); injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES); Loading @@ -121,7 +127,8 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { mController = new QSFooterViewController(mView, mUserManager, mUserInfoController, mActivityStarter, mDeviceProvisionedController, mUserTracker, mQSPanelController, mMultiUserSwitchController, mQuickQSPanelController, mFakeTunerService, mMetricsLogger, new FalsingManagerFake(), false, mGlobalActionsDialog); mMetricsLogger, mFalsingManager, false, mGlobalActionsDialog, mUiEventLogger); mController.init(); } Loading Loading @@ -154,4 +161,27 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { // Verify Settings wasn't launched. verify(mActivityStarter, never()).startActivity(any(), anyBoolean()); } @Test public void testLogPowerMenuClick() { // Enable power menu button mController = new QSFooterViewController(mView, mUserManager, mUserInfoController, mActivityStarter, mDeviceProvisionedController, mUserTracker, mQSPanelController, mMultiUserSwitchController, mQuickQSPanelController, mFakeTunerService, mMetricsLogger, new FalsingManagerFake(), true, mGlobalActionsDialog, mUiEventLogger); mController.init(); mController.setExpanded(true); mFalsingManager.setFalseTap(false); ArgumentCaptor<View.OnClickListener> onClickCaptor = ArgumentCaptor.forClass(View.OnClickListener.class); verify(mPowerMenuLiteView).setOnClickListener(onClickCaptor.capture()); onClickCaptor.getValue().onClick(mPowerMenuLiteView); // Verify clicks are logged verify(mUiEventLogger, times(1)) .log(GlobalActionsDialogLite.GlobalActionsEvent.GA_OPEN_QS); } } Loading
packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +3 −3 Original line number Diff line number Diff line Loading @@ -226,7 +226,7 @@ public class GlobalActionsDialog extends GlobalActionsDialogLite ActionsDialog dialog = new ActionsDialog(getContext(), mAdapter, mOverflowAdapter, this::getWalletViewController, mDepthController, mSysuiColorExtractor, mStatusBarService, mNotificationShadeWindowController, mSysUiState, this::onRotate, isKeyguardShowing(), mPowerAdapter); mSysUiState, this::onRotate, isKeyguardShowing(), mPowerAdapter, getEventLogger()); if (shouldShowLockMessage(dialog)) { dialog.showLockMessage(); Loading Loading @@ -294,11 +294,11 @@ public class GlobalActionsDialog extends GlobalActionsDialogLite SysuiColorExtractor sysuiColorExtractor, IStatusBarService statusBarService, NotificationShadeWindowController notificationShadeWindowController, SysUiState sysuiState, Runnable onRotateCallback, boolean keyguardShowing, MyPowerOptionsAdapter powerAdapter) { MyPowerOptionsAdapter powerAdapter, UiEventLogger uiEventLogger) { super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions, adapter, overflowAdapter, depthController, sysuiColorExtractor, statusBarService, notificationShadeWindowController, sysuiState, onRotateCallback, keyguardShowing, powerAdapter); onRotateCallback, keyguardShowing, powerAdapter, uiEventLogger); mWalletFactory = walletFactory; // Update window attributes Loading
packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java +59 −6 Original line number Diff line number Diff line Loading @@ -249,7 +249,43 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene GA_SCREENSHOT_PRESS(347), @UiEvent(doc = "The global actions screenshot button was long pressed.") GA_SCREENSHOT_LONG_PRESS(348); GA_SCREENSHOT_LONG_PRESS(348), @UiEvent(doc = "The global actions power off button was pressed.") GA_SHUTDOWN_PRESS(802), @UiEvent(doc = "The global actions power off button was long pressed.") GA_SHUTDOWN_LONG_PRESS(803), @UiEvent(doc = "The global actions reboot button was pressed.") GA_REBOOT_PRESS(349), @UiEvent(doc = "The global actions reboot button was long pressed.") GA_REBOOT_LONG_PRESS(804), @UiEvent(doc = "The global actions lockdown button was pressed.") GA_LOCKDOWN_PRESS(354), // already created by cwren apparently @UiEvent(doc = "Power menu was opened via quick settings button.") GA_OPEN_QS(805), @UiEvent(doc = "Power menu was opened via power + volume up.") GA_OPEN_POWER_VOLUP(806), @UiEvent(doc = "Power menu was opened via long press on power.") GA_OPEN_LONG_PRESS_POWER(807), @UiEvent(doc = "Power menu was closed via long press on power.") GA_CLOSE_LONG_PRESS_POWER(808), @UiEvent(doc = "Power menu was dismissed by back gesture.") GA_CLOSE_BACK(809), @UiEvent(doc = "Power menu was dismissed by tapping outside dialog.") GA_CLOSE_TAP_OUTSIDE(810), @UiEvent(doc = "Power menu was closed via power + volume up.") GA_CLOSE_POWER_VOLUP(811); private final int mId; Loading Loading @@ -349,6 +385,10 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene return mContext; } protected UiEventLogger getEventLogger() { return mUiEventLogger; } /** * Show the global actions dialog (creating if necessary) * Loading Loading @@ -581,7 +621,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mAdapter, mOverflowAdapter, mDepthController, mSysuiColorExtractor, mStatusBarService, mNotificationShadeWindowController, mSysUiState, this::onRotate, mKeyguardShowing, mPowerAdapter); mSysUiState, this::onRotate, mKeyguardShowing, mPowerAdapter, mUiEventLogger); dialog.setOnDismissListener(this); dialog.setOnShowListener(this); Loading Loading @@ -679,13 +719,14 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene @VisibleForTesting final class ShutDownAction extends SinglePressAction implements LongPressAction { private ShutDownAction() { ShutDownAction() { super(R.drawable.ic_lock_power_off, R.string.global_action_power_off); } @Override public boolean onLongPress() { mUiEventLogger.log(GlobalActionsEvent.GA_SHUTDOWN_LONG_PRESS); if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) { mWindowManagerFuncs.reboot(true); return true; Loading @@ -705,6 +746,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene @Override public void onPress() { mUiEventLogger.log(GlobalActionsEvent.GA_SHUTDOWN_PRESS); // shutdown by making sure radio and power are handled accordingly. mWindowManagerFuncs.shutdown(); } Loading Loading @@ -807,12 +849,13 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene @VisibleForTesting final class RestartAction extends SinglePressAction implements LongPressAction { private RestartAction() { RestartAction() { super(R.drawable.ic_restart, R.string.global_action_restart); } @Override public boolean onLongPress() { mUiEventLogger.log(GlobalActionsEvent.GA_REBOOT_LONG_PRESS); if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) { mWindowManagerFuncs.reboot(true); return true; Loading @@ -832,6 +875,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene @Override public void onPress() { mUiEventLogger.log(GlobalActionsEvent.GA_REBOOT_PRESS); mWindowManagerFuncs.reboot(false); } } Loading Loading @@ -1062,6 +1106,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene public void onPress() { mLockPatternUtils.requireStrongAuth(STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN, UserHandle.USER_ALL); mUiEventLogger.log(GlobalActionsEvent.GA_LOCKDOWN_PRESS); try { mIWindowManager.lockNow(null); // Lock profiles (if any) on the background thread. Loading Loading @@ -2049,6 +2094,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene private ListPopupWindow mOverflowPopup; private Dialog mPowerOptionsDialog; protected final Runnable mOnRotateCallback; private UiEventLogger mUiEventLogger; protected ViewGroup mContainer; Loading @@ -2058,7 +2104,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene SysuiColorExtractor sysuiColorExtractor, IStatusBarService statusBarService, NotificationShadeWindowController notificationShadeWindowController, SysUiState sysuiState, Runnable onRotateCallback, boolean keyguardShowing, MyPowerOptionsAdapter powerAdapter) { MyPowerOptionsAdapter powerAdapter, UiEventLogger uiEventLogger) { super(context, themeRes); mContext = context; mAdapter = adapter; Loading @@ -2071,6 +2117,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mSysUiState = sysuiState; mOnRotateCallback = onRotateCallback; mKeyguardShowing = keyguardShowing; mUiEventLogger = uiEventLogger; // Window initialization Window window = getWindow(); Loading Loading @@ -2141,7 +2188,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mGlobalActionsLayout.setAdapter(mAdapter); mContainer = findViewById(com.android.systemui.R.id.global_actions_container); mContainer.setOnClickListener(v -> { // TODO: add logging (b/182830510) mUiEventLogger.log(GlobalActionsEvent.GA_CLOSE_TAP_OUTSIDE); cancel(); }); Loading Loading @@ -2217,6 +2264,12 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene mColorExtractor.removeOnColorsChangedListener(this); } @Override public void onBackPressed() { super.onBackPressed(); mUiEventLogger.log(GlobalActionsEvent.GA_CLOSE_BACK); } @Override public void show() { super.show(); Loading
packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java +5 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.widget.TextView; import android.widget.Toast; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.R; Loading Loading @@ -73,6 +74,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme private final View mPowerMenuLite; private final boolean mShowPMLiteButton; private GlobalActionsDialogLite mGlobalActionsDialog; private final UiEventLogger mUiEventLogger; private final UserInfoController.OnUserInfoChangedListener mOnUserInfoChangedListener = new UserInfoController.OnUserInfoChangedListener() { Loading Loading @@ -122,6 +124,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme startSettingsActivity(); } } else if (v == mPowerMenuLite) { mUiEventLogger.log(GlobalActionsDialogLite.GlobalActionsEvent.GA_OPEN_QS); mGlobalActionsDialog.showOrHideDialog(false, true); } } Loading @@ -139,7 +142,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme QuickQSPanelController quickQSPanelController, TunerService tunerService, MetricsLogger metricsLogger, FalsingManager falsingManager, @Named(PM_LITE_ENABLED) boolean showPMLiteButton, GlobalActionsDialogLite globalActionsDialog) { GlobalActionsDialogLite globalActionsDialog, UiEventLogger uiEventLogger) { super(view); mUserManager = userManager; mUserInfoController = userInfoController; Loading @@ -161,6 +164,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme mPowerMenuLite = mView.findViewById(R.id.pm_lite); mShowPMLiteButton = showPMLiteButton; mGlobalActionsDialog = globalActionsDialog; mUiEventLogger = uiEventLogger; } @Override Loading
packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java +79 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.service.dreams.IDreamManager; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.IWindowManager; import android.view.View; import android.view.WindowManagerPolicyConstants; import androidx.test.filters.SmallTest; Loading Loading @@ -171,6 +172,44 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase { verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_POWER_MENU_CLOSE); } @Test public void testShouldLogClose_backButton() { mGlobalActionsDialogLite = spy(mGlobalActionsDialogLite); doReturn(4).when(mGlobalActionsDialogLite).getMaxShownPowerItems(); doReturn(true).when(mGlobalActionsDialogLite).shouldDisplayLockdown(any()); doReturn(true).when(mGlobalActionsDialogLite).shouldShowAction(any()); String[] actions = { GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY, GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN, GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER, GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART, }; doReturn(actions).when(mGlobalActionsDialogLite).getDefaultActions(); GlobalActionsDialogLite.ActionsDialogLite dialog = mGlobalActionsDialogLite.createDialog(); dialog.onBackPressed(); mTestableLooper.processAllMessages(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_CLOSE_BACK); } @Test public void testShouldLogOnTapOutside() { mGlobalActionsDialogLite = spy(mGlobalActionsDialogLite); doReturn(4).when(mGlobalActionsDialogLite).getMaxShownPowerItems(); doReturn(true).when(mGlobalActionsDialogLite).shouldDisplayLockdown(any()); doReturn(true).when(mGlobalActionsDialogLite).shouldShowAction(any()); String[] actions = { GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY, GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN, GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER, GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART, }; doReturn(actions).when(mGlobalActionsDialogLite).getDefaultActions(); GlobalActionsDialogLite.ActionsDialogLite dialog = mGlobalActionsDialogLite.createDialog(); View container = dialog.findViewById(com.android.systemui.R.id.global_actions_container); container.callOnClick(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_CLOSE_TAP_OUTSIDE); } @Test public void testShouldLogBugreportPress() throws InterruptedException { GlobalActionsDialog.BugReportAction bugReportAction = Loading Loading @@ -286,4 +325,44 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase { assertThat(mGlobalActionsDialogLite.mOverflowItems).isEmpty(); assertThat(mGlobalActionsDialogLite.mPowerItems).isEmpty(); } @Test public void testShouldLogLockdownPress() { GlobalActionsDialogLite.LockDownAction lockDownAction = mGlobalActionsDialogLite.new LockDownAction(); lockDownAction.onPress(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_LOCKDOWN_PRESS); } @Test public void testShouldLogShutdownPress() { GlobalActionsDialogLite.ShutDownAction shutDownAction = mGlobalActionsDialogLite.new ShutDownAction(); shutDownAction.onPress(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_SHUTDOWN_PRESS); } @Test public void testShouldLogShutdownLongPress() { GlobalActionsDialogLite.ShutDownAction shutDownAction = mGlobalActionsDialogLite.new ShutDownAction(); shutDownAction.onLongPress(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_SHUTDOWN_LONG_PRESS); } @Test public void testShouldLogRebootPress() { GlobalActionsDialogLite.RestartAction restartAction = mGlobalActionsDialogLite.new RestartAction(); restartAction.onPress(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_REBOOT_PRESS); } @Test public void testShouldLogRebootLongPress() { GlobalActionsDialogLite.RestartAction restartAction = mGlobalActionsDialogLite.new RestartAction(); restartAction.onLongPress(); verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_REBOOT_LONG_PRESS); } }
packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java +31 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading @@ -35,6 +36,7 @@ import android.widget.TextView; import androidx.test.filters.SmallTest; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.testing.FakeMetricsLogger; import com.android.systemui.Dependency; import com.android.systemui.R; Loading Loading @@ -82,6 +84,7 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { private QuickQSPanelController mQuickQSPanelController; private FakeTunerService mFakeTunerService; private MetricsLogger mMetricsLogger = new FakeMetricsLogger(); private FalsingManagerFake mFalsingManager; @Mock private SettingsButton mSettingsButton; Loading @@ -95,12 +98,15 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { private View mPowerMenuLiteView; @Mock private GlobalActionsDialogLite mGlobalActionsDialog; @Mock private UiEventLogger mUiEventLogger; private QSFooterViewController mController; @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); mFalsingManager = new FalsingManagerFake(); injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES); Loading @@ -121,7 +127,8 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { mController = new QSFooterViewController(mView, mUserManager, mUserInfoController, mActivityStarter, mDeviceProvisionedController, mUserTracker, mQSPanelController, mMultiUserSwitchController, mQuickQSPanelController, mFakeTunerService, mMetricsLogger, new FalsingManagerFake(), false, mGlobalActionsDialog); mMetricsLogger, mFalsingManager, false, mGlobalActionsDialog, mUiEventLogger); mController.init(); } Loading Loading @@ -154,4 +161,27 @@ public class QSFooterViewControllerTest extends LeakCheckedTest { // Verify Settings wasn't launched. verify(mActivityStarter, never()).startActivity(any(), anyBoolean()); } @Test public void testLogPowerMenuClick() { // Enable power menu button mController = new QSFooterViewController(mView, mUserManager, mUserInfoController, mActivityStarter, mDeviceProvisionedController, mUserTracker, mQSPanelController, mMultiUserSwitchController, mQuickQSPanelController, mFakeTunerService, mMetricsLogger, new FalsingManagerFake(), true, mGlobalActionsDialog, mUiEventLogger); mController.init(); mController.setExpanded(true); mFalsingManager.setFalseTap(false); ArgumentCaptor<View.OnClickListener> onClickCaptor = ArgumentCaptor.forClass(View.OnClickListener.class); verify(mPowerMenuLiteView).setOnClickListener(onClickCaptor.capture()); onClickCaptor.getValue().onClick(mPowerMenuLiteView); // Verify clicks are logged verify(mUiEventLogger, times(1)) .log(GlobalActionsDialogLite.GlobalActionsEvent.GA_OPEN_QS); } }