Merge "Replace getCurrentUser() calls with UserTracker" into tm-qpr-dev am: f1aaea7588

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20429009

Change-Id: I7d35c397a9cb782c1d0fab3cc15f1f55bb350e44
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Alex Stetson
2022-11-16 23:52:51 +00:00
committed by Automerger Merge Worker
64 changed files with 536 additions and 614 deletions

View File

@@ -145,6 +145,7 @@ import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.TaskStackChangeListeners;
import com.android.systemui.statusbar.StatusBarState;
@@ -279,6 +280,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
private final Context mContext;
private final UserTracker mUserTracker;
private final KeyguardUpdateMonitorLogger mLogger;
private final boolean mIsPrimaryUser;
private final AuthController mAuthController;
@@ -884,13 +886,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
mHandler.removeCallbacks(mFpCancelNotReceived);
}
try {
final int userId;
try {
userId = ActivityManager.getService().getCurrentUser().id;
} catch (RemoteException e) {
mLogger.logException(e, "Failed to get current user id");
return;
}
final int userId = mUserTracker.getUserId();
if (userId != authUserId) {
mLogger.logFingerprintAuthForWrongUser(authUserId);
return;
@@ -1108,13 +1104,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
mLogger.d("Aborted successful auth because device is going to sleep.");
return;
}
final int userId;
try {
userId = ActivityManager.getService().getCurrentUser().id;
} catch (RemoteException e) {
mLogger.logException(e, "Failed to get current user id");
return;
}
final int userId = mUserTracker.getUserId();
if (userId != authUserId) {
mLogger.logFaceAuthForWrongUser(authUserId);
return;
@@ -1964,6 +1954,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
@Inject
protected KeyguardUpdateMonitor(
Context context,
UserTracker userTracker,
@Main Looper mainLooper,
BroadcastDispatcher broadcastDispatcher,
SecureSettings secureSettings,
@@ -1996,6 +1987,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
FaceWakeUpTriggersConfig faceWakeUpTriggersConfig) {
mContext = context;
mSubscriptionManager = subscriptionManager;
mUserTracker = userTracker;
mTelephonyListenerManager = telephonyListenerManager;
mDeviceProvisioned = isDeviceProvisionedInSettingsDb();
mStrongAuthTracker = new StrongAuthTracker(context, this::notifyStrongAuthStateChanged,
@@ -2227,7 +2219,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
TaskStackChangeListeners.getInstance().registerTaskStackListener(mTaskStackListener);
mIsPrimaryUser = mUserManager.isPrimaryUser();
int user = ActivityManager.getCurrentUser();
int user = mUserTracker.getUserId();
mUserIsUnlocked.put(user, mUserManager.isUserUnlocked(user));
mLogoutEnabled = mDevicePolicyManager.isLogoutEnabled();
updateSecondaryLockscreenRequirement(user);
@@ -3853,7 +3845,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
pw.println(" " + subId + "=" + mServiceStates.get(subId));
}
if (mFpm != null && mFpm.isHardwareDetected()) {
final int userId = ActivityManager.getCurrentUser();
final int userId = mUserTracker.getUserId();
final int strongAuthFlags = mStrongAuthTracker.getStrongAuthForUser(userId);
BiometricAuthenticated fingerprint = mUserFingerprintAuthenticated.get(userId);
pw.println(" Fingerprint state (user=" + userId + ")");
@@ -3891,7 +3883,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
}
if (mFaceManager != null && mFaceManager.isHardwareDetected()) {
final int userId = ActivityManager.getCurrentUser();
final int userId = mUserTracker.getUserId();
final int strongAuthFlags = mStrongAuthTracker.getStrongAuthForUser(userId);
BiometricAuthenticated face = mUserFaceAuthenticated.get(userId);
pw.println(" Face authentication state (user=" + userId + ")");

View File

@@ -29,17 +29,17 @@ import android.util.ArrayMap;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Observer;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManager.DockEventListener;
import com.android.systemui.plugins.ClockPlugin;
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.settings.CurrentUserObservable;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.plugins.PluginManager;
import java.util.ArrayList;
@@ -47,6 +47,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.function.Supplier;
import javax.inject.Inject;
@@ -69,7 +70,8 @@ public final class ClockManager {
private final ContentResolver mContentResolver;
private final SettingsWrapper mSettingsWrapper;
private final Handler mMainHandler = new Handler(Looper.getMainLooper());
private final CurrentUserObservable mCurrentUserObservable;
private final UserTracker mUserTracker;
private final Executor mMainExecutor;
/**
* Observe settings changes to know when to switch the clock face.
@@ -80,7 +82,7 @@ public final class ClockManager {
public void onChange(boolean selfChange, Collection<Uri> uris,
int flags, int userId) {
if (Objects.equals(userId,
mCurrentUserObservable.getCurrentUser().getValue())) {
mUserTracker.getUserId())) {
reload();
}
}
@@ -89,7 +91,13 @@ public final class ClockManager {
/**
* Observe user changes and react by potentially loading the custom clock for the new user.
*/
private final Observer<Integer> mCurrentUserObserver = (newUserId) -> reload();
private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() {
@Override
public void onUserChanged(int newUser, @NonNull Context userContext) {
reload();
}
};
private final PluginManager mPluginManager;
@Nullable private final DockManager mDockManager;
@@ -129,22 +137,24 @@ public final class ClockManager {
@Inject
public ClockManager(Context context, LayoutInflater layoutInflater,
PluginManager pluginManager, SysuiColorExtractor colorExtractor,
@Nullable DockManager dockManager, BroadcastDispatcher broadcastDispatcher) {
@Nullable DockManager dockManager, UserTracker userTracker,
@Main Executor mainExecutor) {
this(context, layoutInflater, pluginManager, colorExtractor,
context.getContentResolver(), new CurrentUserObservable(broadcastDispatcher),
context.getContentResolver(), userTracker, mainExecutor,
new SettingsWrapper(context.getContentResolver()), dockManager);
}
@VisibleForTesting
ClockManager(Context context, LayoutInflater layoutInflater,
PluginManager pluginManager, SysuiColorExtractor colorExtractor,
ContentResolver contentResolver, CurrentUserObservable currentUserObservable,
ContentResolver contentResolver, UserTracker userTracker, Executor mainExecutor,
SettingsWrapper settingsWrapper, DockManager dockManager) {
mContext = context;
mPluginManager = pluginManager;
mContentResolver = contentResolver;
mSettingsWrapper = settingsWrapper;
mCurrentUserObservable = currentUserObservable;
mUserTracker = userTracker;
mMainExecutor = mainExecutor;
mDockManager = dockManager;
mPreviewClocks = new AvailableClocks();
@@ -226,7 +236,7 @@ public final class ClockManager {
mContentResolver.registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.DOCKED_CLOCK_FACE),
false, mContentObserver, UserHandle.USER_ALL);
mCurrentUserObservable.getCurrentUser().observeForever(mCurrentUserObserver);
mUserTracker.addCallback(mUserChangedCallback, mMainExecutor);
if (mDockManager != null) {
mDockManager.addListener(mDockEventListener);
}
@@ -235,7 +245,7 @@ public final class ClockManager {
private void unregister() {
mPluginManager.removePluginListener(mPreviewClocks);
mContentResolver.unregisterContentObserver(mContentObserver);
mCurrentUserObservable.getCurrentUser().removeObserver(mCurrentUserObserver);
mUserTracker.removeCallback(mUserChangedCallback);
if (mDockManager != null) {
mDockManager.removeListener(mDockEventListener);
}
@@ -363,7 +373,7 @@ public final class ClockManager {
ClockPlugin plugin = null;
if (ClockManager.this.isDocked()) {
final String name = mSettingsWrapper.getDockedClockFace(
mCurrentUserObservable.getCurrentUser().getValue());
mUserTracker.getUserId());
if (name != null) {
plugin = mClocks.get(name);
if (plugin != null) {
@@ -372,7 +382,7 @@ public final class ClockManager {
}
}
final String name = mSettingsWrapper.getLockScreenCustomClockFace(
mCurrentUserObservable.getCurrentUser().getValue());
mUserTracker.getUserId());
if (name != null) {
plugin = mClocks.get(name);
}

View File

@@ -70,6 +70,7 @@ import com.android.systemui.qs.ReduceBrightColorsController;
import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.screenrecord.RecordingController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.shared.system.ActivityManagerWrapper;
@@ -357,6 +358,7 @@ public class Dependency {
@Inject Lazy<GroupExpansionManager> mGroupExpansionManagerLazy;
@Inject Lazy<SystemUIDialogManager> mSystemUIDialogManagerLazy;
@Inject Lazy<DialogLaunchAnimator> mDialogLaunchAnimatorLazy;
@Inject Lazy<UserTracker> mUserTrackerLazy;
@Inject
public Dependency() {
@@ -564,6 +566,7 @@ public class Dependency {
mProviders.put(GroupExpansionManager.class, mGroupExpansionManagerLazy::get);
mProviders.put(SystemUIDialogManager.class, mSystemUIDialogManagerLazy::get);
mProviders.put(DialogLaunchAnimator.class, mDialogLaunchAnimatorLazy::get);
mProviders.put(UserTracker.class, mUserTrackerLazy::get);
Dependency.setInstance(this);
}

View File

@@ -26,7 +26,6 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M
import android.annotation.IdRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -901,7 +900,7 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable {
private final BroadcastReceiver mUserSwitchIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int newUserId = ActivityManager.getCurrentUser();
int newUserId = mUserTracker.getUserId();
if (DEBUG) {
Log.d(TAG, "UserSwitched newUserId=" + newUserId);
}

View File

@@ -17,21 +17,23 @@ package com.android.systemui.battery;
import static android.provider.Settings.System.SHOW_BATTERY_PERCENT;
import android.app.ActivityManager;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.ArraySet;
import android.view.View;
import com.android.systemui.broadcast.BroadcastDispatcher;
import androidx.annotation.NonNull;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -44,12 +46,13 @@ import javax.inject.Inject;
public class BatteryMeterViewController extends ViewController<BatteryMeterView> {
private final ConfigurationController mConfigurationController;
private final TunerService mTunerService;
private final Handler mMainHandler;
private final ContentResolver mContentResolver;
private final BatteryController mBatteryController;
private final String mSlotBattery;
private final SettingObserver mSettingObserver;
private final CurrentUserTracker mCurrentUserTracker;
private final UserTracker mUserTracker;
private final ConfigurationController.ConfigurationListener mConfigurationListener =
new ConfigurationController.ConfigurationListener() {
@@ -93,6 +96,16 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
}
};
private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() {
@Override
public void onUserChanged(int newUser, @NonNull Context userContext) {
mContentResolver.unregisterContentObserver(mSettingObserver);
registerShowBatteryPercentObserver(newUser);
mView.updateShowPercent();
}
};
// Some places may need to show the battery conditionally, and not obey the tuner
private boolean mIgnoreTunerUpdates;
private boolean mIsSubscribedForTunerUpdates;
@@ -100,16 +113,18 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
@Inject
public BatteryMeterViewController(
BatteryMeterView view,
UserTracker userTracker,
ConfigurationController configurationController,
TunerService tunerService,
BroadcastDispatcher broadcastDispatcher,
@Main Handler mainHandler,
ContentResolver contentResolver,
FeatureFlags featureFlags,
BatteryController batteryController) {
super(view);
mUserTracker = userTracker;
mConfigurationController = configurationController;
mTunerService = tunerService;
mMainHandler = mainHandler;
mContentResolver = contentResolver;
mBatteryController = batteryController;
@@ -117,15 +132,7 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
mView.setDisplayShieldEnabled(featureFlags.isEnabled(Flags.BATTERY_SHIELD_ICON));
mSlotBattery = getResources().getString(com.android.internal.R.string.status_bar_battery);
mSettingObserver = new SettingObserver(mainHandler);
mCurrentUserTracker = new CurrentUserTracker(broadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
contentResolver.unregisterContentObserver(mSettingObserver);
registerShowBatteryPercentObserver(newUserId);
mView.updateShowPercent();
}
};
mSettingObserver = new SettingObserver(mMainHandler);
}
@Override
@@ -134,9 +141,9 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
subscribeForTunerUpdates();
mBatteryController.addCallback(mBatteryStateChangeCallback);
registerShowBatteryPercentObserver(ActivityManager.getCurrentUser());
registerShowBatteryPercentObserver(mUserTracker.getUserId());
registerGlobalBatteryUpdateObserver();
mCurrentUserTracker.startTracking();
mUserTracker.addCallback(mUserChangedCallback, new HandlerExecutor(mMainHandler));
mView.updateShowPercent();
}
@@ -147,7 +154,7 @@ public class BatteryMeterViewController extends ViewController<BatteryMeterView>
unsubscribeFromTunerUpdates();
mBatteryController.removeCallback(mBatteryStateChangeCallback);
mCurrentUserTracker.stopTracking();
mUserTracker.removeCallback(mUserChangedCallback);
mContentResolver.unregisterContentObserver(mSettingObserver);
}

View File

@@ -18,6 +18,7 @@ package com.android.systemui.controls.management
import android.app.ActivityOptions
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
@@ -33,21 +34,23 @@ import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.android.systemui.R
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.CustomIconCache
import com.android.systemui.controls.controller.ControlsControllerImpl
import com.android.systemui.controls.controller.StructureInfo
import com.android.systemui.controls.ui.ControlsActivity
import com.android.systemui.controls.ui.ControlsUiController
import com.android.systemui.settings.CurrentUserTracker
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.settings.UserTracker
import java.util.concurrent.Executor
import javax.inject.Inject
/**
* Activity for rearranging and removing controls for a given structure
*/
open class ControlsEditingActivity @Inject constructor(
@Main private val mainExecutor: Executor,
private val controller: ControlsControllerImpl,
private val broadcastDispatcher: BroadcastDispatcher,
private val userTracker: UserTracker,
private val customIconCache: CustomIconCache,
private val uiController: ControlsUiController
) : ComponentActivity() {
@@ -66,12 +69,12 @@ open class ControlsEditingActivity @Inject constructor(
private lateinit var subtitle: TextView
private lateinit var saveButton: View
private val currentUserTracker = object : CurrentUserTracker(broadcastDispatcher) {
private val userTrackerCallback: UserTracker.Callback = object : UserTracker.Callback {
private val startingUser = controller.currentUserId
override fun onUserSwitched(newUserId: Int) {
if (newUserId != startingUser) {
stopTracking()
override fun onUserChanged(newUser: Int, userContext: Context) {
if (newUser != startingUser) {
userTracker.removeCallback(this)
finish()
}
}
@@ -104,7 +107,7 @@ open class ControlsEditingActivity @Inject constructor(
super.onStart()
setUpList()
currentUserTracker.startTracking()
userTracker.addCallback(userTrackerCallback, mainExecutor)
if (DEBUG) {
Log.d(TAG, "Registered onBackInvokedCallback")
@@ -115,7 +118,7 @@ open class ControlsEditingActivity @Inject constructor(
override fun onStop() {
super.onStop()
currentUserTracker.stopTracking()
userTracker.removeCallback(userTrackerCallback)
if (DEBUG) {
Log.d(TAG, "Unregistered onBackInvokedCallback")
@@ -248,7 +251,7 @@ open class ControlsEditingActivity @Inject constructor(
}
override fun onDestroy() {
currentUserTracker.stopTracking()
userTracker.removeCallback(userTrackerCallback)
super.onDestroy()
}
}

View File

@@ -20,6 +20,7 @@ import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.app.ActivityOptions
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.os.Bundle
@@ -39,7 +40,6 @@ import androidx.activity.ComponentActivity
import androidx.viewpager2.widget.ViewPager2
import com.android.systemui.Prefs
import com.android.systemui.R
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.TooltipManager
import com.android.systemui.controls.controller.ControlsControllerImpl
@@ -47,7 +47,7 @@ import com.android.systemui.controls.controller.StructureInfo
import com.android.systemui.controls.ui.ControlsActivity
import com.android.systemui.controls.ui.ControlsUiController
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.settings.CurrentUserTracker
import com.android.systemui.settings.UserTracker
import java.text.Collator
import java.util.concurrent.Executor
import java.util.function.Consumer
@@ -57,7 +57,7 @@ open class ControlsFavoritingActivity @Inject constructor(
@Main private val executor: Executor,
private val controller: ControlsControllerImpl,
private val listingController: ControlsListingController,
private val broadcastDispatcher: BroadcastDispatcher,
private val userTracker: UserTracker,
private val uiController: ControlsUiController
) : ComponentActivity() {
@@ -95,12 +95,12 @@ open class ControlsFavoritingActivity @Inject constructor(
private var cancelLoadRunnable: Runnable? = null
private var isPagerLoaded = false
private val currentUserTracker = object : CurrentUserTracker(broadcastDispatcher) {
private val userTrackerCallback: UserTracker.Callback = object : UserTracker.Callback {
private val startingUser = controller.currentUserId
override fun onUserSwitched(newUserId: Int) {
if (newUserId != startingUser) {
stopTracking()
override fun onUserChanged(newUser: Int, userContext: Context) {
if (newUser != startingUser) {
userTracker.removeCallback(this)
finish()
}
}
@@ -363,7 +363,7 @@ open class ControlsFavoritingActivity @Inject constructor(
super.onStart()
listingController.addCallback(listingCallback)
currentUserTracker.startTracking()
userTracker.addCallback(userTrackerCallback, executor)
if (DEBUG) {
Log.d(TAG, "Registered onBackInvokedCallback")
@@ -388,7 +388,7 @@ open class ControlsFavoritingActivity @Inject constructor(
super.onStop()
listingController.removeCallback(listingCallback)
currentUserTracker.stopTracking()
userTracker.removeCallback(userTrackerCallback)
if (DEBUG) {
Log.d(TAG, "Unregistered onBackInvokedCallback")

View File

@@ -18,6 +18,7 @@ package com.android.systemui.controls.management
import android.app.ActivityOptions
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
@@ -33,13 +34,12 @@ import androidx.activity.ComponentActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.android.systemui.R
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.controller.ControlsController
import com.android.systemui.controls.ui.ControlsActivity
import com.android.systemui.controls.ui.ControlsUiController
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.settings.CurrentUserTracker
import com.android.systemui.settings.UserTracker
import java.util.concurrent.Executor
import javax.inject.Inject
@@ -51,7 +51,7 @@ open class ControlsProviderSelectorActivity @Inject constructor(
@Background private val backExecutor: Executor,
private val listingController: ControlsListingController,
private val controlsController: ControlsController,
private val broadcastDispatcher: BroadcastDispatcher,
private val userTracker: UserTracker,
private val uiController: ControlsUiController
) : ComponentActivity() {
@@ -62,12 +62,12 @@ open class ControlsProviderSelectorActivity @Inject constructor(
}
private var backShouldExit = false
private lateinit var recyclerView: RecyclerView
private val currentUserTracker = object : CurrentUserTracker(broadcastDispatcher) {
private val userTrackerCallback: UserTracker.Callback = object : UserTracker.Callback {
private val startingUser = listingController.currentUserId
override fun onUserSwitched(newUserId: Int) {
if (newUserId != startingUser) {
stopTracking()
override fun onUserChanged(newUser: Int, userContext: Context) {
if (newUser != startingUser) {
userTracker.removeCallback(this)
finish()
}
}
@@ -129,7 +129,7 @@ open class ControlsProviderSelectorActivity @Inject constructor(
override fun onStart() {
super.onStart()
currentUserTracker.startTracking()
userTracker.addCallback(userTrackerCallback, executor)
recyclerView.alpha = 0.0f
recyclerView.adapter = AppAdapter(
@@ -161,7 +161,7 @@ open class ControlsProviderSelectorActivity @Inject constructor(
override fun onStop() {
super.onStop()
currentUserTracker.stopTracking()
userTracker.removeCallback(userTrackerCallback)
if (DEBUG) {
Log.d(TAG, "Unregistered onBackInvokedCallback")
@@ -190,7 +190,7 @@ open class ControlsProviderSelectorActivity @Inject constructor(
}
override fun onDestroy() {
currentUserTracker.stopTracking()
userTracker.removeCallback(userTrackerCallback)
super.onDestroy()
}

View File

@@ -19,6 +19,7 @@ package com.android.systemui.controls.management
import android.app.AlertDialog
import android.app.Dialog
import android.content.ComponentName
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.os.Bundle
@@ -32,18 +33,20 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.activity.ComponentActivity
import com.android.systemui.R
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.controller.ControlInfo
import com.android.systemui.controls.controller.ControlsController
import com.android.systemui.controls.ui.RenderInfo
import com.android.systemui.settings.CurrentUserTracker
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.settings.UserTracker
import com.android.systemui.statusbar.phone.SystemUIDialog
import java.util.concurrent.Executor
import javax.inject.Inject
open class ControlsRequestDialog @Inject constructor(
@Main private val mainExecutor: Executor,
private val controller: ControlsController,
private val broadcastDispatcher: BroadcastDispatcher,
private val userTracker: UserTracker,
private val controlsListingController: ControlsListingController
) : ComponentActivity(), DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
@@ -58,12 +61,12 @@ open class ControlsRequestDialog @Inject constructor(
override fun onServicesUpdated(serviceInfos: List<ControlsServiceInfo>) {}
}
private val currentUserTracker = object : CurrentUserTracker(broadcastDispatcher) {
private val userTrackerCallback: UserTracker.Callback = object : UserTracker.Callback {
private val startingUser = controller.currentUserId
override fun onUserSwitched(newUserId: Int) {
if (newUserId != startingUser) {
stopTracking()
override fun onUserChanged(newUser: Int, userContext: Context) {
if (newUser != startingUser) {
userTracker.removeCallback(this)
finish()
}
}
@@ -72,7 +75,7 @@ open class ControlsRequestDialog @Inject constructor(
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
currentUserTracker.startTracking()
userTracker.addCallback(userTrackerCallback, mainExecutor)
controlsListingController.addCallback(callback)
val requestUser = intent.getIntExtra(Intent.EXTRA_USER_ID, UserHandle.USER_NULL)
@@ -118,7 +121,7 @@ open class ControlsRequestDialog @Inject constructor(
override fun onDestroy() {
dialog?.dismiss()
currentUserTracker.stopTracking()
userTracker.removeCallback(userTrackerCallback)
controlsListingController.removeCallback(callback)
super.onDestroy()
}

View File

@@ -22,7 +22,6 @@ import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_
import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_LOCK_SCREEN;
import android.annotation.AnyThread;
import android.app.ActivityManager;
import android.database.ContentObserver;
import android.hardware.Sensor;
import android.hardware.SensorManager;
@@ -47,6 +46,7 @@ import com.android.internal.logging.UiEventLoggerImpl;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.plugins.SensorManagerPlugin;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.DevicePostureController;
import com.android.systemui.util.sensors.AsyncSensorManager;
@@ -96,6 +96,7 @@ public class DozeSensors {
private final SecureSettings mSecureSettings;
private final DevicePostureController mDevicePostureController;
private final AuthController mAuthController;
private final UserTracker mUserTracker;
private final boolean mScreenOffUdfpsEnabled;
// Sensors
@@ -149,7 +150,8 @@ public class DozeSensors {
ProximitySensor proximitySensor,
SecureSettings secureSettings,
AuthController authController,
DevicePostureController devicePostureController
DevicePostureController devicePostureController,
UserTracker userTracker
) {
mSensorManager = sensorManager;
mConfig = config;
@@ -167,6 +169,7 @@ public class DozeSensors {
mDevicePostureController = devicePostureController;
mDevicePosture = mDevicePostureController.getDevicePosture();
mAuthController = authController;
mUserTracker = userTracker;
mUdfpsEnrolled =
mAuthController.isUdfpsEnrolled(KeyguardUpdateMonitor.getCurrentUser());
@@ -438,7 +441,7 @@ public class DozeSensors {
private final ContentObserver mSettingsObserver = new ContentObserver(mHandler) {
@Override
public void onChange(boolean selfChange, Collection<Uri> uris, int flags, int userId) {
if (userId != ActivityManager.getCurrentUser()) {
if (userId != mUserTracker.getUserId()) {
return;
}
for (TriggerSensor s : mTriggerSensors) {

View File

@@ -45,6 +45,7 @@ import com.android.systemui.dock.DockManager;
import com.android.systemui.doze.DozeMachine.State;
import com.android.systemui.doze.dagger.DozeScope;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.DevicePostureController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -188,7 +189,8 @@ public class DozeTriggers implements DozeMachine.Part {
UiEventLogger uiEventLogger,
SessionTracker sessionTracker,
KeyguardStateController keyguardStateController,
DevicePostureController devicePostureController) {
DevicePostureController devicePostureController,
UserTracker userTracker) {
mContext = context;
mDozeHost = dozeHost;
mConfig = config;
@@ -200,7 +202,7 @@ public class DozeTriggers implements DozeMachine.Part {
mDozeSensors = new DozeSensors(mSensorManager, dozeParameters,
config, wakeLock, this::onSensor, this::onProximityFar, dozeLog, proximitySensor,
secureSettings, authController, devicePostureController);
secureSettings, authController, devicePostureController, userTracker);
mDockManager = dockManager;
mProxCheck = proxCheck;
mDozeLog = dozeLog;

View File

@@ -125,6 +125,7 @@ import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.GlobalActions.GlobalActionsManager;
import com.android.systemui.plugins.GlobalActionsPanelPlugin;
import com.android.systemui.scrim.ScrimDrawable;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.VibratorHelper;
import com.android.systemui.statusbar.phone.CentralSurfaces;
@@ -201,6 +202,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
protected final SecureSettings mSecureSettings;
protected final Resources mResources;
private final ConfigurationController mConfigurationController;
private final UserTracker mUserTracker;
private final UserManager mUserManager;
private final TrustManager mTrustManager;
private final IActivityManager mIActivityManager;
@@ -339,6 +341,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
@NonNull VibratorHelper vibrator,
@Main Resources resources,
ConfigurationController configurationController,
UserTracker userTracker,
KeyguardStateController keyguardStateController,
UserManager userManager,
TrustManager trustManager,
@@ -370,6 +373,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
mSecureSettings = secureSettings;
mResources = resources;
mConfigurationController = configurationController;
mUserTracker = userTracker;
mUserManager = userManager;
mTrustManager = trustManager;
mIActivityManager = iActivityManager;
@@ -1198,11 +1202,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
}
protected UserInfo getCurrentUser() {
try {
return mIActivityManager.getCurrentUser();
} catch (RemoteException re) {
return null;
}
return mUserTracker.getUserInfo();
}
/**

View File

@@ -17,7 +17,6 @@
package com.android.systemui.keyguard;
import android.annotation.AnyThread;
import android.app.ActivityManager;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
@@ -52,6 +51,7 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.R;
import com.android.systemui.SystemUIAppComponentFactory;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.DozeParameters;
@@ -140,6 +140,8 @@ public class KeyguardSliceProvider extends SliceProvider implements
public KeyguardBypassController mKeyguardBypassController;
@Inject
public KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@Inject
UserTracker mUserTracker;
private CharSequence mMediaTitle;
private CharSequence mMediaArtist;
protected boolean mDozing;
@@ -355,7 +357,7 @@ public class KeyguardSliceProvider extends SliceProvider implements
synchronized (this) {
if (withinNHoursLocked(mNextAlarmInfo, ALARM_VISIBILITY_HOURS)) {
String pattern = android.text.format.DateFormat.is24HourFormat(getContext(),
ActivityManager.getCurrentUser()) ? "HH:mm" : "h:mm";
mUserTracker.getUserId()) ? "HH:mm" : "h:mm";
mNextAlarm = android.text.format.DateFormat.format(pattern,
mNextAlarmInfo.getTriggerTime()).toString();
} else {

View File

@@ -36,7 +36,6 @@ import static com.android.systemui.DejankUtils.whitelistIpcs;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
import android.app.AlarmManager;
import android.app.PendingIntent;
@@ -124,6 +123,7 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.dagger.KeyguardModule;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeExpansionStateManager;
@@ -263,6 +263,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
private AlarmManager mAlarmManager;
private AudioManager mAudioManager;
private StatusBarManager mStatusBarManager;
private final UserTracker mUserTracker;
private final SysuiStatusBarStateController mStatusBarStateController;
private final Executor mUiBgExecutor;
private final ScreenOffAnimationController mScreenOffAnimationController;
@@ -720,7 +721,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
@Override
public void keyguardDone(boolean strongAuth, int targetUserId) {
if (targetUserId != ActivityManager.getCurrentUser()) {
if (targetUserId != mUserTracker.getUserId()) {
return;
}
if (DEBUG) Log.d(TAG, "keyguardDone");
@@ -743,7 +744,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
public void keyguardDonePending(boolean strongAuth, int targetUserId) {
Trace.beginSection("KeyguardViewMediator.mViewMediatorCallback#keyguardDonePending");
if (DEBUG) Log.d(TAG, "keyguardDonePending");
if (targetUserId != ActivityManager.getCurrentUser()) {
if (targetUserId != mUserTracker.getUserId()) {
Trace.endSection();
return;
}
@@ -1136,6 +1137,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
*/
public KeyguardViewMediator(
Context context,
UserTracker userTracker,
FalsingCollector falsingCollector,
LockPatternUtils lockPatternUtils,
BroadcastDispatcher broadcastDispatcher,
@@ -1161,6 +1163,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
Lazy<NotificationShadeWindowController> notificationShadeWindowControllerLazy,
Lazy<ActivityLaunchAnimator> activityLaunchAnimator) {
mContext = context;
mUserTracker = userTracker;
mFalsingCollector = falsingCollector;
mLockPatternUtils = lockPatternUtils;
mBroadcastDispatcher = broadcastDispatcher;
@@ -1241,7 +1244,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
KeyguardUpdateMonitor.setCurrentUser(ActivityManager.getCurrentUser());
KeyguardUpdateMonitor.setCurrentUser(mUserTracker.getUserId());
// Assume keyguard is showing (unless it's disabled) until we know for sure, unless Keyguard
// is disabled.

View File

@@ -47,6 +47,7 @@ import com.android.systemui.keyguard.data.repository.KeyguardRepositoryModule;
import com.android.systemui.keyguard.domain.interactor.StartKeyguardTransitionModule;
import com.android.systemui.keyguard.domain.quickaffordance.KeyguardQuickAffordanceModule;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
@@ -86,6 +87,7 @@ public class KeyguardModule {
@SysUISingleton
public static KeyguardViewMediator newKeyguardViewMediator(
Context context,
UserTracker userTracker,
FalsingCollector falsingCollector,
LockPatternUtils lockPatternUtils,
BroadcastDispatcher broadcastDispatcher,
@@ -114,6 +116,7 @@ public class KeyguardModule {
Lazy<ActivityLaunchAnimator> activityLaunchAnimator) {
return new KeyguardViewMediator(
context,
userTracker,
falsingCollector,
lockPatternUtils,
broadcastDispatcher,

View File

@@ -20,13 +20,12 @@ import android.content.Context
import android.os.SystemProperties
import android.util.Log
import com.android.internal.annotations.VisibleForTesting
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.broadcast.BroadcastSender
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.controls.models.player.MediaData
import com.android.systemui.media.controls.models.recommendation.SmartspaceMediaData
import com.android.systemui.media.controls.util.MediaUiEventLogger
import com.android.systemui.settings.CurrentUserTracker
import com.android.systemui.settings.UserTracker
import com.android.systemui.statusbar.NotificationLockscreenUserManager
import com.android.systemui.util.time.SystemClock
import java.util.SortedMap
@@ -62,14 +61,13 @@ class MediaDataFilter
@Inject
constructor(
private val context: Context,
private val broadcastDispatcher: BroadcastDispatcher,
private val userTracker: UserTracker,
private val broadcastSender: BroadcastSender,
private val lockscreenUserManager: NotificationLockscreenUserManager,
@Main private val executor: Executor,
private val systemClock: SystemClock,
private val logger: MediaUiEventLogger
) : MediaDataManager.Listener {
private val userTracker: CurrentUserTracker
private val _listeners: MutableSet<MediaDataManager.Listener> = mutableSetOf()
internal val listeners: Set<MediaDataManager.Listener>
get() = _listeners.toSet()
@@ -81,15 +79,15 @@ constructor(
private var smartspaceMediaData: SmartspaceMediaData = EMPTY_SMARTSPACE_MEDIA_DATA
private var reactivatedKey: String? = null
init {
userTracker =
object : CurrentUserTracker(broadcastDispatcher) {
override fun onUserSwitched(newUserId: Int) {
// Post this so we can be sure lockscreenUserManager already got the broadcast
executor.execute { handleUserSwitched(newUserId) }
}
private val userTrackerCallback =
object : UserTracker.Callback {
override fun onUserChanged(newUser: Int, userContext: Context) {
handleUserSwitched(newUser)
}
userTracker.startTracking()
}
init {
userTracker.addCallback(userTrackerCallback, executor)
}
override fun onMediaDataLoaded(

View File

@@ -16,19 +16,19 @@
package com.android.systemui.mediaprojection.appselector.data
import android.app.ActivityManager
import android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.kotlin.getOrNull
import com.android.wm.shell.recents.RecentTasks
import com.android.wm.shell.util.GroupedRecentTaskInfo
import java.util.Optional
import java.util.concurrent.Executor
import javax.inject.Inject
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import java.util.concurrent.Executor
interface RecentTaskListProvider {
/** Loads recent tasks, the returned task list is from the most-recent to least-recent order */
@@ -40,7 +40,8 @@ class ShellRecentTaskListProvider
constructor(
@Background private val coroutineDispatcher: CoroutineDispatcher,
@Background private val backgroundExecutor: Executor,
private val recentTasks: Optional<RecentTasks>
private val recentTasks: Optional<RecentTasks>,
private val userTracker: UserTracker
) : RecentTaskListProvider {
private val recents by lazy { recentTasks.getOrNull() }
@@ -67,10 +68,8 @@ constructor(
getRecentTasks(
Integer.MAX_VALUE,
RECENT_IGNORE_UNAVAILABLE,
ActivityManager.getCurrentUser(),
userTracker.userId,
backgroundExecutor
) { tasks ->
continuation.resume(tasks)
}
) { tasks -> continuation.resume(tasks) }
}
}

View File

@@ -59,7 +59,6 @@ import android.window.BackEvent;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.policy.GestureNavigationSettingsObserver;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
@@ -71,7 +70,7 @@ import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.NavigationEdgeBackPlugin;
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.InputChannelCompat;
@@ -102,8 +101,8 @@ import javax.inject.Provider;
/**
* Utility class to handle edge swipes for back gesture
*/
public class EdgeBackGestureHandler extends CurrentUserTracker
implements PluginListener<NavigationEdgeBackPlugin>, ProtoTraceable<SystemUiTraceProto> {
public class EdgeBackGestureHandler implements PluginListener<NavigationEdgeBackPlugin>,
ProtoTraceable<SystemUiTraceProto> {
private static final String TAG = "EdgeBackGestureHandler";
private static final int MAX_LONG_PRESS_TIMEOUT = SystemProperties.getInt(
@@ -172,6 +171,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
private final Context mContext;
private final UserTracker mUserTracker;
private final OverviewProxyService mOverviewProxyService;
private final SysUiState mSysUiState;
private Runnable mStateChangeCallback;
@@ -319,6 +319,15 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
private final Consumer<Boolean> mOnIsInPipStateChangedListener =
(isInPip) -> mIsInPip = isInPip;
private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() {
@Override
public void onUserChanged(int newUser, @NonNull Context userContext) {
updateIsEnabled();
updateCurrentUserResources();
}
};
EdgeBackGestureHandler(
Context context,
OverviewProxyService overviewProxyService,
@@ -326,7 +335,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
PluginManager pluginManager,
@Main Executor executor,
@Background Executor backgroundExecutor,
BroadcastDispatcher broadcastDispatcher,
UserTracker userTracker,
ProtoTracer protoTracer,
NavigationModeController navigationModeController,
BackPanelController.Factory backPanelControllerFactory,
@@ -338,11 +347,11 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
Provider<NavigationBarEdgePanel> navigationBarEdgePanelProvider,
Provider<BackGestureTfClassifierProvider> backGestureTfClassifierProviderProvider,
FeatureFlags featureFlags) {
super(broadcastDispatcher);
mContext = context;
mDisplayId = context.getDisplayId();
mMainExecutor = executor;
mBackgroundExecutor = backgroundExecutor;
mUserTracker = userTracker;
mOverviewProxyService = overviewProxyService;
mSysUiState = sysUiState;
mPluginManager = pluginManager;
@@ -444,12 +453,6 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
}
}
@Override
public void onUserSwitched(int newUserId) {
updateIsEnabled();
updateCurrentUserResources();
}
/**
* @see NavigationBarView#onAttachedToWindow()
*/
@@ -459,7 +462,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mOverviewProxyService.addCallback(mQuickSwitchListener);
mSysUiState.addCallback(mSysUiStateCallback);
updateIsEnabled();
startTracking();
mUserTracker.addCallback(mUserChangedCallback, mMainExecutor);
}
/**
@@ -471,7 +474,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mOverviewProxyService.removeCallback(mQuickSwitchListener);
mSysUiState.removeCallback(mSysUiStateCallback);
updateIsEnabled();
stopTracking();
mUserTracker.removeCallback(mUserChangedCallback);
}
/**
@@ -1074,7 +1077,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
private final PluginManager mPluginManager;
private final Executor mExecutor;
private final Executor mBackgroundExecutor;
private final BroadcastDispatcher mBroadcastDispatcher;
private final UserTracker mUserTracker;
private final ProtoTracer mProtoTracer;
private final NavigationModeController mNavigationModeController;
private final BackPanelController.Factory mBackPanelControllerFactory;
@@ -1094,7 +1097,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
PluginManager pluginManager,
@Main Executor executor,
@Background Executor backgroundExecutor,
BroadcastDispatcher broadcastDispatcher,
UserTracker userTracker,
ProtoTracer protoTracer,
NavigationModeController navigationModeController,
BackPanelController.Factory backPanelControllerFactory,
@@ -1112,7 +1115,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mPluginManager = pluginManager;
mExecutor = executor;
mBackgroundExecutor = backgroundExecutor;
mBroadcastDispatcher = broadcastDispatcher;
mUserTracker = userTracker;
mProtoTracer = protoTracer;
mNavigationModeController = navigationModeController;
mBackPanelControllerFactory = backPanelControllerFactory;
@@ -1135,7 +1138,7 @@ public class EdgeBackGestureHandler extends CurrentUserTracker
mPluginManager,
mExecutor,
mBackgroundExecutor,
mBroadcastDispatcher,
mUserTracker,
mProtoTracer,
mNavigationModeController,
mBackPanelControllerFactory,

View File

@@ -16,7 +16,6 @@
package com.android.systemui.qs;
import android.app.ActivityManager;
import android.database.ContentObserver;
import android.os.Handler;
@@ -47,10 +46,6 @@ public abstract class SettingObserver extends ContentObserver implements Listena
this(settingsProxy, handler, settingName, userId, 0);
}
public SettingObserver(SettingsProxy settingsProxy, Handler handler, String settingName) {
this(settingsProxy, handler, settingName, ActivityManager.getCurrentUser());
}
public SettingObserver(SettingsProxy settingsProxy, Handler handler, String settingName,
int userId, int defaultValue) {
super(handler);

View File

@@ -48,6 +48,7 @@ import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.SettingObserver;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.util.settings.GlobalSettings;
import javax.inject.Inject;
@@ -74,14 +75,16 @@ public class AirplaneModeTile extends QSTileImpl<BooleanState> {
QSLogger qsLogger,
BroadcastDispatcher broadcastDispatcher,
Lazy<ConnectivityManager> lazyConnectivityManager,
GlobalSettings globalSettings
GlobalSettings globalSettings,
UserTracker userTracker
) {
super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
statusBarStateController, activityStarter, qsLogger);
mBroadcastDispatcher = broadcastDispatcher;
mLazyConnectivityManager = lazyConnectivityManager;
mSetting = new SettingObserver(globalSettings, mHandler, Global.AIRPLANE_MODE_ON) {
mSetting = new SettingObserver(globalSettings, mHandler, Global.AIRPLANE_MODE_ON,
userTracker.getUserId()) {
@Override
protected void handleValueChanged(int value, boolean observedChange) {
// mHandler is the background handler so calling this is OK

View File

@@ -108,14 +108,14 @@ public class DreamTile extends QSTileImpl<QSTile.BooleanState> {
mDreamManager = dreamManager;
mBroadcastDispatcher = broadcastDispatcher;
mEnabledSettingObserver = new SettingObserver(secureSettings, mHandler,
Settings.Secure.SCREENSAVER_ENABLED) {
Settings.Secure.SCREENSAVER_ENABLED, userTracker.getUserId()) {
@Override
protected void handleValueChanged(int value, boolean observedChange) {
refreshState();
}
};
mDreamSettingObserver = new SettingObserver(secureSettings, mHandler,
Settings.Secure.SCREENSAVER_COMPONENTS) {
Settings.Secure.SCREENSAVER_COMPONENTS, userTracker.getUserId()) {
@Override
protected void handleValueChanged(int value, boolean observedChange) {
refreshState();

View File

@@ -78,8 +78,8 @@ import com.android.internal.logging.UiEventLogger;
import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.util.ScreenshotHelper;
import com.android.systemui.Dumpable;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
import com.android.systemui.keyguard.ScreenLifecycle;
@@ -90,12 +90,11 @@ import com.android.systemui.navigationbar.NavigationBarView;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.navigationbar.buttons.KeyButtonView;
import com.android.systemui.recents.OverviewProxyService.OverviewProxyListener;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.NotificationPanelViewController;
import com.android.systemui.shared.recents.IOverviewProxy;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationShadeWindowController;
@@ -108,20 +107,19 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.Executor;
import java.util.function.Supplier;
import javax.inject.Inject;
import dagger.Lazy;
/**
* Class to send information from overview to launcher with a binder.
*/
@SysUISingleton
public class OverviewProxyService extends CurrentUserTracker implements
CallbackController<OverviewProxyListener>, NavigationModeController.ModeChangedListener,
Dumpable {
public class OverviewProxyService implements CallbackController<OverviewProxyListener>,
NavigationModeController.ModeChangedListener, Dumpable {
private static final String ACTION_QUICKSTEP = "android.intent.action.QUICKSTEP_SERVICE";
@@ -133,6 +131,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
private static final long MAX_BACKOFF_MILLIS = 10 * 60 * 1000;
private final Context mContext;
private final Executor mMainExecutor;
private final ShellInterface mShellInterface;
private final Lazy<Optional<CentralSurfaces>> mCentralSurfacesOptionalLazy;
private SysUiState mSysUiState;
@@ -145,6 +144,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
private final Intent mQuickStepIntent;
private final ScreenshotHelper mScreenshotHelper;
private final CommandQueue mCommandQueue;
private final UserTracker mUserTracker;
private final KeyguardUnlockAnimationController mSysuiUnlockAnimationController;
private final UiEventLogger mUiEventLogger;
@@ -417,7 +417,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
return;
}
mCurrentBoundedUserId = getCurrentUserId();
mCurrentBoundedUserId = mUserTracker.getUserId();
mOverviewProxy = IOverviewProxy.Stub.asInterface(service);
Bundle params = new Bundle();
@@ -498,34 +498,44 @@ public class OverviewProxyService extends CurrentUserTracker implements
}
};
private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() {
@Override
public void onUserChanged(int newUser, @NonNull Context userContext) {
mConnectionBackoffAttempts = 0;
internalConnectToCurrentUser();
}
};
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
@Inject
public OverviewProxyService(Context context,
@Main Executor mainExecutor,
CommandQueue commandQueue,
ShellInterface shellInterface,
Lazy<NavigationBarController> navBarControllerLazy,
Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy,
NavigationModeController navModeController,
NotificationShadeWindowController statusBarWinController, SysUiState sysUiState,
BroadcastDispatcher broadcastDispatcher,
UserTracker userTracker,
ScreenLifecycle screenLifecycle,
UiEventLogger uiEventLogger,
KeyguardUnlockAnimationController sysuiUnlockAnimationController,
AssistUtils assistUtils,
DumpManager dumpManager) {
super(broadcastDispatcher);
// b/241601880: This component shouldn't be running for a non-primary user
if (!Process.myUserHandle().equals(UserHandle.SYSTEM)) {
Log.e(TAG_OPS, "Unexpected initialization for non-primary user", new Throwable());
}
mContext = context;
mMainExecutor = mainExecutor;
mShellInterface = shellInterface;
mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy;
mHandler = new Handler();
mNavBarControllerLazy = navBarControllerLazy;
mStatusBarWinController = statusBarWinController;
mUserTracker = userTracker;
mConnectionBackoffAttempts = 0;
mRecentsComponentName = ComponentName.unflattenFromString(context.getString(
com.android.internal.R.string.config_recentsComponentName));
@@ -566,7 +576,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
mCommandQueue = commandQueue;
// Listen for user setup
startTracking();
mUserTracker.addCallback(mUserChangedCallback, mMainExecutor);
screenLifecycle.addObserver(mLifecycleObserver);
@@ -579,12 +589,6 @@ public class OverviewProxyService extends CurrentUserTracker implements
assistUtils.registerVoiceInteractionSessionListener(mVoiceInteractionSessionListener);
}
@Override
public void onUserSwitched(int newUserId) {
mConnectionBackoffAttempts = 0;
internalConnectToCurrentUser();
}
public void onVoiceSessionWindowVisibilityChanged(boolean visible) {
mSysUiState.setFlag(SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING, visible)
.commitUpdate(mContext.getDisplayId());
@@ -712,7 +716,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
mBound = mContext.bindServiceAsUser(launcherServiceIntent,
mOverviewServiceConnection,
Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE_WHILE_AWAKE,
UserHandle.of(getCurrentUserId()));
UserHandle.of(mUserTracker.getUserId()));
} catch (SecurityException e) {
Log.e(TAG_OPS, "Unable to bind because of security error", e);
}
@@ -941,7 +945,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
}
private void updateEnabledState() {
final int currentUser = ActivityManagerWrapper.getInstance().getCurrentUserId();
final int currentUser = mUserTracker.getUserId();
mIsEnabled = mContext.getPackageManager().resolveServiceAsUser(mQuickStepIntent,
MATCH_SYSTEM_ONLY, currentUser) != null;
}

View File

@@ -1,63 +0,0 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.settings;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.android.systemui.broadcast.BroadcastDispatcher;
/**
* A class that has an observable for the current user.
*/
public class CurrentUserObservable {
private final CurrentUserTracker mTracker;
private final MutableLiveData<Integer> mCurrentUser = new MutableLiveData<Integer>() {
@Override
protected void onActive() {
super.onActive();
mTracker.startTracking();
}
@Override
protected void onInactive() {
super.onInactive();
mTracker.stopTracking();
}
};
public CurrentUserObservable(BroadcastDispatcher broadcastDispatcher) {
mTracker = new CurrentUserTracker(broadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
mCurrentUser.setValue(newUserId);
}
};
}
/**
* Returns the current user that can be observed.
*/
public LiveData<Integer> getCurrentUser() {
if (mCurrentUser.getValue() == null) {
mCurrentUser.setValue(mTracker.getCurrentUserId());
}
return mCurrentUser;
}
}

View File

@@ -1,130 +0,0 @@
/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.settings;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.UserHandle;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.broadcast.BroadcastDispatcher;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
public abstract class CurrentUserTracker {
private final UserReceiver mUserReceiver;
private Consumer<Integer> mCallback = this::onUserSwitched;
public CurrentUserTracker(BroadcastDispatcher broadcastDispatcher) {
this(UserReceiver.getInstance(broadcastDispatcher));
}
@VisibleForTesting
CurrentUserTracker(UserReceiver receiver) {
mUserReceiver = receiver;
}
public int getCurrentUserId() {
return mUserReceiver.getCurrentUserId();
}
public void startTracking() {
mUserReceiver.addTracker(mCallback);
}
public void stopTracking() {
mUserReceiver.removeTracker(mCallback);
}
public abstract void onUserSwitched(int newUserId);
@VisibleForTesting
static class UserReceiver extends BroadcastReceiver {
private static UserReceiver sInstance;
private boolean mReceiverRegistered;
private int mCurrentUserId;
private final BroadcastDispatcher mBroadcastDispatcher;
private List<Consumer<Integer>> mCallbacks = new ArrayList<>();
@VisibleForTesting
UserReceiver(BroadcastDispatcher broadcastDispatcher) {
mBroadcastDispatcher = broadcastDispatcher;
}
static UserReceiver getInstance(BroadcastDispatcher broadcastDispatcher) {
if (sInstance == null) {
sInstance = new UserReceiver(broadcastDispatcher);
}
return sInstance;
}
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_USER_SWITCHED.equals(intent.getAction())) {
notifyUserSwitched(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
}
}
public int getCurrentUserId() {
return mCurrentUserId;
}
private void addTracker(Consumer<Integer> callback) {
if (!mCallbacks.contains(callback)) {
mCallbacks.add(callback);
}
if (!mReceiverRegistered) {
mCurrentUserId = ActivityManager.getCurrentUser();
IntentFilter filter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
mBroadcastDispatcher.registerReceiver(this, filter, null,
UserHandle.ALL);
mReceiverRegistered = true;
}
}
private void removeTracker(Consumer<Integer> callback) {
if (mCallbacks.contains(callback)) {
mCallbacks.remove(callback);
if (mCallbacks.size() == 0 && mReceiverRegistered) {
mBroadcastDispatcher.unregisterReceiver(this);
mReceiverRegistered = false;
}
}
}
private void notifyUserSwitched(int newUserId) {
if (mCurrentUserId != newUserId) {
mCurrentUserId = newUserId;
List<Consumer<Integer>> callbacks = new ArrayList<>(mCallbacks);
for (Consumer<Integer> consumer : callbacks) {
// Accepting may modify this list
if (mCallbacks.contains(consumer)) {
consumer.accept(newUserId);
}
}
}
}
}
}

View File

@@ -21,6 +21,7 @@ import static com.android.settingslib.display.BrightnessUtils.convertGammaToLine
import static com.android.settingslib.display.BrightnessUtils.convertLinearToGammaFloat;
import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
@@ -46,11 +47,13 @@ import com.android.internal.display.BrightnessSynchronizer;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
import java.util.concurrent.Executor;
import javax.inject.Inject;
public class BrightnessController implements ToggleSlider.Listener, MirroredBrightnessController {
@@ -74,9 +77,10 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig
private final Context mContext;
private final ToggleSlider mControl;
private final DisplayManager mDisplayManager;
private final CurrentUserTracker mUserTracker;
private final UserTracker mUserTracker;
private final IVrManager mVrManager;
private final Executor mMainExecutor;
private final Handler mBackgroundHandler;
private final BrightnessObserver mBrightnessObserver;
@@ -169,7 +173,7 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig
}
mBrightnessObserver.startObserving();
mUserTracker.startTracking();
mUserTracker.addCallback(mUserChangedCallback, mMainExecutor);
// Update the slider and mode before attaching the listener so we don't
// receive the onChanged notifications for the initial values.
@@ -197,7 +201,7 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig
}
mBrightnessObserver.stopObserving();
mUserTracker.stopTracking();
mUserTracker.removeCallback(mUserChangedCallback);
mHandler.sendEmptyMessage(MSG_DETACH_LISTENER);
}
@@ -275,22 +279,27 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig
}
};
private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() {
@Override
public void onUserChanged(int newUser, @NonNull Context userContext) {
mBackgroundHandler.post(mUpdateModeRunnable);
mBackgroundHandler.post(mUpdateSliderRunnable);
}
};
public BrightnessController(
Context context,
ToggleSlider control,
BroadcastDispatcher broadcastDispatcher,
UserTracker userTracker,
@Main Executor mainExecutor,
@Background Handler bgHandler) {
mContext = context;
mControl = control;
mControl.setMax(GAMMA_SPACE_MAX);
mMainExecutor = mainExecutor;
mBackgroundHandler = bgHandler;
mUserTracker = new CurrentUserTracker(broadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
mBackgroundHandler.post(mUpdateModeRunnable);
mBackgroundHandler.post(mUpdateSliderRunnable);
}
};
mUserTracker = userTracker;
mBrightnessObserver = new BrightnessObserver(mHandler);
mDisplayId = mContext.getDisplayId();
@@ -364,7 +373,7 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig
mControl.setEnforcedAdmin(
RestrictedLockUtilsInternal.checkIfRestrictionEnforced(mContext,
UserManager.DISALLOW_CONFIG_BRIGHTNESS,
mUserTracker.getCurrentUserId()));
mUserTracker.getUserId()));
}
});
}
@@ -440,16 +449,19 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig
/** Factory for creating a {@link BrightnessController}. */
public static class Factory {
private final Context mContext;
private final BroadcastDispatcher mBroadcastDispatcher;
private final UserTracker mUserTracker;
private final Executor mMainExecutor;
private final Handler mBackgroundHandler;
@Inject
public Factory(
Context context,
BroadcastDispatcher broadcastDispatcher,
UserTracker userTracker,
@Main Executor mainExecutor,
@Background Handler bgHandler) {
mContext = context;
mBroadcastDispatcher = broadcastDispatcher;
mUserTracker = userTracker;
mMainExecutor = mainExecutor;
mBackgroundHandler = bgHandler;
}
@@ -458,7 +470,8 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig
return new BrightnessController(
mContext,
toggleSlider,
mBroadcastDispatcher,
mUserTracker,
mMainExecutor,
mBackgroundHandler);
}
}

View File

@@ -34,10 +34,12 @@ import android.widget.FrameLayout;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.settings.UserTracker;
import java.util.List;
import java.util.concurrent.Executor;
import javax.inject.Inject;
@@ -46,16 +48,19 @@ public class BrightnessDialog extends Activity {
private BrightnessController mBrightnessController;
private final BrightnessSliderController.Factory mToggleSliderFactory;
private final BroadcastDispatcher mBroadcastDispatcher;
private final UserTracker mUserTracker;
private final Executor mMainExecutor;
private final Handler mBackgroundHandler;
@Inject
public BrightnessDialog(
BroadcastDispatcher broadcastDispatcher,
UserTracker userTracker,
BrightnessSliderController.Factory factory,
@Main Executor mainExecutor,
@Background Handler bgHandler) {
mBroadcastDispatcher = broadcastDispatcher;
mUserTracker = userTracker;
mToggleSliderFactory = factory;
mMainExecutor = mainExecutor;
mBackgroundHandler = bgHandler;
}
@@ -101,7 +106,7 @@ public class BrightnessDialog extends Activity {
frame.addView(controller.getRootView(), MATCH_PARENT, WRAP_CONTENT);
mBrightnessController = new BrightnessController(
this, controller, mBroadcastDispatcher, mBackgroundHandler);
this, controller, mUserTracker, mMainExecutor, mBackgroundHandler);
}
@Override

View File

@@ -19,7 +19,6 @@ import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER
import static com.android.systemui.DejankUtils.whitelistIpcs;
import android.app.ActivityManager;
import android.app.KeyguardManager;
import android.app.Notification;
import android.app.admin.DevicePolicyManager;
@@ -50,6 +49,7 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
@@ -93,6 +93,7 @@ public class NotificationLockscreenUserManagerImpl implements
private final SparseBooleanArray mUsersInLockdownLatestResult = new SparseBooleanArray();
private final SparseBooleanArray mShouldHideNotifsLatestResult = new SparseBooleanArray();
private final UserManager mUserManager;
private final UserTracker mUserTracker;
private final List<UserChangedListener> mListeners = new ArrayList<>();
private final BroadcastDispatcher mBroadcastDispatcher;
private final NotificationClickNotifier mClickNotifier;
@@ -195,6 +196,7 @@ public class NotificationLockscreenUserManagerImpl implements
BroadcastDispatcher broadcastDispatcher,
DevicePolicyManager devicePolicyManager,
UserManager userManager,
UserTracker userTracker,
Lazy<NotificationVisibilityProvider> visibilityProviderLazy,
Lazy<CommonNotifCollection> commonNotifCollectionLazy,
NotificationClickNotifier clickNotifier,
@@ -210,7 +212,8 @@ public class NotificationLockscreenUserManagerImpl implements
mMainHandler = mainHandler;
mDevicePolicyManager = devicePolicyManager;
mUserManager = userManager;
mCurrentUserId = ActivityManager.getCurrentUser();
mUserTracker = userTracker;
mCurrentUserId = mUserTracker.getUserId();
mVisibilityProviderLazy = visibilityProviderLazy;
mCommonNotifCollectionLazy = commonNotifCollectionLazy;
mClickNotifier = clickNotifier;
@@ -295,7 +298,7 @@ public class NotificationLockscreenUserManagerImpl implements
mContext.registerReceiver(mBaseBroadcastReceiver, internalFilter, PERMISSION_SELF, null,
Context.RECEIVER_EXPORTED_UNAUDITED);
mCurrentUserId = ActivityManager.getCurrentUser(); // in case we reg'd receiver too late
mCurrentUserId = mUserTracker.getUserId(); // in case we reg'd receiver too late
updateCurrentProfilesCache();
mSettingsObserver.onChange(false); // set up

View File

@@ -39,6 +39,7 @@ import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.Looper;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
@@ -76,7 +77,7 @@ import com.android.systemui.log.dagger.StatusBarNetworkControllerLog;
import com.android.systemui.plugins.log.LogBuffer;
import com.android.systemui.plugins.log.LogLevel;
import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DataSaverController;
import com.android.systemui.statusbar.policy.DataSaverControllerImpl;
@@ -129,7 +130,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
private final boolean mHasMobileDataFeature;
private final SubscriptionDefaults mSubDefaults;
private final DataSaverController mDataSaverController;
private final CurrentUserTracker mUserTracker;
private final UserTracker mUserTracker;
private final BroadcastDispatcher mBroadcastDispatcher;
private final DemoModeController mDemoModeController;
private final Object mLock = new Object();
@@ -213,6 +214,14 @@ public class NetworkControllerImpl extends BroadcastReceiver
}
};
private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() {
@Override
public void onUserChanged(int newUser, @NonNull Context userContext) {
NetworkControllerImpl.this.onUserSwitched(newUser);
}
};
/**
* Construct this controller object and register for updates.
*/
@@ -225,6 +234,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
CallbackHandler callbackHandler,
DeviceProvisionedController deviceProvisionedController,
BroadcastDispatcher broadcastDispatcher,
UserTracker userTracker,
ConnectivityManager connectivityManager,
TelephonyManager telephonyManager,
TelephonyListenerManager telephonyListenerManager,
@@ -252,6 +262,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
new SubscriptionDefaults(),
deviceProvisionedController,
broadcastDispatcher,
userTracker,
demoModeController,
carrierConfigTracker,
trackerFactory,
@@ -278,6 +289,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
SubscriptionDefaults defaultsHandler,
DeviceProvisionedController deviceProvisionedController,
BroadcastDispatcher broadcastDispatcher,
UserTracker userTracker,
DemoModeController demoModeController,
CarrierConfigTracker carrierConfigTracker,
WifiStatusTrackerFactory trackerFactory,
@@ -334,13 +346,9 @@ public class NetworkControllerImpl extends BroadcastReceiver
// AIRPLANE_MODE_CHANGED is sent at boot; we've probably already missed it
updateAirplaneMode(true /* force callback */);
mUserTracker = new CurrentUserTracker(broadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
NetworkControllerImpl.this.onUserSwitched(newUserId);
}
};
mUserTracker.startTracking();
mUserTracker = userTracker;
mUserTracker.addCallback(mUserChangedCallback, new HandlerExecutor(mMainHandler));
deviceProvisionedController.addCallback(new DeviceProvisionedListener() {
@Override
public void onUserSetupChanged() {

View File

@@ -17,7 +17,6 @@
package com.android.systemui.statusbar.phone;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.IWallpaperManager;
import android.app.IWallpaperManagerCallback;
import android.app.WallpaperColors;
@@ -45,6 +44,7 @@ import com.android.systemui.Dumpable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.NotificationMediaManager;
import libcore.io.IoUtils;
@@ -82,10 +82,11 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
KeyguardUpdateMonitor keyguardUpdateMonitor,
DumpManager dumpManager,
NotificationMediaManager mediaManager,
@Main Handler mainHandler) {
@Main Handler mainHandler,
UserTracker userTracker) {
dumpManager.registerDumpable(getClass().getSimpleName(), this);
mWallpaperManager = wallpaperManager;
mCurrentUserId = ActivityManager.getCurrentUser();
mCurrentUserId = userTracker.getUserId();
mUpdateMonitor = keyguardUpdateMonitor;
mMediaManager = mediaManager;
mH = mainHandler;

View File

@@ -14,7 +14,6 @@
package com.android.systemui.statusbar.phone;
import android.app.ActivityManager;
import android.app.StatusBarManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -28,6 +27,7 @@ import androidx.annotation.NonNull;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.settings.UserTracker;
import java.util.ArrayList;
import java.util.LinkedList;
@@ -44,6 +44,7 @@ public class ManagedProfileControllerImpl implements ManagedProfileController {
private final Context mContext;
private final UserManager mUserManager;
private final UserTracker mUserTracker;
private final BroadcastDispatcher mBroadcastDispatcher;
private final LinkedList<UserInfo> mProfiles;
private boolean mListening;
@@ -52,9 +53,11 @@ public class ManagedProfileControllerImpl implements ManagedProfileController {
/**
*/
@Inject
public ManagedProfileControllerImpl(Context context, BroadcastDispatcher broadcastDispatcher) {
public ManagedProfileControllerImpl(Context context, UserTracker userTracker,
BroadcastDispatcher broadcastDispatcher) {
mContext = context;
mUserManager = UserManager.get(mContext);
mUserTracker = userTracker;
mBroadcastDispatcher = broadcastDispatcher;
mProfiles = new LinkedList<UserInfo>();
}
@@ -90,7 +93,7 @@ public class ManagedProfileControllerImpl implements ManagedProfileController {
private void reloadManagedProfiles() {
synchronized (mProfiles) {
boolean hadProfile = mProfiles.size() > 0;
int user = ActivityManager.getCurrentUser();
int user = mUserTracker.getUserId();
mProfiles.clear();
for (UserInfo ui : mUserManager.getEnabledProfiles(user)) {

View File

@@ -28,13 +28,13 @@ import com.android.systemui.R;
import com.android.systemui.battery.BatteryMeterView;
import com.android.systemui.battery.BatteryMeterViewController;
import com.android.systemui.biometrics.AuthRippleView;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.privacy.OngoingPrivacyChip;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.CombinedShadeHeadersConstraintManager;
import com.android.systemui.shade.CombinedShadeHeadersConstraintManagerImpl;
import com.android.systemui.shade.NotificationPanelView;
@@ -221,9 +221,9 @@ public abstract class StatusBarViewModule {
@Named(LARGE_SCREEN_BATTERY_CONTROLLER)
static BatteryMeterViewController getBatteryMeterViewController(
@Named(SPLIT_SHADE_BATTERY_VIEW) BatteryMeterView batteryMeterView,
UserTracker userTracker,
ConfigurationController configurationController,
TunerService tunerService,
BroadcastDispatcher broadcastDispatcher,
@Main Handler mainHandler,
ContentResolver contentResolver,
FeatureFlags featureFlags,
@@ -231,9 +231,9 @@ public abstract class StatusBarViewModule {
) {
return new BatteryMeterViewController(
batteryMeterView,
userTracker,
configurationController,
tunerService,
broadcastDispatcher,
mainHandler,
contentResolver,
featureFlags,

View File

@@ -17,7 +17,6 @@
package com.android.systemui.statusbar.policy;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
@@ -41,6 +40,7 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.settings.UserTracker;
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
@@ -83,6 +83,7 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa
@Inject
public BluetoothControllerImpl(
Context context,
UserTracker userTracker,
DumpManager dumpManager,
BluetoothLogger logger,
@Background Looper bgLooper,
@@ -100,7 +101,7 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa
mLocalBluetoothManager.getBluetoothAdapter().getBluetoothState());
}
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mCurrentUser = ActivityManager.getCurrentUser();
mCurrentUser = userTracker.getUserId();
mDumpManager.registerDumpable(TAG, this);
}

View File

@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.policy;
import android.annotation.NonNull;
import android.app.StatusBarManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -49,7 +50,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.demomode.DemoModeCommandReceiver;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
@@ -79,7 +80,7 @@ public class Clock extends TextView implements
private static final String SHOW_SECONDS = "show_seconds";
private static final String VISIBILITY = "visibility";
private final CurrentUserTracker mCurrentUserTracker;
private final UserTracker mUserTracker;
private final CommandQueue mCommandQueue;
private int mCurrentUserId;
@@ -114,6 +115,14 @@ public class Clock extends TextView implements
private final BroadcastDispatcher mBroadcastDispatcher;
private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() {
@Override
public void onUserChanged(int newUser, @NonNull Context userContext) {
mCurrentUserId = newUser;
}
};
public Clock(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
@@ -132,12 +141,7 @@ public class Clock extends TextView implements
a.recycle();
}
mBroadcastDispatcher = Dependency.get(BroadcastDispatcher.class);
mCurrentUserTracker = new CurrentUserTracker(mBroadcastDispatcher) {
@Override
public void onUserSwitched(int newUserId) {
mCurrentUserId = newUserId;
}
};
mUserTracker = Dependency.get(UserTracker.class);
}
@Override
@@ -196,8 +200,8 @@ public class Clock extends TextView implements
Dependency.get(TunerService.class).addTunable(this, CLOCK_SECONDS,
StatusBarIconController.ICON_HIDE_LIST);
mCommandQueue.addCallback(this);
mCurrentUserTracker.startTracking();
mCurrentUserId = mCurrentUserTracker.getCurrentUserId();
mUserTracker.addCallback(mUserChangedCallback, mContext.getMainExecutor());
mCurrentUserId = mUserTracker.getUserId();
}
// The time zone may have changed while the receiver wasn't registered, so update the Time
@@ -227,7 +231,7 @@ public class Clock extends TextView implements
mAttached = false;
Dependency.get(TunerService.class).removeTunable(this);
mCommandQueue.removeCallback(this);
mCurrentUserTracker.stopTracking();
mUserTracker.removeCallback(mUserChangedCallback);
}
}

View File

@@ -18,7 +18,6 @@ package com.android.systemui.statusbar.policy;
import static android.net.TetheringManager.TETHERING_WIFI;
import android.app.ActivityManager;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.TetheringManager;
@@ -38,6 +37,7 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.settings.UserTracker;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -59,6 +59,7 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof
private final WifiManager mWifiManager;
private final Handler mMainHandler;
private final Context mContext;
private final UserTracker mUserTracker;
private int mHotspotState;
private volatile int mNumConnectedDevices;
@@ -95,10 +96,12 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof
@Inject
public HotspotControllerImpl(
Context context,
UserTracker userTracker,
@Main Handler mainHandler,
@Background Handler backgroundHandler,
DumpManager dumpManager) {
mContext = context;
mUserTracker = userTracker;
mTetheringManager = context.getSystemService(TetheringManager.class);
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
mMainHandler = mainHandler;
@@ -125,7 +128,7 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof
@Override
public boolean isHotspotSupported() {
return mIsTetheringSupportedConfig && mIsTetheringSupported && mHasTetherableWifiRegexs
&& UserManager.get(mContext).isUserAdmin(ActivityManager.getCurrentUser());
&& UserManager.get(mContext).isUserAdmin(mUserTracker.getUserId());
}
public void dump(PrintWriter pw, String[] args) {

View File

@@ -16,7 +16,6 @@
package com.android.systemui.statusbar.policy;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.admin.DeviceAdminInfo;
import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManager.DeviceOwnerType;
@@ -55,8 +54,9 @@ import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.settings.UserTracker;
import org.xmlpull.v1.XmlPullParserException;
@@ -70,7 +70,7 @@ import javax.inject.Inject;
/**
*/
@SysUISingleton
public class SecurityControllerImpl extends CurrentUserTracker implements SecurityController {
public class SecurityControllerImpl implements SecurityController {
private static final String TAG = "SecurityController";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -84,11 +84,13 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
private static final int CA_CERT_LOADING_RETRY_TIME_IN_MS = 30_000;
private final Context mContext;
private final UserTracker mUserTracker;
private final ConnectivityManager mConnectivityManager;
private final VpnManager mVpnManager;
private final DevicePolicyManager mDevicePolicyManager;
private final PackageManager mPackageManager;
private final UserManager mUserManager;
private final Executor mMainExecutor;
private final Executor mBgExecutor;
@GuardedBy("mCallbacks")
@@ -102,18 +104,28 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
// Needs to be cached here since the query has to be asynchronous
private ArrayMap<Integer, Boolean> mHasCACerts = new ArrayMap<Integer, Boolean>();
private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() {
@Override
public void onUserChanged(int newUser, @NonNull Context userContext) {
onUserSwitched(newUser);
}
};
/**
*/
@Inject
public SecurityControllerImpl(
Context context,
UserTracker userTracker,
@Background Handler bgHandler,
BroadcastDispatcher broadcastDispatcher,
@Main Executor mainExecutor,
@Background Executor bgExecutor,
DumpManager dumpManager
) {
super(broadcastDispatcher);
mContext = context;
mUserTracker = userTracker;
mDevicePolicyManager = (DevicePolicyManager)
context.getSystemService(Context.DEVICE_POLICY_SERVICE);
mConnectivityManager = (ConnectivityManager)
@@ -121,6 +133,7 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
mVpnManager = context.getSystemService(VpnManager.class);
mPackageManager = context.getPackageManager();
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mMainExecutor = mainExecutor;
mBgExecutor = bgExecutor;
dumpManager.registerDumpable(getClass().getSimpleName(), this);
@@ -133,8 +146,8 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
// TODO: re-register network callback on user change.
mConnectivityManager.registerNetworkCallback(REQUEST, mNetworkCallback);
onUserSwitched(ActivityManager.getCurrentUser());
startTracking();
onUserSwitched(mUserTracker.getUserId());
mUserTracker.addCallback(mUserChangedCallback, mMainExecutor);
}
public void dump(PrintWriter pw, String[] args) {

View File

@@ -16,7 +16,6 @@
package com.android.systemui.statusbar.policy;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -28,7 +27,6 @@ import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.ContactsContract;
@@ -40,8 +38,11 @@ import com.android.internal.util.UserIcons;
import com.android.settingslib.drawable.UserIconDrawable;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.settings.UserTracker;
import java.util.ArrayList;
import java.util.concurrent.Executor;
import javax.inject.Inject;
@@ -53,6 +54,7 @@ public class UserInfoControllerImpl implements UserInfoController {
private static final String TAG = "UserInfoController";
private final Context mContext;
private final UserTracker mUserTracker;
private final ArrayList<OnUserInfoChangedListener> mCallbacks =
new ArrayList<OnUserInfoChangedListener>();
private AsyncTask<Void, Void, UserInfoQueryResult> mUserInfoTask;
@@ -64,11 +66,11 @@ public class UserInfoControllerImpl implements UserInfoController {
/**
*/
@Inject
public UserInfoControllerImpl(Context context) {
public UserInfoControllerImpl(Context context, @Main Executor mainExecutor,
UserTracker userTracker) {
mContext = context;
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_USER_SWITCHED);
mContext.registerReceiver(mReceiver, filter);
mUserTracker = userTracker;
mUserTracker.addCallback(mUserChangedCallback, mainExecutor);
IntentFilter profileFilter = new IntentFilter();
profileFilter.addAction(ContactsContract.Intents.ACTION_PROFILE_CHANGED);
@@ -88,15 +90,13 @@ public class UserInfoControllerImpl implements UserInfoController {
mCallbacks.remove(callback);
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (Intent.ACTION_USER_SWITCHED.equals(action)) {
reloadUserInfo();
}
}
};
private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() {
@Override
public void onUserChanged(int newUser, @NonNull Context userContext) {
reloadUserInfo();
}
};
private final BroadcastReceiver mProfileReceiver = new BroadcastReceiver() {
@Override
@@ -104,15 +104,11 @@ public class UserInfoControllerImpl implements UserInfoController {
final String action = intent.getAction();
if (ContactsContract.Intents.ACTION_PROFILE_CHANGED.equals(action) ||
Intent.ACTION_USER_INFO_CHANGED.equals(action)) {
try {
final int currentUser = ActivityManager.getService().getCurrentUser().id;
final int changedUser =
intent.getIntExtra(Intent.EXTRA_USER_HANDLE, getSendingUserId());
if (changedUser == currentUser) {
reloadUserInfo();
}
} catch (RemoteException e) {
Log.e(TAG, "Couldn't get current user id for profile change", e);
final int currentUser = mUserTracker.getUserId();
final int changedUser =
intent.getIntExtra(Intent.EXTRA_USER_HANDLE, getSendingUserId());
if (changedUser == currentUser) {
reloadUserInfo();
}
}
}
@@ -130,15 +126,12 @@ public class UserInfoControllerImpl implements UserInfoController {
Context currentUserContext;
UserInfo userInfo;
try {
userInfo = ActivityManager.getService().getCurrentUser();
userInfo = mUserTracker.getUserInfo();
currentUserContext = mContext.createPackageContextAsUser("android", 0,
new UserHandle(userInfo.id));
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Couldn't create user context", e);
throw new RuntimeException(e);
} catch (RemoteException e) {
Log.e(TAG, "Couldn't get user info", e);
throw new RuntimeException(e);
}
final int userId = userInfo.id;
final boolean isGuest = userInfo.isGuest();

View File

@@ -16,7 +16,6 @@
package com.android.systemui.statusbar.policy;
import android.app.ActivityManager;
import android.app.AlarmManager;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
@@ -28,6 +27,7 @@ import android.content.IntentFilter;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings.Global;
@@ -46,7 +46,7 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.qs.SettingObserver;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.util.Utils;
import com.android.systemui.util.settings.GlobalSettings;
@@ -58,14 +58,15 @@ import javax.inject.Inject;
/** Platform implementation of the zen mode controller. **/
@SysUISingleton
public class ZenModeControllerImpl extends CurrentUserTracker
implements ZenModeController, Dumpable {
public class ZenModeControllerImpl implements ZenModeController, Dumpable {
private static final String TAG = "ZenModeController";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private final ArrayList<Callback> mCallbacks = new ArrayList<>();
private final Object mCallbacksLock = new Object();
private final Context mContext;
private final UserTracker mUserTracker;
private final BroadcastDispatcher mBroadcastDispatcher;
private final SettingObserver mModeSetting;
private final SettingObserver mConfigSetting;
private final NotificationManager mNoMan;
@@ -80,23 +81,45 @@ public class ZenModeControllerImpl extends CurrentUserTracker
private long mZenUpdateTime;
private NotificationManager.Policy mConsolidatedNotificationPolicy;
private final UserTracker.Callback mUserChangedCallback =
new UserTracker.Callback() {
@Override
public void onUserChanged(int newUser, Context userContext) {
mUserId = newUser;
if (mRegistered) {
mBroadcastDispatcher.unregisterReceiver(mReceiver);
}
final IntentFilter filter = new IntentFilter(
AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
filter.addAction(NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED);
mBroadcastDispatcher.registerReceiver(mReceiver, filter, null,
UserHandle.of(mUserId));
mRegistered = true;
mSetupObserver.register();
}
};
@Inject
public ZenModeControllerImpl(
Context context,
@Main Handler handler,
BroadcastDispatcher broadcastDispatcher,
DumpManager dumpManager,
GlobalSettings globalSettings) {
super(broadcastDispatcher);
GlobalSettings globalSettings,
UserTracker userTracker) {
mContext = context;
mModeSetting = new SettingObserver(globalSettings, handler, Global.ZEN_MODE) {
mBroadcastDispatcher = broadcastDispatcher;
mUserTracker = userTracker;
mModeSetting = new SettingObserver(globalSettings, handler, Global.ZEN_MODE,
userTracker.getUserId()) {
@Override
protected void handleValueChanged(int value, boolean observedChange) {
updateZenMode(value);
fireZenChanged(value);
}
};
mConfigSetting = new SettingObserver(globalSettings, handler, Global.ZEN_MODE_CONFIG_ETAG) {
mConfigSetting = new SettingObserver(globalSettings, handler, Global.ZEN_MODE_CONFIG_ETAG,
userTracker.getUserId()) {
@Override
protected void handleValueChanged(int value, boolean observedChange) {
updateZenModeConfig();
@@ -112,7 +135,7 @@ public class ZenModeControllerImpl extends CurrentUserTracker
mSetupObserver = new SetupObserver(handler);
mSetupObserver.register();
mUserManager = context.getSystemService(UserManager.class);
startTracking();
mUserTracker.addCallback(mUserChangedCallback, new HandlerExecutor(handler));
dumpManager.registerDumpable(getClass().getSimpleName(), this);
}
@@ -120,7 +143,7 @@ public class ZenModeControllerImpl extends CurrentUserTracker
@Override
public boolean isVolumeRestricted() {
return mUserManager.hasUserRestriction(UserManager.DISALLOW_ADJUST_VOLUME,
new UserHandle(mUserId));
UserHandle.of(mUserId));
}
@Override
@@ -182,19 +205,6 @@ public class ZenModeControllerImpl extends CurrentUserTracker
return info != null ? info.getTriggerTime() : 0;
}
@Override
public void onUserSwitched(int userId) {
mUserId = userId;
if (mRegistered) {
mContext.unregisterReceiver(mReceiver);
}
final IntentFilter filter = new IntentFilter(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED);
filter.addAction(NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED);
mContext.registerReceiverAsUser(mReceiver, new UserHandle(mUserId), filter, null, null);
mRegistered = true;
mSetupObserver.register();
}
@Override
public ComponentName getEffectsSuppressor() {
return NotificationManager.from(mContext).getEffectsSuppressor();
@@ -208,7 +218,7 @@ public class ZenModeControllerImpl extends CurrentUserTracker
@Override
public int getCurrentUser() {
return ActivityManager.getCurrentUser();
return mUserTracker.getUserId();
}
private void fireNextAlarmChanged() {

View File

@@ -16,10 +16,11 @@
package com.android.systemui.util.time;
import android.app.ActivityManager;
import android.content.Context;
import android.text.format.DateFormat;
import com.android.systemui.settings.UserTracker;
import javax.inject.Inject;
/**
@@ -27,14 +28,16 @@ import javax.inject.Inject;
*/
public class DateFormatUtil {
private final Context mContext;
private final UserTracker mUserTracker;
@Inject
public DateFormatUtil(Context context) {
public DateFormatUtil(Context context, UserTracker userTracker) {
mContext = context;
mUserTracker = userTracker;
}
/** Returns true if the phone is in 24 hour format. */
public boolean is24HourFormat() {
return DateFormat.is24HourFormat(mContext, ActivityManager.getCurrentUser());
return DateFormat.is24HourFormat(mContext, mUserTracker.getUserId());
}
}

View File

@@ -115,6 +115,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.telephony.TelephonyListenerManager;
@@ -158,6 +159,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
private static final int FACE_SENSOR_ID = 0;
private static final int FINGERPRINT_SENSOR_ID = 1;
@Mock
private UserTracker mUserTracker;
@Mock
private DumpManager mDumpManager;
@Mock
@@ -309,8 +312,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
ExtendedMockito.doReturn(SubscriptionManager.INVALID_SUBSCRIPTION_ID)
.when(SubscriptionManager::getDefaultSubscriptionId);
KeyguardUpdateMonitor.setCurrentUser(mCurrentUserId);
ExtendedMockito.doReturn(KeyguardUpdateMonitor.getCurrentUser())
.when(ActivityManager::getCurrentUser);
when(mUserTracker.getUserId()).thenReturn(mCurrentUserId);
ExtendedMockito.doReturn(mActivityService).when(ActivityManager::getService);
mFaceWakeUpTriggersConfig = new FaceWakeUpTriggersConfig(
@@ -1037,6 +1039,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
@Test
public void testSecondaryLockscreenRequirement() {
KeyguardUpdateMonitor.setCurrentUser(UserHandle.myUserId());
when(mUserTracker.getUserId()).thenReturn(UserHandle.myUserId());
int user = KeyguardUpdateMonitor.getCurrentUser();
String packageName = "fake.test.package";
String cls = "FakeService";
@@ -2041,7 +2044,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
AtomicBoolean mSimStateChanged = new AtomicBoolean(false);
protected TestableKeyguardUpdateMonitor(Context context) {
super(context,
super(context, mUserTracker,
TestableLooper.get(KeyguardUpdateMonitorTest.this).getLooper(),
mBroadcastDispatcher, mSecureSettings, mDumpManager,
mBackgroundExecutor, mMainExecutor,

View File

@@ -17,6 +17,7 @@ package com.android.keyguard.clock;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
@@ -30,15 +31,15 @@ import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.LayoutInflater;
import androidx.lifecycle.MutableLiveData;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManagerFake;
import com.android.systemui.plugins.ClockPlugin;
import com.android.systemui.settings.CurrentUserObservable;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
import org.junit.After;
import org.junit.Before;
@@ -52,8 +53,7 @@ import java.util.Arrays;
@SmallTest
@RunWith(AndroidTestingRunner.class)
// Need to run tests on main looper because LiveData operations such as setData, observe,
// removeObserver cannot be invoked on a background thread.
// Need to run tests on main looper to allow for onClockChanged operation to happen synchronously.
@RunWithLooper(setAsMainLooper = true)
public final class ClockManagerTest extends SysuiTestCase {
@@ -63,14 +63,16 @@ public final class ClockManagerTest extends SysuiTestCase {
private static final int SECONDARY_USER_ID = 11;
private static final Uri SETTINGS_URI = null;
private final FakeSystemClock mFakeSystemClock = new FakeSystemClock();
private final FakeExecutor mMainExecutor = new FakeExecutor(mFakeSystemClock);
private ClockManager mClockManager;
private ContentObserver mContentObserver;
private DockManagerFake mFakeDockManager;
private MutableLiveData<Integer> mCurrentUser;
private ArgumentCaptor<UserTracker.Callback> mUserTrackerCallbackCaptor;
@Mock PluginManager mMockPluginManager;
@Mock SysuiColorExtractor mMockColorExtractor;
@Mock ContentResolver mMockContentResolver;
@Mock CurrentUserObservable mMockCurrentUserObserable;
@Mock UserTracker mUserTracker;
@Mock SettingsWrapper mMockSettingsWrapper;
@Mock ClockManager.ClockChangedListener mMockListener1;
@Mock ClockManager.ClockChangedListener mMockListener2;
@@ -83,18 +85,18 @@ public final class ClockManagerTest extends SysuiTestCase {
mFakeDockManager = new DockManagerFake();
mCurrentUser = new MutableLiveData<>();
mCurrentUser.setValue(MAIN_USER_ID);
when(mMockCurrentUserObserable.getCurrentUser()).thenReturn(mCurrentUser);
when(mUserTracker.getUserId()).thenReturn(MAIN_USER_ID);
mUserTrackerCallbackCaptor = ArgumentCaptor.forClass(UserTracker.Callback.class);
mClockManager = new ClockManager(getContext(), inflater,
mMockPluginManager, mMockColorExtractor, mMockContentResolver,
mMockCurrentUserObserable, mMockSettingsWrapper, mFakeDockManager);
mUserTracker, mMainExecutor, mMockSettingsWrapper, mFakeDockManager);
mClockManager.addBuiltinClock(() -> new BubbleClockController(
getContext().getResources(), inflater, mMockColorExtractor));
mClockManager.addOnClockChangedListener(mMockListener1);
mClockManager.addOnClockChangedListener(mMockListener2);
verify(mUserTracker).addCallback(mUserTrackerCallbackCaptor.capture(), any());
reset(mMockListener1, mMockListener2);
mContentObserver = mClockManager.getContentObserver();
@@ -221,7 +223,7 @@ public final class ClockManagerTest extends SysuiTestCase {
@Test
public void onUserChanged_defaultClock() {
// WHEN the user changes
mCurrentUser.setValue(SECONDARY_USER_ID);
switchUser(SECONDARY_USER_ID);
// THEN the plugin is null for the default clock face
assertThat(mClockManager.getCurrentClock()).isNull();
}
@@ -232,7 +234,7 @@ public final class ClockManagerTest extends SysuiTestCase {
when(mMockSettingsWrapper.getLockScreenCustomClockFace(SECONDARY_USER_ID)).thenReturn(
BUBBLE_CLOCK);
// WHEN the user changes
mCurrentUser.setValue(SECONDARY_USER_ID);
switchUser(SECONDARY_USER_ID);
// THEN the plugin is the bubble clock face.
assertThat(mClockManager.getCurrentClock()).isInstanceOf(BUBBLE_CLOCK_CLASS);
}
@@ -244,8 +246,13 @@ public final class ClockManagerTest extends SysuiTestCase {
// AND the second user as selected the bubble clock for the dock
when(mMockSettingsWrapper.getDockedClockFace(SECONDARY_USER_ID)).thenReturn(BUBBLE_CLOCK);
// WHEN the user changes
mCurrentUser.setValue(SECONDARY_USER_ID);
switchUser(SECONDARY_USER_ID);
// THEN the plugin is the bubble clock face.
assertThat(mClockManager.getCurrentClock()).isInstanceOf(BUBBLE_CLOCK_CLASS);
}
private void switchUser(int newUser) {
when(mUserTracker.getUserId()).thenReturn(newUser);
mUserTrackerCallbackCaptor.getValue().onUserChanged(newUser, mContext);
}
}

View File

@@ -34,9 +34,9 @@ import android.provider.Settings;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.tuner.TunerService;
@@ -51,13 +51,13 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
@Mock
private BatteryMeterView mBatteryMeterView;
@Mock
private UserTracker mUserTracker;
@Mock
private ConfigurationController mConfigurationController;
@Mock
private TunerService mTunerService;
@Mock
private BroadcastDispatcher mBroadcastDispatcher;
@Mock
private Handler mHandler;
@Mock
private ContentResolver mContentResolver;
@@ -153,9 +153,9 @@ public class BatteryMeterViewControllerTest extends SysuiTestCase {
private void initController() {
mController = new BatteryMeterViewController(
mBatteryMeterView,
mUserTracker,
mConfigurationController,
mTunerService,
mBroadcastDispatcher,
mHandler,
mContentResolver,
mFeatureFlags,

View File

@@ -10,10 +10,12 @@ import androidx.test.filters.SmallTest
import androidx.test.rule.ActivityTestRule
import androidx.test.runner.intercepting.SingleActivityFactory
import com.android.systemui.SysuiTestCase
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.CustomIconCache
import com.android.systemui.controls.controller.ControlsControllerImpl
import com.android.systemui.controls.ui.ControlsUiController
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.time.FakeSystemClock
import java.util.concurrent.CountDownLatch
import org.junit.Before
import org.junit.Rule
@@ -30,9 +32,11 @@ import org.mockito.MockitoAnnotations
@RunWith(AndroidTestingRunner::class)
@TestableLooper.RunWithLooper
class ControlsEditingActivityTest : SysuiTestCase() {
private val uiExecutor = FakeExecutor(FakeSystemClock())
@Mock lateinit var controller: ControlsControllerImpl
@Mock lateinit var broadcastDispatcher: BroadcastDispatcher
@Mock lateinit var userTracker: UserTracker
@Mock lateinit var customIconCache: CustomIconCache
@@ -54,8 +58,9 @@ class ControlsEditingActivityTest : SysuiTestCase() {
) {
override fun create(intent: Intent?): TestableControlsEditingActivity {
return TestableControlsEditingActivity(
uiExecutor,
controller,
broadcastDispatcher,
userTracker,
customIconCache,
uiController,
mockDispatcher,
@@ -92,13 +97,14 @@ class ControlsEditingActivityTest : SysuiTestCase() {
}
public class TestableControlsEditingActivity(
private val executor: FakeExecutor,
private val controller: ControlsControllerImpl,
private val broadcastDispatcher: BroadcastDispatcher,
private val userTracker: UserTracker,
private val customIconCache: CustomIconCache,
private val uiController: ControlsUiController,
private val mockDispatcher: OnBackInvokedDispatcher,
private val latch: CountDownLatch
) : ControlsEditingActivity(controller, broadcastDispatcher, customIconCache, uiController) {
) : ControlsEditingActivity(executor, controller, userTracker, customIconCache, uiController) {
override fun getOnBackInvokedDispatcher(): OnBackInvokedDispatcher {
return mockDispatcher
}

View File

@@ -9,10 +9,10 @@ import androidx.test.filters.SmallTest
import androidx.test.rule.ActivityTestRule
import androidx.test.runner.intercepting.SingleActivityFactory
import com.android.systemui.SysuiTestCase
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.controller.ControlsControllerImpl
import com.android.systemui.controls.ui.ControlsUiController
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.settings.UserTracker
import com.google.common.util.concurrent.MoreExecutors
import java.util.concurrent.CountDownLatch
import java.util.concurrent.Executor
@@ -37,7 +37,7 @@ class ControlsFavoritingActivityTest : SysuiTestCase() {
@Mock lateinit var listingController: ControlsListingController
@Mock lateinit var broadcastDispatcher: BroadcastDispatcher
@Mock lateinit var userTracker: UserTracker
@Mock lateinit var uiController: ControlsUiController
@@ -60,7 +60,7 @@ class ControlsFavoritingActivityTest : SysuiTestCase() {
executor,
controller,
listingController,
broadcastDispatcher,
userTracker,
uiController,
mockDispatcher,
latch
@@ -97,7 +97,7 @@ class ControlsFavoritingActivityTest : SysuiTestCase() {
executor: Executor,
controller: ControlsControllerImpl,
listingController: ControlsListingController,
broadcastDispatcher: BroadcastDispatcher,
userTracker: UserTracker,
uiController: ControlsUiController,
private val mockDispatcher: OnBackInvokedDispatcher,
private val latch: CountDownLatch
@@ -106,7 +106,7 @@ class ControlsFavoritingActivityTest : SysuiTestCase() {
executor,
controller,
listingController,
broadcastDispatcher,
userTracker,
uiController
) {
override fun getOnBackInvokedDispatcher(): OnBackInvokedDispatcher {

View File

@@ -25,11 +25,11 @@ import androidx.test.filters.SmallTest
import androidx.test.rule.ActivityTestRule
import androidx.test.runner.intercepting.SingleActivityFactory
import com.android.systemui.SysuiTestCase
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.controller.ControlsController
import com.android.systemui.controls.ui.ControlsUiController
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.settings.UserTracker
import com.google.common.util.concurrent.MoreExecutors
import java.util.concurrent.CountDownLatch
import java.util.concurrent.Executor
@@ -56,7 +56,7 @@ class ControlsProviderSelectorActivityTest : SysuiTestCase() {
@Mock lateinit var controlsController: ControlsController
@Mock lateinit var broadcastDispatcher: BroadcastDispatcher
@Mock lateinit var userTracker: UserTracker
@Mock lateinit var uiController: ControlsUiController
@@ -80,7 +80,7 @@ class ControlsProviderSelectorActivityTest : SysuiTestCase() {
backExecutor,
listingController,
controlsController,
broadcastDispatcher,
userTracker,
uiController,
mockDispatcher,
latch
@@ -118,7 +118,7 @@ class ControlsProviderSelectorActivityTest : SysuiTestCase() {
backExecutor: Executor,
listingController: ControlsListingController,
controlsController: ControlsController,
broadcastDispatcher: BroadcastDispatcher,
userTracker: UserTracker,
uiController: ControlsUiController,
private val mockDispatcher: OnBackInvokedDispatcher,
private val latch: CountDownLatch
@@ -128,7 +128,7 @@ class ControlsProviderSelectorActivityTest : SysuiTestCase() {
backExecutor,
listingController,
controlsController,
broadcastDispatcher,
userTracker,
uiController
) {
override fun getOnBackInvokedDispatcher(): OnBackInvokedDispatcher {

View File

@@ -34,6 +34,7 @@ import androidx.test.runner.intercepting.SingleActivityFactory
import com.android.systemui.SysuiTestCase
import com.android.systemui.controls.controller.ControlInfo
import com.android.systemui.controls.controller.ControlsController
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.mockito.capture
import com.android.systemui.util.mockito.eq
import org.junit.After
@@ -46,9 +47,10 @@ import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.Captor
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import java.util.concurrent.Executor
@MediumTest
@RunWith(AndroidTestingRunner::class)
@@ -66,6 +68,10 @@ class ControlsRequestDialogTest : SysuiTestCase() {
@Mock
private lateinit var controller: ControlsController
@Mock
private lateinit var mainExecutor: Executor
@Mock
private lateinit var userTracker: UserTracker
@Mock
private lateinit var listingController: ControlsListingController
@Mock
@@ -81,8 +87,9 @@ class ControlsRequestDialogTest : SysuiTestCase() {
) {
override fun create(intent: Intent?): TestControlsRequestDialog {
return TestControlsRequestDialog(
mainExecutor,
controller,
fakeBroadcastDispatcher,
userTracker,
listingController
)
}

View File

@@ -16,11 +16,13 @@
package com.android.systemui.controls.management
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.controller.ControlsController
import com.android.systemui.settings.UserTracker
import java.util.concurrent.Executor
class TestControlsRequestDialog(
mainExecutor: Executor,
controller: ControlsController,
dispatcher: BroadcastDispatcher,
userTracker: UserTracker,
listingController: ControlsListingController
) : ControlsRequestDialog(controller, dispatcher, listingController)
) : ControlsRequestDialog(mainExecutor, controller, userTracker, listingController)

View File

@@ -49,6 +49,7 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.doze.DozeSensors.TriggerSensor;
import com.android.systemui.plugins.SensorManagerPlugin;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.DevicePostureController;
import com.android.systemui.util.sensors.AsyncSensorManager;
@@ -97,6 +98,8 @@ public class DozeSensorsTest extends SysuiTestCase {
@Mock
private DevicePostureController mDevicePostureController;
@Mock
private UserTracker mUserTracker;
@Mock
private ProximitySensor mProximitySensor;
// Capture listeners so that they can be used to send events
@@ -426,7 +429,7 @@ public class DozeSensorsTest extends SysuiTestCase {
DozeSensors dozeSensors = new DozeSensors(mSensorManager, mDozeParameters,
mAmbientDisplayConfiguration, mWakeLock, mCallback, mProxCallback, mDozeLog,
mProximitySensor, mFakeSettings, mAuthController,
mDevicePostureController);
mDevicePostureController, mUserTracker);
for (TriggerSensor sensor : dozeSensors.mTriggerSensors) {
assertFalse(sensor.mIgnoresSetting);
@@ -438,7 +441,7 @@ public class DozeSensorsTest extends SysuiTestCase {
super(mSensorManager, mDozeParameters,
mAmbientDisplayConfiguration, mWakeLock, mCallback, mProxCallback, mDozeLog,
mProximitySensor, mFakeSettings, mAuthController,
mDevicePostureController);
mDevicePostureController, mUserTracker);
for (TriggerSensor sensor : mTriggerSensors) {
if (sensor instanceof PluginSensor
&& ((PluginSensor) sensor).mPluginSensor.getType()

View File

@@ -49,6 +49,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dock.DockManager;
import com.android.systemui.doze.DozeTriggers.DozingUpdateUiEvent;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.policy.DevicePostureController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -98,6 +99,8 @@ public class DozeTriggersTest extends SysuiTestCase {
@Mock
private DevicePostureController mDevicePostureController;
@Mock
private UserTracker mUserTracker;
@Mock
private SessionTracker mSessionTracker;
private DozeTriggers mTriggers;
@@ -131,7 +134,7 @@ public class DozeTriggersTest extends SysuiTestCase {
asyncSensorManager, wakeLock, mDockManager, mProximitySensor,
mProximityCheck, mDozeLog, mBroadcastDispatcher, new FakeSettings(),
mAuthController, mUiEventLogger, mSessionTracker, mKeyguardStateController,
mDevicePostureController);
mDevicePostureController, mUserTracker);
mTriggers.setDozeMachine(mMachine);
waitForSensorManager();
}

View File

@@ -63,6 +63,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.plugins.GlobalActions;
import com.android.systemui.settings.UserContextProvider;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.VibratorHelper;
import com.android.systemui.statusbar.phone.CentralSurfaces;
@@ -103,6 +104,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
@Mock private SecureSettings mSecureSettings;
@Mock private Resources mResources;
@Mock private ConfigurationController mConfigurationController;
@Mock private UserTracker mUserTracker;
@Mock private KeyguardStateController mKeyguardStateController;
@Mock private UserManager mUserManager;
@Mock private TrustManager mTrustManager;
@@ -152,6 +154,7 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
mVibratorHelper,
mResources,
mConfigurationController,
mUserTracker,
mKeyguardStateController,
mUserManager,
mTrustManager,

View File

@@ -48,6 +48,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SystemUIInitializerImpl;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.DozeParameters;
@@ -93,6 +94,8 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
private NextAlarmController mNextAlarmController;
@Mock
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@Mock
private UserTracker mUserTracker;
private TestableKeyguardSliceProvider mProvider;
private boolean mIsZenMode;
@@ -105,6 +108,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
mProvider.attachInfo(getContext(), null);
reset(mContentResolver);
SliceProvider.setSpecs(new HashSet<>(Arrays.asList(SliceSpecs.LIST)));
when(mUserTracker.getUserId()).thenReturn(100);
}
@After
@@ -267,6 +271,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
mKeyguardBypassController = KeyguardSliceProviderTest.this.mKeyguardBypassController;
mMediaManager = KeyguardSliceProviderTest.this.mNotificationMediaManager;
mKeyguardUpdateMonitor = KeyguardSliceProviderTest.this.mKeyguardUpdateMonitor;
mUserTracker = KeyguardSliceProviderTest.this.mUserTracker;
}
@Override

View File

@@ -57,6 +57,7 @@ import com.android.systemui.classifier.FalsingCollectorFake;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
@@ -86,6 +87,7 @@ import dagger.Lazy;
public class KeyguardViewMediatorTest extends SysuiTestCase {
private KeyguardViewMediator mViewMediator;
private @Mock UserTracker mUserTracker;
private @Mock DevicePolicyManager mDevicePolicyManager;
private @Mock LockPatternUtils mLockPatternUtils;
private @Mock KeyguardUpdateMonitor mUpdateMonitor;
@@ -286,6 +288,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private void createAndStartViewMediator() {
mViewMediator = new KeyguardViewMediator(
mContext,
mUserTracker,
mFalsingCollector,
mLockPatternUtils,
mBroadcastDispatcher,

View File

@@ -22,13 +22,13 @@ import android.testing.TestableLooper
import androidx.test.filters.SmallTest
import com.android.internal.logging.InstanceId
import com.android.systemui.SysuiTestCase
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.broadcast.BroadcastSender
import com.android.systemui.media.controls.MediaTestUtils
import com.android.systemui.media.controls.models.player.MediaData
import com.android.systemui.media.controls.models.recommendation.SmartspaceMediaData
import com.android.systemui.media.controls.ui.MediaPlayerData
import com.android.systemui.media.controls.util.MediaUiEventLogger
import com.android.systemui.settings.UserTracker
import com.android.systemui.statusbar.NotificationLockscreenUserManager
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.eq
@@ -64,7 +64,7 @@ private val SMARTSPACE_INSTANCE_ID = InstanceId.fakeInstanceId(456)!!
class MediaDataFilterTest : SysuiTestCase() {
@Mock private lateinit var listener: MediaDataManager.Listener
@Mock private lateinit var broadcastDispatcher: BroadcastDispatcher
@Mock private lateinit var userTracker: UserTracker
@Mock private lateinit var broadcastSender: BroadcastSender
@Mock private lateinit var mediaDataManager: MediaDataManager
@Mock private lateinit var lockscreenUserManager: NotificationLockscreenUserManager
@@ -85,7 +85,7 @@ class MediaDataFilterTest : SysuiTestCase() {
mediaDataFilter =
MediaDataFilter(
context,
broadcastDispatcher,
userTracker,
broadcastSender,
lockscreenUserManager,
executor,

View File

@@ -4,6 +4,7 @@ import android.app.ActivityManager.RecentTaskInfo
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
@@ -11,11 +12,11 @@ import com.android.wm.shell.recents.RecentTasks
import com.android.wm.shell.util.GroupedRecentTaskInfo
import com.google.common.truth.Truth.assertThat
import java.util.*
import java.util.function.Consumer
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import org.junit.Test
import org.junit.runner.RunWith
import java.util.function.Consumer
@RunWith(AndroidTestingRunner::class)
@SmallTest
@@ -23,8 +24,14 @@ class ShellRecentTaskListProviderTest : SysuiTestCase() {
private val dispatcher = Dispatchers.Unconfined
private val recentTasks: RecentTasks = mock()
private val userTracker: UserTracker = mock()
private val recentTaskListProvider =
ShellRecentTaskListProvider(dispatcher, Runnable::run, Optional.of(recentTasks))
ShellRecentTaskListProvider(
dispatcher,
Runnable::run,
Optional.of(recentTasks),
userTracker
)
@Test
fun loadRecentTasks_oneTask_returnsTheSameTask() {

View File

@@ -34,6 +34,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.qs.QSHost
import com.android.systemui.qs.logging.QSLogger
import com.android.systemui.qs.tileimpl.QSTileImpl
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.settings.GlobalSettings
import com.google.common.truth.Truth.assertThat
import dagger.Lazy
@@ -64,6 +65,8 @@ class AirplaneModeTileTest : SysuiTestCase() {
private lateinit var mConnectivityManager: Lazy<ConnectivityManager>
@Mock
private lateinit var mGlobalSettings: GlobalSettings
@Mock
private lateinit var mUserTracker: UserTracker
private lateinit var mTestableLooper: TestableLooper
private lateinit var mTile: AirplaneModeTile
@@ -87,7 +90,8 @@ class AirplaneModeTileTest : SysuiTestCase() {
mQsLogger,
mBroadcastDispatcher,
mConnectivityManager,
mGlobalSettings)
mGlobalSettings,
mUserTracker)
}
@Test

View File

@@ -1,74 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.systemui.settings;
import android.content.Intent;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
/**
* Testing functionality of the current user tracker
*/
@SmallTest
public class CurrentUserTrackerTest extends SysuiTestCase {
private CurrentUserTracker mTracker;
private CurrentUserTracker.UserReceiver mReceiver;
@Mock
private BroadcastDispatcher mBroadcastDispatcher;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mReceiver = new CurrentUserTracker.UserReceiver(mBroadcastDispatcher);
mTracker = new CurrentUserTracker(mReceiver) {
@Override
public void onUserSwitched(int newUserId) {
stopTracking();
}
};
}
@Test
public void testBroadCastDoesntCrashOnConcurrentModification() {
mTracker.startTracking();
CurrentUserTracker secondTracker = new CurrentUserTracker(mReceiver) {
@Override
public void onUserSwitched(int newUserId) {
stopTracking();
}
};
secondTracker.startTracking();
triggerUserSwitch();
}
/**
* Simulates a user switch event.
*/
private void triggerUserSwitch() {
Intent intent = new Intent(Intent.ACTION_USER_SWITCHED);
intent.putExtra(Intent.EXTRA_USER_HANDLE, 1);
mReceiver.onReceive(getContext(), intent);
}
}

View File

@@ -28,9 +28,10 @@ import androidx.test.rule.ActivityTestRule
import androidx.test.runner.intercepting.SingleActivityFactory
import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.mockito.any
import com.google.common.truth.Truth.assertThat
import java.util.concurrent.Executor
import org.junit.After
import org.junit.Before
import org.junit.Rule
@@ -45,7 +46,9 @@ import org.mockito.MockitoAnnotations
@TestableLooper.RunWithLooper
class BrightnessDialogTest : SysuiTestCase() {
@Mock private lateinit var userTracker: UserTracker
@Mock private lateinit var brightnessSliderControllerFactory: BrightnessSliderController.Factory
@Mock private lateinit var mainExecutor: Executor
@Mock private lateinit var backgroundHandler: Handler
@Mock private lateinit var brightnessSliderController: BrightnessSliderController
@@ -56,8 +59,9 @@ class BrightnessDialogTest : SysuiTestCase() {
object : SingleActivityFactory<TestDialog>(TestDialog::class.java) {
override fun create(intent: Intent?): TestDialog {
return TestDialog(
fakeBroadcastDispatcher,
userTracker,
brightnessSliderControllerFactory,
mainExecutor,
backgroundHandler
)
}
@@ -100,8 +104,15 @@ class BrightnessDialogTest : SysuiTestCase() {
}
class TestDialog(
broadcastDispatcher: BroadcastDispatcher,
userTracker: UserTracker,
brightnessSliderControllerFactory: BrightnessSliderController.Factory,
mainExecutor: Executor,
backgroundHandler: Handler
) : BrightnessDialog(broadcastDispatcher, brightnessSliderControllerFactory, backgroundHandler)
) :
BrightnessDialog(
userTracker,
brightnessSliderControllerFactory,
mainExecutor,
backgroundHandler
)
}

View File

@@ -53,6 +53,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.NotificationLockscreenUserManager.NotificationStateChangedListener;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
@@ -78,6 +79,8 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase {
private NotificationPresenter mPresenter;
@Mock
private UserManager mUserManager;
@Mock
private UserTracker mUserTracker;
// Dependency mocks:
@Mock
@@ -115,6 +118,7 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase {
MockitoAnnotations.initMocks(this);
int currentUserId = ActivityManager.getCurrentUser();
when(mUserTracker.getUserId()).thenReturn(currentUserId);
mSettings = new FakeSettings();
mSettings.setUserId(ActivityManager.getCurrentUser());
mCurrentUser = new UserInfo(currentUserId, "", 0);
@@ -344,6 +348,7 @@ public class NotificationLockscreenUserManagerTest extends SysuiTestCase {
mBroadcastDispatcher,
mDevicePolicyManager,
mUserManager,
mUserTracker,
(() -> mVisibilityProvider),
(() -> mNotifCollection),
mClickNotifier,

View File

@@ -71,6 +71,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.demomode.DemoModeController;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.log.LogBuffer;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
@@ -116,6 +117,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
protected TelephonyManager mMockTm;
protected TelephonyListenerManager mTelephonyListenerManager;
protected BroadcastDispatcher mMockBd;
protected UserTracker mUserTracker;
protected Config mConfig;
protected CallbackHandler mCallbackHandler;
protected SubscriptionDefaults mMockSubDefaults;
@@ -172,6 +174,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mMockSm = mock(SubscriptionManager.class);
mMockCm = mock(ConnectivityManager.class);
mMockBd = mock(BroadcastDispatcher.class);
mUserTracker = mock(UserTracker.class);
mMockNsm = mock(NetworkScoreManager.class);
mMockSubDefaults = mock(SubscriptionDefaults.class);
mCarrierConfigTracker = mock(CarrierConfigTracker.class);
@@ -246,6 +249,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mMockSubDefaults,
mMockProvisionController,
mMockBd,
mUserTracker,
mDemoModeController,
mCarrierConfigTracker,
mWifiStatusTrackerFactory,

View File

@@ -154,6 +154,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
mMockSubDefaults,
mock(DeviceProvisionedController.class),
mMockBd,
mUserTracker,
mDemoModeController,
mock(CarrierConfigTracker.class),
mWifiStatusTrackerFactory,

View File

@@ -82,6 +82,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mMockSubDefaults,
mMockProvisionController,
mMockBd,
mUserTracker,
mDemoModeController,
mCarrierConfigTracker,
mWifiStatusTrackerFactory,
@@ -118,6 +119,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mMockSubDefaults,
mMockProvisionController,
mMockBd,
mUserTracker,
mDemoModeController,
mCarrierConfigTracker,
mWifiStatusTrackerFactory,
@@ -152,6 +154,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mMockSubDefaults,
mock(DeviceProvisionedController.class),
mMockBd,
mUserTracker,
mDemoModeController,
mock(CarrierConfigTracker.class),
mWifiStatusTrackerFactory,
@@ -189,6 +192,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mMockSubDefaults,
mock(DeviceProvisionedController.class),
mMockBd,
mUserTracker,
mDemoModeController,
mock(CarrierConfigTracker.class),
mWifiStatusTrackerFactory,
@@ -274,6 +278,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mMockSubDefaults,
mock(DeviceProvisionedController.class),
mMockBd,
mUserTracker,
mDemoModeController,
mock(CarrierConfigTracker.class),
mWifiStatusTrackerFactory,

View File

@@ -43,6 +43,7 @@ import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.bluetooth.BluetoothLogger;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.settings.UserTracker;
import org.junit.Before;
import org.junit.Test;
@@ -56,6 +57,7 @@ import java.util.List;
@SmallTest
public class BluetoothControllerImplTest extends SysuiTestCase {
private UserTracker mUserTracker;
private LocalBluetoothManager mMockBluetoothManager;
private CachedBluetoothDeviceManager mMockDeviceManager;
private LocalBluetoothAdapter mMockAdapter;
@@ -70,6 +72,7 @@ public class BluetoothControllerImplTest extends SysuiTestCase {
mTestableLooper = TestableLooper.get(this);
mMockBluetoothManager = mDependency.injectMockDependency(LocalBluetoothManager.class);
mDevices = new ArrayList<>();
mUserTracker = mock(UserTracker.class);
mMockDeviceManager = mock(CachedBluetoothDeviceManager.class);
when(mMockDeviceManager.getCachedDevicesCopy()).thenReturn(mDevices);
when(mMockBluetoothManager.getCachedDeviceManager()).thenReturn(mMockDeviceManager);
@@ -81,6 +84,7 @@ public class BluetoothControllerImplTest extends SysuiTestCase {
mMockDumpManager = mock(DumpManager.class);
mBluetoothControllerImpl = new BluetoothControllerImpl(mContext,
mUserTracker,
mMockDumpManager,
mock(BluetoothLogger.class),
mTestableLooper.getLooper(),

View File

@@ -41,6 +41,7 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.settings.UserTracker;
import org.junit.Before;
import org.junit.Test;
@@ -60,6 +61,8 @@ import java.util.concurrent.Executor;
@TestableLooper.RunWithLooper
public class HotspotControllerImplTest extends SysuiTestCase {
@Mock
private UserTracker mUserTracker;
@Mock
private DumpManager mDumpManager;
@Mock
@@ -104,7 +107,8 @@ public class HotspotControllerImplTest extends SysuiTestCase {
Handler handler = new Handler(mLooper.getLooper());
mController = new HotspotControllerImpl(mContext, handler, handler, mDumpManager);
mController = new HotspotControllerImpl(mContext, mUserTracker, handler, handler,
mDumpManager);
verify(mTetheringManager)
.registerTetheringEventCallback(any(), mTetheringCallbackCaptor.capture());
}
@@ -191,7 +195,7 @@ public class HotspotControllerImplTest extends SysuiTestCase {
Handler handler = new Handler(mLooper.getLooper());
HotspotController controller =
new HotspotControllerImpl(mContext, handler, handler, mDumpManager);
new HotspotControllerImpl(mContext, mUserTracker, handler, handler, mDumpManager);
verifyNoMoreInteractions(mTetheringManager);
assertFalse(controller.isHotspotSupported());

View File

@@ -50,6 +50,7 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
@@ -72,10 +73,12 @@ public class SecurityControllerTest extends SysuiTestCase {
private final DevicePolicyManager mDevicePolicyManager = mock(DevicePolicyManager.class);
private final IKeyChainService.Stub mKeyChainService = mock(IKeyChainService.Stub.class);
private final UserManager mUserManager = mock(UserManager.class);
private final UserTracker mUserTracker = mock(UserTracker.class);
private final BroadcastDispatcher mBroadcastDispatcher = mock(BroadcastDispatcher.class);
private final Handler mHandler = mock(Handler.class);
private SecurityControllerImpl mSecurityController;
private ConnectivityManager mConnectivityManager = mock(ConnectivityManager.class);
private FakeExecutor mMainExecutor;
private FakeExecutor mBgExecutor;
private BroadcastReceiver mBroadcastReceiver;
@@ -102,11 +105,14 @@ public class SecurityControllerTest extends SysuiTestCase {
ArgumentCaptor<BroadcastReceiver> brCaptor =
ArgumentCaptor.forClass(BroadcastReceiver.class);
mMainExecutor = new FakeExecutor(new FakeSystemClock());
mBgExecutor = new FakeExecutor(new FakeSystemClock());
mSecurityController = new SecurityControllerImpl(
mContext,
mUserTracker,
mHandler,
mBroadcastDispatcher,
mMainExecutor,
mBgExecutor,
Mockito.mock(DumpManager.class));

View File

@@ -35,6 +35,7 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.policy.ZenModeController.Callback;
import com.android.systemui.util.settings.FakeSettings;
@@ -58,6 +59,8 @@ public class ZenModeControllerImplTest extends SysuiTestCase {
BroadcastDispatcher mBroadcastDispatcher;
@Mock
DumpManager mDumpManager;
@Mock
UserTracker mUserTracker;
private ZenModeControllerImpl mController;
@@ -72,7 +75,8 @@ public class ZenModeControllerImplTest extends SysuiTestCase {
Handler.createAsync(Looper.myLooper()),
mBroadcastDispatcher,
mDumpManager,
new FakeSettings());
new FakeSettings(),
mUserTracker);
}
@Test