diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java index 3d2f570bde873..894bb5fc85775 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java @@ -181,7 +181,7 @@ public interface VolumeDialogController { public interface Callbacks { int VERSION = 1; - void onShowRequested(int reason); + void onShowRequested(int reason, boolean keyguardLocked, int lockTaskModeState); void onDismissRequested(int reason); void onStateChanged(State state); void onLayoutDirectionChanged(int layoutDirection); diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java index 190e655ae4033..f71d98827e4b5 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java @@ -152,7 +152,7 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna private void applyConfiguration() { mController.setVolumePolicy(mVolumePolicy); - mController.showDndTile(true); + mController.showDndTile(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index 59aa4d6fcb8bc..bf7c4598b5da0 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -18,6 +18,8 @@ package com.android.systemui.volume; import static android.media.AudioManager.RINGER_MODE_NORMAL; +import android.app.ActivityManager; +import android.app.KeyguardManager; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -91,10 +93,8 @@ import javax.inject.Inject; public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpable { private static final String TAG = Util.logTag(VolumeDialogControllerImpl.class); - private static final int TOUCH_FEEDBACK_TIMEOUT_MS = 1000; private static final int DYNAMIC_STREAM_START_INDEX = 100; - private static final int VIBRATE_HINT_DURATION = 50; private static final AudioAttributes SONIFICIATION_VIBRATION_ATTRIBUTES = new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) @@ -122,14 +122,16 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa private final PackageManager mPackageManager; private final MediaRouter2Manager mRouter2Manager; private final WakefulnessLifecycle mWakefulnessLifecycle; - private AudioManager mAudio; - private IAudioService mAudioService; + private final AudioManager mAudio; + private final IAudioService mAudioService; private final NotificationManager mNoMan; private final SettingObserver mObserver; private final Receiver mReceiver = new Receiver(); private final RingerModeObservers mRingerModeObservers; private final MediaSessions mMediaSessions; private final CaptioningManager mCaptioningManager; + private final KeyguardManager mKeyguardManager; + private final ActivityManager mActivityManager; protected C mCallbacks = new C(); private final State mState = new State(); protected final MediaSessionsCallbacks mMediaSessionsCallbacksW; @@ -141,9 +143,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa private long mLastToggledRingerOn; private boolean mDeviceInteractive = true; - private boolean mDestroyed; private VolumePolicy mVolumePolicy; - private boolean mShowDndTile = true; @GuardedBy("this") private UserActivityListener mUserActivityListener; @@ -176,7 +176,10 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa AccessibilityManager accessibilityManager, PackageManager packageManager, WakefulnessLifecycle wakefulnessLifecycle, - CaptioningManager captioningManager) { + CaptioningManager captioningManager, + KeyguardManager keyguardManager, + ActivityManager activityManager + ) { mContext = context.getApplicationContext(); mPackageManager = packageManager; mWakefulnessLifecycle = wakefulnessLifecycle; @@ -202,6 +205,9 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa mHasVibrator = mVibrator.hasVibrator(); mAudioService = iAudioService; mCaptioningManager = captioningManager; + mKeyguardManager = keyguardManager; + mActivityManager = activityManager; + boolean accessibilityVolumeStreamActive = accessibilityManager .isAccessibilityVolumeStreamActive(); @@ -247,7 +253,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa public void register() { setVolumeController(); setVolumePolicy(mVolumePolicy); - showDndTile(mShowDndTile); + showDndTile(); try { mMediaSessions.init(); } catch (SecurityException e) { @@ -272,10 +278,8 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa public void dump(PrintWriter pw, String[] args) { pw.println(VolumeDialogControllerImpl.class.getSimpleName() + " state:"); - pw.print(" mDestroyed: "); pw.println(mDestroyed); pw.print(" mVolumePolicy: "); pw.println(mVolumePolicy); pw.print(" mState: "); pw.println(mState.toString(4)); - pw.print(" mShowDndTile: "); pw.println(mShowDndTile); pw.print(" mHasVibrator: "); pw.println(mHasVibrator); synchronized (mMediaSessionsCallbacksW.mRemoteStreams) { pw.print(" mRemoteStreams: "); @@ -293,7 +297,6 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } public void setUserActivityListener(UserActivityListener listener) { - if (mDestroyed) return; synchronized (this) { mUserActivityListener = listener; } @@ -304,7 +307,6 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } public void getState() { - if (mDestroyed) return; mWorker.sendEmptyMessage(W.GET_STATE); } @@ -317,48 +319,39 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } public void getCaptionsComponentState(boolean fromTooltip) { - if (mDestroyed) return; mWorker.obtainMessage(W.GET_CAPTIONS_COMPONENT_STATE, fromTooltip).sendToTarget(); } public void notifyVisible(boolean visible) { - if (mDestroyed) return; mWorker.obtainMessage(W.NOTIFY_VISIBLE, visible ? 1 : 0, 0).sendToTarget(); } public void userActivity() { - if (mDestroyed) return; mWorker.removeMessages(W.USER_ACTIVITY); mWorker.sendEmptyMessage(W.USER_ACTIVITY); } public void setRingerMode(int value, boolean external) { - if (mDestroyed) return; mWorker.obtainMessage(W.SET_RINGER_MODE, value, external ? 1 : 0).sendToTarget(); } public void setZenMode(int value) { - if (mDestroyed) return; mWorker.obtainMessage(W.SET_ZEN_MODE, value, 0).sendToTarget(); } public void setExitCondition(Condition condition) { - if (mDestroyed) return; mWorker.obtainMessage(W.SET_EXIT_CONDITION, condition).sendToTarget(); } public void setStreamMute(int stream, boolean mute) { - if (mDestroyed) return; mWorker.obtainMessage(W.SET_STREAM_MUTE, stream, mute ? 1 : 0).sendToTarget(); } public void setStreamVolume(int stream, int level) { - if (mDestroyed) return; mWorker.obtainMessage(W.SET_STREAM_VOLUME, stream, level).sendToTarget(); } public void setActiveStream(int stream) { - if (mDestroyed) return; mWorker.obtainMessage(W.SET_ACTIVE_STREAM, stream, 0).sendToTarget(); } @@ -392,7 +385,6 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } private void onNotifyVisibleW(boolean visible) { - if (mDestroyed) return; mAudio.notifyVolumeControllerVisible(mVolumeController, visible); if (!visible) { if (updateActiveStreamW(-1)) { @@ -465,7 +457,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa mCallbacks.onStateChanged(mState); } if (showUI) { - mCallbacks.onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED); + onShowRequestedW(Events.SHOW_REASON_VOLUME_CHANGED); } if (showVibrateHint) { mCallbacks.onShowVibrateHint(); @@ -645,6 +637,11 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa return true; } + private void onShowRequestedW(int reason) { + mCallbacks.onShowRequested(reason, mKeyguardManager.isKeyguardLocked(), + mActivityManager.getLockTaskModeState()); + } + private void onSetRingerModeW(int mode, boolean external) { if (external) { mAudio.setRingerMode(mode); @@ -687,9 +684,9 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa mCallbacks.onDismissRequested(reason); } - public void showDndTile(boolean visible) { + public void showDndTile() { if (D.BUG) Log.d(TAG, "showDndTile"); - DndTile.setVisible(mContext, visible); + DndTile.setVisible(mContext, true); } private final class VC extends IVolumeController.Stub { @@ -699,7 +696,6 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa public void displaySafeVolumeWarning(int flags) throws RemoteException { if (D.BUG) Log.d(TAG, "displaySafeVolumeWarning " + Util.audioManagerFlagsToString(flags)); - if (mDestroyed) return; mWorker.obtainMessage(W.SHOW_SAFETY_WARNING, flags, 0).sendToTarget(); } @@ -707,7 +703,6 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa public void volumeChanged(int streamType, int flags) throws RemoteException { if (D.BUG) Log.d(TAG, "volumeChanged " + AudioSystem.streamToString(streamType) + " " + Util.audioManagerFlagsToString(flags)); - if (mDestroyed) return; mWorker.obtainMessage(W.VOLUME_CHANGED, streamType, flags).sendToTarget(); } @@ -719,14 +714,12 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa @Override public void setLayoutDirection(int layoutDirection) throws RemoteException { if (D.BUG) Log.d(TAG, "setLayoutDirection"); - if (mDestroyed) return; mWorker.obtainMessage(W.LAYOUT_DIRECTION_CHANGED, layoutDirection, 0).sendToTarget(); } @Override public void dismiss() throws RemoteException { if (D.BUG) Log.d(TAG, "dismiss requested"); - if (mDestroyed) return; mWorker.obtainMessage(W.DISMISS_REQUESTED, Events.DISMISS_REASON_VOLUME_CONTROLLER, 0) .sendToTarget(); mWorker.sendEmptyMessage(W.DISMISS_REQUESTED); @@ -735,7 +728,6 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa @Override public void setA11yMode(int mode) { if (D.BUG) Log.d(TAG, "setA11yMode to " + mode); - if (mDestroyed) return; switch (mode) { case VolumePolicy.A11Y_MODE_MEDIA_A11Y_VOLUME: // "legacy" mode @@ -798,7 +790,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } } - class C implements Callbacks { + static class C implements Callbacks { private final Map mCallbackMap = new ConcurrentHashMap<>(); public void add(Callbacks callback, Handler handler) { @@ -811,12 +803,15 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } @Override - public void onShowRequested(final int reason) { + public void onShowRequested( + final int reason, + final boolean keyguardLocked, + final int lockTaskModeState) { for (final Map.Entry entry : mCallbackMap.entrySet()) { entry.getValue().post(new Runnable() { @Override public void run() { - entry.getKey().onShowRequested(reason); + entry.getKey().onShowRequested(reason, keyguardLocked, lockTaskModeState); } }); } @@ -923,7 +918,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa @Override public void onAccessibilityModeChanged(Boolean showA11yStream) { - boolean show = showA11yStream == null ? false : showA11yStream; + boolean show = showA11yStream != null && showA11yStream; for (final Map.Entry entry : mCallbackMap.entrySet()) { entry.getValue().post(new Runnable() { @Override @@ -937,7 +932,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa @Override public void onCaptionComponentStateChanged( Boolean isComponentEnabled, Boolean fromTooltip) { - boolean componentEnabled = isComponentEnabled == null ? false : isComponentEnabled; + boolean componentEnabled = isComponentEnabled != null && isComponentEnabled; for (final Map.Entry entry : mCallbackMap.entrySet()) { entry.getValue().post( () -> entry.getKey().onCaptionComponentStateChanged( @@ -1183,7 +1178,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa mCallbacks.onStateChanged(mState); } if (showUI) { - mCallbacks.onShowRequested(Events.SHOW_REASON_REMOTE_VOLUME_CHANGED); + onShowRequestedW(Events.SHOW_REASON_REMOTE_VOLUME_CHANGED); } } } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index cf0d0238b3cc2..e3cb2fa5a0e7a 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -260,7 +260,7 @@ public class VolumeDialogImpl implements VolumeDialog, private State mState; private SafetyWarningDialog mSafetyWarning; private boolean mHovering = false; - private boolean mShowActiveStreamOnly; + private final boolean mShowActiveStreamOnly; private boolean mConfigChanged = false; private boolean mIsAnimatingDismiss = false; private boolean mHasSeenODICaptionsTooltip; @@ -327,7 +327,7 @@ public class VolumeDialogImpl implements VolumeDialog, } public void init(int windowType, Callback callback) { - initDialog(); + initDialog(mActivityManager.getLockTaskModeState()); mAccessibility.init(); @@ -394,7 +394,7 @@ public class VolumeDialogImpl implements VolumeDialog, Region.Op.UNION); } - private void initDialog() { + private void initDialog(int lockTaskModeState) { mDialog = new CustomDialog(mContext); initDimens(); @@ -589,7 +589,7 @@ public class VolumeDialogImpl implements VolumeDialog, updateRowsH(getActiveRow()); initRingerH(); - initSettingsH(); + initSettingsH(lockTaskModeState); initODICaptionsH(); } @@ -1034,12 +1034,11 @@ public class VolumeDialogImpl implements VolumeDialog, mIsRingerDrawerOpen = false; } - public void initSettingsH() { + private void initSettingsH(int lockTaskModeState) { if (mSettingsView != null) { mSettingsView.setVisibility( mDeviceProvisionedController.isCurrentUserSetup() && - mActivityManager.getLockTaskModeState() == LOCK_TASK_MODE_NONE ? - VISIBLE : GONE); + lockTaskModeState == LOCK_TASK_MODE_NONE ? VISIBLE : GONE); } if (mSettingsIcon != null) { mSettingsIcon.setOnClickListener(v -> { @@ -1292,7 +1291,7 @@ public class VolumeDialogImpl implements VolumeDialog, }; } - private void showH(int reason) { + private void showH(int reason, boolean keyguardLocked, int lockTaskModeState) { Trace.beginSection("VolumeDialogImpl#showH"); if (D.BUG) Log.d(TAG, "showH r=" + Events.SHOW_REASONS[reason]); mHandler.removeMessages(H.SHOW); @@ -1300,16 +1299,16 @@ public class VolumeDialogImpl implements VolumeDialog, rescheduleTimeoutH(); if (mConfigChanged) { - initDialog(); // resets mShowing to false + initDialog(lockTaskModeState); // resets mShowing to false mConfigurableTexts.update(); mConfigChanged = false; } - initSettingsH(); + initSettingsH(lockTaskModeState); mShowing = true; mIsAnimatingDismiss = false; mDialog.show(); - Events.writeEvent(Events.EVENT_SHOW_DIALOG, reason, mKeyguard.isKeyguardLocked()); + Events.writeEvent(Events.EVENT_SHOW_DIALOG, reason, keyguardLocked); mController.notifyVisible(true); mController.getCaptionsComponentState(false); checkODICaptionsTooltip(false); @@ -1810,14 +1809,6 @@ public class VolumeDialogImpl implements VolumeDialog, mContext, com.android.internal.R.attr.textColorOnAccent); row.sliderProgressSolid.setTintList(colorTint); - if (row.sliderBgIcon != null) { - row.sliderBgIcon.setTintList(colorTint); - } - - if (row.sliderBgSolid != null) { - row.sliderBgSolid.setTintList(bgTint); - } - if (row.sliderProgressIcon != null) { row.sliderProgressIcon.setTintList(bgTint); } @@ -2046,8 +2037,8 @@ public class VolumeDialogImpl implements VolumeDialog, private final VolumeDialogController.Callbacks mControllerCallbackH = new VolumeDialogController.Callbacks() { @Override - public void onShowRequested(int reason) { - showH(reason); + public void onShowRequested(int reason, boolean keyguardLocked, int lockTaskModeState) { + showH(reason, keyguardLocked, lockTaskModeState); } @Override @@ -2130,7 +2121,8 @@ public class VolumeDialogImpl implements VolumeDialog, @Override public void handleMessage(Message msg) { switch (msg.what) { - case SHOW: showH(msg.arg1); break; + case SHOW: showH(msg.arg1, VolumeDialogImpl.this.mKeyguard.isKeyguardLocked(), + VolumeDialogImpl.this.mActivityManager.getLockTaskModeState()); break; case DISMISS: dismissH(msg.arg1); break; case RECHECK: recheckH((VolumeRow) msg.obj); break; case RECHECK_ALL: recheckH(null); break; @@ -2152,7 +2144,7 @@ public class VolumeDialogImpl implements VolumeDialog, * within the bounds of the volume dialog, will fall through to the window below. */ @Override - public boolean dispatchTouchEvent(MotionEvent ev) { + public boolean dispatchTouchEvent(@NonNull MotionEvent ev) { rescheduleTimeoutH(); return super.dispatchTouchEvent(ev); } @@ -2176,7 +2168,7 @@ public class VolumeDialogImpl implements VolumeDialog, * volume dialog. */ @Override - public boolean onTouchEvent(MotionEvent event) { + public boolean onTouchEvent(@NonNull MotionEvent event) { if (mShowing) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { dismissH(Events.DISMISS_REASON_TOUCH_OUTSIDE); @@ -2265,8 +2257,6 @@ public class VolumeDialogImpl implements VolumeDialog, private View view; private TextView header; private ImageButton icon; - private Drawable sliderBgSolid; - private AlphaTintDrawableWrapper sliderBgIcon; private Drawable sliderProgressSolid; private AlphaTintDrawableWrapper sliderProgressIcon; private SeekBar slider; @@ -2280,7 +2270,6 @@ public class VolumeDialogImpl implements VolumeDialog, private int iconMuteRes; private boolean important; private boolean defaultStream; - private ColorStateList cachedTint; private int iconState; // from Events private ObjectAnimator anim; // slider progress animation for non-touch-related updates private int animTargetProgress; @@ -2295,9 +2284,6 @@ public class VolumeDialogImpl implements VolumeDialog, if (sliderProgressIcon != null) { sliderProgressIcon.setDrawable(view.getResources().getDrawable(iconRes, theme)); } - if (sliderBgIcon != null) { - sliderBgIcon.setDrawable(view.getResources().getDrawable(iconRes, theme)); - } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java index ec619bb5952ac..aaf2188a2612b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java @@ -16,6 +16,8 @@ package com.android.systemui.volume; +import static android.app.ActivityManager.LOCK_TASK_MODE_NONE; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -23,6 +25,8 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActivityManager; +import android.app.KeyguardManager; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.Context; @@ -91,6 +95,10 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { private WakefulnessLifecycle mWakefullnessLifcycle; @Mock private CaptioningManager mCaptioningManager; + @Mock + private KeyguardManager mKeyguardManager; + @Mock + private ActivityManager mActivityManager; @Before @@ -112,7 +120,8 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { mVolumeController = new TestableVolumeDialogControllerImpl(mContext, mBroadcastDispatcher, mRingerModeTracker, mThreadFactory, mAudioManager, mNotificationManager, mVibrator, mIAudioService, mAccessibilityManager, - mPackageManager, mWakefullnessLifcycle, mCaptioningManager, mCallback); + mPackageManager, mWakefullnessLifcycle, mCaptioningManager, mKeyguardManager, + mActivityManager, mCallback); mVolumeController.setEnableDialogs(true, true); } @@ -129,7 +138,8 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { when(mWakefullnessLifcycle.getWakefulness()).thenReturn( WakefulnessLifecycle.WAKEFULNESS_AWAKE); mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI); - verify(mCallback, never()).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED); + verify(mCallback, never()).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED, false, + LOCK_TASK_MODE_NONE); } @Test @@ -138,7 +148,8 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { when(mWakefullnessLifcycle.getWakefulness()).thenReturn( WakefulnessLifecycle.WAKEFULNESS_AWAKE); mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI); - verify(mCallback, times(1)).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED); + verify(mCallback, times(1)).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED, false, + LOCK_TASK_MODE_NONE); } @Test @@ -151,7 +162,8 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { when(mWakefullnessLifcycle.getWakefulness()).thenReturn( WakefulnessLifecycle.WAKEFULNESS_GOING_TO_SLEEP); mVolumeController.onVolumeChangedW(0, AudioManager.FLAG_SHOW_UI); - verify(mCallback, times(1)).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED); + verify(mCallback, times(1)).onShowRequested(Events.SHOW_REASON_VOLUME_CHANGED, false, + LOCK_TASK_MODE_NONE); } @Test @@ -188,10 +200,13 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { PackageManager packageManager, WakefulnessLifecycle wakefulnessLifecycle, CaptioningManager captioningManager, + KeyguardManager keyguardManager, + ActivityManager activityManager, C callback) { super(context, broadcastDispatcher, ringerModeTracker, theadFactory, audioManager, notificationManager, optionalVibrator, iAudioService, accessibilityManager, - packageManager, wakefulnessLifecycle, captioningManager); + packageManager, wakefulnessLifecycle, captioningManager, keyguardManager, + activityManager); mCallbacks = callback; ArgumentCaptor observerCaptor =