DO NOT MERGE Hide UDFPS affordance when some dialogs show am: e12375e4ea
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16432597 Change-Id: Iac14c9bf3adbba9edfaae31ecbf9c08d263e9cdc
This commit is contained in:
@@ -23,6 +23,7 @@ import android.graphics.RectF;
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.util.ViewController;
|
||||
@@ -44,6 +45,7 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
|
||||
extends ViewController<T> implements Dumpable {
|
||||
@NonNull final StatusBarStateController mStatusBarStateController;
|
||||
@NonNull final PanelExpansionStateManager mPanelExpansionStateManager;
|
||||
@NonNull final SystemUIDialogManager mDialogManager;
|
||||
@NonNull final DumpManager mDumpManger;
|
||||
|
||||
boolean mNotificationShadeVisible;
|
||||
@@ -52,10 +54,12 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
|
||||
T view,
|
||||
@NonNull StatusBarStateController statusBarStateController,
|
||||
@NonNull PanelExpansionStateManager panelExpansionStateManager,
|
||||
@NonNull SystemUIDialogManager dialogManager,
|
||||
@NonNull DumpManager dumpManager) {
|
||||
super(view);
|
||||
mStatusBarStateController = statusBarStateController;
|
||||
mPanelExpansionStateManager = panelExpansionStateManager;
|
||||
mDialogManager = dialogManager;
|
||||
mDumpManger = dumpManager;
|
||||
}
|
||||
|
||||
@@ -64,12 +68,14 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
|
||||
@Override
|
||||
protected void onViewAttached() {
|
||||
mPanelExpansionStateManager.addExpansionListener(mPanelExpansionListener);
|
||||
mDialogManager.registerListener(mDialogListener);
|
||||
mDumpManger.registerDumpable(getDumpTag(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onViewDetached() {
|
||||
mPanelExpansionStateManager.removeExpansionListener(mPanelExpansionListener);
|
||||
mDialogManager.registerListener(mDialogListener);
|
||||
mDumpManger.unregisterDumpable(getDumpTag());
|
||||
}
|
||||
|
||||
@@ -95,7 +101,8 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
|
||||
* authentication.
|
||||
*/
|
||||
boolean shouldPauseAuth() {
|
||||
return mNotificationShadeVisible;
|
||||
return mNotificationShadeVisible
|
||||
|| mDialogManager.shouldHideAffordance();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -189,4 +196,7 @@ abstract class UdfpsAnimationViewController<T extends UdfpsAnimationView>
|
||||
updatePauseAuth();
|
||||
}
|
||||
};
|
||||
|
||||
private final SystemUIDialogManager.Listener mDialogListener =
|
||||
(shouldHide) -> updatePauseAuth();
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
|
||||
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
|
||||
/**
|
||||
@@ -30,8 +31,10 @@ class UdfpsBpViewController extends UdfpsAnimationViewController<UdfpsBpView> {
|
||||
@NonNull UdfpsBpView view,
|
||||
@NonNull StatusBarStateController statusBarStateController,
|
||||
@NonNull PanelExpansionStateManager panelExpansionStateManager,
|
||||
@NonNull SystemUIDialogManager systemUIDialogManager,
|
||||
@NonNull DumpManager dumpManager) {
|
||||
super(view, statusBarStateController, panelExpansionStateManager, dumpManager);
|
||||
super(view, statusBarStateController, panelExpansionStateManager,
|
||||
systemUIDialogManager, dumpManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -70,6 +70,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.LockscreenShadeTransitionController;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
@@ -118,6 +119,7 @@ public class UdfpsController implements DozeReceiver {
|
||||
@NonNull private final KeyguardStateController mKeyguardStateController;
|
||||
@NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager;
|
||||
@NonNull private final DumpManager mDumpManager;
|
||||
@NonNull private final SystemUIDialogManager mDialogManager;
|
||||
@NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
@Nullable private final Vibrator mVibrator;
|
||||
@NonNull private final FalsingManager mFalsingManager;
|
||||
@@ -552,7 +554,8 @@ public class UdfpsController implements DozeReceiver {
|
||||
@Main Handler mainHandler,
|
||||
@NonNull ConfigurationController configurationController,
|
||||
@NonNull SystemClock systemClock,
|
||||
@NonNull UnlockedScreenOffAnimationController unlockedScreenOffAnimationController) {
|
||||
@NonNull UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
|
||||
@NonNull SystemUIDialogManager dialogManager) {
|
||||
mContext = context;
|
||||
mExecution = execution;
|
||||
mVibrator = vibrator;
|
||||
@@ -567,6 +570,7 @@ public class UdfpsController implements DozeReceiver {
|
||||
mKeyguardStateController = keyguardStateController;
|
||||
mKeyguardViewManager = statusBarKeyguardViewManager;
|
||||
mDumpManager = dumpManager;
|
||||
mDialogManager = dialogManager;
|
||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||
mFalsingManager = falsingManager;
|
||||
mPowerManager = powerManager;
|
||||
@@ -815,6 +819,7 @@ public class UdfpsController implements DozeReceiver {
|
||||
mServerRequest.mEnrollHelper,
|
||||
mStatusBarStateController,
|
||||
mPanelExpansionStateManager,
|
||||
mDialogManager,
|
||||
mDumpManager
|
||||
);
|
||||
case BiometricOverlayConstants.REASON_AUTH_KEYGUARD:
|
||||
@@ -833,6 +838,7 @@ public class UdfpsController implements DozeReceiver {
|
||||
mSystemClock,
|
||||
mKeyguardStateController,
|
||||
mUnlockedScreenOffAnimationController,
|
||||
mDialogManager,
|
||||
this
|
||||
);
|
||||
case BiometricOverlayConstants.REASON_AUTH_BP:
|
||||
@@ -843,6 +849,7 @@ public class UdfpsController implements DozeReceiver {
|
||||
bpView,
|
||||
mStatusBarStateController,
|
||||
mPanelExpansionStateManager,
|
||||
mDialogManager,
|
||||
mDumpManager
|
||||
);
|
||||
case BiometricOverlayConstants.REASON_AUTH_OTHER:
|
||||
@@ -854,6 +861,7 @@ public class UdfpsController implements DozeReceiver {
|
||||
authOtherView,
|
||||
mStatusBarStateController,
|
||||
mPanelExpansionStateManager,
|
||||
mDialogManager,
|
||||
mDumpManager
|
||||
);
|
||||
default:
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.graphics.PointF;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
|
||||
/**
|
||||
@@ -54,8 +55,10 @@ public class UdfpsEnrollViewController extends UdfpsAnimationViewController<Udfp
|
||||
@NonNull UdfpsEnrollHelper enrollHelper,
|
||||
@NonNull StatusBarStateController statusBarStateController,
|
||||
@NonNull PanelExpansionStateManager panelExpansionStateManager,
|
||||
@NonNull SystemUIDialogManager systemUIDialogManager,
|
||||
@NonNull DumpManager dumpManager) {
|
||||
super(view, statusBarStateController, panelExpansionStateManager, dumpManager);
|
||||
super(view, statusBarStateController, panelExpansionStateManager, systemUIDialogManager,
|
||||
dumpManager);
|
||||
mEnrollProgressBarRadius = getContext().getResources()
|
||||
.getInteger(R.integer.config_udfpsEnrollProgressBar);
|
||||
mEnrollHelper = enrollHelper;
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
|
||||
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
|
||||
/**
|
||||
@@ -33,8 +34,10 @@ class UdfpsFpmOtherViewController extends UdfpsAnimationViewController<UdfpsFpmO
|
||||
@NonNull UdfpsFpmOtherView view,
|
||||
@NonNull StatusBarStateController statusBarStateController,
|
||||
@NonNull PanelExpansionStateManager panelExpansionStateManager,
|
||||
@NonNull SystemUIDialogManager systemUIDialogManager,
|
||||
@NonNull DumpManager dumpManager) {
|
||||
super(view, statusBarStateController, panelExpansionStateManager, dumpManager);
|
||||
super(view, statusBarStateController, panelExpansionStateManager, systemUIDialogManager,
|
||||
dumpManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -31,6 +31,7 @@ import com.android.systemui.statusbar.LockscreenShadeTransitionController;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBouncer;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
@@ -86,8 +87,10 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
|
||||
@NonNull SystemClock systemClock,
|
||||
@NonNull KeyguardStateController keyguardStateController,
|
||||
@NonNull UnlockedScreenOffAnimationController unlockedScreenOffAnimationController,
|
||||
@NonNull SystemUIDialogManager systemUIDialogManager,
|
||||
@NonNull UdfpsController udfpsController) {
|
||||
super(view, statusBarStateController, panelExpansionStateManager, dumpManager);
|
||||
super(view, statusBarStateController, panelExpansionStateManager, systemUIDialogManager,
|
||||
dumpManager);
|
||||
mKeyguardViewManager = statusBarKeyguardViewManager;
|
||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||
mLockScreenShadeTransitionController = transitionController;
|
||||
@@ -217,6 +220,10 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mDialogManager.shouldHideAffordance()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mLaunchTransitionFadingAway) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -121,6 +121,7 @@ import com.android.systemui.scrim.ScrimDrawable;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialog;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.telephony.TelephonyListenerManager;
|
||||
@@ -236,6 +237,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
protected Handler mMainHandler;
|
||||
private int mSmallestScreenWidthDp;
|
||||
private final Optional<StatusBar> mStatusBarOptional;
|
||||
private final SystemUIDialogManager mDialogManager;
|
||||
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator;
|
||||
|
||||
@@ -346,7 +348,8 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
PackageManager packageManager,
|
||||
Optional<StatusBar> statusBarOptional,
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
DialogLaunchAnimator dialogLaunchAnimator) {
|
||||
DialogLaunchAnimator dialogLaunchAnimator,
|
||||
SystemUIDialogManager dialogManager) {
|
||||
mContext = context;
|
||||
mWindowManagerFuncs = windowManagerFuncs;
|
||||
mAudioManager = audioManager;
|
||||
@@ -378,6 +381,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
mStatusBarOptional = statusBarOptional;
|
||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||
mDialogLaunchAnimator = dialogLaunchAnimator;
|
||||
mDialogManager = dialogManager;
|
||||
|
||||
// receive broadcasts
|
||||
IntentFilter filter = new IntentFilter();
|
||||
@@ -677,7 +681,8 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
mAdapter, mOverflowAdapter, mSysuiColorExtractor,
|
||||
mStatusBarService, mNotificationShadeWindowController,
|
||||
mSysUiState, this::onRefresh, mKeyguardShowing, mPowerAdapter, mUiEventLogger,
|
||||
mStatusBarOptional, mKeyguardUpdateMonitor, mLockPatternUtils);
|
||||
mStatusBarOptional, mKeyguardUpdateMonitor, mLockPatternUtils,
|
||||
mDialogManager);
|
||||
|
||||
dialog.setOnDismissListener(this);
|
||||
dialog.setOnShowListener(this);
|
||||
@@ -2219,10 +2224,12 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
SysUiState sysuiState, Runnable onRefreshCallback, boolean keyguardShowing,
|
||||
MyPowerOptionsAdapter powerAdapter, UiEventLogger uiEventLogger,
|
||||
Optional<StatusBar> statusBarOptional,
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor, LockPatternUtils lockPatternUtils) {
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor, LockPatternUtils lockPatternUtils,
|
||||
SystemUIDialogManager systemUiDialogManager) {
|
||||
// We set dismissOnDeviceLock to false because we have a custom broadcast receiver to
|
||||
// dismiss this dialog when the device is locked.
|
||||
super(context, themeRes, false /* dismissOnDeviceLock */);
|
||||
super(context, themeRes, false /* dismissOnDeviceLock */,
|
||||
systemUiDialogManager);
|
||||
mContext = context;
|
||||
mAdapter = adapter;
|
||||
mOverflowAdapter = overflowAdapter;
|
||||
|
||||
@@ -44,6 +44,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialog;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
/**
|
||||
* Base dialog for media output UI
|
||||
@@ -82,8 +83,9 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
|
||||
}
|
||||
};
|
||||
|
||||
public MediaOutputBaseDialog(Context context, MediaOutputController mediaOutputController) {
|
||||
super(context);
|
||||
public MediaOutputBaseDialog(Context context, MediaOutputController mediaOutputController,
|
||||
SystemUIDialogManager dialogManager) {
|
||||
super(context, dialogManager);
|
||||
|
||||
// Save the context that is wrapped with our theme.
|
||||
mContext = getContext();
|
||||
|
||||
@@ -56,6 +56,7 @@ import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -80,6 +81,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
|
||||
private final ShadeController mShadeController;
|
||||
private final ActivityStarter mActivityStarter;
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator;
|
||||
private final SystemUIDialogManager mDialogManager;
|
||||
private final List<MediaDevice> mGroupMediaDevices = new CopyOnWriteArrayList<>();
|
||||
private final boolean mAboveStatusbar;
|
||||
private final boolean mVolumeAdjustmentForRemoteGroupSessions;
|
||||
@@ -101,7 +103,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
|
||||
boolean aboveStatusbar, MediaSessionManager mediaSessionManager, LocalBluetoothManager
|
||||
lbm, ShadeController shadeController, ActivityStarter starter,
|
||||
NotificationEntryManager notificationEntryManager, UiEventLogger uiEventLogger,
|
||||
DialogLaunchAnimator dialogLaunchAnimator) {
|
||||
DialogLaunchAnimator dialogLaunchAnimator, SystemUIDialogManager dialogManager) {
|
||||
mContext = context;
|
||||
mPackageName = packageName;
|
||||
mMediaSessionManager = mediaSessionManager;
|
||||
@@ -117,6 +119,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
|
||||
mDialogLaunchAnimator = dialogLaunchAnimator;
|
||||
mVolumeAdjustmentForRemoteGroupSessions = mContext.getResources().getBoolean(
|
||||
com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions);
|
||||
mDialogManager = dialogManager;
|
||||
}
|
||||
|
||||
void start(@NonNull Callback cb) {
|
||||
@@ -478,9 +481,10 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
|
||||
// We show the output group dialog from the output dialog.
|
||||
MediaOutputController controller = new MediaOutputController(mContext, mPackageName,
|
||||
mAboveStatusbar, mMediaSessionManager, mLocalBluetoothManager, mShadeController,
|
||||
mActivityStarter, mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mActivityStarter, mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator,
|
||||
mDialogManager);
|
||||
MediaOutputGroupDialog dialog = new MediaOutputGroupDialog(mContext, mAboveStatusbar,
|
||||
controller);
|
||||
controller, mDialogManager);
|
||||
mDialogLaunchAnimator.showFromView(dialog, mediaOutputDialog);
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import com.android.internal.logging.UiEvent;
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
/**
|
||||
* Dialog for media output transferring.
|
||||
@@ -37,8 +38,9 @@ public class MediaOutputDialog extends MediaOutputBaseDialog {
|
||||
final UiEventLogger mUiEventLogger;
|
||||
|
||||
MediaOutputDialog(Context context, boolean aboveStatusbar, MediaOutputController
|
||||
mediaOutputController, UiEventLogger uiEventLogger) {
|
||||
super(context, mediaOutputController);
|
||||
mediaOutputController, UiEventLogger uiEventLogger,
|
||||
SystemUIDialogManager dialogManager) {
|
||||
super(context, mediaOutputController, dialogManager);
|
||||
mUiEventLogger = uiEventLogger;
|
||||
mAdapter = new MediaOutputAdapter(mMediaOutputController, this);
|
||||
if (!aboveStatusbar) {
|
||||
|
||||
@@ -25,6 +25,7 @@ import com.android.systemui.animation.DialogLaunchAnimator
|
||||
import com.android.systemui.plugins.ActivityStarter
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager
|
||||
import com.android.systemui.statusbar.phone.ShadeController
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
@@ -38,7 +39,8 @@ class MediaOutputDialogFactory @Inject constructor(
|
||||
private val starter: ActivityStarter,
|
||||
private val notificationEntryManager: NotificationEntryManager,
|
||||
private val uiEventLogger: UiEventLogger,
|
||||
private val dialogLaunchAnimator: DialogLaunchAnimator
|
||||
private val dialogLaunchAnimator: DialogLaunchAnimator,
|
||||
private val dialogManager: SystemUIDialogManager
|
||||
) {
|
||||
companion object {
|
||||
var mediaOutputDialog: MediaOutputDialog? = null
|
||||
@@ -51,8 +53,9 @@ class MediaOutputDialogFactory @Inject constructor(
|
||||
|
||||
val controller = MediaOutputController(context, packageName, aboveStatusBar,
|
||||
mediaSessionManager, lbm, shadeController, starter, notificationEntryManager,
|
||||
uiEventLogger, dialogLaunchAnimator)
|
||||
val dialog = MediaOutputDialog(context, aboveStatusBar, controller, uiEventLogger)
|
||||
uiEventLogger, dialogLaunchAnimator, dialogManager)
|
||||
val dialog = MediaOutputDialog(context, aboveStatusBar, controller, uiEventLogger,
|
||||
dialogManager)
|
||||
mediaOutputDialog = dialog
|
||||
|
||||
// Show the dialog.
|
||||
|
||||
@@ -25,6 +25,7 @@ import android.widget.LinearLayout;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
/**
|
||||
* Dialog for media output group.
|
||||
@@ -32,8 +33,8 @@ import com.android.systemui.R;
|
||||
public class MediaOutputGroupDialog extends MediaOutputBaseDialog {
|
||||
|
||||
MediaOutputGroupDialog(Context context, boolean aboveStatusbar, MediaOutputController
|
||||
mediaOutputController) {
|
||||
super(context, mediaOutputController);
|
||||
mediaOutputController, SystemUIDialogManager dialogManager) {
|
||||
super(context, mediaOutputController, dialogManager);
|
||||
mMediaOutputController.resetGroupMediaDevices();
|
||||
mAdapter = new MediaOutputGroupAdapter(mMediaOutputController);
|
||||
if (!aboveStatusbar) {
|
||||
|
||||
@@ -45,6 +45,10 @@ import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
|
||||
/**
|
||||
* Base class for dialogs that should appear over panels and keyguard.
|
||||
*
|
||||
* Optionally provide a {@link SystemUIDialogManager} to its constructor to send signals to
|
||||
* listeners on whether this dialog is showing.
|
||||
*
|
||||
* The SystemUIDialog registers a listener for the screen off / close system dialogs broadcast,
|
||||
* and dismisses itself when it receives the broadcast.
|
||||
*/
|
||||
@@ -54,8 +58,9 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
|
||||
"persist.systemui.flag_tablet_dialog_width";
|
||||
|
||||
private final Context mContext;
|
||||
private final DismissReceiver mDismissReceiver;
|
||||
@Nullable private final DismissReceiver mDismissReceiver;
|
||||
private final Handler mHandler = new Handler();
|
||||
@Nullable private final SystemUIDialogManager mDialogManager;
|
||||
|
||||
private int mLastWidth = Integer.MIN_VALUE;
|
||||
private int mLastHeight = Integer.MIN_VALUE;
|
||||
@@ -66,11 +71,22 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
|
||||
this(context, R.style.Theme_SystemUI_Dialog);
|
||||
}
|
||||
|
||||
public SystemUIDialog(Context context, SystemUIDialogManager dialogManager) {
|
||||
this(context, R.style.Theme_SystemUI_Dialog, true, dialogManager);
|
||||
}
|
||||
|
||||
public SystemUIDialog(Context context, int theme) {
|
||||
this(context, theme, true /* dismissOnDeviceLock */);
|
||||
}
|
||||
|
||||
public SystemUIDialog(Context context, int theme, boolean dismissOnDeviceLock) {
|
||||
this(context, theme, dismissOnDeviceLock, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param udfpsDialogManager If set, UDFPS will hide if this dialog is showing.
|
||||
*/
|
||||
public SystemUIDialog(Context context, int theme, boolean dismissOnDeviceLock,
|
||||
SystemUIDialogManager dialogManager) {
|
||||
super(context, theme);
|
||||
mContext = context;
|
||||
|
||||
@@ -80,6 +96,7 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
|
||||
getWindow().setAttributes(attrs);
|
||||
|
||||
mDismissReceiver = dismissOnDeviceLock ? new DismissReceiver(this) : null;
|
||||
mDialogManager = dialogManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -145,6 +162,10 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
|
||||
mDismissReceiver.register();
|
||||
}
|
||||
|
||||
if (mDialogManager != null) {
|
||||
mDialogManager.setShowing(this, true);
|
||||
}
|
||||
|
||||
// Listen for configuration changes to resize this dialog window. This is mostly necessary
|
||||
// for foldables that often go from large <=> small screen when folding/unfolding.
|
||||
ViewRootImpl.addConfigCallback(this);
|
||||
@@ -158,6 +179,10 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
|
||||
mDismissReceiver.unregister();
|
||||
}
|
||||
|
||||
if (mDialogManager != null) {
|
||||
mDialogManager.setShowing(this, false);
|
||||
}
|
||||
|
||||
ViewRootImpl.removeConfigCallback(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* Copyright (C) 2021 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.android.systemui.Dumpable;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* Register dialogs to this manager if extraneous affordances (like the UDFPS sensor area)
|
||||
* should be hidden from the screen when the dialog shows.
|
||||
*
|
||||
* Currently, only used if UDFPS is supported on the device; however, can be extended in the future
|
||||
* for other use cases.
|
||||
*/
|
||||
@SysUISingleton
|
||||
public class SystemUIDialogManager implements Dumpable {
|
||||
private final StatusBarKeyguardViewManager mKeyguardViewManager;
|
||||
|
||||
private final Set<SystemUIDialog> mDialogsShowing = new HashSet<>();
|
||||
private final Set<Listener> mListeners = new HashSet<>();
|
||||
|
||||
@Inject
|
||||
public SystemUIDialogManager(
|
||||
DumpManager dumpManager,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||
dumpManager.registerDumpable(this);
|
||||
mKeyguardViewManager = statusBarKeyguardViewManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether listeners should hide affordances like the UDFPS sensor icon.
|
||||
*/
|
||||
public boolean shouldHideAffordance() {
|
||||
return !mDialogsShowing.isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a listener to receive callbacks.
|
||||
*/
|
||||
public void registerListener(@NonNull Listener listener) {
|
||||
mListeners.add(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister a listener from receiving callbacks.
|
||||
*/
|
||||
public void unregisterListener(@NonNull Listener listener) {
|
||||
mListeners.remove(listener);
|
||||
}
|
||||
|
||||
void setShowing(SystemUIDialog dialog, boolean showing) {
|
||||
final boolean wasHidingAffordances = shouldHideAffordance();
|
||||
if (showing) {
|
||||
mDialogsShowing.add(dialog);
|
||||
} else {
|
||||
mDialogsShowing.remove(dialog);
|
||||
}
|
||||
|
||||
if (wasHidingAffordances != shouldHideAffordance()) {
|
||||
updateDialogListeners();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateDialogListeners() {
|
||||
if (shouldHideAffordance()) {
|
||||
mKeyguardViewManager.resetAlternateAuth(true);
|
||||
}
|
||||
|
||||
for (Listener listener : mListeners) {
|
||||
listener.shouldHideAffordances(shouldHideAffordance());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
|
||||
pw.println("listeners:");
|
||||
for (Listener listener : mListeners) {
|
||||
pw.println("\t" + listener);
|
||||
}
|
||||
pw.println("dialogs tracked:");
|
||||
for (SystemUIDialog dialog : mDialogsShowing) {
|
||||
pw.println("\t" + dialog);
|
||||
}
|
||||
}
|
||||
|
||||
/** SystemUIDialogManagerListener */
|
||||
public interface Listener {
|
||||
/**
|
||||
* Callback where shouldHide=true if listeners should hide their views that may overlap
|
||||
* a showing dialog.
|
||||
*/
|
||||
void shouldHideAffordances(boolean shouldHide);
|
||||
}
|
||||
}
|
||||
@@ -65,6 +65,7 @@ import com.android.systemui.statusbar.LockscreenShadeTransitionController;
|
||||
import com.android.systemui.statusbar.phone.KeyguardBypassController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
@@ -170,6 +171,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
|
||||
private TypedArray mBrightnessValues;
|
||||
@Mock
|
||||
private TypedArray mBrightnessBacklight;
|
||||
@Mock
|
||||
private SystemUIDialogManager mSystemUIDialogManager;
|
||||
|
||||
// Capture listeners so that they can be used to send events
|
||||
@Captor private ArgumentCaptor<IUdfpsOverlayController> mOverlayCaptor;
|
||||
@@ -179,8 +182,6 @@ public class UdfpsControllerTest extends SysuiTestCase {
|
||||
@Captor private ArgumentCaptor<ScreenLifecycle.Observer> mScreenObserverCaptor;
|
||||
private ScreenLifecycle.Observer mScreenObserver;
|
||||
|
||||
@Captor private ArgumentCaptor<UdfpsAnimationViewController> mAnimViewControllerCaptor;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
setUpResources();
|
||||
@@ -238,7 +239,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
|
||||
mHandler,
|
||||
mConfigurationController,
|
||||
mSystemClock,
|
||||
mUnlockedScreenOffAnimationController);
|
||||
mUnlockedScreenOffAnimationController,
|
||||
mSystemUIDialogManager);
|
||||
verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
|
||||
mOverlayController = mOverlayCaptor.getValue();
|
||||
verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture());
|
||||
|
||||
@@ -42,6 +42,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.LockscreenShadeTransitionController;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionListener;
|
||||
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
|
||||
@@ -92,6 +93,8 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController;
|
||||
@Mock
|
||||
private SystemUIDialogManager mDialogManager;
|
||||
@Mock
|
||||
private UdfpsController mUdfpsController;
|
||||
private FakeSystemClock mSystemClock = new FakeSystemClock();
|
||||
|
||||
@@ -130,6 +133,7 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
|
||||
mSystemClock,
|
||||
mKeyguardStateController,
|
||||
mUnlockedScreenOffAnimationController,
|
||||
mDialogManager,
|
||||
mUdfpsController);
|
||||
}
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ import com.android.systemui.plugins.GlobalActions;
|
||||
import com.android.systemui.settings.UserContextProvider;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.phone.StatusBar;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.telephony.TelephonyListenerManager;
|
||||
@@ -117,6 +118,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
|
||||
@Mock private StatusBar mStatusBar;
|
||||
@Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
@Mock private DialogLaunchAnimator mDialogLaunchAnimator;
|
||||
@Mock private SystemUIDialogManager mDialogManager;
|
||||
|
||||
private TestableLooper mTestableLooper;
|
||||
|
||||
@@ -162,7 +164,8 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
|
||||
mPackageManager,
|
||||
Optional.of(mStatusBar),
|
||||
mKeyguardUpdateMonitor,
|
||||
mDialogLaunchAnimator);
|
||||
mDialogLaunchAnimator,
|
||||
mDialogManager);
|
||||
mGlobalActionsDialogLite.setZeroDialogPressDelayForTesting();
|
||||
|
||||
ColorExtractor.GradientColors backdropColors = new ColorExtractor.GradientColors();
|
||||
|
||||
@@ -43,6 +43,7 @@ import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -65,6 +66,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
|
||||
mock(NotificationEntryManager.class);
|
||||
private final UiEventLogger mUiEventLogger = mock(UiEventLogger.class);
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
||||
private final SystemUIDialogManager mDialogManager = mock(SystemUIDialogManager.class);
|
||||
|
||||
private MediaOutputBaseDialogImpl mMediaOutputBaseDialogImpl;
|
||||
private MediaOutputController mMediaOutputController;
|
||||
@@ -77,7 +79,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
|
||||
public void setUp() {
|
||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mMediaOutputBaseDialogImpl = new MediaOutputBaseDialogImpl(mContext,
|
||||
mMediaOutputController);
|
||||
mMediaOutputBaseDialogImpl.onCreate(new Bundle());
|
||||
@@ -167,7 +169,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
|
||||
class MediaOutputBaseDialogImpl extends MediaOutputBaseDialog {
|
||||
|
||||
MediaOutputBaseDialogImpl(Context context, MediaOutputController mediaOutputController) {
|
||||
super(context, mediaOutputController);
|
||||
super(context, mediaOutputController, mDialogManager);
|
||||
|
||||
mAdapter = mMediaOutputBaseAdapter;
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -93,6 +94,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
mock(NotificationEntryManager.class);
|
||||
private final UiEventLogger mUiEventLogger = mock(UiEventLogger.class);
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
||||
private final SystemUIDialogManager mDialogManager = mock(SystemUIDialogManager.class);
|
||||
|
||||
private Context mSpyContext;
|
||||
private MediaOutputController mMediaOutputController;
|
||||
@@ -115,7 +117,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, TEST_PACKAGE_NAME, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mLocalMediaManager = spy(mMediaOutputController.mLocalMediaManager);
|
||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||
MediaDescription.Builder builder = new MediaDescription.Builder();
|
||||
@@ -159,7 +161,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
public void start_withoutPackageName_verifyMediaControllerInit() {
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, null, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
|
||||
mMediaOutputController.start(mCb);
|
||||
|
||||
@@ -180,7 +182,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
public void stop_withoutPackageName_verifyMediaControllerDeinit() {
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, null, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
|
||||
mMediaOutputController.start(mCb);
|
||||
|
||||
@@ -451,7 +453,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
public void getNotificationLargeIcon_withoutPackageName_returnsNull() {
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, null, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
|
||||
assertThat(mMediaOutputController.getNotificationIcon()).isNull();
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
@@ -67,6 +68,7 @@ public class MediaOutputDialogTest extends SysuiTestCase {
|
||||
mock(NotificationEntryManager.class);
|
||||
private final UiEventLogger mUiEventLogger = mock(UiEventLogger.class);
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
||||
private final SystemUIDialogManager mDialogManager = mock(SystemUIDialogManager.class);
|
||||
|
||||
private MediaOutputDialog mMediaOutputDialog;
|
||||
private MediaOutputController mMediaOutputController;
|
||||
@@ -76,10 +78,10 @@ public class MediaOutputDialogTest extends SysuiTestCase {
|
||||
public void setUp() {
|
||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||
mMediaOutputDialog = new MediaOutputDialog(mContext, false,
|
||||
mMediaOutputController, mUiEventLogger);
|
||||
mMediaOutputController, mUiEventLogger, mDialogManager);
|
||||
mMediaOutputDialog.show();
|
||||
|
||||
when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice);
|
||||
@@ -125,7 +127,7 @@ public class MediaOutputDialogTest extends SysuiTestCase {
|
||||
// and verify if the calling times increases.
|
||||
public void onCreate_ShouldLogVisibility() {
|
||||
MediaOutputDialog testDialog = new MediaOutputDialog(mContext, false,
|
||||
mMediaOutputController, mUiEventLogger);
|
||||
mMediaOutputController, mUiEventLogger, mDialogManager);
|
||||
testDialog.show();
|
||||
|
||||
testDialog.dismissDialog();
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.statusbar.notification.NotificationEntryManager;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
@@ -66,6 +67,7 @@ public class MediaOutputGroupDialogTest extends SysuiTestCase {
|
||||
mock(NotificationEntryManager.class);
|
||||
private final UiEventLogger mUiEventLogger = mock(UiEventLogger.class);
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator = mock(DialogLaunchAnimator.class);
|
||||
private final SystemUIDialogManager mDialogManager = mock(SystemUIDialogManager.class);
|
||||
|
||||
private MediaOutputGroupDialog mMediaOutputGroupDialog;
|
||||
private MediaOutputController mMediaOutputController;
|
||||
@@ -75,10 +77,10 @@ public class MediaOutputGroupDialogTest extends SysuiTestCase {
|
||||
public void setUp() {
|
||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||
mMediaOutputGroupDialog = new MediaOutputGroupDialog(mContext, false,
|
||||
mMediaOutputController);
|
||||
mMediaOutputController, mDialogManager);
|
||||
mMediaOutputGroupDialog.show();
|
||||
when(mLocalMediaManager.getSelectedMediaDevice()).thenReturn(mMediaDevices);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user