Loading packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +20 −5 Original line number Diff line number Diff line Loading @@ -57,7 +57,6 @@ import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback; import android.hardware.fingerprint.FingerprintManager.AuthenticationResult; import android.media.AudioManager; import android.os.CancellationSignal; import android.os.Handler; import android.os.IRemoteCallback; Loading @@ -82,6 +81,8 @@ import android.util.Log; import android.util.SparseArray; import android.util.SparseBooleanArray; import androidx.lifecycle.Observer; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.widget.LockPatternUtils; import com.android.settingslib.WirelessUtils; Loading @@ -97,6 +98,7 @@ import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.util.Assert; import com.android.systemui.util.RingerModeTracker; import com.google.android.collect.Lists; Loading Loading @@ -258,6 +260,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private TrustManager mTrustManager; private UserManager mUserManager; private KeyguardBypassController mKeyguardBypassController; private RingerModeTracker mRingerModeTracker; private int mFingerprintRunningState = BIOMETRIC_STATE_STOPPED; private int mFaceRunningState = BIOMETRIC_STATE_STOPPED; private LockPatternUtils mLockPatternUtils; Loading Loading @@ -295,6 +298,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private final Handler mHandler; private final Observer<Integer> mRingerModeObserver = new Observer<Integer>() { @Override public void onChanged(Integer ringer) { mHandler.obtainMessage(MSG_RINGER_MODE_CHANGED, ringer, 0).sendToTarget(); } }; private SparseBooleanArray mFaceSettingEnabledForUser = new SparseBooleanArray(); private BiometricManager mBiometricManager; private IBiometricEnabledOnKeyguardCallback mBiometricEnabledCallback = Loading Loading @@ -1145,9 +1155,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } mHandler.obtainMessage(MSG_SIM_STATE_CHANGE, args.subId, args.slotId, args.simState) .sendToTarget(); } else if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(action)) { mHandler.sendMessage(mHandler.obtainMessage(MSG_RINGER_MODE_CHANGED, intent.getIntExtra(AudioManager.EXTRA_RINGER_MODE, -1), 0)); } else if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) { String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); mHandler.sendMessage(mHandler.obtainMessage(MSG_PHONE_STATE_CHANGED, state)); Loading Loading @@ -1501,6 +1508,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mUserTrustIsUsuallyManaged.delete(userId); } private void registerRingerTracker() { mRingerModeTracker.getRingerMode().observeForever(mRingerModeObserver); } @VisibleForTesting @Inject protected KeyguardUpdateMonitor( Loading @@ -1508,6 +1519,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Main Looper mainLooper, BroadcastDispatcher broadcastDispatcher, DumpManager dumpManager, RingerModeTracker ringerModeTracker, @Background Executor backgroundExecutor) { mContext = context; mSubscriptionManager = SubscriptionManager.from(context); Loading @@ -1515,6 +1527,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mStrongAuthTracker = new StrongAuthTracker(context, this::notifyStrongAuthStateChanged); mBackgroundExecutor = backgroundExecutor; mBroadcastDispatcher = broadcastDispatcher; mRingerModeTracker = ringerModeTracker; dumpManager.registerDumpable(getClass().getName(), this); mHandler = new Handler(mainLooper) { Loading Loading @@ -1648,10 +1661,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab filter.addAction(Intent.ACTION_SERVICE_STATE); filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED); mBroadcastDispatcher.registerReceiverWithHandler(mBroadcastReceiver, filter, mHandler); mHandler.post(this::registerRingerTracker); final IntentFilter allUserFilter = new IntentFilter(); allUserFilter.addAction(Intent.ACTION_USER_INFO_CHANGED); allUserFilter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED); Loading Loading @@ -2802,6 +2816,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mBroadcastDispatcher.unregisterReceiver(mBroadcastReceiver); mBroadcastDispatcher.unregisterReceiver(mBroadcastAllReceiver); mRingerModeTracker.getRingerMode().removeObserver(mRingerModeObserver); mHandler.removeCallbacksAndMessages(null); } Loading packages/SystemUI/src/com/android/systemui/dagger/DependencyBinder.java +8 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,8 @@ import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.policy.ZenModeControllerImpl; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerServiceImpl; import com.android.systemui.util.RingerModeTracker; import com.android.systemui.util.RingerModeTrackerImpl; import com.android.systemui.volume.VolumeComponent; import com.android.systemui.volume.VolumeDialogComponent; import com.android.systemui.volume.VolumeDialogControllerImpl; Loading Loading @@ -264,4 +266,10 @@ public abstract class DependencyBinder { @Binds public abstract VolumeComponent provideVolumeComponent( VolumeDialogComponent volumeDialogComponent); /** */ @Binds public abstract RingerModeTracker provideRingerModeTracker( RingerModeTrackerImpl ringerModeTrackerImpl); } packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +30 −25 Original line number Diff line number Diff line Loading @@ -80,6 +80,11 @@ import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.colorextraction.ColorExtractor; Loading Loading @@ -116,6 +121,7 @@ import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.EmergencyDialerConstants; import com.android.systemui.util.RingerModeTracker; import com.android.systemui.util.leak.RotationUtils; import com.android.systemui.volume.SystemUIInterpolators.LogAccelerateInterpolator; Loading @@ -132,7 +138,8 @@ import javax.inject.Inject; public class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogInterface.OnShowListener, ConfigurationController.ConfigurationListener, GlobalActionsPanelPlugin.Callbacks { GlobalActionsPanelPlugin.Callbacks, LifecycleOwner { public static final String SYSTEM_DIALOG_REASON_KEY = "reason"; public static final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions"; Loading Loading @@ -181,6 +188,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, private final NotificationShadeDepthController mDepthController; private final BlurUtils mBlurUtils; // Used for RingerModeTracker private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this); private ArrayList<Action> mItems; private ActionsDialog mDialog; Loading Loading @@ -211,6 +221,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, private List<ControlsServiceInfo> mControlsServiceInfos = new ArrayList<>(); private ControlsController mControlsController; private SharedPreferences mControlsPreferences; private final RingerModeTracker mRingerModeTracker; @VisibleForTesting public enum GlobalActionsEvent implements UiEventLogger.UiEventEnum { Loading Loading @@ -249,7 +260,8 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, ControlsUiController controlsUiController, IWindowManager iWindowManager, @Background Executor backgroundExecutor, ControlsListingController controlsListingController, ControlsController controlsController, UiEventLogger uiEventLogger) { ControlsController controlsController, UiEventLogger uiEventLogger, RingerModeTracker ringerModeTracker) { mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme); mWindowManagerFuncs = windowManagerFuncs; mAudioManager = audioManager; Loading @@ -276,6 +288,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, mBackgroundExecutor = backgroundExecutor; mControlsListingController = controlsListingController; mBlurUtils = blurUtils; mRingerModeTracker = ringerModeTracker; mControlsController = controlsController; // receive broadcasts Loading @@ -296,6 +309,11 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, mShowSilentToggle = SHOW_SILENT_TOGGLE && !resources.getBoolean( R.bool.config_useFixedVolume); if (mShowSilentToggle) { mRingerModeTracker.getRingerMode().observe(this, ringer -> mHandler.sendEmptyMessage(MESSAGE_REFRESH) ); } mEmergencyAffordanceManager = new EmergencyAffordanceManager(context); mScreenshotHelper = new ScreenshotHelper(context); Loading Loading @@ -1003,16 +1021,13 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, refreshSilentMode(); mAirplaneModeOn.updateState(mAirplaneState); mAdapter.notifyDataSetChanged(); if (mShowSilentToggle) { IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION); mBroadcastDispatcher.registerReceiver(mRingerModeReceiver, filter); } mLifecycle.setCurrentState(Lifecycle.State.RESUMED); } private void refreshSilentMode() { if (!mHasVibrator) { final boolean silentModeOn = mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL; Integer value = mRingerModeTracker.getRingerMode().getValue(); final boolean silentModeOn = value != null && value != AudioManager.RINGER_MODE_NORMAL; ((ToggleAction) mSilentModeAction).updateState( silentModeOn ? ToggleState.On : ToggleState.Off); } Loading @@ -1026,14 +1041,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, mDialog = null; } mWindowManagerFuncs.onGlobalActionsHidden(); if (mShowSilentToggle) { try { mBroadcastDispatcher.unregisterReceiver(mRingerModeReceiver); } catch (IllegalArgumentException ie) { // ignore this Log.w(TAG, ie); } } mLifecycle.setCurrentState(Lifecycle.State.DESTROYED); } /** Loading Loading @@ -1580,15 +1588,6 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, } }; private BroadcastReceiver mRingerModeReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) { mHandler.sendEmptyMessage(MESSAGE_REFRESH); } } }; private ContentObserver mAirplaneModeObserver = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { Loading Loading @@ -1654,6 +1653,12 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, } } @NonNull @Override public Lifecycle getLifecycle() { return mLifecycle; } private static final class ActionsDialog extends Dialog implements DialogInterface, ColorExtractor.OnColorsChangedListener { Loading packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +21 −17 Original line number Diff line number Diff line Loading @@ -22,10 +22,8 @@ import static com.android.systemui.util.Utils.useQsMediaPlayer; import android.annotation.ColorInt; import android.app.ActivityManager; import android.app.AlarmManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; Loading @@ -49,13 +47,16 @@ import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import com.android.settingslib.Utils; import com.android.systemui.BatteryMeterView; import com.android.systemui.DualToneHandler; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; Loading @@ -70,6 +71,7 @@ import com.android.systemui.statusbar.policy.Clock; import com.android.systemui.statusbar.policy.DateView; import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.util.RingerModeTracker; import java.util.ArrayList; import java.util.List; Loading @@ -86,7 +88,7 @@ import javax.inject.Named; */ public class QuickStatusBarHeader extends RelativeLayout implements View.OnClickListener, NextAlarmController.NextAlarmChangeCallback, ZenModeController.Callback { ZenModeController.Callback, LifecycleOwner { private static final String TAG = "QuickStatusBarHeader"; private static final boolean DEBUG = false; Loading Loading @@ -137,15 +139,9 @@ public class QuickStatusBarHeader extends RelativeLayout implements private DateView mDateView; private BatteryMeterView mBatteryRemainingIcon; private BroadcastDispatcher mBroadcastDispatcher; // Used for RingerModeTracker private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this); private final BroadcastReceiver mRingerReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { mRingerMode = intent.getIntExtra(AudioManager.EXTRA_RINGER_MODE, -1); updateStatusText(); } }; private boolean mHasTopCutout = false; private int mRoundedCornerPadding = 0; Loading @@ -154,7 +150,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements NextAlarmController nextAlarmController, ZenModeController zenModeController, StatusBarIconController statusBarIconController, ActivityStarter activityStarter, CommandQueue commandQueue, BroadcastDispatcher broadcastDispatcher) { CommandQueue commandQueue, RingerModeTracker ringerModeTracker) { super(context, attrs); mAlarmController = nextAlarmController; mZenController = zenModeController; Loading @@ -162,8 +158,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements mActivityStarter = activityStarter; mDualToneHandler = new DualToneHandler( new ContextThemeWrapper(context, R.style.QSHeaderTheme)); mBroadcastDispatcher = broadcastDispatcher; mCommandQueue = commandQueue; ringerModeTracker.getRingerModeInternal().observe(this, ringer -> { mRingerMode = ringer; updateStatusText(); }); } @Override Loading Loading @@ -484,12 +483,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements if (listening) { mZenController.addCallback(this); mAlarmController.addCallback(this); mBroadcastDispatcher.registerReceiver(mRingerReceiver, new IntentFilter(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION)); mLifecycle.setCurrentState(Lifecycle.State.RESUMED); } else { mZenController.removeCallback(this); mAlarmController.removeCallback(this); mBroadcastDispatcher.unregisterReceiver(mRingerReceiver); mLifecycle.setCurrentState(Lifecycle.State.DESTROYED); } } Loading Loading @@ -586,4 +584,10 @@ public class QuickStatusBarHeader extends RelativeLayout implements lp.rightMargin = sideMargins; } } @NonNull @Override public Lifecycle getLifecycle() { return mLifecycle; } } packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +25 −18 Original line number Diff line number Diff line Loading @@ -39,6 +39,8 @@ import android.telecom.TelecomManager; import android.text.format.DateFormat; import android.util.Log; import androidx.lifecycle.Observer; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.DisplayId; Loading @@ -64,6 +66,7 @@ import com.android.systemui.statusbar.policy.RotationLockController.RotationLock import com.android.systemui.statusbar.policy.SensorPrivacyController; import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.util.RingerModeTracker; import com.android.systemui.util.time.DateFormatUtil; import java.util.Locale; Loading Loading @@ -109,7 +112,6 @@ public class PhoneStatusBarPolicy private final SharedPreferences mSharedPreferences; private final DateFormatUtil mDateFormatUtil; private final TelecomManager mTelecomManager; private final AudioManager mAudioManager; private final Handler mHandler = new Handler(); private final CastController mCast; Loading @@ -132,6 +134,7 @@ public class PhoneStatusBarPolicy private final Executor mUiBgExecutor; private final SensorPrivacyController mSensorPrivacyController; private final RecordingController mRecordingController; private final RingerModeTracker mRingerModeTracker; private boolean mZenVisible; private boolean mVolumeVisible; Loading @@ -154,10 +157,11 @@ public class PhoneStatusBarPolicy KeyguardStateController keyguardStateController, LocationController locationController, SensorPrivacyController sensorPrivacyController, IActivityManager iActivityManager, AlarmManager alarmManager, UserManager userManager, AudioManager audioManager, AlarmManager alarmManager, UserManager userManager, RecordingController recordingController, @Nullable TelecomManager telecomManager, @DisplayId int displayId, @Main SharedPreferences sharedPreferences, DateFormatUtil dateFormatUtil) { @Main SharedPreferences sharedPreferences, DateFormatUtil dateFormatUtil, RingerModeTracker ringerModeTracker) { mIconController = iconController; mCommandQueue = commandQueue; mBroadcastDispatcher = broadcastDispatcher; Loading @@ -179,8 +183,8 @@ public class PhoneStatusBarPolicy mSensorPrivacyController = sensorPrivacyController; mRecordingController = recordingController; mUiBgExecutor = uiBgExecutor; mAudioManager = audioManager; mTelecomManager = telecomManager; mRingerModeTracker = ringerModeTracker; mSlotCast = resources.getString(com.android.internal.R.string.status_bar_cast); mSlotHotspot = resources.getString(com.android.internal.R.string.status_bar_hotspot); Loading Loading @@ -208,8 +212,7 @@ public class PhoneStatusBarPolicy public void init() { // listen for broadcasts IntentFilter filter = new IntentFilter(); filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION); filter.addAction(AudioManager.ACTION_HEADSET_PLUG); filter.addAction(Intent.ACTION_SIM_STATE_CHANGED); filter.addAction(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED); Loading @@ -217,6 +220,10 @@ public class PhoneStatusBarPolicy filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); filter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED); mBroadcastDispatcher.registerReceiverWithHandler(mIntentReceiver, filter, mHandler); Observer<Integer> observer = ringer -> mHandler.post(this::updateVolumeZen); mRingerModeTracker.getRingerMode().observeForever(observer); mRingerModeTracker.getRingerModeInternal().observeForever(observer); // listen for user / profile change. try { Loading Loading @@ -350,16 +357,20 @@ public class PhoneStatusBarPolicy } if (!ZenModeConfig.isZenOverridingRinger(zen, mZenController.getConsolidatedPolicy())) { if (mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE) { final Integer ringerModeInternal = mRingerModeTracker.getRingerModeInternal().getValue(); if (ringerModeInternal != null) { if (ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE) { volumeVisible = true; volumeIconId = R.drawable.stat_sys_ringer_vibrate; volumeDescription = mResources.getString(R.string.accessibility_ringer_vibrate); } else if (mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT) { } else if (ringerModeInternal == AudioManager.RINGER_MODE_SILENT) { volumeVisible = true; volumeIconId = R.drawable.stat_sys_ringer_silent; volumeDescription = mResources.getString(R.string.accessibility_ringer_silent); } } } if (zenVisible) { mIconController.setIcon(mSlotZen, zenIconId, zenDescription); Loading Loading @@ -616,10 +627,6 @@ public class PhoneStatusBarPolicy public void onReceive(Context context, Intent intent) { String action = intent.getAction(); switch (action) { case AudioManager.RINGER_MODE_CHANGED_ACTION: case AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION: updateVolumeZen(); break; case Intent.ACTION_SIM_STATE_CHANGED: // Avoid rebroadcast because SysUI is direct boot aware. if (intent.getBooleanExtra(Intent.EXTRA_REBROADCAST_ON_UNLOCK, false)) { Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +20 −5 Original line number Diff line number Diff line Loading @@ -57,7 +57,6 @@ import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback; import android.hardware.fingerprint.FingerprintManager.AuthenticationResult; import android.media.AudioManager; import android.os.CancellationSignal; import android.os.Handler; import android.os.IRemoteCallback; Loading @@ -82,6 +81,8 @@ import android.util.Log; import android.util.SparseArray; import android.util.SparseBooleanArray; import androidx.lifecycle.Observer; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.widget.LockPatternUtils; import com.android.settingslib.WirelessUtils; Loading @@ -97,6 +98,7 @@ import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.util.Assert; import com.android.systemui.util.RingerModeTracker; import com.google.android.collect.Lists; Loading Loading @@ -258,6 +260,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private TrustManager mTrustManager; private UserManager mUserManager; private KeyguardBypassController mKeyguardBypassController; private RingerModeTracker mRingerModeTracker; private int mFingerprintRunningState = BIOMETRIC_STATE_STOPPED; private int mFaceRunningState = BIOMETRIC_STATE_STOPPED; private LockPatternUtils mLockPatternUtils; Loading Loading @@ -295,6 +298,13 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private final Handler mHandler; private final Observer<Integer> mRingerModeObserver = new Observer<Integer>() { @Override public void onChanged(Integer ringer) { mHandler.obtainMessage(MSG_RINGER_MODE_CHANGED, ringer, 0).sendToTarget(); } }; private SparseBooleanArray mFaceSettingEnabledForUser = new SparseBooleanArray(); private BiometricManager mBiometricManager; private IBiometricEnabledOnKeyguardCallback mBiometricEnabledCallback = Loading Loading @@ -1145,9 +1155,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } mHandler.obtainMessage(MSG_SIM_STATE_CHANGE, args.subId, args.slotId, args.simState) .sendToTarget(); } else if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(action)) { mHandler.sendMessage(mHandler.obtainMessage(MSG_RINGER_MODE_CHANGED, intent.getIntExtra(AudioManager.EXTRA_RINGER_MODE, -1), 0)); } else if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) { String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); mHandler.sendMessage(mHandler.obtainMessage(MSG_PHONE_STATE_CHANGED, state)); Loading Loading @@ -1501,6 +1508,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mUserTrustIsUsuallyManaged.delete(userId); } private void registerRingerTracker() { mRingerModeTracker.getRingerMode().observeForever(mRingerModeObserver); } @VisibleForTesting @Inject protected KeyguardUpdateMonitor( Loading @@ -1508,6 +1519,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Main Looper mainLooper, BroadcastDispatcher broadcastDispatcher, DumpManager dumpManager, RingerModeTracker ringerModeTracker, @Background Executor backgroundExecutor) { mContext = context; mSubscriptionManager = SubscriptionManager.from(context); Loading @@ -1515,6 +1527,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mStrongAuthTracker = new StrongAuthTracker(context, this::notifyStrongAuthStateChanged); mBackgroundExecutor = backgroundExecutor; mBroadcastDispatcher = broadcastDispatcher; mRingerModeTracker = ringerModeTracker; dumpManager.registerDumpable(getClass().getName(), this); mHandler = new Handler(mainLooper) { Loading Loading @@ -1648,10 +1661,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab filter.addAction(Intent.ACTION_SERVICE_STATE); filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED); mBroadcastDispatcher.registerReceiverWithHandler(mBroadcastReceiver, filter, mHandler); mHandler.post(this::registerRingerTracker); final IntentFilter allUserFilter = new IntentFilter(); allUserFilter.addAction(Intent.ACTION_USER_INFO_CHANGED); allUserFilter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED); Loading Loading @@ -2802,6 +2816,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mBroadcastDispatcher.unregisterReceiver(mBroadcastReceiver); mBroadcastDispatcher.unregisterReceiver(mBroadcastAllReceiver); mRingerModeTracker.getRingerMode().removeObserver(mRingerModeObserver); mHandler.removeCallbacksAndMessages(null); } Loading
packages/SystemUI/src/com/android/systemui/dagger/DependencyBinder.java +8 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,8 @@ import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.policy.ZenModeControllerImpl; import com.android.systemui.tuner.TunerService; import com.android.systemui.tuner.TunerServiceImpl; import com.android.systemui.util.RingerModeTracker; import com.android.systemui.util.RingerModeTrackerImpl; import com.android.systemui.volume.VolumeComponent; import com.android.systemui.volume.VolumeDialogComponent; import com.android.systemui.volume.VolumeDialogControllerImpl; Loading Loading @@ -264,4 +266,10 @@ public abstract class DependencyBinder { @Binds public abstract VolumeComponent provideVolumeComponent( VolumeDialogComponent volumeDialogComponent); /** */ @Binds public abstract RingerModeTracker provideRingerModeTracker( RingerModeTrackerImpl ringerModeTrackerImpl); }
packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java +30 −25 Original line number Diff line number Diff line Loading @@ -80,6 +80,11 @@ import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.colorextraction.ColorExtractor; Loading Loading @@ -116,6 +121,7 @@ import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.EmergencyDialerConstants; import com.android.systemui.util.RingerModeTracker; import com.android.systemui.util.leak.RotationUtils; import com.android.systemui.volume.SystemUIInterpolators.LogAccelerateInterpolator; Loading @@ -132,7 +138,8 @@ import javax.inject.Inject; public class GlobalActionsDialog implements DialogInterface.OnDismissListener, DialogInterface.OnShowListener, ConfigurationController.ConfigurationListener, GlobalActionsPanelPlugin.Callbacks { GlobalActionsPanelPlugin.Callbacks, LifecycleOwner { public static final String SYSTEM_DIALOG_REASON_KEY = "reason"; public static final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions"; Loading Loading @@ -181,6 +188,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, private final NotificationShadeDepthController mDepthController; private final BlurUtils mBlurUtils; // Used for RingerModeTracker private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this); private ArrayList<Action> mItems; private ActionsDialog mDialog; Loading Loading @@ -211,6 +221,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, private List<ControlsServiceInfo> mControlsServiceInfos = new ArrayList<>(); private ControlsController mControlsController; private SharedPreferences mControlsPreferences; private final RingerModeTracker mRingerModeTracker; @VisibleForTesting public enum GlobalActionsEvent implements UiEventLogger.UiEventEnum { Loading Loading @@ -249,7 +260,8 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, ControlsUiController controlsUiController, IWindowManager iWindowManager, @Background Executor backgroundExecutor, ControlsListingController controlsListingController, ControlsController controlsController, UiEventLogger uiEventLogger) { ControlsController controlsController, UiEventLogger uiEventLogger, RingerModeTracker ringerModeTracker) { mContext = new ContextThemeWrapper(context, com.android.systemui.R.style.qs_theme); mWindowManagerFuncs = windowManagerFuncs; mAudioManager = audioManager; Loading @@ -276,6 +288,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, mBackgroundExecutor = backgroundExecutor; mControlsListingController = controlsListingController; mBlurUtils = blurUtils; mRingerModeTracker = ringerModeTracker; mControlsController = controlsController; // receive broadcasts Loading @@ -296,6 +309,11 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, mShowSilentToggle = SHOW_SILENT_TOGGLE && !resources.getBoolean( R.bool.config_useFixedVolume); if (mShowSilentToggle) { mRingerModeTracker.getRingerMode().observe(this, ringer -> mHandler.sendEmptyMessage(MESSAGE_REFRESH) ); } mEmergencyAffordanceManager = new EmergencyAffordanceManager(context); mScreenshotHelper = new ScreenshotHelper(context); Loading Loading @@ -1003,16 +1021,13 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, refreshSilentMode(); mAirplaneModeOn.updateState(mAirplaneState); mAdapter.notifyDataSetChanged(); if (mShowSilentToggle) { IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION); mBroadcastDispatcher.registerReceiver(mRingerModeReceiver, filter); } mLifecycle.setCurrentState(Lifecycle.State.RESUMED); } private void refreshSilentMode() { if (!mHasVibrator) { final boolean silentModeOn = mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL; Integer value = mRingerModeTracker.getRingerMode().getValue(); final boolean silentModeOn = value != null && value != AudioManager.RINGER_MODE_NORMAL; ((ToggleAction) mSilentModeAction).updateState( silentModeOn ? ToggleState.On : ToggleState.Off); } Loading @@ -1026,14 +1041,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, mDialog = null; } mWindowManagerFuncs.onGlobalActionsHidden(); if (mShowSilentToggle) { try { mBroadcastDispatcher.unregisterReceiver(mRingerModeReceiver); } catch (IllegalArgumentException ie) { // ignore this Log.w(TAG, ie); } } mLifecycle.setCurrentState(Lifecycle.State.DESTROYED); } /** Loading Loading @@ -1580,15 +1588,6 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, } }; private BroadcastReceiver mRingerModeReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) { mHandler.sendEmptyMessage(MESSAGE_REFRESH); } } }; private ContentObserver mAirplaneModeObserver = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { Loading Loading @@ -1654,6 +1653,12 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener, } } @NonNull @Override public Lifecycle getLifecycle() { return mLifecycle; } private static final class ActionsDialog extends Dialog implements DialogInterface, ColorExtractor.OnColorsChangedListener { Loading
packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +21 −17 Original line number Diff line number Diff line Loading @@ -22,10 +22,8 @@ import static com.android.systemui.util.Utils.useQsMediaPlayer; import android.annotation.ColorInt; import android.app.ActivityManager; import android.app.AlarmManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; Loading @@ -49,13 +47,16 @@ import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import com.android.settingslib.Utils; import com.android.systemui.BatteryMeterView; import com.android.systemui.DualToneHandler; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver; Loading @@ -70,6 +71,7 @@ import com.android.systemui.statusbar.policy.Clock; import com.android.systemui.statusbar.policy.DateView; import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.util.RingerModeTracker; import java.util.ArrayList; import java.util.List; Loading @@ -86,7 +88,7 @@ import javax.inject.Named; */ public class QuickStatusBarHeader extends RelativeLayout implements View.OnClickListener, NextAlarmController.NextAlarmChangeCallback, ZenModeController.Callback { ZenModeController.Callback, LifecycleOwner { private static final String TAG = "QuickStatusBarHeader"; private static final boolean DEBUG = false; Loading Loading @@ -137,15 +139,9 @@ public class QuickStatusBarHeader extends RelativeLayout implements private DateView mDateView; private BatteryMeterView mBatteryRemainingIcon; private BroadcastDispatcher mBroadcastDispatcher; // Used for RingerModeTracker private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this); private final BroadcastReceiver mRingerReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { mRingerMode = intent.getIntExtra(AudioManager.EXTRA_RINGER_MODE, -1); updateStatusText(); } }; private boolean mHasTopCutout = false; private int mRoundedCornerPadding = 0; Loading @@ -154,7 +150,7 @@ public class QuickStatusBarHeader extends RelativeLayout implements NextAlarmController nextAlarmController, ZenModeController zenModeController, StatusBarIconController statusBarIconController, ActivityStarter activityStarter, CommandQueue commandQueue, BroadcastDispatcher broadcastDispatcher) { CommandQueue commandQueue, RingerModeTracker ringerModeTracker) { super(context, attrs); mAlarmController = nextAlarmController; mZenController = zenModeController; Loading @@ -162,8 +158,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements mActivityStarter = activityStarter; mDualToneHandler = new DualToneHandler( new ContextThemeWrapper(context, R.style.QSHeaderTheme)); mBroadcastDispatcher = broadcastDispatcher; mCommandQueue = commandQueue; ringerModeTracker.getRingerModeInternal().observe(this, ringer -> { mRingerMode = ringer; updateStatusText(); }); } @Override Loading Loading @@ -484,12 +483,11 @@ public class QuickStatusBarHeader extends RelativeLayout implements if (listening) { mZenController.addCallback(this); mAlarmController.addCallback(this); mBroadcastDispatcher.registerReceiver(mRingerReceiver, new IntentFilter(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION)); mLifecycle.setCurrentState(Lifecycle.State.RESUMED); } else { mZenController.removeCallback(this); mAlarmController.removeCallback(this); mBroadcastDispatcher.unregisterReceiver(mRingerReceiver); mLifecycle.setCurrentState(Lifecycle.State.DESTROYED); } } Loading Loading @@ -586,4 +584,10 @@ public class QuickStatusBarHeader extends RelativeLayout implements lp.rightMargin = sideMargins; } } @NonNull @Override public Lifecycle getLifecycle() { return mLifecycle; } }
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +25 −18 Original line number Diff line number Diff line Loading @@ -39,6 +39,8 @@ import android.telecom.TelecomManager; import android.text.format.DateFormat; import android.util.Log; import androidx.lifecycle.Observer; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.DisplayId; Loading @@ -64,6 +66,7 @@ import com.android.systemui.statusbar.policy.RotationLockController.RotationLock import com.android.systemui.statusbar.policy.SensorPrivacyController; import com.android.systemui.statusbar.policy.UserInfoController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.util.RingerModeTracker; import com.android.systemui.util.time.DateFormatUtil; import java.util.Locale; Loading Loading @@ -109,7 +112,6 @@ public class PhoneStatusBarPolicy private final SharedPreferences mSharedPreferences; private final DateFormatUtil mDateFormatUtil; private final TelecomManager mTelecomManager; private final AudioManager mAudioManager; private final Handler mHandler = new Handler(); private final CastController mCast; Loading @@ -132,6 +134,7 @@ public class PhoneStatusBarPolicy private final Executor mUiBgExecutor; private final SensorPrivacyController mSensorPrivacyController; private final RecordingController mRecordingController; private final RingerModeTracker mRingerModeTracker; private boolean mZenVisible; private boolean mVolumeVisible; Loading @@ -154,10 +157,11 @@ public class PhoneStatusBarPolicy KeyguardStateController keyguardStateController, LocationController locationController, SensorPrivacyController sensorPrivacyController, IActivityManager iActivityManager, AlarmManager alarmManager, UserManager userManager, AudioManager audioManager, AlarmManager alarmManager, UserManager userManager, RecordingController recordingController, @Nullable TelecomManager telecomManager, @DisplayId int displayId, @Main SharedPreferences sharedPreferences, DateFormatUtil dateFormatUtil) { @Main SharedPreferences sharedPreferences, DateFormatUtil dateFormatUtil, RingerModeTracker ringerModeTracker) { mIconController = iconController; mCommandQueue = commandQueue; mBroadcastDispatcher = broadcastDispatcher; Loading @@ -179,8 +183,8 @@ public class PhoneStatusBarPolicy mSensorPrivacyController = sensorPrivacyController; mRecordingController = recordingController; mUiBgExecutor = uiBgExecutor; mAudioManager = audioManager; mTelecomManager = telecomManager; mRingerModeTracker = ringerModeTracker; mSlotCast = resources.getString(com.android.internal.R.string.status_bar_cast); mSlotHotspot = resources.getString(com.android.internal.R.string.status_bar_hotspot); Loading Loading @@ -208,8 +212,7 @@ public class PhoneStatusBarPolicy public void init() { // listen for broadcasts IntentFilter filter = new IntentFilter(); filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION); filter.addAction(AudioManager.ACTION_HEADSET_PLUG); filter.addAction(Intent.ACTION_SIM_STATE_CHANGED); filter.addAction(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED); Loading @@ -217,6 +220,10 @@ public class PhoneStatusBarPolicy filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); filter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED); mBroadcastDispatcher.registerReceiverWithHandler(mIntentReceiver, filter, mHandler); Observer<Integer> observer = ringer -> mHandler.post(this::updateVolumeZen); mRingerModeTracker.getRingerMode().observeForever(observer); mRingerModeTracker.getRingerModeInternal().observeForever(observer); // listen for user / profile change. try { Loading Loading @@ -350,16 +357,20 @@ public class PhoneStatusBarPolicy } if (!ZenModeConfig.isZenOverridingRinger(zen, mZenController.getConsolidatedPolicy())) { if (mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE) { final Integer ringerModeInternal = mRingerModeTracker.getRingerModeInternal().getValue(); if (ringerModeInternal != null) { if (ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE) { volumeVisible = true; volumeIconId = R.drawable.stat_sys_ringer_vibrate; volumeDescription = mResources.getString(R.string.accessibility_ringer_vibrate); } else if (mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT) { } else if (ringerModeInternal == AudioManager.RINGER_MODE_SILENT) { volumeVisible = true; volumeIconId = R.drawable.stat_sys_ringer_silent; volumeDescription = mResources.getString(R.string.accessibility_ringer_silent); } } } if (zenVisible) { mIconController.setIcon(mSlotZen, zenIconId, zenDescription); Loading Loading @@ -616,10 +627,6 @@ public class PhoneStatusBarPolicy public void onReceive(Context context, Intent intent) { String action = intent.getAction(); switch (action) { case AudioManager.RINGER_MODE_CHANGED_ACTION: case AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION: updateVolumeZen(); break; case Intent.ACTION_SIM_STATE_CHANGED: // Avoid rebroadcast because SysUI is direct boot aware. if (intent.getBooleanExtra(Intent.EXTRA_REBROADCAST_ON_UNLOCK, false)) { Loading