summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dave Mankoff <mankoff@google.com> 2023-07-27 21:03:54 +0000
committer Dave Mankoff <mankoff@google.com> 2024-01-03 19:19:57 +0000
commit5af566dea8fea2cb40956d5a6cc2f09083392401 (patch)
tree34850d9e6f8130d16233b34537ff76de443f8b7a
parentbe1761a0621b7ce763aad779666cd503b3b37bbb (diff)
Remove calls to `new SystemUIDialog(context)`
This removes low-hanging fruit, but replacing calls to `new SystemUIDialog(context)` with `Provider<SystemUIDialog>#get`. Flag: NA Bug: 219008720 Test: atest SystemUITests Change-Id: I9364b35d84f4d5afb084547a14bc04686d1a9ba3
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/management/PanelConfirmationDialogFactory.kt15
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/ui/ControlsDialogsFactory.kt13
-rw-r--r--packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java22
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt33
-rw-r--r--packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java36
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java9
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogDelegateTest.kt2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogDelegateTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/contrast/ContrastDialogDelegateTest.kt4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/controls/management/PanelConfirmationDialogFactoryTest.kt43
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsDialogsFactoryTest.kt24
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt12
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java23
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/FgsManagerControllerTest.java16
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt12
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt8
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java93
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/util/FakeSystemUIDialogController.kt5
21 files changed, 260 insertions, 134 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/PanelConfirmationDialogFactory.kt b/packages/SystemUI/src/com/android/systemui/controls/management/PanelConfirmationDialogFactory.kt
index 5df26b3176ff..a6b432019486 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/PanelConfirmationDialogFactory.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/PanelConfirmationDialogFactory.kt
@@ -28,27 +28,26 @@ import javax.inject.Inject
/**
* Factory to create dialogs for consenting to show app panels for specific apps.
*
- * [internalDialogFactory] is for facilitating testing.
+ * [dialogFactory] is for facilitating testing.
*/
-class PanelConfirmationDialogFactory(
- private val internalDialogFactory: (Context) -> SystemUIDialog
+class PanelConfirmationDialogFactory @Inject constructor(
+ private val dialogFactory: SystemUIDialog.Factory
) {
- @Inject constructor() : this({ SystemUIDialog(it) })
/**
* Creates a dialog to show to the user. [response] will be true if an only if the user responds
* affirmatively.
*/
fun createConfirmationDialog(
- context: Context,
- appName: CharSequence,
- response: Consumer<Boolean>
+ context: Context,
+ appName: CharSequence,
+ response: Consumer<Boolean>
): Dialog {
val listener =
DialogInterface.OnClickListener { _, which ->
response.accept(which == DialogInterface.BUTTON_POSITIVE)
}
- return internalDialogFactory(context).apply {
+ return dialogFactory.create(context).apply {
setTitle(this.context.getString(R.string.controls_panel_authorization_title, appName))
setMessage(this.context.getString(R.string.controls_panel_authorization, appName))
setCanceledOnTouchOutside(true)
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsDialogsFactory.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsDialogsFactory.kt
index 2ad6014fd7cd..e42a4a6af0de 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsDialogsFactory.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsDialogsFactory.kt
@@ -25,20 +25,21 @@ import com.android.systemui.statusbar.phone.SystemUIDialog
import java.util.function.Consumer
import javax.inject.Inject
-class ControlsDialogsFactory(private val internalDialogFactory: (Context) -> SystemUIDialog) {
+class ControlsDialogsFactory @Inject constructor(
+ private val dialogFactory: SystemUIDialog.Factory
+) {
- @Inject constructor() : this({ SystemUIDialog(it) })
fun createRemoveAppDialog(
- context: Context,
- appName: CharSequence,
- response: Consumer<Boolean>
+ context: Context,
+ appName: CharSequence,
+ response: Consumer<Boolean>
): Dialog {
val listener =
DialogInterface.OnClickListener { _, which ->
response.accept(which == DialogInterface.BUTTON_POSITIVE)
}
- return internalDialogFactory(context).apply {
+ return dialogFactory.create(context).apply {
setTitle(context.getString(R.string.controls_panel_remove_app_authorization, appName))
setCanceledOnTouchOutside(true)
setOnCancelListener { response.accept(false) }
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
index a6c623391bb0..7e06f5a21113 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java
@@ -87,6 +87,7 @@ import java.util.Locale;
import java.util.Objects;
import javax.inject.Inject;
+import javax.inject.Provider;
/**
*/
@@ -149,6 +150,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
public static final String EXTRA_CONFIRM_ONLY = "extra_confirm_only";
private final Context mContext;
+ private final SystemUIDialog.Factory mSystemUIDialogFactory;
private final NotificationManager mNoMan;
private final PowerManager mPowerMan;
private final KeyguardManager mKeyguard;
@@ -186,11 +188,17 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
/**
*/
@Inject
- public PowerNotificationWarnings(Context context, ActivityStarter activityStarter,
- BroadcastSender broadcastSender, Lazy<BatteryController> batteryControllerLazy,
- DialogLaunchAnimator dialogLaunchAnimator, UiEventLogger uiEventLogger,
- GlobalSettings globalSettings, UserTracker userTracker) {
+ public PowerNotificationWarnings(
+ Context context,
+ ActivityStarter activityStarter,
+ BroadcastSender broadcastSender,
+ Lazy<BatteryController> batteryControllerLazy,
+ DialogLaunchAnimator dialogLaunchAnimator,
+ UiEventLogger uiEventLogger,
+ UserTracker userTracker,
+ SystemUIDialog.Factory systemUIDialogFactory) {
mContext = context;
+ mSystemUIDialogFactory = systemUIDialogFactory;
mNoMan = mContext.getSystemService(NotificationManager.class);
mPowerMan = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mKeyguard = mContext.getSystemService(KeyguardManager.class);
@@ -444,7 +452,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
private void showHighTemperatureDialog() {
if (mHighTempDialog != null) return;
- final SystemUIDialog d = new SystemUIDialog(mContext);
+ final SystemUIDialog d = mSystemUIDialogFactory.create();
d.setIconAttribute(android.R.attr.alertDialogIcon);
d.setTitle(R.string.high_temp_title);
d.setMessage(R.string.high_temp_dialog_message);
@@ -479,7 +487,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
private void showThermalShutdownDialog() {
if (mThermalShutdownDialog != null) return;
- final SystemUIDialog d = new SystemUIDialog(mContext);
+ final SystemUIDialog d = mSystemUIDialogFactory.create();
d.setIconAttribute(android.R.attr.alertDialogIcon);
d.setTitle(R.string.thermal_shutdown_title);
d.setMessage(R.string.thermal_shutdown_dialog_message);
@@ -643,7 +651,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI {
private void showStartSaverConfirmation(Bundle extras) {
if (mSaverConfirmation != null || mUseExtraSaverConfirmation) return;
- final SystemUIDialog d = new SystemUIDialog(mContext);
+ final SystemUIDialog d = mSystemUIDialogFactory.create();
final boolean confirmOnly = extras.getBoolean(BatterySaverUtils.EXTRA_CONFIRM_TEXT_ONLY);
final int batterySaverTriggerMode =
extras.getInt(BatterySaverUtils.EXTRA_POWER_SAVE_MODE_TRIGGER,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
index 6f35cfbfb4a5..b5def41fb3c7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
@@ -148,7 +148,8 @@ class FgsManagerControllerImpl @Inject constructor(
private val deviceConfigProxy: DeviceConfigProxy,
private val dialogLaunchAnimator: DialogLaunchAnimator,
private val broadcastDispatcher: BroadcastDispatcher,
- private val dumpManager: DumpManager
+ private val dumpManager: DumpManager,
+ private val systemUIDialogFactory: SystemUIDialog.Factory,
) : Dumpable, FgsManagerController {
companion object {
@@ -375,7 +376,7 @@ class FgsManagerControllerImpl @Inject constructor(
override fun showDialog(expandable: Expandable?) {
synchronized(lock) {
if (dialog == null) {
- val dialog = SystemUIDialog(context)
+ val dialog = systemUIDialogFactory.create()
dialog.setTitle(R.string.fgs_manager_dialog_title)
dialog.setMessage(R.string.fgs_manager_dialog_message)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
index ccf7afbe7016..c9b002209fa8 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java
@@ -55,6 +55,7 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements
private final DataSaverController mDataSaverController;
private final DialogLaunchAnimator mDialogLaunchAnimator;
+ private final SystemUIDialog.Factory mSystemUIDialogFactory;
@Inject
public DataSaverTile(
@@ -68,12 +69,14 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements
ActivityStarter activityStarter,
QSLogger qsLogger,
DataSaverController dataSaverController,
- DialogLaunchAnimator dialogLaunchAnimator
+ DialogLaunchAnimator dialogLaunchAnimator,
+ SystemUIDialog.Factory systemUIDialogFactory
) {
super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
statusBarStateController, activityStarter, qsLogger);
mDataSaverController = dataSaverController;
mDialogLaunchAnimator = dialogLaunchAnimator;
+ mSystemUIDialogFactory = systemUIDialogFactory;
mDataSaverController.observe(getLifecycle(), this);
}
@@ -98,7 +101,7 @@ public class DataSaverTile extends QSTileImpl<BooleanState> implements
// Show a dialog to confirm first. Dialogs shown by the DialogLaunchAnimator must be created
// and shown on the main thread, so we post it to the UI handler.
mUiHandler.post(() -> {
- SystemUIDialog dialog = new SystemUIDialog(mContext);
+ SystemUIDialog dialog = mSystemUIDialogFactory.create();
dialog.setTitle(com.android.internal.R.string.data_saver_enable_title);
dialog.setMessage(com.android.internal.R.string.data_saver_description);
dialog.setPositiveButton(com.android.internal.R.string.data_saver_enable_button,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt b/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt
index acd7510a6c2a..41cd221186fe 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/user/UserSwitchDialogController.kt
@@ -23,7 +23,6 @@ import android.content.DialogInterface.BUTTON_NEUTRAL
import android.content.Intent
import android.provider.Settings
import android.view.LayoutInflater
-import androidx.annotation.VisibleForTesting
import com.android.internal.jank.InteractionJankMonitor
import com.android.internal.logging.UiEventLogger
import com.android.systemui.res.R
@@ -44,31 +43,15 @@ import javax.inject.Provider
* Controller for [UserDialog].
*/
@SysUISingleton
-class UserSwitchDialogController @VisibleForTesting constructor(
- private val userDetailViewAdapterProvider: Provider<UserDetailView.Adapter>,
- private val activityStarter: ActivityStarter,
- private val falsingManager: FalsingManager,
- private val dialogLaunchAnimator: DialogLaunchAnimator,
- private val uiEventLogger: UiEventLogger,
- private val dialogFactory: (Context) -> SystemUIDialog
+class UserSwitchDialogController @Inject constructor(
+ private val userDetailViewAdapterProvider: Provider<UserDetailView.Adapter>,
+ private val activityStarter: ActivityStarter,
+ private val falsingManager: FalsingManager,
+ private val dialogLaunchAnimator: DialogLaunchAnimator,
+ private val uiEventLogger: UiEventLogger,
+ private val dialogFactory: SystemUIDialog.Factory
) {
- @Inject
- constructor(
- userDetailViewAdapterProvider: Provider<UserDetailView.Adapter>,
- activityStarter: ActivityStarter,
- falsingManager: FalsingManager,
- dialogLaunchAnimator: DialogLaunchAnimator,
- uiEventLogger: UiEventLogger
- ) : this(
- userDetailViewAdapterProvider,
- activityStarter,
- falsingManager,
- dialogLaunchAnimator,
- uiEventLogger,
- { SystemUIDialog(it) }
- )
-
companion object {
private const val INTERACTION_JANK_TAG = "switch_user"
private val USER_SETTINGS_INTENT = Intent(Settings.ACTION_USER_SETTINGS)
@@ -81,7 +64,7 @@ class UserSwitchDialogController @VisibleForTesting constructor(
* [userDetailViewAdapterProvider] and show it as launched from [expandable].
*/
fun showDialog(context: Context, expandable: Expandable) {
- with(dialogFactory(context)) {
+ with(dialogFactory.create()) {
setShowForAllUsers(true)
setCanceledOnTouchOutside(true)
diff --git a/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java b/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java
index f07162377358..9076182def70 100644
--- a/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java
+++ b/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java
@@ -21,8 +21,10 @@ import android.annotation.SuppressLint;
import android.annotation.TestApi;
import android.content.Context;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.hardware.devicestate.DeviceStateManager;
import android.hardware.devicestate.DeviceStateManagerGlobal;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
@@ -72,20 +74,27 @@ public class RearDisplayDialogController implements
private DeviceStateManager.DeviceStateCallback mDeviceStateManagerCallback =
new DeviceStateManagerCallback();
- private final Context mContext;
private final CommandQueue mCommandQueue;
private final Executor mExecutor;
+ private final Resources mResources;
+ private final LayoutInflater mLayoutInflater;
+ private final SystemUIDialog.Factory mSystemUIDialogFactory;
- @VisibleForTesting
- SystemUIDialog mRearDisplayEducationDialog;
+ private SystemUIDialog mRearDisplayEducationDialog;
@Nullable LinearLayout mDialogViewContainer;
@Inject
- public RearDisplayDialogController(Context context, CommandQueue commandQueue,
- @Main Executor executor) {
- mContext = context;
+ public RearDisplayDialogController(
+ CommandQueue commandQueue,
+ @Main Executor executor,
+ @Main Resources resources,
+ LayoutInflater layoutInflater,
+ SystemUIDialog.Factory systemUIDialogFactory) {
mCommandQueue = commandQueue;
mExecutor = executor;
+ mResources = resources;
+ mLayoutInflater = layoutInflater;
+ mSystemUIDialogFactory = systemUIDialogFactory;
}
@Override
@@ -104,8 +113,7 @@ public class RearDisplayDialogController implements
if (mRearDisplayEducationDialog != null && mRearDisplayEducationDialog.isShowing()
&& mDialogViewContainer != null) {
// Refresh the dialog view when configuration is changed.
- Context dialogContext = mRearDisplayEducationDialog.getContext();
- View dialogView = createDialogView(dialogContext);
+ View dialogView = createDialogView(mRearDisplayEducationDialog.getContext());
mDialogViewContainer.removeAllViews();
mDialogViewContainer.addView(dialogView);
}
@@ -114,9 +122,7 @@ public class RearDisplayDialogController implements
private void createAndShowDialog() {
mServiceNotified = false;
Context dialogContext = mRearDisplayEducationDialog.getContext();
-
View dialogView = createDialogView(dialogContext);
-
mDialogViewContainer = new LinearLayout(dialogContext);
mDialogViewContainer.setLayoutParams(
new LinearLayout.LayoutParams(
@@ -133,11 +139,11 @@ public class RearDisplayDialogController implements
private View createDialogView(Context context) {
View dialogView;
+ LayoutInflater inflater = mLayoutInflater.cloneInContext(context);
if (mStartedFolded) {
- dialogView = View.inflate(context,
- R.layout.activity_rear_display_education, null);
+ dialogView = inflater.inflate(R.layout.activity_rear_display_education, null);
} else {
- dialogView = View.inflate(context,
+ dialogView = inflater.inflate(
R.layout.activity_rear_display_education_opened, null);
}
LottieAnimationView animationView = dialogView.findViewById(
@@ -172,9 +178,9 @@ public class RearDisplayDialogController implements
* Ensures we're not using old values from when the dialog may have been shown previously.
*/
private void initializeValues(int startingBaseState) {
- mRearDisplayEducationDialog = new SystemUIDialog(mContext);
+ mRearDisplayEducationDialog = mSystemUIDialogFactory.create();
if (mFoldedStates == null) {
- mFoldedStates = mContext.getResources().getIntArray(
+ mFoldedStates = mResources.getIntArray(
com.android.internal.R.array.config_foldedDeviceStates);
}
mStartedFolded = isFoldedState(startingBaseState);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
index af6da3fb6e51..3394eacddbd8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SystemUIDialog.java
@@ -149,6 +149,14 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
return create(new DialogDelegate<>(){}, mContext);
}
+ /** Creates a new instance of {@link SystemUIDialog} with no customized behavior.
+ *
+ * When you just need a dialog created with a specific {@link Context}, call this.
+ */
+ public SystemUIDialog create(Context context) {
+ return create(new DialogDelegate<>(){}, context);
+ }
+
/**
* Creates a new instance of {@link SystemUIDialog} with {@code delegate} as the {@link
* Delegate}.
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java
index 8087a8755a6e..550a65c01bfc 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerServiceImpl.java
@@ -48,6 +48,8 @@ import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.util.leak.LeakDetector;
+import dagger.Lazy;
+
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -87,6 +89,7 @@ public class TunerServiceImpl extends TunerService {
// Set of all tunables, used for leak detection.
private final HashSet<Tunable> mTunables = LeakDetector.ENABLED ? new HashSet<>() : null;
private final Context mContext;
+ private final Lazy<SystemUIDialog.Factory> mSystemUIDialogFactoryLazy;
private final LeakDetector mLeakDetector;
private final DemoModeController mDemoModeController;
@@ -104,9 +107,11 @@ public class TunerServiceImpl extends TunerService {
@Main Handler mainHandler,
LeakDetector leakDetector,
DemoModeController demoModeController,
- UserTracker userTracker) {
+ UserTracker userTracker,
+ Lazy<SystemUIDialog.Factory> systemUIDialogFactoryLazy) {
super(context);
mContext = context;
+ mSystemUIDialogFactoryLazy = systemUIDialogFactoryLazy;
mContentResolver = mContext.getContentResolver();
mLeakDetector = leakDetector;
mDemoModeController = demoModeController;
@@ -301,7 +306,7 @@ public class TunerServiceImpl extends TunerService {
@Override
public void showResetRequest(Runnable onDisabled) {
- SystemUIDialog dialog = new SystemUIDialog(mContext);
+ SystemUIDialog dialog = mSystemUIDialogFactoryLazy.get().create();
dialog.setShowForAllUsers(true);
dialog.setMessage(R.string.remove_from_settings_prompt);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, mContext.getString(R.string.cancel),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogDelegateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogDelegateTest.kt
index bfb5485e47b7..c52571188256 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogDelegateTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogDelegateTest.kt
@@ -120,7 +120,7 @@ class FontScalingDialogDelegateTest : SysuiTestCase() {
fontScalingDialogDelegate
)
- whenever(dialogFactory.create(any())).thenReturn(dialog)
+ whenever(dialogFactory.create(any(), any())).thenReturn(dialog)
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogDelegateTest.java b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogDelegateTest.java
index 4022d4388ab1..3ff43c6a3787 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogDelegateTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/BroadcastDialogDelegateTest.java
@@ -28,8 +28,6 @@ import static org.mockito.Mockito.when;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
-import android.view.LayoutInflater;
-import android.view.View;
import android.widget.Button;
import android.widget.TextView;
@@ -95,7 +93,7 @@ public class BroadcastDialogDelegateTest extends SysuiTestCase {
mFeatureFlags.set(Flags.WM_ENABLE_PREDICTIVE_BACK_QS_DIALOG_ANIM, true);
when(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState);
- when(mSystemUIDialogFactory.create(any())).thenReturn(mDialog);
+ when(mSystemUIDialogFactory.create(any(), any())).thenReturn(mDialog);
mBroadcastDialogDelegate = new BroadcastDialogDelegate(
mContext,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/contrast/ContrastDialogDelegateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/contrast/ContrastDialogDelegateTest.kt
index 65f68f9df3e1..35ac2ae4ed44 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/contrast/ContrastDialogDelegateTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/contrast/ContrastDialogDelegateTest.kt
@@ -31,6 +31,7 @@ import com.android.systemui.flags.FakeFeatureFlags
import com.android.systemui.flags.FeatureFlags
import com.android.systemui.model.SysUiState
import com.android.systemui.settings.UserTracker
+import com.android.systemui.statusbar.phone.DialogDelegate
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
@@ -69,7 +70,8 @@ class ContrastDialogDelegateTest : SysuiTestCase() {
mDependency.injectTestDependency(SysUiState::class.java, sysuiState)
mDependency.injectMockDependency(DialogLaunchAnimator::class.java)
whenever(sysuiState.setFlag(any(), any())).thenReturn(sysuiState)
- whenever(sysuiDialogFactory.create(any())).thenReturn(sysuiDialog)
+ whenever(sysuiDialogFactory.create(any(SystemUIDialog.Delegate::class.java)))
+ .thenReturn(sysuiDialog)
whenever(sysuiDialog.layoutInflater).thenReturn(LayoutInflater.from(mContext))
whenever(mockUserTracker.userId).thenReturn(context.userId)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/PanelConfirmationDialogFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/PanelConfirmationDialogFactoryTest.kt
index 4e8f86615522..7f0ea9a7a6d0 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/PanelConfirmationDialogFactoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/PanelConfirmationDialogFactoryTest.kt
@@ -17,34 +17,48 @@
package com.android.systemui.controls.management
+import android.content.Context
import android.content.DialogInterface
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
-import com.android.systemui.res.R
import com.android.systemui.SysuiTestCase
+import com.android.systemui.res.R
import com.android.systemui.statusbar.phone.SystemUIDialog
+import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.capture
-import com.android.systemui.util.mockito.eq
-import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers.eq
+import org.mockito.Mock
import org.mockito.Mockito.verify
-import org.mockito.Mockito.`when`
+import org.mockito.MockitoAnnotations
+import org.mockito.Mockito.`when` as whenever
@SmallTest
@RunWith(AndroidTestingRunner::class)
class PanelConfirmationDialogFactoryTest : SysuiTestCase() {
+ @Mock private lateinit var mockDialog : SystemUIDialog
+ @Mock private lateinit var mockDialogFactory : SystemUIDialog.Factory
+ private lateinit var factory : PanelConfirmationDialogFactory
+ @Before
+ fun setup() {
+ MockitoAnnotations.initMocks(this)
+
+ whenever(mockDialogFactory.create(any(Context::class.java))).thenReturn(mockDialog)
+ whenever(mockDialog.context).thenReturn(mContext)
+ factory = PanelConfirmationDialogFactory(mockDialogFactory)
+ }
+
@Test
fun testDialogHasCorrectInfo() {
- val mockDialog: SystemUIDialog = mock() { `when`(context).thenReturn(mContext) }
- val factory = PanelConfirmationDialogFactory { mockDialog }
val appName = "appName"
- factory.createConfirmationDialog(context, appName) {}
+ factory.createConfirmationDialog(mContext, appName) {}
verify(mockDialog).setCanceledOnTouchOutside(true)
verify(mockDialog)
@@ -55,12 +69,9 @@ class PanelConfirmationDialogFactoryTest : SysuiTestCase() {
@Test
fun testDialogPositiveButton() {
- val mockDialog: SystemUIDialog = mock() { `when`(context).thenReturn(mContext) }
- val factory = PanelConfirmationDialogFactory { mockDialog }
-
var response: Boolean? = null
- factory.createConfirmationDialog(context, "") { response = it }
+ factory.createConfirmationDialog(mContext,"") { response = it }
val captor: ArgumentCaptor<DialogInterface.OnClickListener> = argumentCaptor()
verify(mockDialog).setPositiveButton(eq(R.string.controls_dialog_ok), capture(captor))
@@ -72,12 +83,9 @@ class PanelConfirmationDialogFactoryTest : SysuiTestCase() {
@Test
fun testDialogNeutralButton() {
- val mockDialog: SystemUIDialog = mock() { `when`(context).thenReturn(mContext) }
- val factory = PanelConfirmationDialogFactory { mockDialog }
-
var response: Boolean? = null
- factory.createConfirmationDialog(context, "") { response = it }
+ factory.createConfirmationDialog(mContext, "") { response = it }
val captor: ArgumentCaptor<DialogInterface.OnClickListener> = argumentCaptor()
verify(mockDialog).setNeutralButton(eq(R.string.cancel), capture(captor))
@@ -89,12 +97,9 @@ class PanelConfirmationDialogFactoryTest : SysuiTestCase() {
@Test
fun testDialogCancel() {
- val mockDialog: SystemUIDialog = mock() { `when`(context).thenReturn(mContext) }
- val factory = PanelConfirmationDialogFactory { mockDialog }
-
var response: Boolean? = null
- factory.createConfirmationDialog(context, "") { response = it }
+ factory.createConfirmationDialog(mContext, "") { response = it }
val captor: ArgumentCaptor<DialogInterface.OnCancelListener> = argumentCaptor()
verify(mockDialog).setOnCancelListener(capture(captor))
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsDialogsFactoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsDialogsFactoryTest.kt
index 8eebceebe874..38c6a0e236ed 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsDialogsFactoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsDialogsFactoryTest.kt
@@ -17,17 +17,23 @@
package com.android.systemui.controls.ui
+import android.content.Context
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
import com.android.systemui.res.R
import com.android.systemui.SysuiTestCase
+import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.util.FakeSystemUIDialogController
+import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.any
import org.mockito.Mockito.eq
import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
@SmallTest
@RunWith(AndroidTestingRunner::class)
@@ -37,18 +43,24 @@ class ControlsDialogsFactoryTest : SysuiTestCase() {
const val APP_NAME = "Test App"
}
- private val fakeDialogController = FakeSystemUIDialogController()
+ @Mock
+ private lateinit var mockDialogFactory : SystemUIDialog.Factory
+
+ private val fakeDialogController = FakeSystemUIDialogController(mContext)
private lateinit var underTest: ControlsDialogsFactory
@Before
fun setup() {
- underTest = ControlsDialogsFactory { fakeDialogController.dialog }
+ MockitoAnnotations.initMocks(this)
+ whenever(mockDialogFactory.create(any(Context::class.java)))
+ .thenReturn(fakeDialogController.dialog)
+ underTest = ControlsDialogsFactory(mockDialogFactory)
}
@Test
fun testCreatesRemoveAppDialog() {
- val dialog = underTest.createRemoveAppDialog(context, APP_NAME) {}
+ val dialog = underTest.createRemoveAppDialog(mContext, APP_NAME) {}
verify(dialog)
.setTitle(
@@ -60,7 +72,7 @@ class ControlsDialogsFactoryTest : SysuiTestCase() {
@Test
fun testPositiveClickRemoveAppDialogWorks() {
var dialogResult: Boolean? = null
- underTest.createRemoveAppDialog(context, APP_NAME) { dialogResult = it }
+ underTest.createRemoveAppDialog(mContext, APP_NAME) { dialogResult = it }
fakeDialogController.clickPositive()
@@ -70,7 +82,7 @@ class ControlsDialogsFactoryTest : SysuiTestCase() {
@Test
fun testNeutralClickRemoveAppDialogWorks() {
var dialogResult: Boolean? = null
- underTest.createRemoveAppDialog(context, APP_NAME) { dialogResult = it }
+ underTest.createRemoveAppDialog(mContext, APP_NAME) { dialogResult = it }
fakeDialogController.clickNeutral()
@@ -80,7 +92,7 @@ class ControlsDialogsFactoryTest : SysuiTestCase() {
@Test
fun testCancelRemoveAppDialogWorks() {
var dialogResult: Boolean? = null
- underTest.createRemoveAppDialog(context, APP_NAME) { dialogResult = it }
+ underTest.createRemoveAppDialog(mContext, APP_NAME) { dialogResult = it }
fakeDialogController.cancel()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt
index 11bd9cb240a5..36ae0c740c48 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlsUiControllerImplTest.kt
@@ -51,6 +51,7 @@ import com.android.systemui.flags.FeatureFlags
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
import com.android.systemui.settings.UserTracker
+import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.FakeSystemUIDialogController
import com.android.systemui.util.concurrency.FakeExecutor
@@ -97,9 +98,10 @@ class ControlsUiControllerImplTest : SysuiTestCase() {
@Mock lateinit var authorizedPanelsRepository: AuthorizedPanelsRepository
@Mock lateinit var featureFlags: FeatureFlags
@Mock lateinit var packageManager: PackageManager
+ @Mock lateinit var systemUIDialogFactory: SystemUIDialog.Factory
private val preferredPanelRepository = FakeSelectedComponentRepository()
- private val fakeDialogController = FakeSystemUIDialogController()
+ private lateinit var fakeDialogController: FakeSystemUIDialogController
private val uiExecutor = FakeExecutor(FakeSystemClock())
private val bgExecutor = FakeExecutor(FakeSystemClock())
@@ -114,6 +116,9 @@ class ControlsUiControllerImplTest : SysuiTestCase() {
fun setup() {
MockitoAnnotations.initMocks(this)
+ fakeDialogController = FakeSystemUIDialogController(mContext)
+ whenever(systemUIDialogFactory.create(any(Context::class.java)))
+ .thenReturn(fakeDialogController.dialog)
controlsSettingsRepository = FakeControlsSettingsRepository()
// This way, it won't be cloned every time `LayoutInflater.fromContext` is called, but we
@@ -146,10 +151,7 @@ class ControlsUiControllerImplTest : SysuiTestCase() {
authorizedPanelsRepository,
preferredPanelRepository,
featureFlags,
- ControlsDialogsFactory {
- isRemoveAppDialogCreated = true
- fakeDialogController.dialog
- },
+ ControlsDialogsFactory(systemUIDialogFactory),
dumpManager,
)
`when`(userTracker.userId).thenReturn(0)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
index 6248bb1009dc..1a303b08b396 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java
@@ -55,6 +55,7 @@ import com.android.systemui.animation.DialogLaunchAnimator;
import com.android.systemui.broadcast.BroadcastSender;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.settings.UserTracker;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.util.NotificationChannels;
import com.android.systemui.util.settings.FakeGlobalSettings;
@@ -77,7 +78,6 @@ public class PowerNotificationWarningsTest extends SysuiTestCase {
public static final String FORMATTED_45M = "0h 45m";
public static final String FORMATTED_HOUR = "1h 0m";
private final NotificationManager mMockNotificationManager = mock(NotificationManager.class);
- private final GlobalSettings mGlobalSettings = new FakeGlobalSettings();
private PowerNotificationWarnings mPowerNotificationWarnings;
@Mock
@@ -90,6 +90,10 @@ public class PowerNotificationWarningsTest extends SysuiTestCase {
private UserTracker mUserTracker;
@Mock
private View mView;
+ @Mock
+ private SystemUIDialog.Factory mSystemUIDialogFactory;
+ @Mock
+ private SystemUIDialog mSystemUIDialog;
private BroadcastReceiver mReceiver;
@@ -113,9 +117,16 @@ public class PowerNotificationWarningsTest extends SysuiTestCase {
when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser());
when(mUserTracker.getUserHandle()).thenReturn(
UserHandle.of(ActivityManager.getCurrentUser()));
- mPowerNotificationWarnings = new PowerNotificationWarnings(wrapper, starter,
- broadcastSender, () -> mBatteryController, mDialogLaunchAnimator, mUiEventLogger,
- mGlobalSettings, mUserTracker);
+ when(mSystemUIDialogFactory.create()).thenReturn(mSystemUIDialog);
+ mPowerNotificationWarnings = new PowerNotificationWarnings(
+ wrapper,
+ starter,
+ broadcastSender,
+ () -> mBatteryController,
+ mDialogLaunchAnimator,
+ mUiEventLogger,
+ mUserTracker,
+ mSystemUIDialogFactory);
BatteryStateSnapshot snapshot = new BatteryStateSnapshot(100, false, false, 1,
BatteryManager.BATTERY_HEALTH_GOOD, 5, 15);
mPowerNotificationWarnings.updateSnapshot(snapshot);
@@ -251,7 +262,7 @@ public class PowerNotificationWarningsTest extends SysuiTestCase {
verify(mDialogLaunchAnimator, never()).showFromView(any(), any());
- assertThat(mPowerNotificationWarnings.getSaverConfirmationDialog().isShowing()).isTrue();
+ verify(mPowerNotificationWarnings.getSaverConfirmationDialog()).show();
mPowerNotificationWarnings.getSaverConfirmationDialog().dismiss();
}
@@ -266,7 +277,7 @@ public class PowerNotificationWarningsTest extends SysuiTestCase {
verify(mDialogLaunchAnimator, never()).showFromView(any(), any());
- assertThat(mPowerNotificationWarnings.getSaverConfirmationDialog().isShowing()).isTrue();
+ verify(mPowerNotificationWarnings.getSaverConfirmationDialog()).show();
mPowerNotificationWarnings.getSaverConfirmationDialog().dismiss();
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/FgsManagerControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/FgsManagerControllerTest.java
index f5a3becc7017..698868d67071 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/FgsManagerControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/FgsManagerControllerTest.java
@@ -27,6 +27,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.app.IActivityManager;
import android.app.IForegroundServiceObserver;
@@ -53,6 +54,7 @@ import com.android.systemui.animation.DialogLaunchAnimator;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.settings.UserTracker;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.util.DeviceConfigProxyFake;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
@@ -95,6 +97,10 @@ public class FgsManagerControllerTest extends SysuiTestCase {
BroadcastDispatcher mBroadcastDispatcher;
@Mock
DumpManager mDumpManager;
+ @Mock
+ SystemUIDialog.Factory mSystemUIDialogFactory;
+ @Mock
+ SystemUIDialog mSystemUIDialog;
private FgsManagerController mFmc;
@@ -114,6 +120,7 @@ public class FgsManagerControllerTest extends SysuiTestCase {
mSystemClock = new FakeSystemClock();
mMainExecutor = new FakeExecutor(mSystemClock);
mBackgroundExecutor = new FakeExecutor(mSystemClock);
+ when(mSystemUIDialogFactory.create()).thenReturn(mSystemUIDialog);
mUserProfiles = new ArrayList<>();
Mockito.doReturn(mUserProfiles).when(mUserTracker).getUserProfiles();
@@ -325,7 +332,8 @@ public class FgsManagerControllerTest extends SysuiTestCase {
mDeviceConfigProxyFake,
mDialogLaunchAnimator,
mBroadcastDispatcher,
- mDumpManager
+ mDumpManager,
+ mSystemUIDialogFactory
);
fmc.init();
Assert.assertTrue(fmc.getIncludesUserVisibleJobs());
@@ -351,7 +359,8 @@ public class FgsManagerControllerTest extends SysuiTestCase {
mDeviceConfigProxyFake,
mDialogLaunchAnimator,
mBroadcastDispatcher,
- mDumpManager
+ mDumpManager,
+ mSystemUIDialogFactory
);
fmc.init();
Assert.assertFalse(fmc.getIncludesUserVisibleJobs());
@@ -457,7 +466,8 @@ public class FgsManagerControllerTest extends SysuiTestCase {
mDeviceConfigProxyFake,
mDialogLaunchAnimator,
mBroadcastDispatcher,
- mDumpManager
+ mDumpManager,
+ mSystemUIDialogFactory
);
result.init();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt
index 51e95be3611b..c109a1e95f66 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DataSaverTileTest.kt
@@ -32,7 +32,9 @@ import com.android.systemui.qs.QSHost
import com.android.systemui.qs.QsEventLogger
import com.android.systemui.qs.logging.QSLogger
import com.android.systemui.qs.tileimpl.QSTileImpl
+import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.statusbar.policy.DataSaverController
+import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
@@ -49,8 +51,6 @@ class DataSaverTileTest : SysuiTestCase() {
@Mock private lateinit var mHost: QSHost
@Mock private lateinit var mMetricsLogger: MetricsLogger
- @Mock private lateinit var mStatusBarStateController: StatusBarStateController
- @Mock private lateinit var mActivityStarter: ActivityStarter
@Mock private lateinit var mQsLogger: QSLogger
private val falsingManager = FalsingManagerFake()
@Mock private lateinit var statusBarStateController: StatusBarStateController
@@ -58,6 +58,8 @@ class DataSaverTileTest : SysuiTestCase() {
@Mock private lateinit var dataSaverController: DataSaverController
@Mock private lateinit var dialogLaunchAnimator: DialogLaunchAnimator
@Mock private lateinit var uiEventLogger: QsEventLogger
+ @Mock private lateinit var systemUIDialogFactory: SystemUIDialog.Factory
+ @Mock private lateinit var systemUIDialog: SystemUIDialog
private lateinit var testableLooper: TestableLooper
private lateinit var tile: DataSaverTile
@@ -67,7 +69,8 @@ class DataSaverTileTest : SysuiTestCase() {
MockitoAnnotations.initMocks(this)
testableLooper = TestableLooper.get(this)
- Mockito.`when`(mHost.context).thenReturn(mContext)
+ whenever(mHost.context).thenReturn(mContext)
+ whenever(systemUIDialogFactory.create()).thenReturn(systemUIDialog)
tile =
DataSaverTile(
@@ -81,7 +84,8 @@ class DataSaverTileTest : SysuiTestCase() {
activityStarter,
mQsLogger,
dataSaverController,
- dialogLaunchAnimator
+ dialogLaunchAnimator,
+ systemUIDialogFactory
)
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt
index 0a34810f4d3f..945490f1983d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/user/UserSwitchDialogControllerTest.kt
@@ -36,6 +36,7 @@ import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.capture
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.mock
+import com.android.systemui.util.mockito.whenever
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -56,6 +57,8 @@ import org.mockito.MockitoAnnotations
class UserSwitchDialogControllerTest : SysuiTestCase() {
@Mock
+ private lateinit var dialogFactory: SystemUIDialog.Factory
+ @Mock
private lateinit var dialog: SystemUIDialog
@Mock
private lateinit var falsingManager: FalsingManager
@@ -80,7 +83,8 @@ class UserSwitchDialogControllerTest : SysuiTestCase() {
fun setUp() {
MockitoAnnotations.initMocks(this)
- `when`(dialog.context).thenReturn(mContext)
+ whenever(dialog.context).thenReturn(mContext)
+ whenever(dialogFactory.create()).thenReturn(dialog)
controller = UserSwitchDialogController(
{ userDetailViewAdapter },
@@ -88,7 +92,7 @@ class UserSwitchDialogControllerTest : SysuiTestCase() {
falsingManager,
dialogLaunchAnimator,
uiEventLogger,
- { dialog }
+ dialogFactory
)
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java
index 273ce85f89f5..35bf7753358e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java
@@ -18,25 +18,42 @@ package com.android.systemui.reardisplay;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotSame;
-import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.hardware.devicestate.DeviceStateManager;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import android.view.LayoutInflater;
+import android.view.View;
import android.widget.TextView;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.res.R;
+import com.android.systemui.flags.FakeFeatureFlags;
+import com.android.systemui.flags.Flags;
+import com.android.systemui.model.SysUiState;
+import com.android.systemui.res.R;
import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@@ -45,24 +62,49 @@ public class RearDisplayDialogControllerTest extends SysuiTestCase {
@Mock
private CommandQueue mCommandQueue;
+ @Mock
+ private SystemUIDialog.Factory mSystemUIDialogFactory;
+ @Mock
+ private SystemUIDialog mSystemUIDialog;
+ private final FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags();
+ @Mock
+ private SysUiState mSysUiState;
+ @Mock
+ private Resources mResources;
- private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
+ LayoutInflater mLayoutInflater = LayoutInflater.from(mContext);
+ private final FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
private static final int CLOSED_BASE_STATE = 0;
private static final int OPEN_BASE_STATE = 1;
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+
+ mFeatureFlags.set(Flags.WM_ENABLE_PREDICTIVE_BACK_QS_DIALOG_ANIM, true);
+ when(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState);
+ when(mSystemUIDialogFactory.create()).thenReturn(mSystemUIDialog);
+ when(mSystemUIDialog.getContext()).thenReturn(mContext);
+ }
@Test
public void testClosedDialogIsShown() {
- RearDisplayDialogController controller = new RearDisplayDialogController(mContext,
- mCommandQueue, mFakeExecutor);
+ RearDisplayDialogController controller = new RearDisplayDialogController(
+ mCommandQueue,
+ mFakeExecutor,
+ mResources,
+ mLayoutInflater,
+ mSystemUIDialogFactory);
controller.setDeviceStateManagerCallback(new TestDeviceStateManagerCallback());
controller.setFoldedStates(new int[]{0});
controller.setAnimationRepeatCount(0);
controller.showRearDisplayDialog(CLOSED_BASE_STATE);
- assertTrue(controller.mRearDisplayEducationDialog.isShowing());
- TextView deviceClosedTitleTextView = controller.mRearDisplayEducationDialog.findViewById(
+ verify(mSystemUIDialog).show();
+
+ View container = getDialogViewContainer();
+ TextView deviceClosedTitleTextView = container.findViewById(
R.id.rear_display_title_text_view);
assertEquals(deviceClosedTitleTextView.getText().toString(),
getContext().getResources().getString(
@@ -71,20 +113,28 @@ public class RearDisplayDialogControllerTest extends SysuiTestCase {
@Test
public void testClosedDialogIsRefreshedOnConfigurationChange() {
- RearDisplayDialogController controller = new RearDisplayDialogController(mContext,
- mCommandQueue, mFakeExecutor);
+ RearDisplayDialogController controller = new RearDisplayDialogController(
+ mCommandQueue,
+ mFakeExecutor,
+ mResources,
+ mLayoutInflater,
+ mSystemUIDialogFactory);
controller.setDeviceStateManagerCallback(new TestDeviceStateManagerCallback());
controller.setFoldedStates(new int[]{0});
controller.setAnimationRepeatCount(0);
controller.showRearDisplayDialog(CLOSED_BASE_STATE);
- assertTrue(controller.mRearDisplayEducationDialog.isShowing());
- TextView deviceClosedTitleTextView = controller.mRearDisplayEducationDialog.findViewById(
+ verify(mSystemUIDialog).show();
+ View container = getDialogViewContainer();
+ TextView deviceClosedTitleTextView = container.findViewById(
R.id.rear_display_title_text_view);
+ reset(mSystemUIDialog);
+ when(mSystemUIDialog.isShowing()).thenReturn(true);
+ when(mSystemUIDialog.getContext()).thenReturn(mContext);
+
controller.onConfigChanged(new Configuration());
- assertTrue(controller.mRearDisplayEducationDialog.isShowing());
- TextView deviceClosedTitleTextView2 = controller.mRearDisplayEducationDialog.findViewById(
+ TextView deviceClosedTitleTextView2 = container.findViewById(
R.id.rear_display_title_text_view);
assertNotSame(deviceClosedTitleTextView, deviceClosedTitleTextView2);
@@ -92,22 +142,33 @@ public class RearDisplayDialogControllerTest extends SysuiTestCase {
@Test
public void testOpenDialogIsShown() {
- RearDisplayDialogController controller = new RearDisplayDialogController(mContext,
- mCommandQueue, mFakeExecutor);
+ RearDisplayDialogController controller = new RearDisplayDialogController(
+ mCommandQueue,
+ mFakeExecutor,
+ mResources,
+ mLayoutInflater,
+ mSystemUIDialogFactory);
controller.setDeviceStateManagerCallback(new TestDeviceStateManagerCallback());
controller.setFoldedStates(new int[]{0});
controller.setAnimationRepeatCount(0);
controller.showRearDisplayDialog(OPEN_BASE_STATE);
- assertTrue(controller.mRearDisplayEducationDialog.isShowing());
- TextView deviceClosedTitleTextView = controller.mRearDisplayEducationDialog.findViewById(
+ verify(mSystemUIDialog).show();
+ View container = getDialogViewContainer();
+ TextView deviceClosedTitleTextView = container.findViewById(
R.id.rear_display_title_text_view);
assertEquals(deviceClosedTitleTextView.getText().toString(),
getContext().getResources().getString(
R.string.rear_display_unfolded_bottom_sheet_title));
}
+ private View getDialogViewContainer() {
+ ArgumentCaptor<View> viewCaptor = ArgumentCaptor.forClass(View.class);
+ verify(mSystemUIDialog).setView(viewCaptor.capture());
+
+ return viewCaptor.getValue();
+ }
/**
* Empty device state manager callbacks, so we can verify that the correct
* dialogs are being created regardless of device state of the test device.
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/util/FakeSystemUIDialogController.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/util/FakeSystemUIDialogController.kt
index 0c9ce0f145f1..697b5087a865 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/util/FakeSystemUIDialogController.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/util/FakeSystemUIDialogController.kt
@@ -17,6 +17,7 @@
package com.android.systemui.util
+import android.content.Context
import android.content.DialogInterface
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.util.mockito.any
@@ -27,13 +28,15 @@ import org.mockito.Mockito.doAnswer
import org.mockito.Mockito.verify
import org.mockito.stubbing.Stubber
-class FakeSystemUIDialogController {
+class FakeSystemUIDialogController(context: Context) {
val dialog: SystemUIDialog = mock()
+
private val clickListeners: MutableMap<Int, DialogInterface.OnClickListener> = mutableMapOf()
init {
+ whenever(dialog.context).thenReturn(context)
saveListener(DialogInterface.BUTTON_POSITIVE)
.whenever(dialog)
.setPositiveButton(any(), any())