Loading packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +9 −17 Original line number Original line Diff line number Diff line Loading @@ -145,6 +145,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager; import com.android.systemui.log.SessionTracker; import com.android.systemui.log.SessionTracker; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState; Loading Loading @@ -279,6 +280,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } private final Context mContext; private final Context mContext; private final UserTracker mUserTracker; private final KeyguardUpdateMonitorLogger mLogger; private final KeyguardUpdateMonitorLogger mLogger; private final boolean mIsPrimaryUser; private final boolean mIsPrimaryUser; private final AuthController mAuthController; private final AuthController mAuthController; Loading Loading @@ -884,13 +886,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mHandler.removeCallbacks(mFpCancelNotReceived); mHandler.removeCallbacks(mFpCancelNotReceived); } } try { try { final int userId; final int userId = mUserTracker.getUserId(); try { userId = ActivityManager.getService().getCurrentUser().id; } catch (RemoteException e) { mLogger.logException(e, "Failed to get current user id"); return; } if (userId != authUserId) { if (userId != authUserId) { mLogger.logFingerprintAuthForWrongUser(authUserId); mLogger.logFingerprintAuthForWrongUser(authUserId); return; return; Loading Loading @@ -1108,13 +1104,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mLogger.d("Aborted successful auth because device is going to sleep."); mLogger.d("Aborted successful auth because device is going to sleep."); return; return; } } final int userId; final int userId = mUserTracker.getUserId(); try { userId = ActivityManager.getService().getCurrentUser().id; } catch (RemoteException e) { mLogger.logException(e, "Failed to get current user id"); return; } if (userId != authUserId) { if (userId != authUserId) { mLogger.logFaceAuthForWrongUser(authUserId); mLogger.logFaceAuthForWrongUser(authUserId); return; return; Loading Loading @@ -1964,6 +1954,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Inject @Inject protected KeyguardUpdateMonitor( protected KeyguardUpdateMonitor( Context context, Context context, UserTracker userTracker, @Main Looper mainLooper, @Main Looper mainLooper, BroadcastDispatcher broadcastDispatcher, BroadcastDispatcher broadcastDispatcher, SecureSettings secureSettings, SecureSettings secureSettings, Loading Loading @@ -1996,6 +1987,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab FaceWakeUpTriggersConfig faceWakeUpTriggersConfig) { FaceWakeUpTriggersConfig faceWakeUpTriggersConfig) { mContext = context; mContext = context; mSubscriptionManager = subscriptionManager; mSubscriptionManager = subscriptionManager; mUserTracker = userTracker; mTelephonyListenerManager = telephonyListenerManager; mTelephonyListenerManager = telephonyListenerManager; mDeviceProvisioned = isDeviceProvisionedInSettingsDb(); mDeviceProvisioned = isDeviceProvisionedInSettingsDb(); mStrongAuthTracker = new StrongAuthTracker(context, this::notifyStrongAuthStateChanged, mStrongAuthTracker = new StrongAuthTracker(context, this::notifyStrongAuthStateChanged, Loading Loading @@ -2227,7 +2219,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener); TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener); mIsPrimaryUser = mUserManager.isPrimaryUser(); mIsPrimaryUser = mUserManager.isPrimaryUser(); int user = ActivityManager.getCurrentUser(); int user = mUserTracker.getUserId(); mUserIsUnlocked.put(user, mUserManager.isUserUnlocked(user)); mUserIsUnlocked.put(user, mUserManager.isUserUnlocked(user)); mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled(); mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled(); updateSecondaryLockscreenRequirement(user); updateSecondaryLockscreenRequirement(user); Loading Loading @@ -3853,7 +3845,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab pw.println(" " + subId + "=" + mServiceStates.get(subId)); pw.println(" " + subId + "=" + mServiceStates.get(subId)); } } if (mFpm != null && mFpm.isHardwareDetected()) { if (mFpm != null && mFpm.isHardwareDetected()) { final int userId = ActivityManager.getCurrentUser(); final int userId = mUserTracker.getUserId(); final int strongAuthFlags = mStrongAuthTracker.getStrongAuthForUser(userId); final int strongAuthFlags = mStrongAuthTracker.getStrongAuthForUser(userId); BiometricAuthenticated fingerprint = mUserFingerprintAuthenticated.get(userId); BiometricAuthenticated fingerprint = mUserFingerprintAuthenticated.get(userId); pw.println(" Fingerprint state (user=" + userId + ")"); pw.println(" Fingerprint state (user=" + userId + ")"); Loading Loading @@ -3891,7 +3883,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } } } if (mFaceManager != null && mFaceManager.isHardwareDetected()) { if (mFaceManager != null && mFaceManager.isHardwareDetected()) { final int userId = ActivityManager.getCurrentUser(); final int userId = mUserTracker.getUserId(); final int strongAuthFlags = mStrongAuthTracker.getStrongAuthForUser(userId); final int strongAuthFlags = mStrongAuthTracker.getStrongAuthForUser(userId); BiometricAuthenticated face = mUserFaceAuthenticated.get(userId); BiometricAuthenticated face = mUserFaceAuthenticated.get(userId); pw.println(" Face authentication state (user=" + userId + ")"); pw.println(" Face authentication state (user=" + userId + ")"); Loading packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java +24 −14 Original line number Original line Diff line number Diff line Loading @@ -29,17 +29,17 @@ import android.util.ArrayMap; import android.util.DisplayMetrics; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.LayoutInflater; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.Observer; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManager.DockEventListener; import com.android.systemui.dock.DockManager.DockEventListener; import com.android.systemui.plugins.ClockPlugin; import com.android.systemui.plugins.ClockPlugin; import com.android.systemui.plugins.PluginListener; import com.android.systemui.plugins.PluginListener; import com.android.systemui.settings.CurrentUserObservable; import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.shared.plugins.PluginManager; import java.util.ArrayList; import java.util.ArrayList; Loading @@ -47,6 +47,7 @@ import java.util.Collection; import java.util.List; import java.util.List; import java.util.Map; import java.util.Map; import java.util.Objects; import java.util.Objects; import java.util.concurrent.Executor; import java.util.function.Supplier; import java.util.function.Supplier; import javax.inject.Inject; import javax.inject.Inject; Loading @@ -69,7 +70,8 @@ public final class ClockManager { private final ContentResolver mContentResolver; private final ContentResolver mContentResolver; private final SettingsWrapper mSettingsWrapper; private final SettingsWrapper mSettingsWrapper; private final Handler mMainHandler = new Handler(Looper.getMainLooper()); private final Handler mMainHandler = new Handler(Looper.getMainLooper()); private final CurrentUserObservable mCurrentUserObservable; private final UserTracker mUserTracker; private final Executor mMainExecutor; /** /** * Observe settings changes to know when to switch the clock face. * Observe settings changes to know when to switch the clock face. Loading @@ -80,7 +82,7 @@ public final class ClockManager { public void onChange(boolean selfChange, Collection<Uri> uris, public void onChange(boolean selfChange, Collection<Uri> uris, int flags, int userId) { int flags, int userId) { if (Objects.equals(userId, if (Objects.equals(userId, mCurrentUserObservable.getCurrentUser().getValue())) { mUserTracker.getUserId())) { reload(); reload(); } } } } Loading @@ -89,7 +91,13 @@ public final class ClockManager { /** /** * Observe user changes and react by potentially loading the custom clock for the new user. * Observe user changes and react by potentially loading the custom clock for the new user. */ */ private final Observer<Integer> mCurrentUserObserver = (newUserId) -> reload(); private final UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() { @Override public void onUserChanged(int newUser, @NonNull Context userContext) { reload(); } }; private final PluginManager mPluginManager; private final PluginManager mPluginManager; @Nullable private final DockManager mDockManager; @Nullable private final DockManager mDockManager; Loading Loading @@ -129,22 +137,24 @@ public final class ClockManager { @Inject @Inject public ClockManager(Context context, LayoutInflater layoutInflater, public ClockManager(Context context, LayoutInflater layoutInflater, PluginManager pluginManager, SysuiColorExtractor colorExtractor, PluginManager pluginManager, SysuiColorExtractor colorExtractor, @Nullable DockManager dockManager, BroadcastDispatcher broadcastDispatcher) { @Nullable DockManager dockManager, UserTracker userTracker, @Main Executor mainExecutor) { this(context, layoutInflater, pluginManager, colorExtractor, this(context, layoutInflater, pluginManager, colorExtractor, context.getContentResolver(), new CurrentUserObservable(broadcastDispatcher), context.getContentResolver(), userTracker, mainExecutor, new SettingsWrapper(context.getContentResolver()), dockManager); new SettingsWrapper(context.getContentResolver()), dockManager); } } @VisibleForTesting @VisibleForTesting ClockManager(Context context, LayoutInflater layoutInflater, ClockManager(Context context, LayoutInflater layoutInflater, PluginManager pluginManager, SysuiColorExtractor colorExtractor, PluginManager pluginManager, SysuiColorExtractor colorExtractor, ContentResolver contentResolver, CurrentUserObservable currentUserObservable, ContentResolver contentResolver, UserTracker userTracker, Executor mainExecutor, SettingsWrapper settingsWrapper, DockManager dockManager) { SettingsWrapper settingsWrapper, DockManager dockManager) { mContext = context; mContext = context; mPluginManager = pluginManager; mPluginManager = pluginManager; mContentResolver = contentResolver; mContentResolver = contentResolver; mSettingsWrapper = settingsWrapper; mSettingsWrapper = settingsWrapper; mCurrentUserObservable = currentUserObservable; mUserTracker = userTracker; mMainExecutor = mainExecutor; mDockManager = dockManager; mDockManager = dockManager; mPreviewClocks = new AvailableClocks(); mPreviewClocks = new AvailableClocks(); Loading Loading @@ -226,7 +236,7 @@ public final class ClockManager { mContentResolver.registerContentObserver( mContentResolver.registerContentObserver( Settings.Secure.getUriFor(Settings.Secure.DOCKED_CLOCK_FACE), Settings.Secure.getUriFor(Settings.Secure.DOCKED_CLOCK_FACE), false, mContentObserver, UserHandle.USER_ALL); false, mContentObserver, UserHandle.USER_ALL); mCurrentUserObservable.getCurrentUser().observeForever(mCurrentUserObserver); mUserTracker.addCallback(mUserChangedCallback, mMainExecutor); if (mDockManager != null) { if (mDockManager != null) { mDockManager.addListener(mDockEventListener); mDockManager.addListener(mDockEventListener); } } Loading @@ -235,7 +245,7 @@ public final class ClockManager { private void unregister() { private void unregister() { mPluginManager.removePluginListener(mPreviewClocks); mPluginManager.removePluginListener(mPreviewClocks); mContentResolver.unregisterContentObserver(mContentObserver); mContentResolver.unregisterContentObserver(mContentObserver); mCurrentUserObservable.getCurrentUser().removeObserver(mCurrentUserObserver); mUserTracker.removeCallback(mUserChangedCallback); if (mDockManager != null) { if (mDockManager != null) { mDockManager.removeListener(mDockEventListener); mDockManager.removeListener(mDockEventListener); } } Loading Loading @@ -363,7 +373,7 @@ public final class ClockManager { ClockPlugin plugin = null; ClockPlugin plugin = null; if (ClockManager.this.isDocked()) { if (ClockManager.this.isDocked()) { final String name = mSettingsWrapper.getDockedClockFace( final String name = mSettingsWrapper.getDockedClockFace( mCurrentUserObservable.getCurrentUser().getValue()); mUserTracker.getUserId()); if (name != null) { if (name != null) { plugin = mClocks.get(name); plugin = mClocks.get(name); if (plugin != null) { if (plugin != null) { Loading @@ -372,7 +382,7 @@ public final class ClockManager { } } } } final String name = mSettingsWrapper.getLockScreenCustomClockFace( final String name = mSettingsWrapper.getLockScreenCustomClockFace( mCurrentUserObservable.getCurrentUser().getValue()); mUserTracker.getUserId()); if (name != null) { if (name != null) { plugin = mClocks.get(name); plugin = mClocks.get(name); } } Loading packages/SystemUI/src/com/android/systemui/Dependency.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -70,6 +70,7 @@ import com.android.systemui.qs.ReduceBrightColorsController; import com.android.systemui.qs.tiles.dialog.InternetDialogFactory; import com.android.systemui.qs.tiles.dialog.InternetDialogFactory; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.settings.UserTracker; import com.android.systemui.shade.ShadeController; import com.android.systemui.shade.ShadeController; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.ActivityManagerWrapper; Loading Loading @@ -357,6 +358,7 @@ public class Dependency { @Inject Lazy<GroupExpansionManager> mGroupExpansionManagerLazy; @Inject Lazy<GroupExpansionManager> mGroupExpansionManagerLazy; @Inject Lazy<SystemUIDialogManager> mSystemUIDialogManagerLazy; @Inject Lazy<SystemUIDialogManager> mSystemUIDialogManagerLazy; @Inject Lazy<DialogLaunchAnimator> mDialogLaunchAnimatorLazy; @Inject Lazy<DialogLaunchAnimator> mDialogLaunchAnimatorLazy; @Inject Lazy<UserTracker> mUserTrackerLazy; @Inject @Inject public Dependency() { public Dependency() { Loading Loading @@ -564,6 +566,7 @@ public class Dependency { mProviders.put(GroupExpansionManager.class, mGroupExpansionManagerLazy::get); mProviders.put(GroupExpansionManager.class, mGroupExpansionManagerLazy::get); mProviders.put(SystemUIDialogManager.class, mSystemUIDialogManagerLazy::get); mProviders.put(SystemUIDialogManager.class, mSystemUIDialogManagerLazy::get); mProviders.put(DialogLaunchAnimator.class, mDialogLaunchAnimatorLazy::get); mProviders.put(DialogLaunchAnimator.class, mDialogLaunchAnimatorLazy::get); mProviders.put(UserTracker.class, mUserTrackerLazy::get); Dependency.setInstance(this); Dependency.setInstance(this); } } Loading packages/SystemUI/src/com/android/systemui/ScreenDecorations.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,6 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M import android.annotation.IdRes; import android.annotation.IdRes; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.app.ActivityManager; import android.content.BroadcastReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; Loading Loading @@ -901,7 +900,7 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable { private final BroadcastReceiver mUserSwitchIntentReceiver = new BroadcastReceiver() { private final BroadcastReceiver mUserSwitchIntentReceiver = new BroadcastReceiver() { @Override @Override public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) { int newUserId = ActivityManager.getCurrentUser(); int newUserId = mUserTracker.getUserId(); if (DEBUG) { if (DEBUG) { Log.d(TAG, "UserSwitched newUserId=" + newUserId); Log.d(TAG, "UserSwitched newUserId=" + newUserId); } } Loading packages/SystemUI/src/com/android/systemui/battery/BatteryMeterViewController.java +24 −17 Original line number Original line Diff line number Diff line Loading @@ -17,21 +17,23 @@ package com.android.systemui.battery; import static android.provider.Settings.System.SHOW_BATTERY_PERCENT; import static android.provider.Settings.System.SHOW_BATTERY_PERCENT; import android.app.ActivityManager; import android.content.ContentResolver; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; import android.database.ContentObserver; import android.net.Uri; import android.net.Uri; import android.os.Handler; import android.os.Handler; import android.os.HandlerExecutor; import android.provider.Settings; import android.provider.Settings; import android.text.TextUtils; import android.text.TextUtils; import android.util.ArraySet; import android.util.ArraySet; import android.view.View; import android.view.View; import com.android.systemui.broadcast.BroadcastDispatcher; import androidx.annotation.NonNull; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.flags.Flags; import com.android.systemui.settings.CurrentUserTracker; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController; Loading @@ -44,12 +46,13 @@ import javax.inject.Inject; public class BatteryMeterViewController extends ViewController<BatteryMeterView> { public class BatteryMeterViewController extends ViewController<BatteryMeterView> { private final ConfigurationController mConfigurationController; private final ConfigurationController mConfigurationController; private final TunerService mTunerService; private final TunerService mTunerService; private final Handler mMainHandler; private final ContentResolver mContentResolver; private final ContentResolver mContentResolver; private final BatteryController mBatteryController; private final BatteryController mBatteryController; private final String mSlotBattery; private final String mSlotBattery; private final SettingObserver mSettingObserver; private final SettingObserver mSettingObserver; private final CurrentUserTracker mCurrentUserTracker; private final UserTracker mUserTracker; private final ConfigurationController.ConfigurationListener mConfigurationListener = private final ConfigurationController.ConfigurationListener mConfigurationListener = new ConfigurationController.ConfigurationListener() { new ConfigurationController.ConfigurationListener() { Loading Loading @@ -93,6 +96,16 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView> } } }; }; private final UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() { @Override public void onUserChanged(int newUser, @NonNull Context userContext) { mContentResolver.unregisterContentObserver(mSettingObserver); registerShowBatteryPercentObserver(newUser); mView.updateShowPercent(); } }; // Some places may need to show the battery conditionally, and not obey the tuner // Some places may need to show the battery conditionally, and not obey the tuner private boolean mIgnoreTunerUpdates; private boolean mIgnoreTunerUpdates; private boolean mIsSubscribedForTunerUpdates; private boolean mIsSubscribedForTunerUpdates; Loading @@ -100,16 +113,18 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView> @Inject @Inject public BatteryMeterViewController( public BatteryMeterViewController( BatteryMeterView view, BatteryMeterView view, UserTracker userTracker, ConfigurationController configurationController, ConfigurationController configurationController, TunerService tunerService, TunerService tunerService, BroadcastDispatcher broadcastDispatcher, @Main Handler mainHandler, @Main Handler mainHandler, ContentResolver contentResolver, ContentResolver contentResolver, FeatureFlags featureFlags, FeatureFlags featureFlags, BatteryController batteryController) { BatteryController batteryController) { super(view); super(view); mUserTracker = userTracker; mConfigurationController = configurationController; mConfigurationController = configurationController; mTunerService = tunerService; mTunerService = tunerService; mMainHandler = mainHandler; mContentResolver = contentResolver; mContentResolver = contentResolver; mBatteryController = batteryController; mBatteryController = batteryController; Loading @@ -117,15 +132,7 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView> mView.setDisplayShieldEnabled(featureFlags.isEnabled(Flags.BATTERY_SHIELD_ICON)); mView.setDisplayShieldEnabled(featureFlags.isEnabled(Flags.BATTERY_SHIELD_ICON)); mSlotBattery = getResources().getString(com.android.internal.R.string.status_bar_battery); mSlotBattery = getResources().getString(com.android.internal.R.string.status_bar_battery); mSettingObserver = new SettingObserver(mainHandler); mSettingObserver = new SettingObserver(mMainHandler); mCurrentUserTracker = new CurrentUserTracker(broadcastDispatcher) { @Override public void onUserSwitched(int newUserId) { contentResolver.unregisterContentObserver(mSettingObserver); registerShowBatteryPercentObserver(newUserId); mView.updateShowPercent(); } }; } } @Override @Override Loading @@ -134,9 +141,9 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView> subscribeForTunerUpdates(); subscribeForTunerUpdates(); mBatteryController.addCallback(mBatteryStateChangeCallback); mBatteryController.addCallback(mBatteryStateChangeCallback); registerShowBatteryPercentObserver(ActivityManager.getCurrentUser()); registerShowBatteryPercentObserver(mUserTracker.getUserId()); registerGlobalBatteryUpdateObserver(); registerGlobalBatteryUpdateObserver(); mCurrentUserTracker.startTracking(); mUserTracker.addCallback(mUserChangedCallback, new HandlerExecutor(mMainHandler)); mView.updateShowPercent(); mView.updateShowPercent(); } } Loading @@ -147,7 +154,7 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView> unsubscribeFromTunerUpdates(); unsubscribeFromTunerUpdates(); mBatteryController.removeCallback(mBatteryStateChangeCallback); mBatteryController.removeCallback(mBatteryStateChangeCallback); mCurrentUserTracker.stopTracking(); mUserTracker.removeCallback(mUserChangedCallback); mContentResolver.unregisterContentObserver(mSettingObserver); mContentResolver.unregisterContentObserver(mSettingObserver); } } Loading Loading
packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +9 −17 Original line number Original line Diff line number Diff line Loading @@ -145,6 +145,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager; import com.android.systemui.log.SessionTracker; import com.android.systemui.log.SessionTracker; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState; Loading Loading @@ -279,6 +280,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } private final Context mContext; private final Context mContext; private final UserTracker mUserTracker; private final KeyguardUpdateMonitorLogger mLogger; private final KeyguardUpdateMonitorLogger mLogger; private final boolean mIsPrimaryUser; private final boolean mIsPrimaryUser; private final AuthController mAuthController; private final AuthController mAuthController; Loading Loading @@ -884,13 +886,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mHandler.removeCallbacks(mFpCancelNotReceived); mHandler.removeCallbacks(mFpCancelNotReceived); } } try { try { final int userId; final int userId = mUserTracker.getUserId(); try { userId = ActivityManager.getService().getCurrentUser().id; } catch (RemoteException e) { mLogger.logException(e, "Failed to get current user id"); return; } if (userId != authUserId) { if (userId != authUserId) { mLogger.logFingerprintAuthForWrongUser(authUserId); mLogger.logFingerprintAuthForWrongUser(authUserId); return; return; Loading Loading @@ -1108,13 +1104,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab mLogger.d("Aborted successful auth because device is going to sleep."); mLogger.d("Aborted successful auth because device is going to sleep."); return; return; } } final int userId; final int userId = mUserTracker.getUserId(); try { userId = ActivityManager.getService().getCurrentUser().id; } catch (RemoteException e) { mLogger.logException(e, "Failed to get current user id"); return; } if (userId != authUserId) { if (userId != authUserId) { mLogger.logFaceAuthForWrongUser(authUserId); mLogger.logFaceAuthForWrongUser(authUserId); return; return; Loading Loading @@ -1964,6 +1954,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab @Inject @Inject protected KeyguardUpdateMonitor( protected KeyguardUpdateMonitor( Context context, Context context, UserTracker userTracker, @Main Looper mainLooper, @Main Looper mainLooper, BroadcastDispatcher broadcastDispatcher, BroadcastDispatcher broadcastDispatcher, SecureSettings secureSettings, SecureSettings secureSettings, Loading Loading @@ -1996,6 +1987,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab FaceWakeUpTriggersConfig faceWakeUpTriggersConfig) { FaceWakeUpTriggersConfig faceWakeUpTriggersConfig) { mContext = context; mContext = context; mSubscriptionManager = subscriptionManager; mSubscriptionManager = subscriptionManager; mUserTracker = userTracker; mTelephonyListenerManager = telephonyListenerManager; mTelephonyListenerManager = telephonyListenerManager; mDeviceProvisioned = isDeviceProvisionedInSettingsDb(); mDeviceProvisioned = isDeviceProvisionedInSettingsDb(); mStrongAuthTracker = new StrongAuthTracker(context, this::notifyStrongAuthStateChanged, mStrongAuthTracker = new StrongAuthTracker(context, this::notifyStrongAuthStateChanged, Loading Loading @@ -2227,7 +2219,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener); TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener); mIsPrimaryUser = mUserManager.isPrimaryUser(); mIsPrimaryUser = mUserManager.isPrimaryUser(); int user = ActivityManager.getCurrentUser(); int user = mUserTracker.getUserId(); mUserIsUnlocked.put(user, mUserManager.isUserUnlocked(user)); mUserIsUnlocked.put(user, mUserManager.isUserUnlocked(user)); mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled(); mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled(); updateSecondaryLockscreenRequirement(user); updateSecondaryLockscreenRequirement(user); Loading Loading @@ -3853,7 +3845,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab pw.println(" " + subId + "=" + mServiceStates.get(subId)); pw.println(" " + subId + "=" + mServiceStates.get(subId)); } } if (mFpm != null && mFpm.isHardwareDetected()) { if (mFpm != null && mFpm.isHardwareDetected()) { final int userId = ActivityManager.getCurrentUser(); final int userId = mUserTracker.getUserId(); final int strongAuthFlags = mStrongAuthTracker.getStrongAuthForUser(userId); final int strongAuthFlags = mStrongAuthTracker.getStrongAuthForUser(userId); BiometricAuthenticated fingerprint = mUserFingerprintAuthenticated.get(userId); BiometricAuthenticated fingerprint = mUserFingerprintAuthenticated.get(userId); pw.println(" Fingerprint state (user=" + userId + ")"); pw.println(" Fingerprint state (user=" + userId + ")"); Loading Loading @@ -3891,7 +3883,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab } } } } if (mFaceManager != null && mFaceManager.isHardwareDetected()) { if (mFaceManager != null && mFaceManager.isHardwareDetected()) { final int userId = ActivityManager.getCurrentUser(); final int userId = mUserTracker.getUserId(); final int strongAuthFlags = mStrongAuthTracker.getStrongAuthForUser(userId); final int strongAuthFlags = mStrongAuthTracker.getStrongAuthForUser(userId); BiometricAuthenticated face = mUserFaceAuthenticated.get(userId); BiometricAuthenticated face = mUserFaceAuthenticated.get(userId); pw.println(" Face authentication state (user=" + userId + ")"); pw.println(" Face authentication state (user=" + userId + ")"); Loading
packages/SystemUI/src/com/android/keyguard/clock/ClockManager.java +24 −14 Original line number Original line Diff line number Diff line Loading @@ -29,17 +29,17 @@ import android.util.ArrayMap; import android.util.DisplayMetrics; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.LayoutInflater; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; import androidx.lifecycle.Observer; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.colorextraction.SysuiColorExtractor; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManager.DockEventListener; import com.android.systemui.dock.DockManager.DockEventListener; import com.android.systemui.plugins.ClockPlugin; import com.android.systemui.plugins.ClockPlugin; import com.android.systemui.plugins.PluginListener; import com.android.systemui.plugins.PluginListener; import com.android.systemui.settings.CurrentUserObservable; import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.shared.plugins.PluginManager; import java.util.ArrayList; import java.util.ArrayList; Loading @@ -47,6 +47,7 @@ import java.util.Collection; import java.util.List; import java.util.List; import java.util.Map; import java.util.Map; import java.util.Objects; import java.util.Objects; import java.util.concurrent.Executor; import java.util.function.Supplier; import java.util.function.Supplier; import javax.inject.Inject; import javax.inject.Inject; Loading @@ -69,7 +70,8 @@ public final class ClockManager { private final ContentResolver mContentResolver; private final ContentResolver mContentResolver; private final SettingsWrapper mSettingsWrapper; private final SettingsWrapper mSettingsWrapper; private final Handler mMainHandler = new Handler(Looper.getMainLooper()); private final Handler mMainHandler = new Handler(Looper.getMainLooper()); private final CurrentUserObservable mCurrentUserObservable; private final UserTracker mUserTracker; private final Executor mMainExecutor; /** /** * Observe settings changes to know when to switch the clock face. * Observe settings changes to know when to switch the clock face. Loading @@ -80,7 +82,7 @@ public final class ClockManager { public void onChange(boolean selfChange, Collection<Uri> uris, public void onChange(boolean selfChange, Collection<Uri> uris, int flags, int userId) { int flags, int userId) { if (Objects.equals(userId, if (Objects.equals(userId, mCurrentUserObservable.getCurrentUser().getValue())) { mUserTracker.getUserId())) { reload(); reload(); } } } } Loading @@ -89,7 +91,13 @@ public final class ClockManager { /** /** * Observe user changes and react by potentially loading the custom clock for the new user. * Observe user changes and react by potentially loading the custom clock for the new user. */ */ private final Observer<Integer> mCurrentUserObserver = (newUserId) -> reload(); private final UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() { @Override public void onUserChanged(int newUser, @NonNull Context userContext) { reload(); } }; private final PluginManager mPluginManager; private final PluginManager mPluginManager; @Nullable private final DockManager mDockManager; @Nullable private final DockManager mDockManager; Loading Loading @@ -129,22 +137,24 @@ public final class ClockManager { @Inject @Inject public ClockManager(Context context, LayoutInflater layoutInflater, public ClockManager(Context context, LayoutInflater layoutInflater, PluginManager pluginManager, SysuiColorExtractor colorExtractor, PluginManager pluginManager, SysuiColorExtractor colorExtractor, @Nullable DockManager dockManager, BroadcastDispatcher broadcastDispatcher) { @Nullable DockManager dockManager, UserTracker userTracker, @Main Executor mainExecutor) { this(context, layoutInflater, pluginManager, colorExtractor, this(context, layoutInflater, pluginManager, colorExtractor, context.getContentResolver(), new CurrentUserObservable(broadcastDispatcher), context.getContentResolver(), userTracker, mainExecutor, new SettingsWrapper(context.getContentResolver()), dockManager); new SettingsWrapper(context.getContentResolver()), dockManager); } } @VisibleForTesting @VisibleForTesting ClockManager(Context context, LayoutInflater layoutInflater, ClockManager(Context context, LayoutInflater layoutInflater, PluginManager pluginManager, SysuiColorExtractor colorExtractor, PluginManager pluginManager, SysuiColorExtractor colorExtractor, ContentResolver contentResolver, CurrentUserObservable currentUserObservable, ContentResolver contentResolver, UserTracker userTracker, Executor mainExecutor, SettingsWrapper settingsWrapper, DockManager dockManager) { SettingsWrapper settingsWrapper, DockManager dockManager) { mContext = context; mContext = context; mPluginManager = pluginManager; mPluginManager = pluginManager; mContentResolver = contentResolver; mContentResolver = contentResolver; mSettingsWrapper = settingsWrapper; mSettingsWrapper = settingsWrapper; mCurrentUserObservable = currentUserObservable; mUserTracker = userTracker; mMainExecutor = mainExecutor; mDockManager = dockManager; mDockManager = dockManager; mPreviewClocks = new AvailableClocks(); mPreviewClocks = new AvailableClocks(); Loading Loading @@ -226,7 +236,7 @@ public final class ClockManager { mContentResolver.registerContentObserver( mContentResolver.registerContentObserver( Settings.Secure.getUriFor(Settings.Secure.DOCKED_CLOCK_FACE), Settings.Secure.getUriFor(Settings.Secure.DOCKED_CLOCK_FACE), false, mContentObserver, UserHandle.USER_ALL); false, mContentObserver, UserHandle.USER_ALL); mCurrentUserObservable.getCurrentUser().observeForever(mCurrentUserObserver); mUserTracker.addCallback(mUserChangedCallback, mMainExecutor); if (mDockManager != null) { if (mDockManager != null) { mDockManager.addListener(mDockEventListener); mDockManager.addListener(mDockEventListener); } } Loading @@ -235,7 +245,7 @@ public final class ClockManager { private void unregister() { private void unregister() { mPluginManager.removePluginListener(mPreviewClocks); mPluginManager.removePluginListener(mPreviewClocks); mContentResolver.unregisterContentObserver(mContentObserver); mContentResolver.unregisterContentObserver(mContentObserver); mCurrentUserObservable.getCurrentUser().removeObserver(mCurrentUserObserver); mUserTracker.removeCallback(mUserChangedCallback); if (mDockManager != null) { if (mDockManager != null) { mDockManager.removeListener(mDockEventListener); mDockManager.removeListener(mDockEventListener); } } Loading Loading @@ -363,7 +373,7 @@ public final class ClockManager { ClockPlugin plugin = null; ClockPlugin plugin = null; if (ClockManager.this.isDocked()) { if (ClockManager.this.isDocked()) { final String name = mSettingsWrapper.getDockedClockFace( final String name = mSettingsWrapper.getDockedClockFace( mCurrentUserObservable.getCurrentUser().getValue()); mUserTracker.getUserId()); if (name != null) { if (name != null) { plugin = mClocks.get(name); plugin = mClocks.get(name); if (plugin != null) { if (plugin != null) { Loading @@ -372,7 +382,7 @@ public final class ClockManager { } } } } final String name = mSettingsWrapper.getLockScreenCustomClockFace( final String name = mSettingsWrapper.getLockScreenCustomClockFace( mCurrentUserObservable.getCurrentUser().getValue()); mUserTracker.getUserId()); if (name != null) { if (name != null) { plugin = mClocks.get(name); plugin = mClocks.get(name); } } Loading
packages/SystemUI/src/com/android/systemui/Dependency.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -70,6 +70,7 @@ import com.android.systemui.qs.ReduceBrightColorsController; import com.android.systemui.qs.tiles.dialog.InternetDialogFactory; import com.android.systemui.qs.tiles.dialog.InternetDialogFactory; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.settings.UserTracker; import com.android.systemui.shade.ShadeController; import com.android.systemui.shade.ShadeController; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.ActivityManagerWrapper; Loading Loading @@ -357,6 +358,7 @@ public class Dependency { @Inject Lazy<GroupExpansionManager> mGroupExpansionManagerLazy; @Inject Lazy<GroupExpansionManager> mGroupExpansionManagerLazy; @Inject Lazy<SystemUIDialogManager> mSystemUIDialogManagerLazy; @Inject Lazy<SystemUIDialogManager> mSystemUIDialogManagerLazy; @Inject Lazy<DialogLaunchAnimator> mDialogLaunchAnimatorLazy; @Inject Lazy<DialogLaunchAnimator> mDialogLaunchAnimatorLazy; @Inject Lazy<UserTracker> mUserTrackerLazy; @Inject @Inject public Dependency() { public Dependency() { Loading Loading @@ -564,6 +566,7 @@ public class Dependency { mProviders.put(GroupExpansionManager.class, mGroupExpansionManagerLazy::get); mProviders.put(GroupExpansionManager.class, mGroupExpansionManagerLazy::get); mProviders.put(SystemUIDialogManager.class, mSystemUIDialogManagerLazy::get); mProviders.put(SystemUIDialogManager.class, mSystemUIDialogManagerLazy::get); mProviders.put(DialogLaunchAnimator.class, mDialogLaunchAnimatorLazy::get); mProviders.put(DialogLaunchAnimator.class, mDialogLaunchAnimatorLazy::get); mProviders.put(UserTracker.class, mUserTrackerLazy::get); Dependency.setInstance(this); Dependency.setInstance(this); } } Loading
packages/SystemUI/src/com/android/systemui/ScreenDecorations.java +1 −2 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,6 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M import android.annotation.IdRes; import android.annotation.IdRes; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Nullable; import android.app.ActivityManager; import android.content.BroadcastReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; Loading Loading @@ -901,7 +900,7 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable { private final BroadcastReceiver mUserSwitchIntentReceiver = new BroadcastReceiver() { private final BroadcastReceiver mUserSwitchIntentReceiver = new BroadcastReceiver() { @Override @Override public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) { int newUserId = ActivityManager.getCurrentUser(); int newUserId = mUserTracker.getUserId(); if (DEBUG) { if (DEBUG) { Log.d(TAG, "UserSwitched newUserId=" + newUserId); Log.d(TAG, "UserSwitched newUserId=" + newUserId); } } Loading
packages/SystemUI/src/com/android/systemui/battery/BatteryMeterViewController.java +24 −17 Original line number Original line Diff line number Diff line Loading @@ -17,21 +17,23 @@ package com.android.systemui.battery; import static android.provider.Settings.System.SHOW_BATTERY_PERCENT; import static android.provider.Settings.System.SHOW_BATTERY_PERCENT; import android.app.ActivityManager; import android.content.ContentResolver; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; import android.database.ContentObserver; import android.net.Uri; import android.net.Uri; import android.os.Handler; import android.os.Handler; import android.os.HandlerExecutor; import android.provider.Settings; import android.provider.Settings; import android.text.TextUtils; import android.text.TextUtils; import android.util.ArraySet; import android.util.ArraySet; import android.view.View; import android.view.View; import com.android.systemui.broadcast.BroadcastDispatcher; import androidx.annotation.NonNull; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.flags.Flags; import com.android.systemui.settings.CurrentUserTracker; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController; Loading @@ -44,12 +46,13 @@ import javax.inject.Inject; public class BatteryMeterViewController extends ViewController<BatteryMeterView> { public class BatteryMeterViewController extends ViewController<BatteryMeterView> { private final ConfigurationController mConfigurationController; private final ConfigurationController mConfigurationController; private final TunerService mTunerService; private final TunerService mTunerService; private final Handler mMainHandler; private final ContentResolver mContentResolver; private final ContentResolver mContentResolver; private final BatteryController mBatteryController; private final BatteryController mBatteryController; private final String mSlotBattery; private final String mSlotBattery; private final SettingObserver mSettingObserver; private final SettingObserver mSettingObserver; private final CurrentUserTracker mCurrentUserTracker; private final UserTracker mUserTracker; private final ConfigurationController.ConfigurationListener mConfigurationListener = private final ConfigurationController.ConfigurationListener mConfigurationListener = new ConfigurationController.ConfigurationListener() { new ConfigurationController.ConfigurationListener() { Loading Loading @@ -93,6 +96,16 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView> } } }; }; private final UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() { @Override public void onUserChanged(int newUser, @NonNull Context userContext) { mContentResolver.unregisterContentObserver(mSettingObserver); registerShowBatteryPercentObserver(newUser); mView.updateShowPercent(); } }; // Some places may need to show the battery conditionally, and not obey the tuner // Some places may need to show the battery conditionally, and not obey the tuner private boolean mIgnoreTunerUpdates; private boolean mIgnoreTunerUpdates; private boolean mIsSubscribedForTunerUpdates; private boolean mIsSubscribedForTunerUpdates; Loading @@ -100,16 +113,18 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView> @Inject @Inject public BatteryMeterViewController( public BatteryMeterViewController( BatteryMeterView view, BatteryMeterView view, UserTracker userTracker, ConfigurationController configurationController, ConfigurationController configurationController, TunerService tunerService, TunerService tunerService, BroadcastDispatcher broadcastDispatcher, @Main Handler mainHandler, @Main Handler mainHandler, ContentResolver contentResolver, ContentResolver contentResolver, FeatureFlags featureFlags, FeatureFlags featureFlags, BatteryController batteryController) { BatteryController batteryController) { super(view); super(view); mUserTracker = userTracker; mConfigurationController = configurationController; mConfigurationController = configurationController; mTunerService = tunerService; mTunerService = tunerService; mMainHandler = mainHandler; mContentResolver = contentResolver; mContentResolver = contentResolver; mBatteryController = batteryController; mBatteryController = batteryController; Loading @@ -117,15 +132,7 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView> mView.setDisplayShieldEnabled(featureFlags.isEnabled(Flags.BATTERY_SHIELD_ICON)); mView.setDisplayShieldEnabled(featureFlags.isEnabled(Flags.BATTERY_SHIELD_ICON)); mSlotBattery = getResources().getString(com.android.internal.R.string.status_bar_battery); mSlotBattery = getResources().getString(com.android.internal.R.string.status_bar_battery); mSettingObserver = new SettingObserver(mainHandler); mSettingObserver = new SettingObserver(mMainHandler); mCurrentUserTracker = new CurrentUserTracker(broadcastDispatcher) { @Override public void onUserSwitched(int newUserId) { contentResolver.unregisterContentObserver(mSettingObserver); registerShowBatteryPercentObserver(newUserId); mView.updateShowPercent(); } }; } } @Override @Override Loading @@ -134,9 +141,9 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView> subscribeForTunerUpdates(); subscribeForTunerUpdates(); mBatteryController.addCallback(mBatteryStateChangeCallback); mBatteryController.addCallback(mBatteryStateChangeCallback); registerShowBatteryPercentObserver(ActivityManager.getCurrentUser()); registerShowBatteryPercentObserver(mUserTracker.getUserId()); registerGlobalBatteryUpdateObserver(); registerGlobalBatteryUpdateObserver(); mCurrentUserTracker.startTracking(); mUserTracker.addCallback(mUserChangedCallback, new HandlerExecutor(mMainHandler)); mView.updateShowPercent(); mView.updateShowPercent(); } } Loading @@ -147,7 +154,7 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView> unsubscribeFromTunerUpdates(); unsubscribeFromTunerUpdates(); mBatteryController.removeCallback(mBatteryStateChangeCallback); mBatteryController.removeCallback(mBatteryStateChangeCallback); mCurrentUserTracker.stopTracking(); mUserTracker.removeCallback(mUserChangedCallback); mContentResolver.unregisterContentObserver(mSettingObserver); mContentResolver.unregisterContentObserver(mSettingObserver); } } Loading