diff options
| author | 2022-10-31 16:27:57 -0700 | |
|---|---|---|
| committer | 2023-01-17 13:37:17 -0800 | |
| commit | 61fc3ea51aadffcf6192318c89e516d302b753cd (patch) | |
| tree | 2dbe6415a76119f08dfd949f6794ad04d60a3ac6 | |
| parent | a34b7aafe293ed20564e5bc00782eaa6f052bdf7 (diff) | |
[DO NOT MERGE] Replace UserHandle.CURRENT with UserTracker
Bug: 249831072
Test: atest SystemUITests
Change-Id: Id98ed38495feaab4780452ded14fe24b68ae6944
86 files changed, 644 insertions, 352 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index 88ce2a74c99d..71cd18dd9703 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -199,7 +199,7 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS } mSecureSettings.registerContentObserverForUser( - Settings.Secure.getUriFor(Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK), + Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK, false, /* notifyForDescendants */ mDoubleLineClockObserver, UserHandle.USER_ALL diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityButtonModeObserver.java b/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityButtonModeObserver.java index fbb909f30121..2c97d62d690e 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityButtonModeObserver.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityButtonModeObserver.java @@ -27,6 +27,7 @@ import android.provider.Settings; import android.util.Log; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.settings.UserTracker; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -67,8 +68,8 @@ public class AccessibilityButtonModeObserver extends } @Inject - public AccessibilityButtonModeObserver(Context context) { - super(context, Settings.Secure.ACCESSIBILITY_BUTTON_MODE); + public AccessibilityButtonModeObserver(Context context, UserTracker userTracker) { + super(context, userTracker, Settings.Secure.ACCESSIBILITY_BUTTON_MODE); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserver.java b/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserver.java index b32ebccdd7db..53a21b329594 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserver.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserver.java @@ -23,6 +23,7 @@ import androidx.annotation.MainThread; import androidx.annotation.Nullable; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.settings.UserTracker; import javax.inject.Inject; @@ -48,8 +49,8 @@ public class AccessibilityButtonTargetsObserver extends } @Inject - public AccessibilityButtonTargetsObserver(Context context) { - super(context, Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS); + public AccessibilityButtonTargetsObserver(Context context, UserTracker userTracker) { + super(context, userTracker, Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java b/packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java index e4e0da6a2310..326773fb5bef 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/SecureSettingsContentObserver.java @@ -27,6 +27,7 @@ import android.provider.Settings; import androidx.annotation.NonNull; import com.android.internal.annotations.VisibleForTesting; +import com.android.systemui.settings.UserTracker; import java.util.ArrayList; import java.util.List; @@ -44,6 +45,7 @@ import java.util.Objects; public abstract class SecureSettingsContentObserver<T> { private final ContentResolver mContentResolver; + private final UserTracker mUserTracker; @VisibleForTesting final ContentObserver mContentObserver; @@ -52,9 +54,11 @@ public abstract class SecureSettingsContentObserver<T> { @VisibleForTesting final List<T> mListeners = new ArrayList<>(); - protected SecureSettingsContentObserver(Context context, String secureSettingsKey) { + protected SecureSettingsContentObserver(Context context, UserTracker userTracker, + String secureSettingsKey) { mKey = secureSettingsKey; mContentResolver = context.getContentResolver(); + mUserTracker = userTracker; mContentObserver = new ContentObserver(new Handler(Looper.getMainLooper())) { @Override public void onChange(boolean selfChange) { @@ -103,7 +107,7 @@ public abstract class SecureSettingsContentObserver<T> { * See {@link Settings.Secure}. */ public final String getSettingsValue() { - return Settings.Secure.getStringForUser(mContentResolver, mKey, UserHandle.USER_CURRENT); + return Settings.Secure.getStringForUser(mContentResolver, mKey, mUserTracker.getUserId()); } private void updateValueChanged() { diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/SystemActions.java b/packages/SystemUI/src/com/android/systemui/accessibility/SystemActions.java index dab73e9bf289..308700f971f9 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/SystemActions.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/SystemActions.java @@ -35,7 +35,6 @@ import android.os.Looper; import android.os.PowerManager; import android.os.RemoteException; import android.os.SystemClock; -import android.os.UserHandle; import android.util.Log; import android.view.Display; import android.view.IWindowManager; @@ -52,6 +51,7 @@ import com.android.internal.util.ScreenshotHelper; import com.android.systemui.CoreStartable; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.recents.Recents; +import com.android.systemui.settings.UserTracker; import com.android.systemui.shade.ShadeController; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.NotificationShadeWindowController; @@ -179,6 +179,7 @@ public class SystemActions implements CoreStartable { private final SystemActionsBroadcastReceiver mReceiver; private final Context mContext; + private final UserTracker mUserTracker; private final Optional<Recents> mRecentsOptional; private Locale mLocale; private final AccessibilityManager mA11yManager; @@ -190,11 +191,13 @@ public class SystemActions implements CoreStartable { @Inject public SystemActions(Context context, + UserTracker userTracker, NotificationShadeWindowController notificationShadeController, ShadeController shadeController, Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy, Optional<Recents> recentsOptional) { mContext = context; + mUserTracker = userTracker; mShadeController = shadeController; mRecentsOptional = recentsOptional; mReceiver = new SystemActionsBroadcastReceiver(); @@ -525,7 +528,7 @@ public class SystemActions implements CoreStartable { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); final String chooserClassName = AccessibilityButtonChooserActivity.class.getName(); intent.setClassName(CHOOSER_PACKAGE_NAME, chooserClassName); - mContext.startActivityAsUser(intent, UserHandle.CURRENT); + mContext.startActivityAsUser(intent, mUserTracker.getUserHandle()); } private void handleAccessibilityShortcut() { diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenu.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenu.java index 9af83003d26f..7441e034f6f9 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenu.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenu.java @@ -43,6 +43,7 @@ import com.android.internal.accessibility.dialog.AccessibilityTarget; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.Prefs; import com.android.systemui.shared.system.SysUiStatsLog; +import com.android.systemui.util.settings.SecureSettings; import java.util.List; @@ -60,6 +61,7 @@ public class AccessibilityFloatingMenu implements IAccessibilityFloatingMenu { private static final float DEFAULT_POSITION_Y_PERCENT = 0.9f; private final Context mContext; + private final SecureSettings mSecureSettings; private final AccessibilityFloatingMenuView mMenuView; private final MigrationTooltipView mMigrationTooltipView; private final DockTooltipView mDockTooltipView; @@ -77,7 +79,7 @@ public class AccessibilityFloatingMenu implements IAccessibilityFloatingMenu { new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { - mMenuView.setSizeType(getSizeType(mContext)); + mMenuView.setSizeType(getSizeType()); } }; @@ -85,8 +87,8 @@ public class AccessibilityFloatingMenu implements IAccessibilityFloatingMenu { new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { - mMenuView.updateOpacityWith(isFadeEffectEnabled(mContext), - getOpacityValue(mContext)); + mMenuView.updateOpacityWith(isFadeEffectEnabled(), + getOpacityValue()); } }; @@ -98,16 +100,19 @@ public class AccessibilityFloatingMenu implements IAccessibilityFloatingMenu { } }; - public AccessibilityFloatingMenu(Context context) { + public AccessibilityFloatingMenu(Context context, SecureSettings secureSettings) { mContext = context; + mSecureSettings = secureSettings; mMenuView = new AccessibilityFloatingMenuView(context, getPosition(context)); mMigrationTooltipView = new MigrationTooltipView(mContext, mMenuView); mDockTooltipView = new DockTooltipView(mContext, mMenuView); } @VisibleForTesting - AccessibilityFloatingMenu(Context context, AccessibilityFloatingMenuView menuView) { + AccessibilityFloatingMenu(Context context, SecureSettings secureSettings, + AccessibilityFloatingMenuView menuView) { mContext = context; + mSecureSettings = secureSettings; mMenuView = menuView; mMigrationTooltipView = new MigrationTooltipView(mContext, mMenuView); mDockTooltipView = new DockTooltipView(mContext, mMenuView); @@ -130,10 +135,10 @@ public class AccessibilityFloatingMenu implements IAccessibilityFloatingMenu { mMenuView.show(); mMenuView.onTargetsChanged(targetList); - mMenuView.updateOpacityWith(isFadeEffectEnabled(mContext), - getOpacityValue(mContext)); - mMenuView.setSizeType(getSizeType(mContext)); - mMenuView.setShapeType(getShapeType(mContext)); + mMenuView.updateOpacityWith(isFadeEffectEnabled(), + getOpacityValue()); + mMenuView.setSizeType(getSizeType()); + mMenuView.setShapeType(getShapeType()); mMenuView.setOnDragEndListener(this::onDragEnd); showMigrationTooltipIfNecessary(); @@ -170,17 +175,17 @@ public class AccessibilityFloatingMenu implements IAccessibilityFloatingMenu { // Migration tooltip was the android S feature. It's just used on the Android version from R // to S. In addition, it only shows once. private void showMigrationTooltipIfNecessary() { - if (isMigrationTooltipPromptEnabled(mContext)) { + if (isMigrationTooltipPromptEnabled()) { mMigrationTooltipView.show(); - Settings.Secure.putInt(mContext.getContentResolver(), + mSecureSettings.putInt( ACCESSIBILITY_FLOATING_MENU_MIGRATION_TOOLTIP_PROMPT, /* disabled */ 0); } } - private static boolean isMigrationTooltipPromptEnabled(Context context) { - return Settings.Secure.getInt( - context.getContentResolver(), ACCESSIBILITY_FLOATING_MENU_MIGRATION_TOOLTIP_PROMPT, + private boolean isMigrationTooltipPromptEnabled() { + return mSecureSettings.getInt( + ACCESSIBILITY_FLOATING_MENU_MIGRATION_TOOLTIP_PROMPT, DEFAULT_MIGRATION_TOOLTIP_PROMPT_IS_DISABLED) == /* enabled */ 1; } @@ -212,57 +217,61 @@ public class AccessibilityFloatingMenu implements IAccessibilityFloatingMenu { } } - private static boolean isFadeEffectEnabled(Context context) { - return Settings.Secure.getInt( - context.getContentResolver(), ACCESSIBILITY_FLOATING_MENU_FADE_ENABLED, + private boolean isFadeEffectEnabled() { + return mSecureSettings.getInt( + ACCESSIBILITY_FLOATING_MENU_FADE_ENABLED, DEFAULT_FADE_EFFECT_IS_ENABLED) == /* enabled */ 1; } - private static float getOpacityValue(Context context) { - return Settings.Secure.getFloat( - context.getContentResolver(), ACCESSIBILITY_FLOATING_MENU_OPACITY, + private float getOpacityValue() { + return mSecureSettings.getFloat( + ACCESSIBILITY_FLOATING_MENU_OPACITY, DEFAULT_OPACITY_VALUE); } - private static int getSizeType(Context context) { - return Settings.Secure.getInt( - context.getContentResolver(), ACCESSIBILITY_FLOATING_MENU_SIZE, SizeType.SMALL); + private int getSizeType() { + return mSecureSettings.getInt( + ACCESSIBILITY_FLOATING_MENU_SIZE, SizeType.SMALL); } - private static int getShapeType(Context context) { - return Settings.Secure.getInt( - context.getContentResolver(), ACCESSIBILITY_FLOATING_MENU_ICON_TYPE, + private int getShapeType() { + return mSecureSettings.getInt( + ACCESSIBILITY_FLOATING_MENU_ICON_TYPE, ShapeType.OVAL); } private void registerContentObservers() { - mContext.getContentResolver().registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS), + mSecureSettings.registerContentObserverForUser( + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, /* notifyForDescendants */ false, mContentObserver, UserHandle.USER_CURRENT); - mContext.getContentResolver().registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE), + mSecureSettings.registerContentObserverForUser( + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, + /* notifyForDescendants */ false, mContentObserver, + UserHandle.USER_CURRENT); + mSecureSettings.registerContentObserverForUser( + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE, /* notifyForDescendants */ false, mSizeContentObserver, UserHandle.USER_CURRENT); - mContext.getContentResolver().registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_FLOATING_MENU_FADE_ENABLED), + mSecureSettings.registerContentObserverForUser( + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_FADE_ENABLED, /* notifyForDescendants */ false, mFadeOutContentObserver, UserHandle.USER_CURRENT); - mContext.getContentResolver().registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY), + mSecureSettings.registerContentObserverForUser( + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, /* notifyForDescendants */ false, mFadeOutContentObserver, UserHandle.USER_CURRENT); - mContext.getContentResolver().registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES), + mSecureSettings.registerContentObserverForUser( + Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, /* notifyForDescendants */ false, mEnabledA11yServicesContentObserver, UserHandle.USER_CURRENT); } private void unregisterContentObservers() { - mContext.getContentResolver().unregisterContentObserver(mContentObserver); - mContext.getContentResolver().unregisterContentObserver(mSizeContentObserver); - mContext.getContentResolver().unregisterContentObserver(mFadeOutContentObserver); - mContext.getContentResolver().unregisterContentObserver( + mSecureSettings.unregisterContentObserver(mContentObserver); + mSecureSettings.unregisterContentObserver(mSizeContentObserver); + mSecureSettings.unregisterContentObserver(mFadeOutContentObserver); + mSecureSettings.unregisterContentObserver( mEnabledA11yServicesContentObserver); } } diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java index 403941f8e639..6216b8931b34 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java @@ -31,6 +31,7 @@ import com.android.systemui.accessibility.AccessibilityButtonModeObserver; import com.android.systemui.accessibility.AccessibilityButtonModeObserver.AccessibilityButtonMode; import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.util.settings.SecureSettings; import javax.inject.Inject; @@ -44,6 +45,7 @@ public class AccessibilityFloatingMenuController implements private final AccessibilityButtonModeObserver mAccessibilityButtonModeObserver; private final AccessibilityButtonTargetsObserver mAccessibilityButtonTargetsObserver; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; + private final SecureSettings mSecureSettings; private Context mContext; @VisibleForTesting @@ -85,11 +87,13 @@ public class AccessibilityFloatingMenuController implements public AccessibilityFloatingMenuController(Context context, AccessibilityButtonTargetsObserver accessibilityButtonTargetsObserver, AccessibilityButtonModeObserver accessibilityButtonModeObserver, - KeyguardUpdateMonitor keyguardUpdateMonitor) { + KeyguardUpdateMonitor keyguardUpdateMonitor, + SecureSettings secureSettings) { mContext = context; mAccessibilityButtonTargetsObserver = accessibilityButtonTargetsObserver; mAccessibilityButtonModeObserver = accessibilityButtonModeObserver; mKeyguardUpdateMonitor = keyguardUpdateMonitor; + mSecureSettings = secureSettings; mIsKeyguardVisible = false; } @@ -159,7 +163,7 @@ public class AccessibilityFloatingMenuController implements private void showFloatingMenu() { if (mFloatingMenu == null) { - mFloatingMenu = new AccessibilityFloatingMenu(mContext); + mFloatingMenu = new AccessibilityFloatingMenu(mContext, mSecureSettings); } mFloatingMenu.show(); diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java index 7c2673c31bf5..da2e28c5522f 100644 --- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java +++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java @@ -35,8 +35,10 @@ import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.model.SysUiState; import com.android.systemui.recents.OverviewProxyService; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.policy.DeviceProvisionedController; +import com.android.systemui.util.settings.SecureSettings; import javax.inject.Inject; @@ -119,6 +121,8 @@ public class AssistManager { private final UiController mUiController; protected final Lazy<SysUiState> mSysUiState; protected final AssistLogger mAssistLogger; + private final UserTracker mUserTracker; + private final SecureSettings mSecureSettings; private final DeviceProvisionedController mDeviceProvisionedController; private final CommandQueue mCommandQueue; @@ -135,7 +139,9 @@ public class AssistManager { Lazy<SysUiState> sysUiState, DefaultUiController defaultUiController, AssistLogger assistLogger, - @Main Handler uiHandler) { + @Main Handler uiHandler, + UserTracker userTracker, + SecureSettings secureSettings) { mContext = context; mDeviceProvisionedController = controller; mCommandQueue = commandQueue; @@ -143,6 +149,8 @@ public class AssistManager { mAssistDisclosure = new AssistDisclosure(context, uiHandler); mPhoneStateMonitor = phoneStateMonitor; mAssistLogger = assistLogger; + mUserTracker = userTracker; + mSecureSettings = secureSettings; registerVoiceInteractionSessionListener(); @@ -273,7 +281,7 @@ public class AssistManager { CommandQueue.FLAG_EXCLUDE_SEARCH_PANEL | CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, false /* force */); - boolean structureEnabled = Settings.Secure.getIntForUser(mContext.getContentResolver(), + boolean structureEnabled = mSecureSettings.getIntForUser( Settings.Secure.ASSIST_STRUCTURE_ENABLED, 1, UserHandle.USER_CURRENT) != 0; final SearchManager searchManager = @@ -300,7 +308,7 @@ public class AssistManager { @Override public void run() { mContext.startActivityAsUser(intent, opts.toBundle(), - new UserHandle(UserHandle.USER_CURRENT)); + mUserTracker.getUserHandle()); } }); } catch (ActivityNotFoundException e) { diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java index 3a9706da9090..3fd00ae8ec81 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java @@ -87,6 +87,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.Execution; +import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.time.SystemClock; import java.io.PrintWriter; @@ -151,6 +152,7 @@ public class UdfpsController implements DozeReceiver, Dumpable { @NonNull private final PrimaryBouncerInteractor mPrimaryBouncerInteractor; @Nullable private final TouchProcessor mTouchProcessor; @NonNull private final AlternateBouncerInteractor mAlternateBouncerInteractor; + @NonNull private final SecureSettings mSecureSettings; // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple // sensors, this, in addition to a lot of the code here, will be updated. @@ -240,7 +242,7 @@ public class UdfpsController implements DozeReceiver, Dumpable { mLockscreenShadeTransitionController, mConfigurationController, mKeyguardStateController, mUnlockedScreenOffAnimationController, - mUdfpsDisplayMode, requestId, reason, callback, + mUdfpsDisplayMode, mSecureSettings, requestId, reason, callback, (view, event, fromUdfpsView) -> onTouch(requestId, event, fromUdfpsView), mActivityLaunchAnimator, mFeatureFlags, mPrimaryBouncerInteractor, mAlternateBouncerInteractor))); @@ -723,7 +725,8 @@ public class UdfpsController implements DozeReceiver, Dumpable { @NonNull @BiometricsBackground Executor biometricsExecutor, @NonNull PrimaryBouncerInteractor primaryBouncerInteractor, @NonNull SinglePointerTouchProcessor singlePointerTouchProcessor, - @NonNull AlternateBouncerInteractor alternateBouncerInteractor) { + @NonNull AlternateBouncerInteractor alternateBouncerInteractor, + @NonNull SecureSettings secureSettings) { mContext = context; mExecution = execution; mVibrator = vibrator; @@ -764,6 +767,7 @@ public class UdfpsController implements DozeReceiver, Dumpable { mBiometricExecutor = biometricsExecutor; mPrimaryBouncerInteractor = primaryBouncerInteractor; mAlternateBouncerInteractor = alternateBouncerInteractor; + mSecureSettings = secureSettings; mTouchProcessor = mFeatureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION) ? singlePointerTouchProcessor : null; diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt index a3c4985fd5cc..b6b5d26b398c 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt @@ -60,6 +60,7 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.util.settings.SecureSettings private const val TAG = "UdfpsControllerOverlay" @@ -89,6 +90,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor( private val keyguardStateController: KeyguardStateController, private val unlockedScreenOffAnimationController: UnlockedScreenOffAnimationController, private var udfpsDisplayModeProvider: UdfpsDisplayModeProvider, + private val secureSettings: SecureSettings, val requestId: Long, @ShowReason val requestReason: Int, private val controllerCallback: IUdfpsOverlayControllerCallback, @@ -131,7 +133,7 @@ class UdfpsControllerOverlay @JvmOverloads constructor( /** A helper if the [requestReason] was due to enrollment. */ val enrollHelper: UdfpsEnrollHelper? = if (requestReason.isEnrollmentReason() && !shouldRemoveEnrollmentUi()) { - UdfpsEnrollHelper(context, fingerprintManager, requestReason) + UdfpsEnrollHelper(context, fingerprintManager, secureSettings, requestReason) } else { null } diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java index d5c763d3b6e2..cfa8ec5dbf1a 100644 --- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java +++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsEnrollHelper.java @@ -24,11 +24,12 @@ import android.hardware.biometrics.BiometricOverlayConstants; import android.hardware.fingerprint.FingerprintManager; import android.os.Build; import android.os.UserHandle; -import android.provider.Settings; import android.util.Log; import android.util.TypedValue; import android.view.accessibility.AccessibilityManager; +import com.android.systemui.util.settings.SecureSettings; + import java.util.ArrayList; import java.util.List; @@ -51,8 +52,8 @@ public class UdfpsEnrollHelper { void onLastStepAcquired(); } - @NonNull private final Context mContext; @NonNull private final FingerprintManager mFingerprintManager; + @NonNull private final SecureSettings mSecureSettings; // IUdfpsOverlayController reason private final int mEnrollReason; private final boolean mAccessibilityEnabled; @@ -70,10 +71,11 @@ public class UdfpsEnrollHelper { @Nullable Listener mListener; public UdfpsEnrollHelper(@NonNull Context context, - @NonNull FingerprintManager fingerprintManager, int reason) { + @NonNull FingerprintManager fingerprintManager, SecureSettings secureSettings, + int reason) { - mContext = context; mFingerprintManager = fingerprintManager; + mSecureSettings = secureSettings; mEnrollReason = reason; final AccessibilityManager am = context.getSystemService(AccessibilityManager.class); @@ -84,8 +86,7 @@ public class UdfpsEnrollHelper { // Number of pixels per mm float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, 1, context.getResources().getDisplayMetrics()); - boolean useNewCoords = Settings.Secure.getIntForUser(mContext.getContentResolver(), - NEW_COORDS_OVERRIDE, 0, + boolean useNewCoords = mSecureSettings.getIntForUser(NEW_COORDS_OVERRIDE, 0, UserHandle.USER_CURRENT) != 0; if (useNewCoords && (Build.IS_ENG || Build.IS_USERDEBUG)) { Log.v(TAG, "Using new coordinates"); @@ -210,8 +211,7 @@ public class UdfpsEnrollHelper { float scale = SCALE; if (Build.IS_ENG || Build.IS_USERDEBUG) { - scale = Settings.Secure.getFloatForUser(mContext.getContentResolver(), - SCALE_OVERRIDE, SCALE, + scale = mSecureSettings.getFloatForUser(SCALE_OVERRIDE, SCALE, UserHandle.USER_CURRENT); } final int index = mLocationsEnrolled - mCenterTouchCount; diff --git a/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt b/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt index 58d40d349dec..4227a7a67330 100644 --- a/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt +++ b/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt @@ -25,13 +25,13 @@ import android.content.Intent import android.content.pm.PackageManager import android.content.pm.ResolveInfo import android.os.RemoteException -import android.os.UserHandle import android.util.Log import android.view.WindowManager import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.ActivityIntentHelper import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.settings.UserTracker import com.android.systemui.shared.system.ActivityManagerKt.isInForeground import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.phone.CentralSurfaces @@ -55,6 +55,7 @@ class CameraGestureHelper @Inject constructor( private val cameraIntents: CameraIntentsWrapper, private val contentResolver: ContentResolver, @Main private val uiExecutor: Executor, + private val userTracker: UserTracker ) { /** * Whether the camera application can be launched for the camera launch gesture. @@ -111,7 +112,7 @@ class CameraGestureHelper @Inject constructor( Intent.FLAG_ACTIVITY_NEW_TASK, null, activityOptions.toBundle(), - UserHandle.CURRENT.identifier, + userTracker.userId, ) } catch (e: RemoteException) { Log.w( diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeDockHandler.java b/packages/SystemUI/src/com/android/systemui/doze/DozeDockHandler.java index 2a3d67fd7a8d..c331164f001b 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeDockHandler.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeDockHandler.java @@ -17,12 +17,12 @@ package com.android.systemui.doze; import android.hardware.display.AmbientDisplayConfiguration; -import android.os.UserHandle; import android.util.Log; import com.android.systemui.dock.DockManager; import com.android.systemui.doze.DozeMachine.State; import com.android.systemui.doze.dagger.DozeScope; +import com.android.systemui.settings.UserTracker; import java.io.PrintWriter; @@ -40,14 +40,17 @@ public class DozeDockHandler implements DozeMachine.Part { private final AmbientDisplayConfiguration mConfig; private DozeMachine mMachine; private final DockManager mDockManager; + private final UserTracker mUserTracker; private final DockEventListener mDockEventListener; private int mDockState = DockManager.STATE_NONE; @Inject - DozeDockHandler(AmbientDisplayConfiguration config, DockManager dockManager) { + DozeDockHandler(AmbientDisplayConfiguration config, DockManager dockManager, + UserTracker userTracker) { mConfig = config; mDockManager = dockManager; + mUserTracker = userTracker; mDockEventListener = new DockEventListener(); } @@ -100,7 +103,7 @@ public class DozeDockHandler implements DozeMachine.Part { nextState = State.DOZE_AOD_DOCKED; break; case DockManager.STATE_NONE: - nextState = mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT) ? State.DOZE_AOD + nextState = mConfig.alwaysOnEnabled(mUserTracker.getUserId()) ? State.DOZE_AOD : State.DOZE; break; case DockManager.STATE_DOCKED_HIDE: diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java index 96c35d43052e..fc3263fd3d11 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java @@ -23,7 +23,6 @@ import android.annotation.MainThread; import android.content.res.Configuration; import android.hardware.display.AmbientDisplayConfiguration; import android.os.Trace; -import android.os.UserHandle; import android.util.Log; import android.view.Display; @@ -33,6 +32,7 @@ import com.android.systemui.doze.dagger.DozeScope; import com.android.systemui.doze.dagger.WrappedService; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.keyguard.WakefulnessLifecycle.Wakefulness; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.Assert; import com.android.systemui.util.wakelock.WakeLock; @@ -149,6 +149,7 @@ public class DozeMachine { private final DozeHost mDozeHost; private final DockManager mDockManager; private final Part[] mParts; + private final UserTracker mUserTracker; private final ArrayList<State> mQueuedRequests = new ArrayList<>(); private State mState = State.UNINITIALIZED; @@ -161,7 +162,7 @@ public class DozeMachine { AmbientDisplayConfiguration ambientDisplayConfig, WakeLock wakeLock, WakefulnessLifecycle wakefulnessLifecycle, DozeLog dozeLog, DockManager dockManager, - DozeHost dozeHost, Part[] parts) { + DozeHost dozeHost, Part[] parts, UserTracker userTracker) { mDozeService = service; mAmbientDisplayConfig = ambientDisplayConfig; mWakefulnessLifecycle = wakefulnessLifecycle; @@ -170,6 +171,7 @@ public class DozeMachine { mDockManager = dockManager; mDozeHost = dozeHost; mParts = parts; + mUserTracker = userTracker; for (Part part : parts) { part.setDozeMachine(this); } @@ -429,7 +431,7 @@ public class DozeMachine { nextState = State.FINISH; } else if (mDockManager.isDocked()) { nextState = mDockManager.isHidden() ? State.DOZE : State.DOZE_AOD_DOCKED; - } else if (mAmbientDisplayConfig.alwaysOnEnabled(UserHandle.USER_CURRENT)) { + } else if (mAmbientDisplayConfig.alwaysOnEnabled(mUserTracker.getUserId())) { nextState = State.DOZE_AOD; } else { nextState = State.DOZE; diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java index 937884c79072..4cade77c8312 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java @@ -43,6 +43,7 @@ import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.policy.DevicePostureController; import com.android.systemui.util.sensors.AsyncSensorManager; +import com.android.systemui.util.settings.SystemSettings; import java.io.PrintWriter; import java.util.Objects; @@ -78,6 +79,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi private final DozeParameters mDozeParameters; private final DevicePostureController mDevicePostureController; private final DozeLog mDozeLog; + private final SystemSettings mSystemSettings; private final int[] mSensorToBrightness; private final int[] mSensorToScrimOpacity; private final int mScreenBrightnessDim; @@ -110,7 +112,8 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi WakefulnessLifecycle wakefulnessLifecycle, DozeParameters dozeParameters, DevicePostureController devicePostureController, - DozeLog dozeLog) { + DozeLog dozeLog, + SystemSettings systemSettings) { mContext = context; mDozeService = service; mSensorManager = sensorManager; @@ -122,6 +125,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi mDozeHost = host; mHandler = handler; mDozeLog = dozeLog; + mSystemSettings = systemSettings; mScreenBrightnessMinimumDimAmountFloat = context.getResources().getFloat( R.dimen.config_screenBrightnessMinimumDimAmountFloat); @@ -257,7 +261,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi } //TODO: brightnessfloat change usages to float. private int clampToUserSetting(int brightness) { - int userSetting = Settings.System.getIntForUser(mContext.getContentResolver(), + int userSetting = mSystemSettings.getIntForUser( Settings.System.SCREEN_BRIGHTNESS, Integer.MAX_VALUE, UserHandle.USER_CURRENT); return Math.min(brightness, userSetting); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java index 2ef1262fe55e..e3c568a98cc6 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java @@ -252,7 +252,7 @@ public class DozeSensors { new SensorManagerPlugin.Sensor(TYPE_WAKE_DISPLAY), Settings.Secure.DOZE_WAKE_DISPLAY_GESTURE, mConfig.wakeScreenGestureAvailable() - && mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT), + && mConfig.alwaysOnEnabled(mUserTracker.getUserId()), DozeLog.REASON_SENSOR_WAKE_UP_PRESENCE, false /* reports touch coordinates */, false /* touchscreen */ @@ -293,7 +293,7 @@ public class DozeSensors { private boolean udfpsLongPressConfigured() { return mUdfpsEnrolled - && (mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT) || mScreenOffUdfpsEnabled); + && (mConfig.alwaysOnEnabled(mUserTracker.getUserId()) || mScreenOffUdfpsEnabled); } private boolean quickPickUpConfigured() { @@ -694,13 +694,13 @@ public class DozeSensors { } protected boolean enabledBySetting() { - if (!mConfig.enabled(UserHandle.USER_CURRENT)) { + if (!mConfig.enabled(mUserTracker.getUserId())) { return false; } else if (TextUtils.isEmpty(mSetting)) { return true; } return mSecureSettings.getIntForUser(mSetting, mSettingDefault ? 1 : 0, - UserHandle.USER_CURRENT) != 0; + mUserTracker.getUserId()) != 0; } @Override diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java index e6d98655b119..de0bdd344a72 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSuppressor.java @@ -20,10 +20,10 @@ import static android.content.res.Configuration.UI_MODE_TYPE_CAR; import android.hardware.display.AmbientDisplayConfiguration; import android.os.PowerManager; -import android.os.UserHandle; import android.text.TextUtils; import com.android.systemui.doze.dagger.DozeScope; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.BiometricUnlockController; import java.io.PrintWriter; @@ -57,6 +57,7 @@ public class DozeSuppressor implements DozeMachine.Part { private final AmbientDisplayConfiguration mConfig; private final DozeLog mDozeLog; private final Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy; + private final UserTracker mUserTracker; private boolean mIsCarModeEnabled = false; @@ -65,11 +66,13 @@ public class DozeSuppressor implements DozeMachine.Part { DozeHost dozeHost, AmbientDisplayConfiguration config, DozeLog dozeLog, - Lazy<BiometricUnlockController> biometricUnlockControllerLazy) { + Lazy<BiometricUnlockController> biometricUnlockControllerLazy, + UserTracker userTracker) { mDozeHost = dozeHost; mConfig = config; mDozeLog = dozeLog; mBiometricUnlockControllerLazy = biometricUnlockControllerLazy; + mUserTracker = userTracker; } @Override @@ -148,7 +151,7 @@ public class DozeSuppressor implements DozeMachine.Part { private void handleCarModeExited() { mDozeLog.traceCarModeEnded(); - mMachine.requestState(mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT) + mMachine.requestState(mConfig.alwaysOnEnabled(mUserTracker.getUserId()) ? DozeMachine.State.DOZE_AOD : DozeMachine.State.DOZE); } @@ -166,7 +169,7 @@ public class DozeSuppressor implements DozeMachine.Part { if (mDozeHost.isPowerSaveActive()) { nextState = DozeMachine.State.DOZE; } else if (mMachine.getState() == DozeMachine.State.DOZE - && mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT)) { + && mConfig.alwaysOnEnabled(mUserTracker.getUserId())) { nextState = DozeMachine.State.DOZE_AOD; } @@ -181,7 +184,7 @@ public class DozeSuppressor implements DozeMachine.Part { // handles suppression changes, while DozeMachine#transitionPolicy handles gating // transitions to DOZE_AOD final DozeMachine.State nextState; - if (mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT) && !suppressed) { + if (mConfig.alwaysOnEnabled(mUserTracker.getUserId()) && !suppressed) { nextState = DozeMachine.State.DOZE_AOD; } else { nextState = DozeMachine.State.DOZE; diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java index f1bb156199ef..90c440c403ec 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java @@ -25,7 +25,6 @@ import android.net.ConnectivityManager.NetworkCallback; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkRequest; -import android.os.UserHandle; import android.provider.Settings; import android.text.format.DateFormat; import android.util.PluralsMessageFormatter; @@ -37,6 +36,7 @@ import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider.StatusBarItem; import com.android.systemui.dreams.dagger.DreamOverlayComponent; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CrossFadeHelper; import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; import com.android.systemui.statusbar.policy.NextAlarmController; @@ -72,6 +72,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve mDreamOverlayNotificationCountProvider; private final ZenModeController mZenModeController; private final DreamOverlayStateController mDreamOverlayStateController; + private final UserTracker mUserTracker; private final StatusBarWindowStateController mStatusBarWindowStateController; private final DreamOverlayStatusBarItemsProvider mStatusBarItemsProvider; private final Executor mMainExecutor; @@ -154,7 +155,8 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve ZenModeController zenModeController, StatusBarWindowStateController statusBarWindowStateController, DreamOverlayStatusBarItemsProvider statusBarItemsProvider, - DreamOverlayStateController dreamOverlayStateController) { + DreamOverlayStateController dreamOverlayStateController, + UserTracker userTracker) { super(view); mResources = resources; mMainExecutor = mainExecutor; @@ -169,6 +171,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve mStatusBarItemsProvider = statusBarItemsProvider; mZenModeController = zenModeController; mDreamOverlayStateController = dreamOverlayStateController; + mUserTracker = userTracker; // Register to receive show/hide updates for the system status bar. Our custom status bar // needs to hide when the system status bar is showing to ovoid overlapping status bars. @@ -259,7 +262,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve private void updateAlarmStatusIcon() { final AlarmManager.AlarmClockInfo alarm = - mAlarmManager.getNextAlarmClock(UserHandle.USER_CURRENT); + mAlarmManager.getNextAlarmClock(mUserTracker.getUserId()); final boolean hasAlarm = alarm != null && alarm.getTriggerTime() > 0; showIcon( DreamOverlayStatusBarView.STATUS_ICON_ALARM_SET, diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java index db2cd91374e5..bb9acddff84f 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java @@ -901,7 +901,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene | Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra(EmergencyDialerConstants.EXTRA_ENTRY_TYPE, EmergencyDialerConstants.ENTRY_TYPE_POWER_MENU); - mContext.startActivityAsUser(intent, UserHandle.CURRENT); + mContext.startActivityAsUser(intent, mUserTracker.getUserHandle()); } } } diff --git a/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java b/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java index 4f1a2b34f07c..ad7973ed0b7a 100644 --- a/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java +++ b/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java @@ -24,7 +24,6 @@ import android.bluetooth.le.ScanFilter; import android.bluetooth.le.ScanRecord; import android.bluetooth.le.ScanResult; import android.bluetooth.le.ScanSettings; -import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; import android.hardware.input.InputManager; @@ -53,6 +52,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; import com.android.systemui.CoreStartable; import com.android.systemui.R; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.util.settings.SecureSettings; import java.io.PrintWriter; import java.util.Arrays; @@ -108,6 +108,7 @@ public class KeyboardUI implements CoreStartable, InputManager.OnTabletModeChang protected volatile Context mContext; private final Provider<LocalBluetoothManager> mBluetoothManagerProvider; + private final SecureSettings mSecureSettings; private boolean mEnabled; private String mKeyboardName; @@ -125,9 +126,11 @@ public class KeyboardUI implements CoreStartable, InputManager.OnTabletModeChang private int mState; @Inject - public KeyboardUI(Context context, Provider<LocalBluetoothManager> bluetoothManagerProvider) { + public KeyboardUI(Context context, Provider<LocalBluetoothManager> bluetoothManagerProvider, + SecureSettings secureSettings) { mContext = context; this.mBluetoothManagerProvider = bluetoothManagerProvider; + mSecureSettings = secureSettings; } @Override @@ -298,9 +301,8 @@ public class KeyboardUI implements CoreStartable, InputManager.OnTabletModeChang } private boolean isUserSetupComplete() { - ContentResolver resolver = mContext.getContentResolver(); - return Secure.getIntForUser( - resolver, Secure.USER_SETUP_COMPLETE, 0, UserHandle.USER_CURRENT) != 0; + return mSecureSettings.getIntForUser( + Secure.USER_SETUP_COMPLETE, 0, UserHandle.USER_CURRENT) != 0; } private CachedBluetoothDevice getPairedKeyboard() { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index fe84ac5a32bc..6c0e684b5cd9 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -1334,7 +1334,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, mHideAnimation = AnimationUtils.loadAnimation(mContext, com.android.internal.R.anim.lock_screen_behind_enter); - mWorkLockController = new WorkLockActivityController(mContext); + mWorkLockController = new WorkLockActivityController(mContext, mUserTracker); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java index 16817ed4c5fe..b92499eb883e 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/WorkLockActivityController.java @@ -26,10 +26,10 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.RemoteException; -import android.os.UserHandle; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; +import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; @@ -37,16 +37,20 @@ public class WorkLockActivityController { private static final String TAG = WorkLockActivityController.class.getSimpleName(); private final Context mContext; + private final UserTracker mUserTracker; private final IActivityTaskManager mIatm; - public WorkLockActivityController(Context context) { - this(context, TaskStackChangeListeners.getInstance(), ActivityTaskManager.getService()); + public WorkLockActivityController(Context context, UserTracker userTracker) { + this(context, userTracker, TaskStackChangeListeners.getInstance(), + ActivityTaskManager.getService()); } @VisibleForTesting WorkLockActivityController( - Context context, TaskStackChangeListeners tscl, IActivityTaskManager iAtm) { + Context context, UserTracker userTracker, TaskStackChangeListeners tscl, + IActivityTaskManager iAtm) { mContext = context; + mUserTracker = userTracker; mIatm = iAtm; tscl.registerTaskStackListener(mLockListener); @@ -65,7 +69,8 @@ public class WorkLockActivityController { options.setLaunchTaskId(info.taskId); options.setTaskOverlay(true, false /* canResume */); - final int result = startActivityAsUser(intent, options.toBundle(), UserHandle.USER_CURRENT); + final int result = startActivityAsUser(intent, options.toBundle(), + mUserTracker.getUserId()); if (ActivityManager.isStartResultSuccessful(result)) { // OK } else { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfig.kt index ed1ff329004a..be73f851fa82 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/DoNotDisturbQuickAffordanceConfig.kt @@ -128,7 +128,7 @@ constructor( awaitClose { controller.removeCallback(callback) } }, secureSettings - .observerFlow(Settings.Secure.ZEN_DURATION) + .observerFlow(userTracker.userId, Settings.Secure.ZEN_DURATION) .onStart { emit(Unit) } .map { secureSettings.getInt(Settings.Secure.ZEN_DURATION, ZEN_MODE_OFF) } .flowOn(backgroundDispatcher) diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java index a92203ca74fa..1121e160c353 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java @@ -297,7 +297,7 @@ public final class NavBarHelper implements private void updateAssistantAvailability() { boolean assistantAvailableForUser = mAssistManagerLazy.get() - .getAssistInfoForUser(UserHandle.USER_CURRENT) != null; + .getAssistInfoForUser(mUserTracker.getUserId()) != null; boolean longPressDefault = mContext.getResources().getBoolean( com.android.internal.R.bool.config_assistLongPressHomeEnabledDefault); mLongPressHomeEnabled = Settings.Secure.getIntForUser(mContentResolver, diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java index 61bb858ee7d7..5993e2eaadad 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java @@ -72,7 +72,6 @@ import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; -import android.os.UserHandle; import android.provider.DeviceConfig; import android.telecom.TelecomManager; import android.text.TextUtils; @@ -1477,7 +1476,7 @@ public class NavigationBar extends ViewController<NavigationBarView> implements intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); final String chooserClassName = AccessibilityButtonChooserActivity.class.getName(); intent.setClassName(CHOOSER_PACKAGE_NAME, chooserClassName); - mContext.startActivityAsUser(intent, UserHandle.CURRENT); + mContext.startActivityAsUser(intent, mUserTracker.getUserHandle()); return true; } diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java index 5d43c5dc19fa..dce69bb7ac1e 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarController.java @@ -24,7 +24,6 @@ import static android.view.Display.DEFAULT_DISPLAY; import static com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler.DEBUG_MISSING_GESTURE_TAG; import static com.android.systemui.shared.recents.utilities.Utilities.isTablet; -import android.content.ContentResolver; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Configuration; @@ -63,8 +62,8 @@ import com.android.systemui.statusbar.CommandQueue.Callbacks; import com.android.systemui.statusbar.phone.AutoHideController; import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode; import com.android.systemui.statusbar.phone.LightBarController; -import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.util.settings.SecureSettings; import com.android.wm.shell.back.BackAnimation; import com.android.wm.shell.pip.Pip; @@ -87,6 +86,7 @@ public class NavigationBarController implements private final Handler mHandler; private final NavigationBarComponent.Factory mNavigationBarComponentFactory; private FeatureFlags mFeatureFlags; + private final SecureSettings mSecureSettings; private final DisplayManager mDisplayManager; private final TaskbarDelegate mTaskbarDelegate; private int mNavMode; @@ -118,11 +118,13 @@ public class NavigationBarController implements TaskStackChangeListeners taskStackChangeListeners, Optional<Pip> pipOptional, Optional<BackAnimation> backAnimation, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, + SecureSettings secureSettings) { mContext = context; mHandler = mainHandler; mNavigationBarComponentFactory = navigationBarComponentFactory; mFeatureFlags = featureFlags; + mSecureSettings = secureSettings; mDisplayManager = mContext.getSystemService(DisplayManager.class); commandQueue.addCallback(this); configurationController.addCallback(this); @@ -192,8 +194,7 @@ public class NavigationBarController implements } private void updateAccessibilityButtonModeIfNeeded() { - ContentResolver contentResolver = mContext.getContentResolver(); - final int mode = Settings.Secure.getIntForUser(contentResolver, + final int mode = mSecureSettings.getIntForUser( Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT); @@ -207,14 +208,14 @@ public class NavigationBarController implements // force update to ACCESSIBILITY_BUTTON_MODE_GESTURE. if (QuickStepContract.isGesturalMode(mNavMode) && mode == ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR) { - Settings.Secure.putIntForUser(contentResolver, + mSecureSettings.putIntForUser( Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_GESTURE, UserHandle.USER_CURRENT); // ACCESSIBILITY_BUTTON_MODE_GESTURE is incompatible under non gestural mode. Need to // force update to ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR. } else if (!QuickStepContract.isGesturalMode(mNavMode) && mode == ACCESSIBILITY_BUTTON_MODE_GESTURE) { - Settings.Secure.putIntForUser(contentResolver, + mSecureSettings.putIntForUser( Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT); } diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java index 90fc1d7ed49e..595b88241aae 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java @@ -68,6 +68,7 @@ import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.util.NotificationChannels; @@ -175,7 +176,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { private ActivityStarter mActivityStarter; private final BroadcastSender mBroadcastSender; private final UiEventLogger mUiEventLogger; - + private final UserTracker mUserTracker; private final Lazy<BatteryController> mBatteryControllerLazy; private final DialogLaunchAnimator mDialogLaunchAnimator; @@ -184,7 +185,8 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { @Inject public PowerNotificationWarnings(Context context, ActivityStarter activityStarter, BroadcastSender broadcastSender, Lazy<BatteryController> batteryControllerLazy, - DialogLaunchAnimator dialogLaunchAnimator, UiEventLogger uiEventLogger) { + DialogLaunchAnimator dialogLaunchAnimator, UiEventLogger uiEventLogger, + UserTracker userTracker) { mContext = context; mNoMan = mContext.getSystemService(NotificationManager.class); mPowerMan = (PowerManager) context.getSystemService(Context.POWER_SERVICE); @@ -196,6 +198,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { mDialogLaunchAnimator = dialogLaunchAnimator; mUseSevereDialog = mContext.getResources().getBoolean(R.bool.config_severe_battery_dialog); mUiEventLogger = uiEventLogger; + mUserTracker = userTracker; } @Override @@ -692,7 +695,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { Secure.putIntForUser( resolver, Secure.LOW_POWER_WARNING_ACKNOWLEDGED, - 1, UserHandle.USER_CURRENT); + 1, mUserTracker.getUserId()); }); } else { d.setTitle(R.string.battery_saver_confirmation_title); @@ -843,7 +846,8 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { logEvent(BatteryWarningEvents .LowBatteryWarningEvent.LOW_BATTERY_NOTIFICATION_SETTINGS); dismissLowBatteryNotification(); - mContext.startActivityAsUser(mOpenBatterySaverSettings, UserHandle.CURRENT); + mContext.startActivityAsUser(mOpenBatterySaverSettings, + mUserTracker.getUserHandle()); } else if (action.equals(ACTION_START_SAVER)) { logEvent(BatteryWarningEvents .LowBatteryWarningEvent.LOW_BATTERY_NOTIFICATION_TURN_ON); diff --git a/packages/SystemUI/src/com/android/systemui/qs/ReduceBrightColorsController.java b/packages/SystemUI/src/com/android/systemui/qs/ReduceBrightColorsController.java index 39d081da43cb..36dc7433df0a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/ReduceBrightColorsController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/ReduceBrightColorsController.java @@ -83,8 +83,7 @@ public class ReduceBrightColorsController implements if (mListeners.size() > 0) { mSecureSettings.unregisterContentObserver(mContentObserver); mSecureSettings.registerContentObserverForUser( - Settings.Secure.getUriFor( - Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED), + Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, false, mContentObserver, newUser); } } @@ -100,8 +99,7 @@ public class ReduceBrightColorsController implements mListeners.add(listener); if (mListeners.size() == 1) { mSecureSettings.registerContentObserverForUser( - Settings.Secure.getUriFor( - Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED), + Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED, false, mContentObserver, mUserTracker.getUserId()); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java index 4d005bebd99e..0240d8e8fbc7 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java @@ -311,7 +311,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis intent.setClassName(CHOOSER_PACKAGE_NAME, chooserClassName); intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - mContext.startActivityAsUser(intent, UserHandle.CURRENT); + mContext.startActivityAsUser(intent, mUserTracker.getUserHandle()); }); } diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java index 5450db98af52..d64b33bb3eb1 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/LongScreenshotActivity.java @@ -49,6 +49,7 @@ import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.screenshot.ScrollCaptureController.LongScreenshot; +import com.android.systemui.settings.UserTracker; import com.google.common.util.concurrent.ListenableFuture; @@ -79,6 +80,7 @@ public class LongScreenshotActivity extends Activity { private final LongScreenshotData mLongScreenshotHolder; private final ActionIntentExecutor mActionExecutor; private final FeatureFlags mFeatureFlags; + private final UserTracker mUserTracker; private ImageView mPreview; private ImageView mTransitionView; @@ -110,7 +112,7 @@ public class LongScreenshotActivity extends Activity { public LongScreenshotActivity(UiEventLogger uiEventLogger, ImageExporter imageExporter, @Main Executor mainExecutor, @Background Executor bgExecutor, LongScreenshotData longScreenshotHolder, ActionIntentExecutor actionExecutor, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, UserTracker userTracker) { mUiEventLogger = uiEventLogger; mUiExecutor = mainExecutor; mBackgroundExecutor = bgExecutor; @@ -118,6 +120,7 @@ public class LongScreenshotActivity extends Activity { mLongScreenshotHolder = longScreenshotHolder; mActionExecutor = actionExecutor; mFeatureFlags = featureFlags; + mUserTracker = userTracker; } @@ -375,7 +378,7 @@ public class LongScreenshotActivity extends Activity { Intent sharingChooserIntent = Intent.createChooser(intent, null) .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - startActivityAsUser(sharingChooserIntent, UserHandle.CURRENT); + startActivityAsUser(sharingChooserIntent, mUserTracker.getUserHandle()); } } diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java index 5880003cdb1a..2f6081bc9f8d 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java @@ -218,7 +218,7 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig automatic = Settings.System.getIntForUser(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL, - UserHandle.USER_CURRENT); + mUserTracker.getUserId()); mAutomatic = automatic != Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL; } }; diff --git a/packages/SystemUI/src/com/android/systemui/shade/PulsingGestureListener.kt b/packages/SystemUI/src/com/android/systemui/shade/PulsingGestureListener.kt index db700650e46c..b42bdaac9cdb 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/PulsingGestureListener.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/PulsingGestureListener.kt @@ -19,7 +19,6 @@ package com.android.systemui.shade import android.hardware.display.AmbientDisplayConfiguration import android.os.PowerManager import android.os.SystemClock -import android.os.UserHandle import android.provider.Settings import android.view.GestureDetector import android.view.MotionEvent @@ -29,6 +28,7 @@ import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.FalsingManager.LOW_PENALTY import com.android.systemui.plugins.statusbar.StatusBarStateController +import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent import com.android.systemui.tuner.TunerService @@ -54,6 +54,7 @@ class PulsingGestureListener @Inject constructor( private val ambientDisplayConfiguration: AmbientDisplayConfiguration, private val statusBarStateController: StatusBarStateController, private val shadeLogger: ShadeLogger, + userTracker: UserTracker, tunerService: TunerService, dumpManager: DumpManager ) : GestureDetector.SimpleOnGestureListener(), Dumpable { @@ -65,10 +66,10 @@ class PulsingGestureListener @Inject constructor( when (key) { Settings.Secure.DOZE_DOUBLE_TAP_GESTURE -> doubleTapEnabled = ambientDisplayConfiguration.doubleTapGestureEnabled( - UserHandle.USER_CURRENT) + userTracker.userId) Settings.Secure.DOZE_TAP_SCREEN_GESTURE -> singleTapEnabled = ambientDisplayConfiguration.tapGestureEnabled( - UserHandle.USER_CURRENT) + userTracker.userId) } } tunerService.addTunable(tunable, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java index d9dacfd0e27c..3e2a9e5a2de3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImpl.java @@ -28,7 +28,6 @@ import android.hardware.display.AmbientDisplayConfiguration; import android.os.Handler; import android.os.PowerManager; import android.os.RemoteException; -import android.os.UserHandle; import android.provider.Settings; import android.service.dreams.IDreamManager; import android.service.notification.StatusBarNotification; @@ -40,6 +39,7 @@ import com.android.internal.logging.UiEventLogger; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.NotifPipelineFlags; import com.android.systemui.statusbar.notification.collection.NotificationEntry; @@ -74,6 +74,7 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter private final NotifPipelineFlags mFlags; private final KeyguardNotificationVisibilityProvider mKeyguardNotificationVisibilityProvider; private final UiEventLogger mUiEventLogger; + private final UserTracker mUserTracker; @VisibleForTesting protected boolean mUseHeadsUp = false; @@ -114,7 +115,8 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter @Main Handler mainHandler, NotifPipelineFlags flags, KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider, - UiEventLogger uiEventLogger) { + UiEventLogger uiEventLogger, + UserTracker userTracker) { mContentResolver = contentResolver; mPowerManager = powerManager; mDreamManager = dreamManager; @@ -127,6 +129,7 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter mFlags = flags; mKeyguardNotificationVisibilityProvider = keyguardNotificationVisibilityProvider; mUiEventLogger = uiEventLogger; + mUserTracker = userTracker; ContentObserver headsUpObserver = new ContentObserver(mainHandler) { @Override public void onChange(boolean selfChange) { @@ -450,7 +453,7 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter * @return true if the entry should ambient pulse, false otherwise */ private boolean shouldHeadsUpWhenDozing(NotificationEntry entry, boolean log) { - if (!mAmbientDisplayConfiguration.pulseOnNotificationEnabled(UserHandle.USER_CURRENT)) { + if (!mAmbientDisplayConfiguration.pulseOnNotificationEnabled(mUserTracker.getUserId())) { if (log) mLogger.logNoPulsingSettingDisabled(entry); return false; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java index 58919489496d..d193d07d1fc0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java @@ -120,6 +120,7 @@ import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.tuner.TunerService; import com.android.systemui.util.Compile; +import com.android.systemui.util.settings.SecureSettings; import java.util.ArrayList; import java.util.List; @@ -189,6 +190,7 @@ public class NotificationStackScrollLayoutController { private final FeatureFlags mFeatureFlags; private final boolean mUseRoundnessSourceTypes; private final NotificationTargetsHelper mNotificationTargetsHelper; + private final SecureSettings mSecureSettings; private View mLongPressedView; @@ -667,7 +669,8 @@ public class NotificationStackScrollLayoutController { NotificationStackScrollLogger logger, NotificationStackSizeCalculator notificationStackSizeCalculator, FeatureFlags featureFlags, - NotificationTargetsHelper notificationTargetsHelper) { + NotificationTargetsHelper notificationTargetsHelper, + SecureSettings secureSettings) { mStackStateLogger = stackLogger; mLogger = logger; mAllowLongPress = allowLongPress; @@ -709,6 +712,7 @@ public class NotificationStackScrollLayoutController { mFeatureFlags = featureFlags; mUseRoundnessSourceTypes = featureFlags.isEnabled(Flags.USE_ROUNDNESS_SOURCETYPES); mNotificationTargetsHelper = notificationTargetsHelper; + mSecureSettings = secureSettings; updateResources(); } @@ -1015,8 +1019,7 @@ public class NotificationStackScrollLayoutController { Log.wtf(TAG, "isHistoryEnabled failed to initialize its value"); return false; } - mHistoryEnabled = historyEnabled = Settings.Secure.getIntForUser( - mView.getContext().getContentResolver(), + mHistoryEnabled = historyEnabled = mSecureSettings.getIntForUser( Settings.Secure.NOTIFICATION_HISTORY_ENABLED, 0, UserHandle.USER_CURRENT) == 1; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java index 2dad8e053ee1..2de6470f0e18 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java @@ -31,7 +31,6 @@ import android.content.res.Resources; import android.os.Bundle; import android.os.PowerManager; import android.os.SystemClock; -import android.os.UserHandle; import android.os.VibrationAttributes; import android.os.VibrationEffect; import android.os.Vibrator; @@ -55,6 +54,7 @@ import com.android.systemui.dagger.qualifiers.DisplayId; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.qs.QSPanelController; +import com.android.systemui.settings.UserTracker; import com.android.systemui.shade.CameraLauncher; import com.android.systemui.shade.NotificationPanelViewController; import com.android.systemui.shade.ShadeController; @@ -99,6 +99,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba private final Optional<Vibrator> mVibratorOptional; private final DisableFlagsLogger mDisableFlagsLogger; private final int mDisplayId; + private final UserTracker mUserTracker; private final boolean mVibrateOnOpening; private final VibrationEffect mCameraLaunchGestureVibrationEffect; private final SystemBarAttributesListener mSystemBarAttributesListener; @@ -133,7 +134,8 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba DisableFlagsLogger disableFlagsLogger, @DisplayId int displayId, SystemBarAttributesListener systemBarAttributesListener, - Lazy<CameraLauncher> cameraLauncherLazy) { + Lazy<CameraLauncher> cameraLauncherLazy, + UserTracker userTracker) { mCentralSurfaces = centralSurfaces; mContext = context; mShadeController = shadeController; @@ -157,6 +159,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba mDisableFlagsLogger = disableFlagsLogger; mDisplayId = displayId; mCameraLauncherLazy = cameraLauncherLazy; + mUserTracker = userTracker; mVibrateOnOpening = resources.getBoolean(R.bool.config_vibrateOnIconAnimation); mCameraLaunchGestureVibrationEffect = getCameraGestureVibrationEffect( @@ -375,7 +378,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba mCentralSurfaces.startActivityDismissingKeyguard(cameraIntent, false /* onlyProvisioned */, true /* dismissShade */, true /* disallowEnterPictureInPictureWhileLaunching */, null /* callback */, 0, - null /* animationController */, UserHandle.CURRENT); + null /* animationController */, mUserTracker.getUserHandle()); } else { if (!mCentralSurfaces.isDeviceInteractive()) { // Avoid flickering of the scrim when we instant launch the camera and the bouncer @@ -432,7 +435,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba mCentralSurfaces.startActivityDismissingKeyguard(emergencyIntent, false /* onlyProvisioned */, true /* dismissShade */, true /* disallowEnterPictureInPictureWhileLaunching */, null /* callback */, 0, - null /* animationController */, UserHandle.CURRENT); + null /* animationController */, mUserTracker.getUserHandle()); return; } @@ -447,7 +450,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba if (mStatusBarKeyguardViewManager.isBouncerShowing()) { mStatusBarKeyguardViewManager.reset(true /* hide */); } - mContext.startActivityAsUser(emergencyIntent, UserHandle.CURRENT); + mContext.startActivityAsUser(emergencyIntent, mUserTracker.getUserHandle()); return; } // We need to defer the emergency action launch until the screen comes on, since otherwise diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 8110b4747b63..62ecfae318f9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -180,6 +180,7 @@ import com.android.systemui.qs.QSFragment; import com.android.systemui.qs.QSPanelController; import com.android.systemui.recents.ScreenPinningRequest; import com.android.systemui.scrim.ScrimView; +import com.android.systemui.settings.UserTracker; import com.android.systemui.settings.brightness.BrightnessSliderController; import com.android.systemui.shade.CameraLauncher; import com.android.systemui.shade.NotificationPanelViewController; @@ -524,6 +525,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController; private final MessageRouter mMessageRouter; private final WallpaperManager mWallpaperManager; + private final UserTracker mUserTracker; private CentralSurfacesComponent mCentralSurfacesComponent; @@ -767,7 +769,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { IDreamManager dreamManager, Lazy<CameraLauncher> cameraLauncherLazy, Lazy<LightRevealScrimViewModel> lightRevealScrimViewModelLazy, - AlternateBouncerInteractor alternateBouncerInteractor + AlternateBouncerInteractor alternateBouncerInteractor, + UserTracker userTracker ) { mContext = context; mNotificationsController = notificationsController; @@ -847,6 +850,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { mJankMonitor = jankMonitor; mCameraLauncherLazy = cameraLauncherLazy; mAlternateBouncerInteractor = alternateBouncerInteractor; + mUserTracker = userTracker; mLockscreenShadeTransitionController = lockscreenShadeTransitionController; mStartingSurfaceOptional = startingSurfaceOptional; @@ -4172,7 +4176,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { Log.wtf(TAG, "WallpaperManager not supported"); return; } - WallpaperInfo info = mWallpaperManager.getWallpaperInfo(UserHandle.USER_CURRENT); + WallpaperInfo info = mWallpaperManager.getWallpaperInfo(mUserTracker.getUserId()); mWallpaperController.onWallpaperInfoUpdated(info); final boolean deviceSupportsAodWallpaper = mContext.getResources().getBoolean( @@ -4396,6 +4400,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { return new UserHandle(UserHandle.myUserId()); } } - return UserHandle.CURRENT; + return mUserTracker.getUserHandle(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java index 0446cefb10dc..c248a5091765 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java @@ -45,6 +45,7 @@ import com.android.systemui.doze.AlwaysOnDisplayPolicy; import com.android.systemui.doze.DozeScreenState; import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; import com.android.systemui.statusbar.policy.ConfigurationController; @@ -84,6 +85,7 @@ public class DozeParameters implements private final ScreenOffAnimationController mScreenOffAnimationController; private final FoldAodAnimationController mFoldAodAnimationController; private final UnlockedScreenOffAnimationController mUnlockedScreenOffAnimationController; + private final UserTracker mUserTracker; private final Set<Callback> mCallbacks = new HashSet<>(); @@ -128,7 +130,8 @@ public class DozeParameters implements UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, KeyguardUpdateMonitor keyguardUpdateMonitor, ConfigurationController configurationController, - StatusBarStateController statusBarStateController) { + StatusBarStateController statusBarStateController, + UserTracker userTracker) { mResources = resources; mAmbientDisplayConfiguration = ambientDisplayConfiguration; mAlwaysOnPolicy = alwaysOnDisplayPolicy; @@ -140,6 +143,7 @@ public class DozeParameters implements mPowerManager.setDozeAfterScreenOff(!mControlScreenOffAnimation); mScreenOffAnimationController = screenOffAnimationController; mUnlockedScreenOffAnimationController = unlockedScreenOffAnimationController; + mUserTracker = userTracker; keyguardUpdateMonitor.registerCallback(mKeyguardVisibilityCallback); tunerService.addTunable( @@ -169,7 +173,7 @@ public class DozeParameters implements private void updateQuickPickupEnabled() { mIsQuickPickupEnabled = - mAmbientDisplayConfiguration.quickPickupSensorEnabled(UserHandle.USER_CURRENT); + mAmbientDisplayConfiguration.quickPickupSensorEnabled(mUserTracker.getUserId()); } public boolean getDisplayStateSupported() { @@ -418,7 +422,7 @@ public class DozeParameters implements @Override public void onTuningChanged(String key, String newValue) { - mDozeAlwaysOn = mAmbientDisplayConfiguration.alwaysOnEnabled(UserHandle.USER_CURRENT); + mDozeAlwaysOn = mAmbientDisplayConfiguration.alwaysOnEnabled(mUserTracker.getUserId()); if (key.equals(Settings.Secure.DOZE_ALWAYS_ON)) { updateControlScreenOff(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java index 4ad319969eaf..cba0897408dd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java @@ -357,7 +357,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mView.setOnApplyWindowInsetsListener( (view, windowInsets) -> mView.updateWindowInsets(windowInsets, mInsetsProvider)); mSecureSettings.registerContentObserverForUser( - Settings.Secure.getUriFor(Settings.Secure.STATUS_BAR_SHOW_VIBRATE_ICON), + Settings.Secure.STATUS_BAR_SHOW_VIBRATE_ICON, false, mVolumeSettingObserver, UserHandle.USER_ALL); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index 48e58fcb584d..6c532a5c5fab 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -35,7 +35,6 @@ import android.media.AudioManager; import android.os.Handler; import android.os.Looper; import android.os.RemoteException; -import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings.Global; import android.service.notification.ZenModeConfig; @@ -58,6 +57,7 @@ import com.android.systemui.privacy.logging.PrivacyLogger; import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.qs.tiles.RotationLockTile; import com.android.systemui.screenrecord.RecordingController; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.CastController; @@ -136,6 +136,7 @@ public class PhoneStatusBarPolicy private final UserInfoController mUserInfoController; private final IActivityManager mIActivityManager; private final UserManager mUserManager; + private final UserTracker mUserTracker; private final DevicePolicyManager mDevicePolicyManager; private final StatusBarIconController mIconController; private final CommandQueue mCommandQueue; @@ -176,7 +177,7 @@ public class PhoneStatusBarPolicy KeyguardStateController keyguardStateController, LocationController locationController, SensorPrivacyController sensorPrivacyController, IActivityManager iActivityManager, - AlarmManager alarmManager, UserManager userManager, + AlarmManager alarmManager, UserManager userManager, UserTracker userTracker, DevicePolicyManager devicePolicyManager, RecordingController recordingController, @Nullable TelecomManager telecomManager, @DisplayId int displayId, @Main SharedPreferences sharedPreferences, DateFormatUtil dateFormatUtil, @@ -196,6 +197,7 @@ public class PhoneStatusBarPolicy mUserInfoController = userInfoController; mIActivityManager = iActivityManager; mUserManager = userManager; + mUserTracker = userTracker; mDevicePolicyManager = devicePolicyManager; mRotationLockController = rotationLockController; mDataSaver = dataSaverController; @@ -366,7 +368,7 @@ public class PhoneStatusBarPolicy } private void updateAlarm() { - final AlarmClockInfo alarm = mAlarmManager.getNextAlarmClock(UserHandle.USER_CURRENT); + final AlarmClockInfo alarm = mAlarmManager.getNextAlarmClock(mUserTracker.getUserId()); final boolean hasAlarm = alarm != null && alarm.getTriggerTime() > 0; int zen = mZenController.getZen(); final boolean zenNone = zen == Global.ZEN_MODE_NO_INTERRUPTIONS; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java index be6e0cc8a996..078a00d33493 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java @@ -53,6 +53,7 @@ import com.android.systemui.assist.AssistManager; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.settings.UserTracker; import com.android.systemui.shade.NotificationPanelViewController; import com.android.systemui.shade.ShadeController; import com.android.systemui.statusbar.NotificationClickNotifier; @@ -118,6 +119,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte private final NotificationPanelViewController mNotificationPanel; private final ActivityLaunchAnimator mActivityLaunchAnimator; private final NotificationLaunchAnimatorControllerProvider mNotificationAnimationProvider; + private final UserTracker mUserTracker; private final OnUserInteractionCallback mOnUserInteractionCallback; private boolean mIsCollapsingToShowActivityOverLockscreen; @@ -153,7 +155,8 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte ActivityLaunchAnimator activityLaunchAnimator, NotificationLaunchAnimatorControllerProvider notificationAnimationProvider, LaunchFullScreenIntentProvider launchFullScreenIntentProvider, - FeatureFlags featureFlags) { + FeatureFlags featureFlags, + UserTracker userTracker) { mContext = context; mMainThreadHandler = mainThreadHandler; mUiBgExecutor = uiBgExecutor; @@ -184,6 +187,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte mNotificationPanel = panel; mActivityLaunchAnimator = activityLaunchAnimator; mNotificationAnimationProvider = notificationAnimationProvider; + mUserTracker = userTracker; launchFullScreenIntentProvider.registerListener(entry -> launchFullScreenIntent(entry)); } @@ -518,7 +522,7 @@ class StatusBarNotificationActivityStarter implements NotificationActivityStarte intent.getPackage(), (adapter) -> tsb.startActivities( getActivityOptions(mCentralSurfaces.getDisplayId(), adapter), - UserHandle.CURRENT)); + mUserTracker.getUserHandle())); }); return true; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java index 9f3fd727be24..be6d5baf8eda 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/fragment/CollapsedStatusBarFragment.java @@ -320,7 +320,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue mAnimationScheduler.addCallback(this); mSecureSettings.registerContentObserverForUser( - Settings.Secure.getUriFor(Settings.Secure.STATUS_BAR_SHOW_VIBRATE_ICON), + Settings.Secure.STATUS_BAR_SHOW_VIBRATE_ICON, false, mVolumeSettingObserver, UserHandle.USER_ALL); diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java index 3ecb15b9d79c..e5b4e8086abe 100644 --- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java @@ -391,7 +391,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable { mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter, mMainExecutor, UserHandle.ALL); mSecureSettings.registerContentObserverForUser( - Settings.Secure.getUriFor(Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES), + Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES, false, new ContentObserver(mBgHandler) { @Override diff --git a/packages/SystemUI/src/com/android/systemui/user/ui/dialog/AddUserDialog.kt b/packages/SystemUI/src/com/android/systemui/user/ui/dialog/AddUserDialog.kt index a9d66de118e0..5a25a4e25afc 100644 --- a/packages/SystemUI/src/com/android/systemui/user/ui/dialog/AddUserDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/user/ui/dialog/AddUserDialog.kt @@ -63,11 +63,10 @@ class AddUserDialog( } // Use broadcast instead of ShadeController, as this dialog may have started in - // another - // process where normal dagger bindings are not available. + // another process where normal dagger bindings are not available. broadcastSender.sendBroadcastAsUser( Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS), - UserHandle.CURRENT + userHandle ) context.startActivityAsUser( diff --git a/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java b/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java index 4351afe68339..a0d22f388cbc 100644 --- a/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java +++ b/packages/SystemUI/src/com/android/systemui/util/leak/LeakReporter.java @@ -29,12 +29,12 @@ import android.content.Intent; import android.net.Uri; import android.os.Debug; import android.os.SystemProperties; -import android.os.UserHandle; import android.util.Log; import androidx.core.content.FileProvider; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.settings.UserTracker; import com.google.android.collect.Lists; @@ -62,13 +62,15 @@ public class LeakReporter { static final String LEAK_DUMP = "leak.dump"; private final Context mContext; + private final UserTracker mUserTracker; private final LeakDetector mLeakDetector; private final String mLeakReportEmail; @Inject - public LeakReporter(Context context, LeakDetector leakDetector, + public LeakReporter(Context context, UserTracker userTracker, LeakDetector leakDetector, @Nullable @Named(LEAK_REPORT_EMAIL_NAME) String leakReportEmail) { mContext = context; + mUserTracker = userTracker; mLeakDetector = leakDetector; mLeakReportEmail = leakReportEmail; } @@ -111,7 +113,7 @@ public class LeakReporter { getIntent(hprofFile, dumpFile), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE, null, - UserHandle.CURRENT)); + mUserTracker.getUserHandle())); notiMan.notify(TAG, 0, builder.build()); } catch (IOException e) { Log.e(TAG, "Couldn't dump heap for leak", e); diff --git a/packages/SystemUI/src/com/android/systemui/util/settings/GlobalSettingsImpl.java b/packages/SystemUI/src/com/android/systemui/util/settings/GlobalSettingsImpl.java index 1a30b0a8d8bf..85fada20a7ad 100644 --- a/packages/SystemUI/src/com/android/systemui/util/settings/GlobalSettingsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/util/settings/GlobalSettingsImpl.java @@ -20,14 +20,18 @@ import android.content.ContentResolver; import android.net.Uri; import android.provider.Settings; +import com.android.systemui.settings.UserTracker; + import javax.inject.Inject; class GlobalSettingsImpl implements GlobalSettings { private final ContentResolver mContentResolver; + private final UserTracker mUserTracker; @Inject - GlobalSettingsImpl(ContentResolver contentResolver) { + GlobalSettingsImpl(ContentResolver contentResolver, UserTracker userTracker) { mContentResolver = contentResolver; + mUserTracker = userTracker; } @Override @@ -36,13 +40,19 @@ class GlobalSettingsImpl implements GlobalSettings { } @Override + public UserTracker getUserTracker() { + return mUserTracker; + } + + @Override public Uri getUriFor(String name) { return Settings.Global.getUriFor(name); } @Override public String getStringForUser(String name, int userHandle) { - return Settings.Global.getStringForUser(mContentResolver, name, userHandle); + return Settings.Global.getStringForUser(mContentResolver, name, + getRealUserHandle(userHandle)); } @Override @@ -53,14 +63,16 @@ class GlobalSettingsImpl implements GlobalSettings { @Override public boolean putStringForUser(String name, String value, int userHandle) { - return Settings.Global.putStringForUser(mContentResolver, name, value, userHandle); + return Settings.Global.putStringForUser(mContentResolver, name, value, + getRealUserHandle(userHandle)); } @Override public boolean putStringForUser(String name, String value, String tag, boolean makeDefault, int userHandle, boolean overrideableByRestore) { return Settings.Global.putStringForUser( - mContentResolver, name, value, tag, makeDefault, userHandle, overrideableByRestore); + mContentResolver, name, value, tag, makeDefault, getRealUserHandle(userHandle), + overrideableByRestore); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/util/settings/SecureSettingsImpl.java b/packages/SystemUI/src/com/android/systemui/util/settings/SecureSettingsImpl.java index 020c234191e0..f995436594b1 100644 --- a/packages/SystemUI/src/com/android/systemui/util/settings/SecureSettingsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/util/settings/SecureSettingsImpl.java @@ -20,14 +20,18 @@ import android.content.ContentResolver; import android.net.Uri; import android.provider.Settings; +import com.android.systemui.settings.UserTracker; + import javax.inject.Inject; class SecureSettingsImpl implements SecureSettings { private final ContentResolver mContentResolver; + private final UserTracker mUserTracker; @Inject - SecureSettingsImpl(ContentResolver contentResolver) { + SecureSettingsImpl(ContentResolver contentResolver, UserTracker userTracker) { mContentResolver = contentResolver; + mUserTracker = userTracker; } @Override @@ -36,13 +40,19 @@ class SecureSettingsImpl implements SecureSettings { } @Override + public UserTracker getUserTracker() { + return mUserTracker; + } + + @Override public Uri getUriFor(String name) { return Settings.Secure.getUriFor(name); } @Override public String getStringForUser(String name, int userHandle) { - return Settings.Secure.getStringForUser(mContentResolver, name, userHandle); + return Settings.Secure.getStringForUser(mContentResolver, name, + getRealUserHandle(userHandle)); } @Override @@ -52,14 +62,16 @@ class SecureSettingsImpl implements SecureSettings { @Override public boolean putStringForUser(String name, String value, int userHandle) { - return Settings.Secure.putStringForUser(mContentResolver, name, value, userHandle); + return Settings.Secure.putStringForUser(mContentResolver, name, value, + getRealUserHandle(userHandle)); } @Override public boolean putStringForUser(String name, String value, String tag, boolean makeDefault, int userHandle, boolean overrideableByRestore) { return Settings.Secure.putStringForUser( - mContentResolver, name, value, tag, makeDefault, userHandle, overrideableByRestore); + mContentResolver, name, value, tag, makeDefault, getRealUserHandle(userHandle), + overrideableByRestore); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/util/settings/SettingsProxy.java b/packages/SystemUI/src/com/android/systemui/util/settings/SettingsProxy.java index 1bf5f076ac2f..b6846a34a0bd 100644 --- a/packages/SystemUI/src/com/android/systemui/util/settings/SettingsProxy.java +++ b/packages/SystemUI/src/com/android/systemui/util/settings/SettingsProxy.java @@ -22,8 +22,11 @@ import android.annotation.UserIdInt; import android.content.ContentResolver; import android.database.ContentObserver; import android.net.Uri; +import android.os.UserHandle; import android.provider.Settings; +import com.android.systemui.settings.UserTracker; + /** * Used to interact with Settings.Secure, Settings.Global, and Settings.System. * @@ -46,6 +49,11 @@ public interface SettingsProxy { ContentResolver getContentResolver(); /** + * Returns that {@link UserTracker} this instance was constructed with. + */ + UserTracker getUserTracker(); + + /** * Returns the user id for the associated {@link ContentResolver}. */ default int getUserId() { @@ -53,6 +61,17 @@ public interface SettingsProxy { } /** + * Returns the actual current user handle when querying with the current user. Otherwise, + * returns the passed in user id. + */ + default int getRealUserHandle(int userHandle) { + if (userHandle != UserHandle.USER_CURRENT) { + return userHandle; + } + return getUserTracker().getUserId(); + } + + /** * Construct the content URI for a particular name/value pair, * useful for monitoring changes with a ContentObserver. * @param name to look up in the table @@ -84,18 +103,18 @@ public interface SettingsProxy { * * Implicitly calls {@link #getUriFor(String)} on the passed in name. */ - default void registerContentObserver(String name, boolean notifyForDescendents, + default void registerContentObserver(String name, boolean notifyForDescendants, ContentObserver settingsObserver) { - registerContentObserver(getUriFor(name), notifyForDescendents, settingsObserver); + registerContentObserver(getUriFor(name), notifyForDescendants, settingsObserver); } /** * Convenience wrapper around * {@link ContentResolver#registerContentObserver(Uri, boolean, ContentObserver)}.' */ - default void registerContentObserver(Uri uri, boolean notifyForDescendents, + default void registerContentObserver(Uri uri, boolean notifyForDescendants, ContentObserver settingsObserver) { - registerContentObserverForUser(uri, notifyForDescendents, settingsObserver, getUserId()); + registerContentObserverForUser(uri, notifyForDescendants, settingsObserver, getUserId()); } /** @@ -127,10 +146,10 @@ public interface SettingsProxy { * Implicitly calls {@link #getUriFor(String)} on the passed in name. */ default void registerContentObserverForUser( - String name, boolean notifyForDescendents, ContentObserver settingsObserver, + String name, boolean notifyForDescendants, ContentObserver settingsObserver, int userHandle) { registerContentObserverForUser( - getUriFor(name), notifyForDescendents, settingsObserver, userHandle); + getUriFor(name), notifyForDescendants, settingsObserver, userHandle); } /** @@ -138,10 +157,10 @@ public interface SettingsProxy { * {@link ContentResolver#registerContentObserver(Uri, boolean, ContentObserver, int)} */ default void registerContentObserverForUser( - Uri uri, boolean notifyForDescendents, ContentObserver settingsObserver, + Uri uri, boolean notifyForDescendants, ContentObserver settingsObserver, int userHandle) { getContentResolver().registerContentObserver( - uri, notifyForDescendents, settingsObserver, userHandle); + uri, notifyForDescendants, settingsObserver, getRealUserHandle(userHandle)); } /** See {@link ContentResolver#unregisterContentObserver(ContentObserver)}. */ diff --git a/packages/SystemUI/src/com/android/systemui/util/settings/SettingsProxyExt.kt b/packages/SystemUI/src/com/android/systemui/util/settings/SettingsProxyExt.kt index 0b8257da8fb5..561495e9d092 100644 --- a/packages/SystemUI/src/com/android/systemui/util/settings/SettingsProxyExt.kt +++ b/packages/SystemUI/src/com/android/systemui/util/settings/SettingsProxyExt.kt @@ -19,7 +19,6 @@ package com.android.systemui.util.settings import android.annotation.UserIdInt import android.database.ContentObserver -import android.os.UserHandle import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow @@ -29,8 +28,8 @@ object SettingsProxyExt { /** Returns a flow of [Unit] that is invoked each time that content is updated. */ fun SettingsProxy.observerFlow( + @UserIdInt userId: Int, vararg names: String, - @UserIdInt userId: Int = UserHandle.USER_CURRENT, ): Flow<Unit> { return conflatedCallbackFlow { val observer = diff --git a/packages/SystemUI/src/com/android/systemui/util/settings/SystemSettingsImpl.java b/packages/SystemUI/src/com/android/systemui/util/settings/SystemSettingsImpl.java index 0dbb76f8f758..fba7ddf5fe34 100644 --- a/packages/SystemUI/src/com/android/systemui/util/settings/SystemSettingsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/util/settings/SystemSettingsImpl.java @@ -20,14 +20,18 @@ import android.content.ContentResolver; import android.net.Uri; import android.provider.Settings; +import com.android.systemui.settings.UserTracker; + import javax.inject.Inject; class SystemSettingsImpl implements SystemSettings { private final ContentResolver mContentResolver; + private final UserTracker mUserTracker; @Inject - SystemSettingsImpl(ContentResolver contentResolver) { + SystemSettingsImpl(ContentResolver contentResolver, UserTracker userTracker) { mContentResolver = contentResolver; + mUserTracker = userTracker; } @Override @@ -36,13 +40,19 @@ class SystemSettingsImpl implements SystemSettings { } @Override + public UserTracker getUserTracker() { + return mUserTracker; + } + + @Override public Uri getUriFor(String name) { return Settings.System.getUriFor(name); } @Override public String getStringForUser(String name, int userHandle) { - return Settings.System.getStringForUser(mContentResolver, name, userHandle); + return Settings.System.getStringForUser(mContentResolver, name, + getRealUserHandle(userHandle)); } @Override @@ -52,7 +62,8 @@ class SystemSettingsImpl implements SystemSettings { @Override public boolean putStringForUser(String name, String value, int userHandle) { - return Settings.System.putStringForUser(mContentResolver, name, value, userHandle); + return Settings.System.putStringForUser(mContentResolver, name, value, + getRealUserHandle(userHandle)); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index 98d904e60603..89b66eea7f9f 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -46,7 +46,6 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.RemoteException; -import android.os.UserHandle; import android.os.VibrationEffect; import android.provider.Settings; import android.service.notification.Condition; @@ -69,6 +68,7 @@ import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.plugins.VolumeDialogController; import com.android.systemui.qs.tiles.DndTile; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.util.RingerModeLiveData; import com.android.systemui.util.RingerModeTracker; @@ -133,6 +133,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa private final CaptioningManager mCaptioningManager; private final KeyguardManager mKeyguardManager; private final ActivityManager mActivityManager; + private final UserTracker mUserTracker; protected C mCallbacks = new C(); private final State mState = new State(); protected final MediaSessionsCallbacks mMediaSessionsCallbacksW; @@ -180,6 +181,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa CaptioningManager captioningManager, KeyguardManager keyguardManager, ActivityManager activityManager, + UserTracker userTracker, DumpManager dumpManager ) { mContext = context.getApplicationContext(); @@ -209,6 +211,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa mCaptioningManager = captioningManager; mKeyguardManager = keyguardManager; mActivityManager = activityManager; + mUserTracker = userTracker; dumpManager.registerDumpable("VolumeDialogControllerImpl", this); boolean accessibilityVolumeStreamActive = accessibilityManager @@ -371,7 +374,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa if (System.currentTimeMillis() - mLastToggledRingerOn < TOUCH_FEEDBACK_TIMEOUT_MS) { try { mAudioService.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD, - UserHandle.USER_CURRENT); + mUserTracker.getUserId()); } catch (RemoteException e) { // ignore } diff --git a/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java b/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java index 4cbc709aadc4..4da5d499c5e7 100644 --- a/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java +++ b/packages/SystemUI/src/com/android/systemui/wallet/controller/QuickAccessWalletController.java @@ -273,7 +273,7 @@ public class QuickAccessWalletController { }; mSecureSettings.registerContentObserverForUser( - Settings.Secure.getUriFor(Settings.Secure.NFC_PAYMENT_DEFAULT_COMPONENT), + Settings.Secure.NFC_PAYMENT_DEFAULT_COMPONENT, false /* notifyForDescendants */, mDefaultPaymentAppObserver, UserHandle.USER_ALL); @@ -293,7 +293,7 @@ public class QuickAccessWalletController { }; mSecureSettings.registerContentObserverForUser( - Settings.Secure.getUriFor(QuickAccessWalletClientImpl.SETTING_KEY), + QuickAccessWalletClientImpl.SETTING_KEY, false /* notifyForDescendants */, mWalletPreferenceObserver, UserHandle.USER_ALL); diff --git a/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java index 1f1b32c1c63a..8b925b7ad312 100644 --- a/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java @@ -26,7 +26,6 @@ import android.graphics.RectF; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager.DisplayListener; import android.os.Trace; -import android.os.UserHandle; import android.service.wallpaper.WallpaperService; import android.util.Log; import android.view.Surface; @@ -37,6 +36,7 @@ import androidx.annotation.NonNull; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.dagger.qualifiers.Background; +import com.android.systemui.settings.UserTracker; import com.android.systemui.util.concurrency.DelayableExecutor; import java.io.FileDescriptor; @@ -58,6 +58,8 @@ public class ImageWallpaper extends WallpaperService { private volatile int mPages = 1; private boolean mPagesComputed = false; + private final UserTracker mUserTracker; + // used for most tasks (call canvas.drawBitmap, load/unload the bitmap) @Background private final DelayableExecutor mBackgroundExecutor; @@ -66,9 +68,11 @@ public class ImageWallpaper extends WallpaperService { private static final int DELAY_UNLOAD_BITMAP = 2000; @Inject - public ImageWallpaper(@Background DelayableExecutor backgroundExecutor) { + public ImageWallpaper(@Background DelayableExecutor backgroundExecutor, + UserTracker userTracker) { super(); mBackgroundExecutor = backgroundExecutor; + mUserTracker = userTracker; } @Override @@ -288,7 +292,7 @@ public class ImageWallpaper extends WallpaperService { boolean loadSuccess = false; Bitmap bitmap; try { - bitmap = mWallpaperManager.getBitmapAsUser(UserHandle.USER_CURRENT, false); + bitmap = mWallpaperManager.getBitmapAsUser(mUserTracker.getUserId(), false); if (bitmap != null && bitmap.getByteCount() > RecordingCanvas.MAX_BITMAP_SIZE) { throw new RuntimeException("Wallpaper is too large to draw!"); @@ -300,9 +304,9 @@ public class ImageWallpaper extends WallpaperService { // default wallpaper can't be loaded. Log.w(TAG, "Unable to load wallpaper!", exception); mWallpaperManager.clearWallpaper( - WallpaperManager.FLAG_SYSTEM, UserHandle.USER_CURRENT); + WallpaperManager.FLAG_SYSTEM, mUserTracker.getUserId()); try { - bitmap = mWallpaperManager.getBitmapAsUser(UserHandle.USER_CURRENT, false); + bitmap = mWallpaperManager.getBitmapAsUser(mUserTracker.getUserId(), false); } catch (RuntimeException | OutOfMemoryError e) { Log.w(TAG, "Unable to load default wallpaper!", e); bitmap = null; diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java index 9a9acf3dd986..a4180fd2e0f1 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java @@ -29,7 +29,6 @@ import static org.mockito.Mockito.when; import android.content.res.Resources; import android.database.ContentObserver; -import android.net.Uri; import android.os.UserHandle; import android.provider.Settings; import android.testing.AndroidTestingRunner; @@ -275,7 +274,7 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase { ArgumentCaptor<ContentObserver> observerCaptor = ArgumentCaptor.forClass(ContentObserver.class); mController.init(); - verify(mSecureSettings).registerContentObserverForUser(any(Uri.class), + verify(mSecureSettings).registerContentObserverForUser(any(String.class), anyBoolean(), observerCaptor.capture(), eq(UserHandle.USER_ALL)); ContentObserver observer = observerCaptor.getValue(); mExecutor.runAllReady(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonModeObserverTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonModeObserverTest.java index 7aa47632965f..4a5c1bed7b44 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonModeObserverTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonModeObserverTest.java @@ -22,14 +22,16 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; -import android.os.UserHandle; +import android.app.ActivityManager; import android.provider.Settings; import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.settings.UserTracker; import org.junit.Before; import org.junit.Rule; @@ -42,11 +44,14 @@ import org.mockito.junit.MockitoRule; @RunWith(AndroidTestingRunner.class) @SmallTest public class AccessibilityButtonModeObserverTest extends SysuiTestCase { + private static final int MY_USER_ID = ActivityManager.getCurrentUser(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); @Mock + private UserTracker mUserTracker; + @Mock private AccessibilityButtonModeObserver.ModeChangedListener mListener; private AccessibilityButtonModeObserver mAccessibilityButtonModeObserver; @@ -56,10 +61,12 @@ public class AccessibilityButtonModeObserverTest extends SysuiTestCase { @Before public void setUp() { + when(mUserTracker.getUserId()).thenReturn(MY_USER_ID); Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, - Settings.Secure.ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT); - mAccessibilityButtonModeObserver = new AccessibilityButtonModeObserver(mContext); + Settings.Secure.ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, MY_USER_ID); + mAccessibilityButtonModeObserver = new AccessibilityButtonModeObserver(mContext, + mUserTracker); } @Test @@ -67,7 +74,7 @@ public class AccessibilityButtonModeObserverTest extends SysuiTestCase { mAccessibilityButtonModeObserver.addListener(mListener); Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, TEST_A11Y_BTN_MODE_VALUE, - UserHandle.USER_CURRENT); + MY_USER_ID); mAccessibilityButtonModeObserver.mContentObserver.onChange(false); @@ -80,7 +87,7 @@ public class AccessibilityButtonModeObserverTest extends SysuiTestCase { mAccessibilityButtonModeObserver.removeListener(mListener); Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, TEST_A11Y_BTN_MODE_VALUE, - UserHandle.USER_CURRENT); + MY_USER_ID); mAccessibilityButtonModeObserver.mContentObserver.onChange(false); @@ -91,7 +98,7 @@ public class AccessibilityButtonModeObserverTest extends SysuiTestCase { public void getCurrentAccessibilityButtonMode_expectedValue() { Settings.Secure.putIntForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, TEST_A11Y_BTN_MODE_VALUE, - UserHandle.USER_CURRENT); + MY_USER_ID); final int actualValue = mAccessibilityButtonModeObserver.getCurrentAccessibilityButtonMode(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserverTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserverTest.java index 4145437a71b2..a5a7a4a09227 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserverTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/AccessibilityButtonTargetsObserverTest.java @@ -21,14 +21,16 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; -import android.os.UserHandle; +import android.app.ActivityManager; import android.provider.Settings; import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.settings.UserTracker; import org.junit.Before; import org.junit.Rule; @@ -42,11 +44,14 @@ import org.mockito.junit.MockitoRule; @RunWith(AndroidTestingRunner.class) @SmallTest public class AccessibilityButtonTargetsObserverTest extends SysuiTestCase { + private static final int MY_USER_ID = ActivityManager.getCurrentUser(); @Rule public MockitoRule mockito = MockitoJUnit.rule(); @Mock + private UserTracker mUserTracker; + @Mock private AccessibilityButtonTargetsObserver.TargetsChangedListener mListener; private AccessibilityButtonTargetsObserver mAccessibilityButtonTargetsObserver; @@ -55,7 +60,9 @@ public class AccessibilityButtonTargetsObserverTest extends SysuiTestCase { @Before public void setUp() { - mAccessibilityButtonTargetsObserver = new AccessibilityButtonTargetsObserver(mContext); + when(mUserTracker.getUserId()).thenReturn(MY_USER_ID); + mAccessibilityButtonTargetsObserver = new AccessibilityButtonTargetsObserver(mContext, + mUserTracker); } @Test @@ -63,7 +70,7 @@ public class AccessibilityButtonTargetsObserverTest extends SysuiTestCase { mAccessibilityButtonTargetsObserver.addListener(mListener); Settings.Secure.putStringForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, - UserHandle.USER_CURRENT); + MY_USER_ID); mAccessibilityButtonTargetsObserver.mContentObserver.onChange(false); @@ -76,7 +83,7 @@ public class AccessibilityButtonTargetsObserverTest extends SysuiTestCase { mAccessibilityButtonTargetsObserver.removeListener(mListener); Settings.Secure.putStringForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, - UserHandle.USER_CURRENT); + MY_USER_ID); mAccessibilityButtonTargetsObserver.mContentObserver.onChange(false); @@ -87,7 +94,7 @@ public class AccessibilityButtonTargetsObserverTest extends SysuiTestCase { public void getCurrentAccessibilityButtonTargets_expectedValue() { Settings.Secure.putStringForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, - UserHandle.USER_CURRENT); + MY_USER_ID); final String actualValue = mAccessibilityButtonTargetsObserver.getCurrentAccessibilityButtonTargets(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/SecureSettingsContentObserverTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/SecureSettingsContentObserverTest.java index 41fd2b3a40e0..9c601a8670c0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/SecureSettingsContentObserverTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/SecureSettingsContentObserverTest.java @@ -18,18 +18,20 @@ package com.android.systemui.accessibility; import static com.google.common.truth.Truth.assertThat; +import android.app.ActivityManager; import android.content.Context; -import android.os.UserHandle; import android.provider.Settings; import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.settings.UserTracker; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; /** Test for {@link SecureSettingsContentObserver}. */ @RunWith(AndroidTestingRunner.class) @@ -40,7 +42,9 @@ public class SecureSettingsContentObserverTest extends SysuiTestCase { @Before public void setUpObserver() { - mTestObserver = new FakeSecureSettingsContentObserver(mContext, + UserTracker userTracker = Mockito.mock(UserTracker.class); + Mockito.when(userTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); + mTestObserver = new FakeSecureSettingsContentObserver(mContext, userTracker, Settings.Secure.ACCESSIBILITY_BUTTON_MODE); } @@ -57,7 +61,7 @@ public class SecureSettingsContentObserverTest extends SysuiTestCase { @Test public void checkValue() { Settings.Secure.putIntForUser(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_MODE, 1, UserHandle.USER_CURRENT); + Settings.Secure.ACCESSIBILITY_BUTTON_MODE, 1, ActivityManager.getCurrentUser()); assertThat(mTestObserver.getSettingsValue()).isEqualTo("1"); } @@ -66,9 +70,9 @@ public class SecureSettingsContentObserverTest extends SysuiTestCase { private static class FakeSecureSettingsContentObserver extends SecureSettingsContentObserver<Object> { - protected FakeSecureSettingsContentObserver(Context context, + protected FakeSecureSettingsContentObserver(Context context, UserTracker userTracker, String secureSettingsKey) { - super(context, secureSettingsKey); + super(context, userTracker, secureSettingsKey); } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java index b7d345965d36..cdf3f654899e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/WindowMagnificationControllerTest.java @@ -32,8 +32,11 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.mockito.AdditionalAnswers.returnsSecondArg; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.atLeastOnce; @@ -76,6 +79,7 @@ import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.model.SysUiState; import com.android.systemui.util.leak.ReferenceTestUtils; +import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.utils.os.FakeHandler; import org.junit.After; @@ -111,6 +115,8 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { IRemoteMagnificationAnimationCallback mAnimationCallback; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction(); + @Mock + private SecureSettings mSecureSettings; private Handler mHandler; private TestableWindowManager mWindowManager; @@ -138,6 +144,10 @@ public class WindowMagnificationControllerTest extends SysuiTestCase { }).when(mSfVsyncFrameProvider).postFrameCallback( any(FrameCallback.class)); mSysUiState.addCallback(Mockito.mock(SysUiState.SysUiStateCallback.class)); + when(mSecureSettings.getIntForUser(anyString(), anyInt(), anyInt())).then( + returnsSecondArg()); + when(mSecureSettings.getFloatForUser(anyString(), anyFloat(), anyInt())).then( + returnsSecondArg()); mResources = getContext().getOrCreateTestableResources().getResources(); mWindowMagnificationAnimationController = new WindowMagnificationAnimationController( diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java index 8ca17b974100..f34a36f68744 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuControllerTest.java @@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import android.app.ActivityManager; import android.content.Context; import android.content.ContextWrapper; import android.os.UserHandle; @@ -40,6 +41,7 @@ import com.android.systemui.Dependency; import com.android.systemui.SysuiTestCase; import com.android.systemui.accessibility.AccessibilityButtonModeObserver; import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver; +import com.android.systemui.util.settings.SecureSettings; import org.junit.After; import org.junit.Before; @@ -48,6 +50,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; @@ -71,8 +75,12 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { private ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardCallbackCaptor; private KeyguardUpdateMonitorCallback mKeyguardCallback; + @Mock + private SecureSettings mSecureSettings; + @Before public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); mContextWrapper = new ContextWrapper(mContext) { @Override public Context createContextAsUser(UserHandle user, int flags) { @@ -128,7 +136,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { public void onKeyguardVisibilityChanged_showing_destroyWidget() { enableAccessibilityFloatingMenuConfig(); mController = setUpController(); - mController.mFloatingMenu = new AccessibilityFloatingMenu(mContextWrapper); + mController.mFloatingMenu = new AccessibilityFloatingMenu(mContextWrapper, mSecureSettings); captureKeyguardUpdateMonitorCallback(); mKeyguardCallback.onUserUnlocked(); @@ -154,7 +162,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { final int fakeUserId = 1; enableAccessibilityFloatingMenuConfig(); mController = setUpController(); - mController.mFloatingMenu = new AccessibilityFloatingMenu(mContextWrapper); + mController.mFloatingMenu = new AccessibilityFloatingMenu(mContextWrapper, mSecureSettings); captureKeyguardUpdateMonitorCallback(); mKeyguardCallback.onUserSwitching(fakeUserId); @@ -167,7 +175,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { final int fakeUserId = 1; enableAccessibilityFloatingMenuConfig(); mController = setUpController(); - mController.mFloatingMenu = new AccessibilityFloatingMenu(mContextWrapper); + mController.mFloatingMenu = new AccessibilityFloatingMenu(mContextWrapper, mSecureSettings); captureKeyguardUpdateMonitorCallback(); mKeyguardCallback.onUserUnlocked(); mKeyguardCallback.onKeyguardVisibilityChanged(true); @@ -197,7 +205,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { public void onAccessibilityButtonModeChanged_floatingModeAndHasButtonTargets_showWidget() { Settings.Secure.putStringForUser(mContextWrapper.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, - UserHandle.USER_CURRENT); + ActivityManager.getCurrentUser()); mController = setUpController(); mController.onAccessibilityButtonModeChanged(ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); @@ -208,7 +216,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { @Test public void onAccessibilityButtonModeChanged_floatingModeAndNoButtonTargets_destroyWidget() { Settings.Secure.putStringForUser(mContextWrapper.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, "", UserHandle.USER_CURRENT); + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, "", ActivityManager.getCurrentUser()); mController = setUpController(); mController.onAccessibilityButtonModeChanged(ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); @@ -220,7 +228,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { public void onAccessibilityButtonModeChanged_navBarModeAndHasButtonTargets_destroyWidget() { Settings.Secure.putStringForUser(mContextWrapper.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, - UserHandle.USER_CURRENT); + ActivityManager.getCurrentUser()); mController = setUpController(); mController.onAccessibilityButtonModeChanged(ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); @@ -231,7 +239,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { @Test public void onAccessibilityButtonModeChanged_navBarModeAndNoButtonTargets_destroyWidget() { Settings.Secure.putStringForUser(mContextWrapper.getContentResolver(), - Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, "", UserHandle.USER_CURRENT); + Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, "", ActivityManager.getCurrentUser()); mController = setUpController(); mController.onAccessibilityButtonModeChanged(ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); @@ -243,7 +251,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { public void onAccessibilityButtonTargetsChanged_floatingModeAndHasButtonTargets_showWidget() { Settings.Secure.putIntForUser(mContextWrapper.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU, - UserHandle.USER_CURRENT); + ActivityManager.getCurrentUser()); mController = setUpController(); mController.onAccessibilityButtonTargetsChanged(TEST_A11Y_BTN_TARGETS); @@ -255,7 +263,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { public void onAccessibilityButtonTargetsChanged_floatingModeAndNoButtonTargets_destroyWidget() { Settings.Secure.putIntForUser(mContextWrapper.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU, - UserHandle.USER_CURRENT); + ActivityManager.getCurrentUser()); mController = setUpController(); mController.onAccessibilityButtonTargetsChanged(""); @@ -267,7 +275,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { public void onAccessibilityButtonTargetsChanged_navBarModeAndHasButtonTargets_destroyWidget() { Settings.Secure.putIntForUser(mContextWrapper.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, - ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT); + ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, ActivityManager.getCurrentUser()); mController = setUpController(); mController.onAccessibilityButtonTargetsChanged(TEST_A11Y_BTN_TARGETS); @@ -279,7 +287,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { public void onAccessibilityButtonTargetsChanged_navBarModeAndNoButtonTargets_destroyWidget() { Settings.Secure.putIntForUser(mContextWrapper.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, - ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, UserHandle.USER_CURRENT); + ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR, ActivityManager.getCurrentUser()); mController = setUpController(); mController.onAccessibilityButtonTargetsChanged(""); @@ -293,7 +301,7 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class); final AccessibilityFloatingMenuController controller = new AccessibilityFloatingMenuController(mContextWrapper, mTargetsObserver, - mModeObserver, mKeyguardUpdateMonitor); + mModeObserver, mKeyguardUpdateMonitor, mSecureSettings); controller.init(); return controller; @@ -302,10 +310,10 @@ public class AccessibilityFloatingMenuControllerTest extends SysuiTestCase { private void enableAccessibilityFloatingMenuConfig() { Settings.Secure.putIntForUser(mContextWrapper.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU, - UserHandle.USER_CURRENT); + ActivityManager.getCurrentUser()); Settings.Secure.putStringForUser(mContextWrapper.getContentResolver(), Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, TEST_A11Y_BTN_TARGETS, - UserHandle.USER_CURRENT); + ActivityManager.getCurrentUser()); } private void captureKeyguardUpdateMonitorCallback() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuTest.java index 558261b31eb2..04345fdf2893 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuTest.java @@ -31,6 +31,7 @@ import android.view.accessibility.AccessibilityManager; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.util.settings.SecureSettings; import org.junit.After; import org.junit.Before; @@ -55,6 +56,8 @@ public class AccessibilityFloatingMenuTest extends SysuiTestCase { @Mock private AccessibilityManager mAccessibilityManager; + @Mock + private SecureSettings mSecureSettings; private AccessibilityFloatingMenuView mMenuView; private AccessibilityFloatingMenu mMenu; @@ -69,7 +72,7 @@ public class AccessibilityFloatingMenuTest extends SysuiTestCase { final Position position = new Position(0, 0); mMenuView = new AccessibilityFloatingMenuView(mContext, position); - mMenu = new AccessibilityFloatingMenu(mContext, mMenuView); + mMenu = new AccessibilityFloatingMenu(mContext, mSecureSettings, mMenuView); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt index 1ef119d7fb16..0690d1bc77af 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerOverlayTest.kt @@ -53,6 +53,7 @@ import com.android.systemui.statusbar.phone.SystemUIDialogManager import com.android.systemui.statusbar.phone.UnlockedScreenOffAnimationController import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.util.settings.SecureSettings import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Rule @@ -99,6 +100,7 @@ class UdfpsControllerOverlayTest : SysuiTestCase() { @Mock private lateinit var unlockedScreenOffAnimationController: UnlockedScreenOffAnimationController @Mock private lateinit var udfpsDisplayMode: UdfpsDisplayModeProvider + @Mock private lateinit var secureSettings: SecureSettings @Mock private lateinit var controllerCallback: IUdfpsOverlayControllerCallback @Mock private lateinit var udfpsController: UdfpsController @Mock private lateinit var udfpsView: UdfpsView @@ -139,8 +141,8 @@ class UdfpsControllerOverlayTest : SysuiTestCase() { statusBarStateController, shadeExpansionStateManager, statusBarKeyguardViewManager, keyguardUpdateMonitor, dialogManager, dumpManager, transitionController, configurationController, keyguardStateController, - unlockedScreenOffAnimationController, udfpsDisplayMode, REQUEST_ID, reason, - controllerCallback, onTouch, activityLaunchAnimator, featureFlags, + unlockedScreenOffAnimationController, udfpsDisplayMode, secureSettings, REQUEST_ID, + reason, controllerCallback, onTouch, activityLaunchAnimator, featureFlags, primaryBouncerInteractor, alternateBouncerInteractor, isDebuggable, ) block() diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java index 0c34e54d2ec4..232daadce8e8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java @@ -96,6 +96,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.Execution; import com.android.systemui.util.concurrency.FakeExecution; import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.settings.SecureSettings; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.time.SystemClock; @@ -205,6 +206,8 @@ public class UdfpsControllerTest extends SysuiTestCase { private SinglePointerTouchProcessor mSinglePointerTouchProcessor; @Mock private AlternateBouncerInteractor mAlternateBouncerInteractor; + @Mock + private SecureSettings mSecureSettings; // Capture listeners so that they can be used to send events @Captor @@ -296,7 +299,7 @@ public class UdfpsControllerTest extends SysuiTestCase { mUnlockedScreenOffAnimationController, mSystemUIDialogManager, mLatencyTracker, mActivityLaunchAnimator, alternateTouchProvider, mBiometricExecutor, mPrimaryBouncerInteractor, mSinglePointerTouchProcessor, - mAlternateBouncerInteractor); + mAlternateBouncerInteractor, mSecureSettings); verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture()); mOverlayController = mOverlayCaptor.getValue(); verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture()); diff --git a/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt index 262b4b889f84..80c3e5eaff15 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt @@ -28,6 +28,7 @@ import androidx.test.filters.SmallTest import com.android.systemui.ActivityIntentHelper import com.android.systemui.SysuiTestCase import com.android.systemui.plugins.ActivityStarter +import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.statusbar.policy.KeyguardStateController @@ -69,6 +70,8 @@ class CameraGestureHelperTest : SysuiTestCase() { lateinit var cameraIntents: CameraIntentsWrapper @Mock lateinit var contentResolver: ContentResolver + @Mock + lateinit var userTracker: UserTracker private lateinit var underTest: CameraGestureHelper @@ -96,6 +99,7 @@ class CameraGestureHelperTest : SysuiTestCase() { cameraIntents = cameraIntents, contentResolver = contentResolver, uiExecutor = MoreExecutors.directExecutor(), + userTracker = userTracker, ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java index 5c2b153bf452..af027e871542 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeDockHandlerTest.java @@ -26,6 +26,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.hardware.display.AmbientDisplayConfiguration; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; @@ -36,6 +37,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManagerFake; import com.android.systemui.doze.DozeMachine.State; +import com.android.systemui.settings.UserTracker; import org.junit.Before; import org.junit.Test; @@ -48,6 +50,7 @@ import org.mockito.MockitoAnnotations; @RunWithLooper public class DozeDockHandlerTest extends SysuiTestCase { @Mock private DozeMachine mMachine; + @Mock private UserTracker mUserTracker; private AmbientDisplayConfiguration mConfig; private DockManagerFake mDockManagerFake; private DozeDockHandler mDockHandler; @@ -57,9 +60,10 @@ public class DozeDockHandlerTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); mConfig = DozeConfigurationUtil.createMockConfig(); mDockManagerFake = spy(new DockManagerFake()); - mDockHandler = new DozeDockHandler(mConfig, mDockManagerFake); + mDockHandler = new DozeDockHandler(mConfig, mDockManagerFake, mUserTracker); mDockHandler.setDozeMachine(mMachine); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); when(mMachine.getState()).thenReturn(State.DOZE_AOD); doReturn(true).when(mConfig).alwaysOnEnabled(anyInt()); mDockHandler.transitionTo(DozeMachine.State.UNINITIALIZED, DozeMachine.State.INITIALIZED); diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java index 5bbd8109d8f9..a636b7f43648 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java @@ -45,6 +45,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.content.res.Configuration; import android.hardware.display.AmbientDisplayConfiguration; import android.testing.AndroidTestingRunner; @@ -57,6 +58,7 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.dock.DockManager; import com.android.systemui.keyguard.WakefulnessLifecycle; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.wakelock.WakeLockFake; @@ -85,6 +87,8 @@ public class DozeMachineTest extends SysuiTestCase { private DozeMachine.Part mPartMock; @Mock private DozeMachine.Part mAnotherPartMock; + @Mock + private UserTracker mUserTracker; private DozeServiceFake mServiceFake; private WakeLockFake mWakeLockFake; private AmbientDisplayConfiguration mAmbientDisplayConfigMock; @@ -97,6 +101,7 @@ public class DozeMachineTest extends SysuiTestCase { mAmbientDisplayConfigMock = mock(AmbientDisplayConfiguration.class); when(mDockManager.isDocked()).thenReturn(false); when(mDockManager.isHidden()).thenReturn(false); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); mMachine = new DozeMachine(mServiceFake, mAmbientDisplayConfigMock, @@ -105,7 +110,8 @@ public class DozeMachineTest extends SysuiTestCase { mDozeLog, mDockManager, mHost, - new DozeMachine.Part[]{mPartMock, mAnotherPartMock}); + new DozeMachine.Part[]{mPartMock, mAnotherPartMock}, + mUserTracker); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java index 03827dab0c96..3af444a789c5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenBrightnessTest.java @@ -34,6 +34,7 @@ import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.reset; @@ -57,6 +58,7 @@ import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeThreadFactory; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.FakeSensorManager; +import com.android.systemui.util.settings.SystemSettings; import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; @@ -94,6 +96,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { DevicePostureController mDevicePostureController; @Mock DozeLog mDozeLog; + @Mock + SystemSettings mSystemSettings; private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); private FakeThreadFactory mFakeThreadFactory = new FakeThreadFactory(mFakeExecutor); @@ -102,9 +106,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - Settings.System.putIntForUser(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS, DEFAULT_BRIGHTNESS, - UserHandle.USER_CURRENT); + when(mSystemSettings.getIntForUser(eq(Settings.System.SCREEN_BRIGHTNESS), anyInt(), + eq(UserHandle.USER_CURRENT))).thenReturn(DEFAULT_BRIGHTNESS); doAnswer(invocation -> { ((Runnable) invocation.getArgument(0)).run(); return null; @@ -131,7 +134,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { mWakefulnessLifecycle, mDozeParameters, mDevicePostureController, - mDozeLog); + mDozeLog, + mSystemSettings); } @Test @@ -157,11 +161,10 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { } @Test - public void testAod_usesLightSensorRespectingUserSetting() throws Exception { + public void testAod_usesLightSensorRespectingUserSetting() { int maxBrightness = 3; - Settings.System.putIntForUser(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS, maxBrightness, - UserHandle.USER_CURRENT); + when(mSystemSettings.getIntForUser(eq(Settings.System.SCREEN_BRIGHTNESS), anyInt(), + eq(UserHandle.USER_CURRENT))).thenReturn(maxBrightness); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); assertEquals(maxBrightness, mServiceFake.screenBrightness); @@ -238,7 +241,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { mWakefulnessLifecycle, mDozeParameters, mDevicePostureController, - mDozeLog); + mDozeLog, + mSystemSettings); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE); reset(mDozeHost); @@ -275,7 +279,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { mWakefulnessLifecycle, mDozeParameters, mDevicePostureController, - mDozeLog); + mDozeLog, + mSystemSettings); mScreen.transitionTo(UNINITIALIZED, INITIALIZED); mScreen.transitionTo(INITIALIZED, DOZE_AOD); @@ -306,7 +311,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { mWakefulnessLifecycle, mDozeParameters, mDevicePostureController, - mDozeLog); + mDozeLog, + mSystemSettings); // GIVEN the device is in AOD mScreen.transitionTo(UNINITIALIZED, INITIALIZED); @@ -344,7 +350,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { mWakefulnessLifecycle, mDozeParameters, mDevicePostureController, - mDozeLog); + mDozeLog, + mSystemSettings); // GIVEN device is in AOD mScreen.transitionTo(UNINITIALIZED, INITIALIZED); @@ -386,7 +393,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase { mWakefulnessLifecycle, mDozeParameters, mDevicePostureController, - mDozeLog); + mDozeLog, + mSystemSettings); verify(mDevicePostureController).addCallback(postureCallbackCaptor.capture()); // GIVEN device is in AOD diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java index e87f1042927f..986d6d541694 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java @@ -35,11 +35,11 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.content.res.Resources; import android.database.ContentObserver; import android.hardware.Sensor; import android.hardware.display.AmbientDisplayConfiguration; -import android.os.UserHandle; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; @@ -120,11 +120,13 @@ public class DozeSensorsTest extends SysuiTestCase { public void setUp() { MockitoAnnotations.initMocks(this); mTestableLooper = TestableLooper.get(this); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); when(mAmbientDisplayConfiguration.tapSensorTypeMapping()) .thenReturn(new String[]{"tapSensor"}); when(mAmbientDisplayConfiguration.getWakeLockScreenDebounce()).thenReturn(5000L); when(mAmbientDisplayConfiguration.alwaysOnEnabled(anyInt())).thenReturn(true); - when(mAmbientDisplayConfiguration.enabled(UserHandle.USER_CURRENT)).thenReturn(true); + when(mAmbientDisplayConfiguration.enabled(ActivityManager.getCurrentUser())).thenReturn( + true); doAnswer(invocation -> { ((Runnable) invocation.getArgument(0)).run(); return null; diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuppressorTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuppressorTest.java index 32b994538e12..90644707448a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuppressorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuppressorTest.java @@ -36,6 +36,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.hardware.display.AmbientDisplayConfiguration; import android.testing.AndroidTestingRunner; import android.testing.UiThreadTest; @@ -43,6 +44,7 @@ import android.testing.UiThreadTest; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.phone.BiometricUnlockController; import org.junit.After; @@ -73,6 +75,8 @@ public class DozeSuppressorTest extends SysuiTestCase { private Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy; @Mock private BiometricUnlockController mBiometricUnlockController; + @Mock + private UserTracker mUserTracker; @Mock private DozeMachine mDozeMachine; @@ -89,12 +93,14 @@ public class DozeSuppressorTest extends SysuiTestCase { when(mBiometricUnlockControllerLazy.get()).thenReturn(mBiometricUnlockController); when(mBiometricUnlockController.hasPendingAuthentication()).thenReturn(false); when(mDozeHost.isProvisioned()).thenReturn(true); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); mDozeSuppressor = new DozeSuppressor( mDozeHost, mConfig, mDozeLog, - mBiometricUnlockControllerLazy); + mBiometricUnlockControllerLazy, + mUserTracker); mDozeSuppressor.setDozeMachine(mDozeMachine); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java index 85c28190d77b..596b903907b4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java @@ -31,6 +31,7 @@ import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.app.AlarmManager; import android.content.Context; import android.content.res.Resources; @@ -47,6 +48,7 @@ import androidx.test.filters.SmallTest; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.ZenModeController; @@ -109,6 +111,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { View mStatusBarItemView; @Mock DreamOverlayStateController mDreamOverlayStateController; + @Mock + UserTracker mUserTracker; @Captor private ArgumentCaptor<DreamOverlayStateController.Callback> mCallbackCaptor; @@ -125,6 +129,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { .thenReturn(NOTIFICATION_INDICATOR_FORMATTER_STRING); doCallRealMethod().when(mView).setVisibility(anyInt()); doCallRealMethod().when(mView).getVisibility(); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); mController = new DreamOverlayStatusBarViewController( mView, @@ -140,7 +145,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { mZenModeController, mStatusBarWindowStateController, mDreamOverlayStatusBarItemsProvider, - mDreamOverlayStateController); + mDreamOverlayStateController, + mUserTracker); } @Test @@ -282,7 +288,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { mZenModeController, mStatusBarWindowStateController, mDreamOverlayStatusBarItemsProvider, - mDreamOverlayStateController); + mDreamOverlayStateController, + mUserTracker); controller.onViewAttached(); verify(mView, never()).showIcon( eq(DreamOverlayStatusBarView.STATUS_ICON_NOTIFICATIONS), eq(true), any()); diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java index e9db8cc205fd..b9cfc6550966 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/WorkLockActivityControllerTest.java @@ -23,6 +23,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.app.Activity; import android.app.ActivityManager; @@ -35,12 +36,12 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.IBinder; -import android.os.UserHandle; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.systemui.SysuiTestCase; +import com.android.systemui.settings.UserTracker; import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; @@ -71,6 +72,7 @@ public class WorkLockActivityControllerTest extends SysuiTestCase { private @Mock Context mContext; private @Mock TaskStackChangeListeners mTaskStackChangeListeners; private @Mock IActivityTaskManager mIActivityTaskManager; + private @Mock UserTracker mUserTracker; private WorkLockActivityController mController; private TaskStackChangeListener mTaskStackListener; @@ -81,12 +83,13 @@ public class WorkLockActivityControllerTest extends SysuiTestCase { // Set a package name to use for checking ComponentName well-formedness in tests. doReturn("com.example.test").when(mContext).getPackageName(); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); // Construct controller. Save the TaskStackListener for injecting events. final ArgumentCaptor<TaskStackChangeListener> listenerCaptor = ArgumentCaptor.forClass(TaskStackChangeListener.class); - mController = new WorkLockActivityController(mContext, mTaskStackChangeListeners, - mIActivityTaskManager); + mController = new WorkLockActivityController(mContext, mUserTracker, + mTaskStackChangeListeners, mIActivityTaskManager); verify(mTaskStackChangeListeners).registerTaskStackListener(listenerCaptor.capture()); mTaskStackListener = listenerCaptor.getValue(); @@ -135,7 +138,7 @@ public class WorkLockActivityControllerTest extends SysuiTestCase { anyInt(), eq((ProfilerInfo) null), argThat(hasOptions(taskId, taskOverlay)), - eq(UserHandle.USER_CURRENT)); + eq(ActivityManager.getCurrentUser())); } private void verifyStartActivity(int taskId, boolean taskOverlay) throws Exception { @@ -151,7 +154,7 @@ public class WorkLockActivityControllerTest extends SysuiTestCase { anyInt(), eq((ProfilerInfo) null), argThat(hasOptions(taskId, taskOverlay)), - eq(UserHandle.USER_CURRENT)); + eq(ActivityManager.getCurrentUser())); } private static ArgumentMatcher<Intent> hasComponent(final Context context, diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java index 8b0342eda633..8058b85e205a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavigationBarControllerTest.java @@ -55,8 +55,8 @@ import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.phone.AutoHideController; import com.android.systemui.statusbar.phone.LightBarController; -import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.ConfigurationController; +import com.android.systemui.util.settings.SecureSettings; import com.android.wm.shell.back.BackAnimation; import com.android.wm.shell.pip.Pip; @@ -109,7 +109,8 @@ public class NavigationBarControllerTest extends SysuiTestCase { TaskStackChangeListeners.getTestInstance(), Optional.of(mock(Pip.class)), Optional.of(mock(BackAnimation.class)), - mock(FeatureFlags.class))); + mock(FeatureFlags.class), + mock(SecureSettings.class))); initializeNavigationBars(); mMockitoSession = mockitoSession().mockStatic(Utilities.class).startMocking(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java index a56990f40b90..4a6158f57f6b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerNotificationWarningsTest.java @@ -30,6 +30,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.app.Notification; import android.app.NotificationManager; import android.content.BroadcastReceiver; @@ -53,6 +54,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.animation.DialogLaunchAnimator; import com.android.systemui.broadcast.BroadcastSender; import com.android.systemui.plugins.ActivityStarter; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.util.NotificationChannels; @@ -82,6 +84,8 @@ public class PowerNotificationWarningsTest extends SysuiTestCase { @Mock private UiEventLogger mUiEventLogger; @Mock + private UserTracker mUserTracker; + @Mock private View mView; private BroadcastReceiver mReceiver; @@ -103,8 +107,12 @@ public class PowerNotificationWarningsTest extends SysuiTestCase { mContext.addMockSystemService(NotificationManager.class, mMockNotificationManager); ActivityStarter starter = mDependency.injectMockDependency(ActivityStarter.class); BroadcastSender broadcastSender = mDependency.injectMockDependency(BroadcastSender.class); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); + when(mUserTracker.getUserHandle()).thenReturn( + UserHandle.of(ActivityManager.getCurrentUser())); mPowerNotificationWarnings = new PowerNotificationWarnings(wrapper, starter, - broadcastSender, () -> mBatteryController, mDialogLaunchAnimator, mUiEventLogger); + broadcastSender, () -> mBatteryController, mDialogLaunchAnimator, mUiEventLogger, + mUserTracker); BatteryStateSnapshot snapshot = new BatteryStateSnapshot(100, false, false, 1, BatteryManager.BATTERY_HEALTH_GOOD, 5, 15); mPowerNotificationWarnings.updateSnapshot(snapshot); diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/PulsingGestureListenerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/PulsingGestureListenerTest.kt index 3e769e94b6ad..76aa08a1b92a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shade/PulsingGestureListenerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shade/PulsingGestureListenerTest.kt @@ -29,6 +29,7 @@ import com.android.systemui.dock.DockManager import com.android.systemui.dump.DumpManager import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.statusbar.StatusBarStateController +import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.phone.CentralSurfaces import com.android.systemui.tuner.TunerService import com.android.systemui.tuner.TunerService.Tunable @@ -69,6 +70,8 @@ class PulsingGestureListenerTest : SysuiTestCase() { private lateinit var statusBarStateController: StatusBarStateController @Mock private lateinit var shadeLogger: ShadeLogger + @Mock + private lateinit var userTracker: UserTracker private lateinit var tunableCaptor: ArgumentCaptor<Tunable> private lateinit var underTest: PulsingGestureListener @@ -85,6 +88,7 @@ class PulsingGestureListenerTest : SysuiTestCase() { ambientDisplayConfiguration, statusBarStateController, shadeLogger, + userTracker, tunerService, dumpManager ) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java index 601771d64046..03af527eb9f3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/interruption/NotificationInterruptStateProviderImplTest.java @@ -41,6 +41,7 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.app.Notification; import android.app.NotificationChannel; import android.app.PendingIntent; @@ -59,6 +60,7 @@ import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.notification.NotifPipelineFlags; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder; @@ -107,6 +109,8 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase { UiEventLoggerFake mUiEventLoggerFake; @Mock PendingIntent mPendingIntent; + @Mock + UserTracker mUserTracker; private NotificationInterruptStateProviderImpl mNotifInterruptionStateProvider; @@ -114,6 +118,7 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase { public void setup() { MockitoAnnotations.initMocks(this); when(mFlags.fullScreenIntentRequiresKeyguard()).thenReturn(false); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); mUiEventLoggerFake = new UiEventLoggerFake(); @@ -131,7 +136,8 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase { mMockHandler, mFlags, mKeyguardNotificationVisibilityProvider, - mUiEventLoggerFake); + mUiEventLoggerFake, + mUserTracker); mNotifInterruptionStateProvider.mUseHeadsUp = true; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java index 645052feee94..0d843bdf054d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java @@ -78,6 +78,7 @@ import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.tuner.TunerService; +import com.android.systemui.util.settings.SecureSettings; import org.junit.Before; import org.junit.Test; @@ -135,6 +136,7 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { @Mock private ShadeTransitionController mShadeTransitionController; @Mock private FeatureFlags mFeatureFlags; @Mock private NotificationTargetsHelper mNotificationTargetsHelper; + @Mock private SecureSettings mSecureSettings; @Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListenerArgumentCaptor; @@ -187,7 +189,8 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase { mLogger, mNotificationStackSizeCalculator, mFeatureFlags, - mNotificationTargetsHelper + mNotificationTargetsHelper, + mSecureSettings ); when(mNotificationStackScrollLayout.isAttachedToWindow()).thenReturn(true); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacksTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacksTest.java index 3fccd37d9d7e..b053f5ab3788 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacksTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacksTest.java @@ -25,8 +25,10 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.app.StatusBarManager; import android.os.PowerManager; +import android.os.UserHandle; import android.os.Vibrator; import android.testing.AndroidTestingRunner; import android.view.InsetsVisibilities; @@ -41,6 +43,7 @@ import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.SysuiTestCase; import com.android.systemui.assist.AssistManager; import com.android.systemui.keyguard.WakefulnessLifecycle; +import com.android.systemui.settings.UserTracker; import com.android.systemui.shade.CameraLauncher; import com.android.systemui.shade.NotificationPanelViewController; import com.android.systemui.shade.ShadeController; @@ -88,6 +91,7 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase { @Mock private StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager; @Mock private SystemBarAttributesListener mSystemBarAttributesListener; @Mock private Lazy<CameraLauncher> mCameraLauncherLazy; + @Mock private UserTracker mUserTracker; CentralSurfacesCommandQueueCallbacks mSbcqCallbacks; @@ -120,8 +124,11 @@ public class CentralSurfacesCommandQueueCallbacksTest extends SysuiTestCase { new DisableFlagsLogger(), DEFAULT_DISPLAY, mSystemBarAttributesListener, - mCameraLauncherLazy); + mCameraLauncherLazy, + mUserTracker); + when(mUserTracker.getUserHandle()).thenReturn( + UserHandle.of(ActivityManager.getCurrentUser())); when(mDeviceProvisionedController.isCurrentUserSetup()).thenReturn(true); when(mRemoteInputQuickSettingsDisabler.adjustDisableFlags(anyInt())) .thenAnswer((Answer<Integer>) invocation -> invocation.getArgument(0)); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java index 4c1b219af843..21ce5a2432dd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java @@ -44,6 +44,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.app.IWallpaperManager; import android.app.Notification; import android.app.NotificationChannel; @@ -118,6 +119,7 @@ import com.android.systemui.plugins.PluginDependencyProvider; import com.android.systemui.plugins.PluginManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.recents.ScreenPinningRequest; +import com.android.systemui.settings.UserTracker; import com.android.systemui.settings.brightness.BrightnessSliderController; import com.android.systemui.shade.CameraLauncher; import com.android.systemui.shade.NotificationPanelView; @@ -306,6 +308,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase { */ @Mock private ViewRootImpl mViewRootImpl; @Mock private WindowOnBackInvokedDispatcher mOnBackInvokedDispatcher; + @Mock private UserTracker mUserTracker; @Captor private ArgumentCaptor<OnBackInvokedCallback> mOnBackInvokedCallback; @Mock IPowerManager mPowerManagerService; @@ -338,7 +341,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase { new Handler(TestableLooper.get(this).getLooper()), mock(NotifPipelineFlags.class), mock(KeyguardNotificationVisibilityProvider.class), - mock(UiEventLogger.class)); + mock(UiEventLogger.class), + mUserTracker); mContext.addMockSystemService(TrustManager.class, mock(TrustManager.class)); mContext.addMockSystemService(FingerprintManager.class, mock(FingerprintManager.class)); @@ -419,6 +423,9 @@ public class CentralSurfacesImplTest extends SysuiTestCase { when(mOperatorNameViewControllerFactory.create(any())) .thenReturn(mOperatorNameViewController); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); + when(mUserTracker.getUserHandle()).thenReturn( + UserHandle.of(ActivityManager.getCurrentUser())); mCentralSurfaces = new CentralSurfacesImpl( mContext, @@ -508,7 +515,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mDreamManager, mCameraLauncherLazy, () -> mLightRevealScrimViewModel, - mAlternateBouncerInteractor + mAlternateBouncerInteractor, + mUserTracker ) { @Override protected ViewRootImpl getViewRootImpl() { @@ -1280,7 +1288,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase { Handler mainHandler, NotifPipelineFlags flags, KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider, - UiEventLogger uiEventLogger) { + UiEventLogger uiEventLogger, + UserTracker userTracker) { super( contentResolver, powerManager, @@ -1294,7 +1303,8 @@ public class CentralSurfacesImplTest extends SysuiTestCase { mainHandler, flags, keyguardNotificationVisibilityProvider, - uiEventLogger + uiEventLogger, + userTracker ); mUseHeadsUp = true; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java index c8438501b3e6..eb5edbc21d89 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/DozeParametersTest.java @@ -29,6 +29,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.content.res.Resources; import android.hardware.display.AmbientDisplayConfiguration; import android.os.Handler; @@ -44,6 +45,7 @@ import com.android.systemui.doze.AlwaysOnDisplayPolicy; import com.android.systemui.doze.DozeScreenState; import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; import com.android.systemui.statusbar.policy.ConfigurationController; @@ -82,6 +84,7 @@ public class DozeParametersTest extends SysuiTestCase { @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private StatusBarStateController mStatusBarStateController; @Mock private ConfigurationController mConfigurationController; + @Mock private UserTracker mUserTracker; @Captor private ArgumentCaptor<BatteryStateChangeCallback> mBatteryStateChangeCallback; /** @@ -107,6 +110,7 @@ public class DozeParametersTest extends SysuiTestCase { when(mSysUIUnfoldComponent.getFoldAodAnimationController()) .thenReturn(mFoldAodAnimationController); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); mDozeParameters = new DozeParameters( mContext, @@ -123,7 +127,8 @@ public class DozeParametersTest extends SysuiTestCase { mUnlockedScreenOffAnimationController, mKeyguardUpdateMonitor, mConfigurationController, - mStatusBarStateController + mStatusBarStateController, + mUserTracker ); verify(mBatteryController).addCallback(mBatteryStateChangeCallback.capture()); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt index 64dee956fcc1..305b9fea7569 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt @@ -31,6 +31,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.privacy.PrivacyItemController import com.android.systemui.privacy.logging.PrivacyLogger import com.android.systemui.screenrecord.RecordingController +import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.CommandQueue import com.android.systemui.statusbar.policy.BluetoothController import com.android.systemui.statusbar.policy.CastController @@ -71,61 +72,37 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() { private const val ALARM_SLOT = "alarm" } - @Mock - private lateinit var iconController: StatusBarIconController - @Mock - private lateinit var commandQueue: CommandQueue - @Mock - private lateinit var broadcastDispatcher: BroadcastDispatcher - @Mock - private lateinit var castController: CastController - @Mock - private lateinit var hotspotController: HotspotController - @Mock - private lateinit var bluetoothController: BluetoothController - @Mock - private lateinit var nextAlarmController: NextAlarmController - @Mock - private lateinit var userInfoController: UserInfoController - @Mock - private lateinit var rotationLockController: RotationLockController - @Mock - private lateinit var dataSaverController: DataSaverController - @Mock - private lateinit var zenModeController: ZenModeController - @Mock - private lateinit var deviceProvisionedController: DeviceProvisionedController - @Mock - private lateinit var keyguardStateController: KeyguardStateController - @Mock - private lateinit var locationController: LocationController - @Mock - private lateinit var sensorPrivacyController: SensorPrivacyController - @Mock - private lateinit var iActivityManager: IActivityManager - @Mock - private lateinit var alarmManager: AlarmManager - @Mock - private lateinit var userManager: UserManager - @Mock - private lateinit var devicePolicyManager: DevicePolicyManager - @Mock - private lateinit var recordingController: RecordingController - @Mock - private lateinit var telecomManager: TelecomManager - @Mock - private lateinit var sharedPreferences: SharedPreferences - @Mock - private lateinit var dateFormatUtil: DateFormatUtil + @Mock private lateinit var iconController: StatusBarIconController + @Mock private lateinit var commandQueue: CommandQueue + @Mock private lateinit var broadcastDispatcher: BroadcastDispatcher + @Mock private lateinit var castController: CastController + @Mock private lateinit var hotspotController: HotspotController + @Mock private lateinit var bluetoothController: BluetoothController + @Mock private lateinit var nextAlarmController: NextAlarmController + @Mock private lateinit var userInfoController: UserInfoController + @Mock private lateinit var rotationLockController: RotationLockController + @Mock private lateinit var dataSaverController: DataSaverController + @Mock private lateinit var zenModeController: ZenModeController + @Mock private lateinit var deviceProvisionedController: DeviceProvisionedController + @Mock private lateinit var keyguardStateController: KeyguardStateController + @Mock private lateinit var locationController: LocationController + @Mock private lateinit var sensorPrivacyController: SensorPrivacyController + @Mock private lateinit var iActivityManager: IActivityManager + @Mock private lateinit var alarmManager: AlarmManager + @Mock private lateinit var userManager: UserManager + @Mock private lateinit var userTracker: UserTracker + @Mock private lateinit var devicePolicyManager: DevicePolicyManager + @Mock private lateinit var recordingController: RecordingController + @Mock private lateinit var telecomManager: TelecomManager + @Mock private lateinit var sharedPreferences: SharedPreferences + @Mock private lateinit var dateFormatUtil: DateFormatUtil @Mock(answer = Answers.RETURNS_DEEP_STUBS) private lateinit var ringerModeTracker: RingerModeTracker - @Mock - private lateinit var privacyItemController: PrivacyItemController - @Mock - private lateinit var privacyLogger: PrivacyLogger + @Mock private lateinit var privacyItemController: PrivacyItemController + @Mock private lateinit var privacyLogger: PrivacyLogger @Captor private lateinit var alarmCallbackCaptor: - ArgumentCaptor<NextAlarmController.NextAlarmChangeCallback> + ArgumentCaptor<NextAlarmController.NextAlarmChangeCallback> private lateinit var executor: FakeExecutor private lateinit var statusBarPolicy: PhoneStatusBarPolicy @@ -137,8 +114,8 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() { executor = FakeExecutor(FakeSystemClock()) testableLooper = TestableLooper.get(this) context.orCreateTestableResources.addOverride( - com.android.internal.R.string.status_bar_alarm_clock, - ALARM_SLOT + com.android.internal.R.string.status_bar_alarm_clock, + ALARM_SLOT ) statusBarPolicy = createStatusBarPolicy() } @@ -195,36 +172,37 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() { private fun createStatusBarPolicy(): PhoneStatusBarPolicy { return PhoneStatusBarPolicy( - iconController, - commandQueue, - broadcastDispatcher, - executor, - testableLooper.looper, - context.resources, - castController, - hotspotController, - bluetoothController, - nextAlarmController, - userInfoController, - rotationLockController, - dataSaverController, - zenModeController, - deviceProvisionedController, - keyguardStateController, - locationController, - sensorPrivacyController, - iActivityManager, - alarmManager, - userManager, - devicePolicyManager, - recordingController, - telecomManager, - /* displayId = */ 0, - sharedPreferences, - dateFormatUtil, - ringerModeTracker, - privacyItemController, - privacyLogger + iconController, + commandQueue, + broadcastDispatcher, + executor, + testableLooper.looper, + context.resources, + castController, + hotspotController, + bluetoothController, + nextAlarmController, + userInfoController, + rotationLockController, + dataSaverController, + zenModeController, + deviceProvisionedController, + keyguardStateController, + locationController, + sensorPrivacyController, + iActivityManager, + alarmManager, + userManager, + userTracker, + devicePolicyManager, + recordingController, + telecomManager, + /* displayId = */ 0, + sharedPreferences, + dateFormatUtil, + ringerModeTracker, + privacyItemController, + privacyLogger ) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java index 19658e6398c1..ccc57ad72f36 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarterTest.java @@ -33,6 +33,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.app.KeyguardManager; import android.app.Notification; import android.app.NotificationManager; @@ -59,6 +60,7 @@ import com.android.systemui.flags.FeatureFlags; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.ActivityStarter.OnDismissAction; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.settings.UserTracker; import com.android.systemui.shade.NotificationPanelViewController; import com.android.systemui.shade.NotificationShadeWindowViewController; import com.android.systemui.shade.ShadeControllerImpl; @@ -139,6 +141,8 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase { private ActivityLaunchAnimator mActivityLaunchAnimator; @Mock private InteractionJankMonitor mJankMonitor; + @Mock + private UserTracker mUserTracker; private final FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); private ExpandableNotificationRow mNotificationRow; private ExpandableNotificationRow mBubbleNotificationRow; @@ -183,6 +187,8 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase { when(mVisibilityProvider.obtain(any(NotificationEntry.class), anyBoolean())) .thenAnswer(invocation -> NotificationVisibility.obtain( invocation.<NotificationEntry>getArgument(0).getKey(), 0, 1, false)); + when(mUserTracker.getUserHandle()).thenReturn( + UserHandle.of(ActivityManager.getCurrentUser())); HeadsUpManagerPhone headsUpManager = mock(HeadsUpManagerPhone.class); NotificationLaunchAnimatorControllerProvider notificationAnimationProvider = @@ -222,7 +228,8 @@ public class StatusBarNotificationActivityStarterTest extends SysuiTestCase { mActivityLaunchAnimator, notificationAnimationProvider, mock(LaunchFullScreenIntentProvider.class), - mock(FeatureFlags.class) + mock(FeatureFlags.class), + mUserTracker ); // set up dismissKeyguardThenExecute to synchronously invoke the OnDismissAction arg diff --git a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java index 2a93ffff87a5..9756b59fc0d3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java @@ -172,7 +172,7 @@ public class ThemeOverlayControllerTest extends SysuiTestCase { verify(mDumpManager).registerDumpable(any(), any()); verify(mDeviceProvisionedController).addCallback(mDeviceProvisionedListener.capture()); verify(mSecureSettings).registerContentObserverForUser( - eq(Settings.Secure.getUriFor(Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES)), + eq(Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES), eq(false), mSettingsObserver.capture(), eq(UserHandle.USER_ALL) ); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java index d0420f790038..729168ab9103 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/leak/LeakReporterTest.java @@ -22,13 +22,17 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import android.app.ActivityManager; import android.app.NotificationManager; +import android.os.UserHandle; import androidx.test.filters.MediumTest; import androidx.test.runner.AndroidJUnit4; import com.android.systemui.SysuiTestCase; +import com.android.systemui.settings.UserTracker; import org.junit.After; import org.junit.Before; @@ -48,6 +52,7 @@ public class LeakReporterTest extends SysuiTestCase { private File mLeakDir; private File mLeakDump; private File mLeakHprof; + private UserTracker mUserTracker; private NotificationManager mNotificationManager; @Before @@ -56,6 +61,9 @@ public class LeakReporterTest extends SysuiTestCase { mLeakDump = new File(mLeakDir, LeakReporter.LEAK_DUMP); mLeakHprof = new File(mLeakDir, LeakReporter.LEAK_HPROF); + mUserTracker = mock(UserTracker.class); + when(mUserTracker.getUserHandle()).thenReturn( + UserHandle.of(ActivityManager.getCurrentUser())); mNotificationManager = mock(NotificationManager.class); mContext.addMockSystemService(NotificationManager.class, mNotificationManager); @@ -65,7 +73,7 @@ public class LeakReporterTest extends SysuiTestCase { return null; }).when(mLeakDetector).dump(any(), any()); - mLeakReporter = new LeakReporter(mContext, mLeakDetector, "test@example.com"); + mLeakReporter = new LeakReporter(mContext, mUserTracker, mLeakDetector, "test@example.com"); } @After diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java index 915ea1a8cd5a..066300445a94 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogControllerImplTest.java @@ -48,6 +48,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dump.DumpManager; import com.android.systemui.keyguard.WakefulnessLifecycle; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.VibratorHelper; import com.android.systemui.util.RingerModeLiveData; import com.android.systemui.util.RingerModeTracker; @@ -101,6 +102,8 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { @Mock private ActivityManager mActivityManager; @Mock + private UserTracker mUserTracker; + @Mock private DumpManager mDumpManager; @@ -113,6 +116,7 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { // Initial non-set value when(mRingerModeLiveData.getValue()).thenReturn(-1); when(mRingerModeInternalLiveData.getValue()).thenReturn(-1); + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); // Enable group volume adjustments mContext.getOrCreateTestableResources().addOverride( com.android.internal.R.bool.config_volumeAdjustmentForRemoteGroupSessions, @@ -124,7 +128,7 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { mBroadcastDispatcher, mRingerModeTracker, mThreadFactory, mAudioManager, mNotificationManager, mVibrator, mIAudioService, mAccessibilityManager, mPackageManager, mWakefullnessLifcycle, mCaptioningManager, mKeyguardManager, - mActivityManager, mDumpManager, mCallback); + mActivityManager, mUserTracker, mDumpManager, mCallback); mVolumeController.setEnableDialogs(true, true); } @@ -233,12 +237,13 @@ public class VolumeDialogControllerImplTest extends SysuiTestCase { CaptioningManager captioningManager, KeyguardManager keyguardManager, ActivityManager activityManager, + UserTracker userTracker, DumpManager dumpManager, C callback) { super(context, broadcastDispatcher, ringerModeTracker, theadFactory, audioManager, notificationManager, optionalVibrator, iAudioService, accessibilityManager, packageManager, wakefulnessLifecycle, captioningManager, keyguardManager, - activityManager, dumpManager); + activityManager, userTracker, dumpManager); mCallbacks = callback; ArgumentCaptor<WakefulnessLifecycle.Observer> observerCaptor = diff --git a/packages/SystemUI/tests/src/com/android/systemui/wallpapers/ImageWallpaperTest.java b/packages/SystemUI/tests/src/com/android/systemui/wallpapers/ImageWallpaperTest.java index 0fdcb95b3eed..31cce4f3168b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wallpapers/ImageWallpaperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wallpapers/ImageWallpaperTest.java @@ -32,13 +32,13 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.hamcrest.MockitoHamcrest.intThat; +import android.app.ActivityManager; import android.app.WallpaperManager; import android.content.Context; import android.graphics.Bitmap; import android.graphics.ColorSpace; import android.graphics.Rect; import android.hardware.display.DisplayManager; -import android.os.UserHandle; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.Surface; @@ -49,6 +49,7 @@ import android.view.WindowMetrics; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; +import com.android.systemui.settings.UserTracker; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; @@ -81,6 +82,8 @@ public class ImageWallpaperTest extends SysuiTestCase { private Surface mSurface; @Mock private Context mMockContext; + @Mock + private UserTracker mUserTracker; @Mock private Bitmap mWallpaperBitmap; @@ -108,13 +111,16 @@ public class ImageWallpaperTest extends SysuiTestCase { when(mWallpaperBitmap.getConfig()).thenReturn(Bitmap.Config.ARGB_8888); // set up wallpaper manager - when(mWallpaperManager.getBitmapAsUser(eq(UserHandle.USER_CURRENT), anyBoolean())) + when(mWallpaperManager.getBitmapAsUser(eq(ActivityManager.getCurrentUser()), anyBoolean())) .thenReturn(mWallpaperBitmap); when(mMockContext.getSystemService(WallpaperManager.class)).thenReturn(mWallpaperManager); // set up surface when(mSurfaceHolder.getSurface()).thenReturn(mSurface); doNothing().when(mSurface).hwuiDestroy(); + + // set up UserTracker + when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser()); } @Test @@ -170,7 +176,7 @@ public class ImageWallpaperTest extends SysuiTestCase { } private ImageWallpaper createImageWallpaper() { - return new ImageWallpaper(mFakeBackgroundExecutor) { + return new ImageWallpaper(mFakeBackgroundExecutor, mUserTracker) { @Override public Engine onCreateEngine() { return new CanvasEngine() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java index dec80807ec87..68ccc301755d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java @@ -91,6 +91,7 @@ import com.android.systemui.flags.FeatureFlags; import com.android.systemui.keyguard.KeyguardViewMediator; import com.android.systemui.model.SysUiState; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.settings.UserTracker; import com.android.systemui.shade.NotificationShadeWindowControllerImpl; import com.android.systemui.shade.NotificationShadeWindowView; import com.android.systemui.shade.ShadeController; @@ -361,7 +362,8 @@ public class BubblesTest extends SysuiTestCase { mock(Handler.class), mock(NotifPipelineFlags.class), mock(KeyguardNotificationVisibilityProvider.class), - mock(UiEventLogger.class) + mock(UiEventLogger.class), + mock(UserTracker.class) ); when(mShellTaskOrganizer.getExecutor()).thenReturn(syncExecutor); mBubbleController = new TestableBubbleController( diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableNotificationInterruptStateProviderImpl.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableNotificationInterruptStateProviderImpl.java index e5316bc83a12..ceee0bc466d2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableNotificationInterruptStateProviderImpl.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/TestableNotificationInterruptStateProviderImpl.java @@ -24,6 +24,7 @@ import android.service.dreams.IDreamManager; import com.android.internal.logging.UiEventLogger; import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.notification.NotifPipelineFlags; import com.android.systemui.statusbar.notification.interruption.KeyguardNotificationVisibilityProvider; import com.android.systemui.statusbar.notification.interruption.NotificationInterruptLogger; @@ -48,7 +49,8 @@ public class TestableNotificationInterruptStateProviderImpl Handler mainHandler, NotifPipelineFlags flags, KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider, - UiEventLogger uiEventLogger) { + UiEventLogger uiEventLogger, + UserTracker userTracker) { super(contentResolver, powerManager, dreamManager, @@ -61,7 +63,8 @@ public class TestableNotificationInterruptStateProviderImpl mainHandler, flags, keyguardNotificationVisibilityProvider, - uiEventLogger); + uiEventLogger, + userTracker); mUseHeadsUp = true; } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeSettings.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeSettings.java index e660e1f2d845..4b973162e42f 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeSettings.java +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeSettings.java @@ -23,6 +23,8 @@ import android.net.Uri; import android.os.UserHandle; import android.util.Pair; +import com.android.systemui.settings.UserTracker; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -57,6 +59,11 @@ public class FakeSettings implements SecureSettings, GlobalSettings, SystemSetti } @Override + public UserTracker getUserTracker() { + return null; + } + + @Override public void registerContentObserverForUser(Uri uri, boolean notifyDescendents, ContentObserver settingsObserver, int userHandle) { List<ContentObserver> observers; |