Merge "Enable back gesture when a SysUI dialog is showing (1/2)" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
3fd99e4698
@@ -103,8 +103,8 @@ public class QuickStepContract {
|
||||
// enabled (since it's used to navigate back within the bubbled app, or to collapse the bubble
|
||||
// stack.
|
||||
public static final int SYSUI_STATE_BUBBLES_EXPANDED = 1 << 14;
|
||||
// The global actions dialog is showing
|
||||
public static final int SYSUI_STATE_GLOBAL_ACTIONS_SHOWING = 1 << 15;
|
||||
// A SysUI dialog is showing.
|
||||
public static final int SYSUI_STATE_DIALOG_SHOWING = 1 << 15;
|
||||
// The one-handed mode is active
|
||||
public static final int SYSUI_STATE_ONE_HANDED_ACTIVE = 1 << 16;
|
||||
// Allow system gesture no matter the system bar(s) is visible or not
|
||||
@@ -140,7 +140,7 @@ public class QuickStepContract {
|
||||
SYSUI_STATE_TRACING_ENABLED,
|
||||
SYSUI_STATE_ASSIST_GESTURE_CONSTRAINED,
|
||||
SYSUI_STATE_BUBBLES_EXPANDED,
|
||||
SYSUI_STATE_GLOBAL_ACTIONS_SHOWING,
|
||||
SYSUI_STATE_DIALOG_SHOWING,
|
||||
SYSUI_STATE_ONE_HANDED_ACTIVE,
|
||||
SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY,
|
||||
SYSUI_STATE_IME_SHOWING,
|
||||
@@ -166,7 +166,7 @@ public class QuickStepContract {
|
||||
str.add((flags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED) != 0
|
||||
? "keygrd_occluded" : "");
|
||||
str.add((flags & SYSUI_STATE_BOUNCER_SHOWING) != 0 ? "bouncer_visible" : "");
|
||||
str.add((flags & SYSUI_STATE_GLOBAL_ACTIONS_SHOWING) != 0 ? "global_actions" : "");
|
||||
str.add((flags & SYSUI_STATE_DIALOG_SHOWING) != 0 ? "dialog_showing" : "");
|
||||
str.add((flags & SYSUI_STATE_A11Y_BUTTON_CLICKABLE) != 0 ? "a11y_click" : "");
|
||||
str.add((flags & SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE) != 0 ? "a11y_long_click" : "");
|
||||
str.add((flags & SYSUI_STATE_TRACING_ENABLED) != 0 ? "tracing" : "");
|
||||
@@ -256,7 +256,7 @@ public class QuickStepContract {
|
||||
public static boolean isBackGestureDisabled(int sysuiStateFlags) {
|
||||
// Always allow when the bouncer/global actions is showing (even on top of the keyguard)
|
||||
if ((sysuiStateFlags & SYSUI_STATE_BOUNCER_SHOWING) != 0
|
||||
|| (sysuiStateFlags & SYSUI_STATE_GLOBAL_ACTIONS_SHOWING) != 0) {
|
||||
|| (sysuiStateFlags & SYSUI_STATE_DIALOG_SHOWING) != 0) {
|
||||
return false;
|
||||
}
|
||||
if ((sysuiStateFlags & SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY) != 0) {
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
|
||||
import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
|
||||
import com.android.systemui.accessibility.floatingmenu.AccessibilityFloatingMenuController;
|
||||
import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
import com.android.systemui.appops.AppOpsController;
|
||||
import com.android.systemui.assist.AssistManager;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
@@ -107,6 +108,7 @@ import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider;
|
||||
import com.android.systemui.statusbar.phone.StatusBarIconController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityController;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper;
|
||||
import com.android.systemui.statusbar.policy.BatteryController;
|
||||
@@ -372,6 +374,8 @@ public class Dependency {
|
||||
@Inject Lazy<AmbientState> mAmbientStateLazy;
|
||||
@Inject Lazy<GroupMembershipManager> mGroupMembershipManagerLazy;
|
||||
@Inject Lazy<GroupExpansionManager> mGroupExpansionManagerLazy;
|
||||
@Inject Lazy<SystemUIDialogManager> mSystemUIDialogManagerLazy;
|
||||
@Inject Lazy<DialogLaunchAnimator> mDialogLaunchAnimatorLazy;
|
||||
|
||||
@Inject
|
||||
public Dependency() {
|
||||
@@ -592,6 +596,8 @@ public class Dependency {
|
||||
mProviders.put(AmbientState.class, mAmbientStateLazy::get);
|
||||
mProviders.put(GroupMembershipManager.class, mGroupMembershipManagerLazy::get);
|
||||
mProviders.put(GroupExpansionManager.class, mGroupExpansionManagerLazy::get);
|
||||
mProviders.put(SystemUIDialogManager.class, mSystemUIDialogManagerLazy::get);
|
||||
mProviders.put(DialogLaunchAnimator.class, mDialogLaunchAnimatorLazy::get);
|
||||
|
||||
Dependency.setInstance(this);
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
|
||||
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST;
|
||||
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED;
|
||||
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_GLOBAL_ACTIONS_SHOWING;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
@@ -117,7 +116,6 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.dagger.qualifiers.Background;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.model.SysUiState;
|
||||
import com.android.systemui.plugins.GlobalActions.GlobalActionsManager;
|
||||
import com.android.systemui.plugins.GlobalActionsPanelPlugin;
|
||||
import com.android.systemui.scrim.ScrimDrawable;
|
||||
@@ -125,7 +123,6 @@ import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.VibratorHelper;
|
||||
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;
|
||||
@@ -200,7 +197,6 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
private final TelecomManager mTelecomManager;
|
||||
private final MetricsLogger mMetricsLogger;
|
||||
private final UiEventLogger mUiEventLogger;
|
||||
private final SysUiState mSysUiState;
|
||||
|
||||
// Used for RingerModeTracker
|
||||
private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);
|
||||
@@ -241,7 +237,6 @@ 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;
|
||||
|
||||
@@ -347,13 +342,11 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
@Background Executor backgroundExecutor,
|
||||
UiEventLogger uiEventLogger,
|
||||
RingerModeTracker ringerModeTracker,
|
||||
SysUiState sysUiState,
|
||||
@Main Handler handler,
|
||||
PackageManager packageManager,
|
||||
Optional<StatusBar> statusBarOptional,
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
DialogLaunchAnimator dialogLaunchAnimator,
|
||||
SystemUIDialogManager dialogManager) {
|
||||
DialogLaunchAnimator dialogLaunchAnimator) {
|
||||
mContext = context;
|
||||
mWindowManagerFuncs = windowManagerFuncs;
|
||||
mAudioManager = audioManager;
|
||||
@@ -379,13 +372,11 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
mIWindowManager = iWindowManager;
|
||||
mBackgroundExecutor = backgroundExecutor;
|
||||
mRingerModeTracker = ringerModeTracker;
|
||||
mSysUiState = sysUiState;
|
||||
mMainHandler = handler;
|
||||
mSmallestScreenWidthDp = resources.getConfiguration().smallestScreenWidthDp;
|
||||
mStatusBarOptional = statusBarOptional;
|
||||
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
|
||||
mDialogLaunchAnimator = dialogLaunchAnimator;
|
||||
mDialogManager = dialogManager;
|
||||
|
||||
// receive broadcasts
|
||||
IntentFilter filter = new IntentFilter();
|
||||
@@ -682,11 +673,10 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
|
||||
ActionsDialogLite dialog = new ActionsDialogLite(mContext,
|
||||
com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActionsLite,
|
||||
mAdapter, mOverflowAdapter, mSysuiColorExtractor,
|
||||
mStatusBarService, mNotificationShadeWindowController,
|
||||
mSysUiState, this::onRefresh, mKeyguardShowing, mPowerAdapter, mUiEventLogger,
|
||||
mStatusBarOptional, mKeyguardUpdateMonitor, mLockPatternUtils,
|
||||
mDialogManager);
|
||||
mAdapter, mOverflowAdapter, mSysuiColorExtractor, mStatusBarService,
|
||||
mNotificationShadeWindowController, this::onRefresh, mKeyguardShowing,
|
||||
mPowerAdapter, mUiEventLogger, mStatusBarOptional, mKeyguardUpdateMonitor,
|
||||
mLockPatternUtils);
|
||||
|
||||
dialog.setOnDismissListener(this);
|
||||
dialog.setOnShowListener(this);
|
||||
@@ -2165,7 +2155,6 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
private boolean mKeyguardShowing;
|
||||
protected float mScrimAlpha;
|
||||
protected final NotificationShadeWindowController mNotificationShadeWindowController;
|
||||
protected final SysUiState mSysUiState;
|
||||
private ListPopupWindow mOverflowPopup;
|
||||
private Dialog mPowerOptionsDialog;
|
||||
protected final Runnable mOnRefreshCallback;
|
||||
@@ -2226,15 +2215,13 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
MyOverflowAdapter overflowAdapter,
|
||||
SysuiColorExtractor sysuiColorExtractor, IStatusBarService statusBarService,
|
||||
NotificationShadeWindowController notificationShadeWindowController,
|
||||
SysUiState sysuiState, Runnable onRefreshCallback, boolean keyguardShowing,
|
||||
Runnable onRefreshCallback, boolean keyguardShowing,
|
||||
MyPowerOptionsAdapter powerAdapter, UiEventLogger uiEventLogger,
|
||||
Optional<StatusBar> statusBarOptional,
|
||||
KeyguardUpdateMonitor keyguardUpdateMonitor, LockPatternUtils lockPatternUtils,
|
||||
SystemUIDialogManager systemUiDialogManager) {
|
||||
Optional<StatusBar> statusBarOptional, KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||
LockPatternUtils lockPatternUtils) {
|
||||
// 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 */,
|
||||
systemUiDialogManager);
|
||||
super(context, themeRes, false /* dismissOnDeviceLock */);
|
||||
mContext = context;
|
||||
mAdapter = adapter;
|
||||
mOverflowAdapter = overflowAdapter;
|
||||
@@ -2242,7 +2229,6 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
mColorExtractor = sysuiColorExtractor;
|
||||
mStatusBarService = statusBarService;
|
||||
mNotificationShadeWindowController = notificationShadeWindowController;
|
||||
mSysUiState = sysuiState;
|
||||
mOnRefreshCallback = onRefreshCallback;
|
||||
mKeyguardShowing = keyguardShowing;
|
||||
mUiEventLogger = uiEventLogger;
|
||||
@@ -2463,8 +2449,6 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
public void show() {
|
||||
super.show();
|
||||
mNotificationShadeWindowController.setRequestTopUi(true, TAG);
|
||||
mSysUiState.setFlag(SYSUI_STATE_GLOBAL_ACTIONS_SHOWING, true)
|
||||
.commitUpdate(mContext.getDisplayId());
|
||||
|
||||
// By default this dialog windowAnimationStyle is null, and therefore windowAnimations
|
||||
// should be equal to 0 which means we need to animate the dialog in-window. If it's not
|
||||
@@ -2563,9 +2547,6 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
dismissPowerOptions();
|
||||
|
||||
mNotificationShadeWindowController.setRequestTopUi(false, TAG);
|
||||
mSysUiState.setFlag(SYSUI_STATE_GLOBAL_ACTIONS_SHOWING, false)
|
||||
.commitUpdate(mContext.getDisplayId());
|
||||
|
||||
super.dismiss();
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,6 @@ 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
|
||||
@@ -99,9 +98,8 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
|
||||
}
|
||||
};
|
||||
|
||||
public MediaOutputBaseDialog(Context context, MediaOutputController mediaOutputController,
|
||||
SystemUIDialogManager dialogManager) {
|
||||
super(context, R.style.Theme_SystemUI_Dialog_Media, dialogManager);
|
||||
public MediaOutputBaseDialog(Context context, MediaOutputController mediaOutputController) {
|
||||
super(context, R.style.Theme_SystemUI_Dialog_Media);
|
||||
|
||||
// Save the context that is wrapped with our theme.
|
||||
mContext = getContext();
|
||||
|
||||
@@ -66,7 +66,6 @@ import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -91,7 +90,6 @@ 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;
|
||||
@@ -119,7 +117,7 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
|
||||
boolean aboveStatusbar, MediaSessionManager mediaSessionManager, LocalBluetoothManager
|
||||
lbm, ShadeController shadeController, ActivityStarter starter,
|
||||
CommonNotifCollection notifCollection, UiEventLogger uiEventLogger,
|
||||
DialogLaunchAnimator dialogLaunchAnimator, SystemUIDialogManager dialogManager) {
|
||||
DialogLaunchAnimator dialogLaunchAnimator) {
|
||||
mContext = context;
|
||||
mPackageName = packageName;
|
||||
mMediaSessionManager = mediaSessionManager;
|
||||
@@ -135,7 +133,6 @@ public class MediaOutputController implements LocalMediaManager.DeviceCallback {
|
||||
mDialogLaunchAnimator = dialogLaunchAnimator;
|
||||
mVolumeAdjustmentForRemoteGroupSessions = mContext.getResources().getBoolean(
|
||||
com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions);
|
||||
mDialogManager = dialogManager;
|
||||
mColorActiveItem = Utils.getColorStateListDefaultColor(mContext,
|
||||
R.color.media_dialog_active_item_main_content);
|
||||
mColorInactiveItem = Utils.getColorStateListDefaultColor(mContext,
|
||||
@@ -610,10 +607,9 @@ 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, mNotifCollection, mUiEventLogger, mDialogLaunchAnimator,
|
||||
mDialogManager);
|
||||
mActivityStarter, mNotifCollection, mUiEventLogger, mDialogLaunchAnimator);
|
||||
MediaOutputGroupDialog dialog = new MediaOutputGroupDialog(mContext, mAboveStatusbar,
|
||||
controller, mDialogManager);
|
||||
controller);
|
||||
mDialogLaunchAnimator.showFromView(dialog, mediaOutputDialog);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ 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.
|
||||
@@ -39,9 +38,8 @@ public class MediaOutputDialog extends MediaOutputBaseDialog {
|
||||
final UiEventLogger mUiEventLogger;
|
||||
|
||||
MediaOutputDialog(Context context, boolean aboveStatusbar, MediaOutputController
|
||||
mediaOutputController, UiEventLogger uiEventLogger,
|
||||
SystemUIDialogManager dialogManager) {
|
||||
super(context, mediaOutputController, dialogManager);
|
||||
mediaOutputController, UiEventLogger uiEventLogger) {
|
||||
super(context, mediaOutputController);
|
||||
mUiEventLogger = uiEventLogger;
|
||||
mAdapter = new MediaOutputAdapter(mMediaOutputController, this);
|
||||
if (!aboveStatusbar) {
|
||||
|
||||
@@ -25,7 +25,6 @@ import com.android.systemui.animation.DialogLaunchAnimator
|
||||
import com.android.systemui.plugins.ActivityStarter
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
|
||||
import com.android.systemui.statusbar.phone.ShadeController
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
@@ -39,8 +38,7 @@ class MediaOutputDialogFactory @Inject constructor(
|
||||
private val starter: ActivityStarter,
|
||||
private val notifCollection: CommonNotifCollection,
|
||||
private val uiEventLogger: UiEventLogger,
|
||||
private val dialogLaunchAnimator: DialogLaunchAnimator,
|
||||
private val dialogManager: SystemUIDialogManager
|
||||
private val dialogLaunchAnimator: DialogLaunchAnimator
|
||||
) {
|
||||
companion object {
|
||||
var mediaOutputDialog: MediaOutputDialog? = null
|
||||
@@ -53,9 +51,8 @@ class MediaOutputDialogFactory @Inject constructor(
|
||||
|
||||
val controller = MediaOutputController(context, packageName, aboveStatusBar,
|
||||
mediaSessionManager, lbm, shadeController, starter, notifCollection,
|
||||
uiEventLogger, dialogLaunchAnimator, dialogManager)
|
||||
val dialog = MediaOutputDialog(context, aboveStatusBar, controller, uiEventLogger,
|
||||
dialogManager)
|
||||
uiEventLogger, dialogLaunchAnimator)
|
||||
val dialog = MediaOutputDialog(context, aboveStatusBar, controller, uiEventLogger)
|
||||
mediaOutputDialog = dialog
|
||||
|
||||
// Show the dialog.
|
||||
|
||||
@@ -25,7 +25,6 @@ import android.view.WindowManager;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
/**
|
||||
* Dialog for media output group.
|
||||
@@ -34,8 +33,8 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
public class MediaOutputGroupDialog extends MediaOutputBaseDialog {
|
||||
|
||||
MediaOutputGroupDialog(Context context, boolean aboveStatusbar, MediaOutputController
|
||||
mediaOutputController, SystemUIDialogManager dialogManager) {
|
||||
super(context, mediaOutputController, dialogManager);
|
||||
mediaOutputController) {
|
||||
super(context, mediaOutputController);
|
||||
mMediaOutputController.resetGroupMediaDevices();
|
||||
mAdapter = new MediaOutputGroupAdapter(mMediaOutputController);
|
||||
if (!aboveStatusbar) {
|
||||
|
||||
@@ -42,7 +42,10 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.systemui.Dependency;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.model.SysUiState;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -64,7 +67,8 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
|
||||
private final Context mContext;
|
||||
@Nullable private final DismissReceiver mDismissReceiver;
|
||||
private final Handler mHandler = new Handler();
|
||||
@Nullable private final SystemUIDialogManager mDialogManager;
|
||||
private final SystemUIDialogManager mDialogManager;
|
||||
private final SysUiState mSysUiState;
|
||||
|
||||
private int mLastWidth = Integer.MIN_VALUE;
|
||||
private int mLastHeight = Integer.MIN_VALUE;
|
||||
@@ -77,24 +81,11 @@ 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, SystemUIDialogManager dialogManager) {
|
||||
this(context, theme, true /* dismissOnDeviceLock */, dialogManager);
|
||||
}
|
||||
|
||||
public SystemUIDialog(Context context, int theme, boolean dismissOnDeviceLock) {
|
||||
this(context, theme, dismissOnDeviceLock, null);
|
||||
}
|
||||
|
||||
public SystemUIDialog(Context context, int theme, boolean dismissOnDeviceLock,
|
||||
@Nullable SystemUIDialogManager dialogManager) {
|
||||
super(context, theme);
|
||||
mContext = context;
|
||||
|
||||
@@ -104,7 +95,12 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
|
||||
getWindow().setAttributes(attrs);
|
||||
|
||||
mDismissReceiver = dismissOnDeviceLock ? new DismissReceiver(this) : null;
|
||||
mDialogManager = dialogManager;
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -174,13 +170,11 @@ 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);
|
||||
mDialogManager.setShowing(this, true);
|
||||
mSysUiState.setFlag(QuickStepContract.SYSUI_STATE_DIALOG_SHOWING, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -191,11 +185,9 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
|
||||
mDismissReceiver.unregister();
|
||||
}
|
||||
|
||||
if (mDialogManager != null) {
|
||||
mDialogManager.setShowing(this, false);
|
||||
}
|
||||
|
||||
ViewRootImpl.removeConfigCallback(this);
|
||||
mDialogManager.setShowing(this, false);
|
||||
mSysUiState.setFlag(QuickStepContract.SYSUI_STATE_DIALOG_SHOWING, false);
|
||||
}
|
||||
|
||||
public void setShowForAllUsers(boolean show) {
|
||||
@@ -401,10 +393,13 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
|
||||
private final Dialog mDialog;
|
||||
private boolean mRegistered;
|
||||
private final BroadcastDispatcher mBroadcastDispatcher;
|
||||
private final DialogLaunchAnimator mDialogLaunchAnimator;
|
||||
|
||||
DismissReceiver(Dialog dialog) {
|
||||
mDialog = dialog;
|
||||
// TODO(b/219008720): Remove those calls to Dependency.get.
|
||||
mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
|
||||
mDialogLaunchAnimator = Dependency.get(DialogLaunchAnimator.class);
|
||||
}
|
||||
|
||||
void register() {
|
||||
@@ -421,6 +416,10 @@ public class SystemUIDialog extends AlertDialog implements ViewRootImpl.ConfigCh
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
// These broadcast are usually received when locking the device, swiping up to home
|
||||
// (which collapses the shade), etc. In those cases, we usually don't want to animate
|
||||
// back into the view.
|
||||
mDialogLaunchAnimator.disableAllCurrentDialogsExitAnimations();
|
||||
mDialog.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BOUNCER_SHOWING;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BUBBLES_EXPANDED;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BUBBLES_MANAGE_MENU_EXPANDED;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_GLOBAL_ACTIONS_SHOWING;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DIALOG_SHOWING;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ONE_HANDED_ACTIVE;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED;
|
||||
@@ -97,7 +97,7 @@ public final class WMShell extends CoreStartable
|
||||
implements CommandQueue.Callbacks, ProtoTraceable<SystemUiTraceProto> {
|
||||
private static final String TAG = WMShell.class.getName();
|
||||
private static final int INVALID_SYSUI_STATE_MASK =
|
||||
SYSUI_STATE_GLOBAL_ACTIONS_SHOWING
|
||||
SYSUI_STATE_DIALOG_SHOWING
|
||||
| SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING
|
||||
| SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED
|
||||
| SYSUI_STATE_BOUNCER_SHOWING
|
||||
|
||||
@@ -42,6 +42,7 @@ import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.plugins.FalsingManager;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.statusbar.SmartReplyController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
@@ -112,6 +113,11 @@ public abstract class SysuiTestCase {
|
||||
// KeyguardUpdateMonitor to be created (injected).
|
||||
// TODO(b/1531701009) Clean up NotificationContentView creation to prevent this
|
||||
mDependency.injectMockDependency(SmartReplyController.class);
|
||||
|
||||
// Make sure that all tests on any SystemUIDialog does not crash because this dependency
|
||||
// is missing (constructing the actual one would throw).
|
||||
// TODO(b/219008720): Remove this.
|
||||
mDependency.injectMockDependency(SystemUIDialogManager.class);
|
||||
}
|
||||
|
||||
@After
|
||||
|
||||
@@ -19,7 +19,6 @@ package com.android.systemui.globalactions;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
@@ -57,13 +56,11 @@ import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.colorextraction.SysuiColorExtractor;
|
||||
import com.android.systemui.model.SysUiState;
|
||||
import com.android.systemui.plugins.GlobalActions;
|
||||
import com.android.systemui.settings.UserContextProvider;
|
||||
import com.android.systemui.statusbar.NotificationShadeWindowController;
|
||||
import com.android.systemui.statusbar.VibratorHelper;
|
||||
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;
|
||||
@@ -112,7 +109,6 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
|
||||
@Mock private UiEventLogger mUiEventLogger;
|
||||
@Mock private RingerModeTracker mRingerModeTracker;
|
||||
@Mock private RingerModeLiveData mRingerModeLiveData;
|
||||
@Mock private SysUiState mSysUiState;
|
||||
@Mock private PackageManager mPackageManager;
|
||||
@Mock private Handler mHandler;
|
||||
@Mock private UserContextProvider mUserContextProvider;
|
||||
@@ -120,7 +116,6 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
|
||||
@Mock private StatusBar mStatusBar;
|
||||
@Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
@Mock private DialogLaunchAnimator mDialogLaunchAnimator;
|
||||
@Mock private SystemUIDialogManager mDialogManager;
|
||||
|
||||
private TestableLooper mTestableLooper;
|
||||
|
||||
@@ -161,19 +156,16 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
|
||||
mBackgroundExecutor,
|
||||
mUiEventLogger,
|
||||
mRingerModeTracker,
|
||||
mSysUiState,
|
||||
mHandler,
|
||||
mPackageManager,
|
||||
Optional.of(mStatusBar),
|
||||
mKeyguardUpdateMonitor,
|
||||
mDialogLaunchAnimator,
|
||||
mDialogManager);
|
||||
mDialogLaunchAnimator);
|
||||
mGlobalActionsDialogLite.setZeroDialogPressDelayForTesting();
|
||||
|
||||
ColorExtractor.GradientColors backdropColors = new ColorExtractor.GradientColors();
|
||||
backdropColors.setMainColor(Color.BLACK);
|
||||
when(mColorExtractor.getNeutralColors()).thenReturn(backdropColors);
|
||||
when(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -45,7 +45,6 @@ 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;
|
||||
@@ -68,7 +67,6 @@ 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;
|
||||
@@ -82,7 +80,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
|
||||
public void setUp() {
|
||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mMediaOutputBaseDialogImpl = new MediaOutputBaseDialogImpl(mContext,
|
||||
mMediaOutputController);
|
||||
mMediaOutputBaseDialogImpl.onCreate(new Bundle());
|
||||
@@ -175,7 +173,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase {
|
||||
class MediaOutputBaseDialogImpl extends MediaOutputBaseDialog {
|
||||
|
||||
MediaOutputBaseDialogImpl(Context context, MediaOutputController mediaOutputController) {
|
||||
super(context, mediaOutputController, mDialogManager);
|
||||
super(context, mediaOutputController);
|
||||
|
||||
mAdapter = mMediaOutputBaseAdapter;
|
||||
}
|
||||
|
||||
@@ -55,7 +55,6 @@ import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialogManager;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -94,7 +93,6 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
private CommonNotifCollection mNotifCollection = mock(CommonNotifCollection.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;
|
||||
@@ -117,7 +115,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, TEST_PACKAGE_NAME, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotifCollection, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mNotifCollection, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mLocalMediaManager = spy(mMediaOutputController.mLocalMediaManager);
|
||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||
MediaDescription.Builder builder = new MediaDescription.Builder();
|
||||
@@ -161,7 +159,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
public void start_withoutPackageName_verifyMediaControllerInit() {
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, null, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotifCollection, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mNotifCollection, mUiEventLogger, mDialogLaunchAnimator);
|
||||
|
||||
mMediaOutputController.start(mCb);
|
||||
|
||||
@@ -182,7 +180,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
public void stop_withoutPackageName_verifyMediaControllerDeinit() {
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, null, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotifCollection, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mNotifCollection, mUiEventLogger, mDialogLaunchAnimator);
|
||||
|
||||
mMediaOutputController.start(mCb);
|
||||
|
||||
@@ -453,7 +451,7 @@ public class MediaOutputControllerTest extends SysuiTestCase {
|
||||
public void getNotificationLargeIcon_withoutPackageName_returnsNull() {
|
||||
mMediaOutputController = new MediaOutputController(mSpyContext, null, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotifCollection, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mNotifCollection, mUiEventLogger, mDialogLaunchAnimator);
|
||||
|
||||
assertThat(mMediaOutputController.getNotificationIcon()).isNull();
|
||||
}
|
||||
|
||||
@@ -40,7 +40,6 @@ 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;
|
||||
@@ -68,7 +67,6 @@ 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;
|
||||
@@ -78,10 +76,10 @@ public class MediaOutputDialogTest extends SysuiTestCase {
|
||||
public void setUp() {
|
||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||
mMediaOutputDialog = new MediaOutputDialog(mContext, false,
|
||||
mMediaOutputController, mUiEventLogger, mDialogManager);
|
||||
mMediaOutputController, mUiEventLogger);
|
||||
mMediaOutputDialog.show();
|
||||
|
||||
when(mLocalMediaManager.getCurrentConnectedDevice()).thenReturn(mMediaDevice);
|
||||
@@ -127,7 +125,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, mDialogManager);
|
||||
mMediaOutputController, mUiEventLogger);
|
||||
testDialog.show();
|
||||
|
||||
testDialog.dismissDialog();
|
||||
|
||||
@@ -38,7 +38,6 @@ 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,7 +66,6 @@ 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;
|
||||
@@ -77,10 +75,10 @@ public class MediaOutputGroupDialogTest extends SysuiTestCase {
|
||||
public void setUp() {
|
||||
mMediaOutputController = new MediaOutputController(mContext, TEST_PACKAGE, false,
|
||||
mMediaSessionManager, mLocalBluetoothManager, mShadeController, mStarter,
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator, mDialogManager);
|
||||
mNotificationEntryManager, mUiEventLogger, mDialogLaunchAnimator);
|
||||
mMediaOutputController.mLocalMediaManager = mLocalMediaManager;
|
||||
mMediaOutputGroupDialog = new MediaOutputGroupDialog(mContext, false,
|
||||
mMediaOutputController, mDialogManager);
|
||||
mMediaOutputController);
|
||||
mMediaOutputGroupDialog.show();
|
||||
when(mLocalMediaManager.getSelectedMediaDevice()).thenReturn(mMediaDevices);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user