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:
@@ -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 + ")");
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -154,6 +154,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
|
||||
mMockSubDefaults,
|
||||
mock(DeviceProvisionedController.class),
|
||||
mMockBd,
|
||||
mUserTracker,
|
||||
mDemoModeController,
|
||||
mock(CarrierConfigTracker.class),
|
||||
mWifiStatusTrackerFactory,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user