Add explicit SystemUIDialog dependencies as parameters

This CL adds a new constructor to SystemUIDialog so that its deps can be
passed explicitly, instead of implicitly like it is currently done using
Dependency.get(). This is the first step to removing those calls to
get() and be able to create a SystemUIDialog with mocked dependencies in
(screenshot) tests.

Bug: 219008720
Test: Manual
Change-Id: Ia34072613c82e47b8fc59150703711f6a3c8c8a0
This commit is contained in:
Jordan Demeulenaere
2022-06-23 17:19:49 +02:00
parent d44db7003a
commit 704785ac5c

View File

@@ -93,6 +93,17 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
}
public SystemUIDialog(Context context, int theme, boolean dismissOnDeviceLock) {
// TODO(b/219008720): Remove those calls to Dependency.get by introducing a
// SystemUIDialogFactory and make all other dialogs create a SystemUIDialog to which we set
// the content and attach listeners.
this(context, theme, dismissOnDeviceLock, Dependency.get(SystemUIDialogManager.class),
Dependency.get(SysUiState.class), Dependency.get(BroadcastDispatcher.class),
Dependency.get(DialogLaunchAnimator.class));
}
public SystemUIDialog(Context context, int theme, boolean dismissOnDeviceLock,
SystemUIDialogManager dialogManager, SysUiState sysUiState,
BroadcastDispatcher broadcastDispatcher, DialogLaunchAnimator dialogLaunchAnimator) {
super(context, theme);
mContext = context;
@@ -101,13 +112,10 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
attrs.setTitle(getClass().getSimpleName());
getWindow().setAttributes(attrs);
mDismissReceiver = dismissOnDeviceLock ? new DismissReceiver(this) : null;
// TODO(b/219008720): Remove those calls to Dependency.get by introducing a
// SystemUIDialogFactory and make all other dialogs create a SystemUIDialog to which we set
// the content and attach listeners.
mDialogManager = Dependency.get(SystemUIDialogManager.class);
mSysUiState = Dependency.get(SysUiState.class);
mDismissReceiver = dismissOnDeviceLock ? new DismissReceiver(this, broadcastDispatcher,
dialogLaunchAnimator) : null;
mDialogManager = dialogManager;
mSysUiState = sysUiState;
}
@Override
@@ -326,7 +334,10 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
* @param dismissAction An action to run when the dialog is dismissed.
*/
public static void registerDismissListener(Dialog dialog, @Nullable Runnable dismissAction) {
DismissReceiver dismissReceiver = new DismissReceiver(dialog);
// TODO(b/219008720): Remove those calls to Dependency.get.
DismissReceiver dismissReceiver = new DismissReceiver(dialog,
Dependency.get(BroadcastDispatcher.class),
Dependency.get(DialogLaunchAnimator.class));
dialog.setOnDismissListener(d -> {
dismissReceiver.unregister();
if (dismissAction != null) dismissAction.run();
@@ -408,11 +419,11 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
private final BroadcastDispatcher mBroadcastDispatcher;
private final DialogLaunchAnimator mDialogLaunchAnimator;
DismissReceiver(Dialog dialog) {
DismissReceiver(Dialog dialog, BroadcastDispatcher broadcastDispatcher,
DialogLaunchAnimator dialogLaunchAnimator) {
mDialog = dialog;
// TODO(b/219008720): Remove those calls to Dependency.get.
mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
mDialogLaunchAnimator = Dependency.get(DialogLaunchAnimator.class);
mBroadcastDispatcher = broadcastDispatcher;
mDialogLaunchAnimator = dialogLaunchAnimator;
}
void register() {