Merge "Revert "Add multi-user support for AutoTileManager"" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
3616fd6330
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.systemui.util
|
package com.android.systemui.controls
|
||||||
|
|
||||||
import android.os.UserHandle
|
import android.os.UserHandle
|
||||||
|
|
||||||
@@ -23,8 +23,6 @@ import android.os.UserHandle
|
|||||||
* changes.
|
* changes.
|
||||||
*/
|
*/
|
||||||
interface UserAwareController {
|
interface UserAwareController {
|
||||||
@JvmDefault
|
|
||||||
fun changeUser(newUser: UserHandle) {}
|
fun changeUser(newUser: UserHandle) {}
|
||||||
|
|
||||||
val currentUserId: Int
|
val currentUserId: Int
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,7 @@ import android.content.ComponentName
|
|||||||
import android.service.controls.Control
|
import android.service.controls.Control
|
||||||
import android.service.controls.ControlsProviderService
|
import android.service.controls.ControlsProviderService
|
||||||
import android.service.controls.actions.ControlAction
|
import android.service.controls.actions.ControlAction
|
||||||
import com.android.systemui.util.UserAwareController
|
import com.android.systemui.controls.UserAwareController
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import android.service.controls.Control
|
|||||||
import android.service.controls.ControlsProviderService
|
import android.service.controls.ControlsProviderService
|
||||||
import android.service.controls.actions.ControlAction
|
import android.service.controls.actions.ControlAction
|
||||||
import com.android.systemui.controls.ControlStatus
|
import com.android.systemui.controls.ControlStatus
|
||||||
import com.android.systemui.util.UserAwareController
|
import com.android.systemui.controls.UserAwareController
|
||||||
import com.android.systemui.controls.management.ControlsFavoritingActivity
|
import com.android.systemui.controls.management.ControlsFavoritingActivity
|
||||||
import com.android.systemui.controls.ui.ControlsUiController
|
import com.android.systemui.controls.ui.ControlsUiController
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ package com.android.systemui.controls.management
|
|||||||
|
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import com.android.systemui.controls.ControlsServiceInfo
|
import com.android.systemui.controls.ControlsServiceInfo
|
||||||
import com.android.systemui.util.UserAwareController
|
import com.android.systemui.controls.UserAwareController
|
||||||
import com.android.systemui.statusbar.policy.CallbackController
|
import com.android.systemui.statusbar.policy.CallbackController
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,7 +26,7 @@ import com.android.systemui.statusbar.policy.CallbackController
|
|||||||
*/
|
*/
|
||||||
interface ControlsListingController :
|
interface ControlsListingController :
|
||||||
CallbackController<ControlsListingController.ControlsListingCallback>,
|
CallbackController<ControlsListingController.ControlsListingCallback>,
|
||||||
UserAwareController {
|
UserAwareController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the current list of services that satisfies the [ServiceListing].
|
* @return the current list of services that satisfies the [ServiceListing].
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import static com.android.systemui.statusbar.phone.AutoTileManager.WORK;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.provider.Settings.Secure;
|
import android.provider.Settings.Secure;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
@@ -31,7 +30,6 @@ import android.util.ArraySet;
|
|||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.systemui.Prefs;
|
import com.android.systemui.Prefs;
|
||||||
import com.android.systemui.Prefs.Key;
|
import com.android.systemui.Prefs.Key;
|
||||||
import com.android.systemui.util.UserAwareController;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -39,7 +37,7 @@ import java.util.Collections;
|
|||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
public class AutoAddTracker implements UserAwareController {
|
public class AutoAddTracker {
|
||||||
|
|
||||||
private static final String[][] CONVERT_PREFS = {
|
private static final String[][] CONVERT_PREFS = {
|
||||||
{Key.QS_HOTSPOT_ADDED, HOTSPOT},
|
{Key.QS_HOTSPOT_ADDED, HOTSPOT},
|
||||||
@@ -51,39 +49,20 @@ public class AutoAddTracker implements UserAwareController {
|
|||||||
|
|
||||||
private final ArraySet<String> mAutoAdded;
|
private final ArraySet<String> mAutoAdded;
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private int mUserId;
|
|
||||||
|
|
||||||
public AutoAddTracker(Context context, int userId) {
|
@Inject
|
||||||
|
public AutoAddTracker(Context context) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mUserId = userId;
|
|
||||||
mAutoAdded = new ArraySet<>(getAdded());
|
mAutoAdded = new ArraySet<>(getAdded());
|
||||||
// TODO: remove migration code and shared preferences keys after P release
|
// TODO: remove migration code and shared preferences keys after P release
|
||||||
if (mUserId == UserHandle.USER_SYSTEM) {
|
for (String[] convertPref : CONVERT_PREFS) {
|
||||||
for (String[] convertPref : CONVERT_PREFS) {
|
if (Prefs.getBoolean(context, convertPref[0], false)) {
|
||||||
if (Prefs.getBoolean(context, convertPref[0], false)) {
|
setTileAdded(convertPref[1]);
|
||||||
setTileAdded(convertPref[1]);
|
Prefs.remove(context, convertPref[0]);
|
||||||
Prefs.remove(context, convertPref[0]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mContext.getContentResolver().registerContentObserver(
|
mContext.getContentResolver().registerContentObserver(
|
||||||
Secure.getUriFor(Secure.QS_AUTO_ADDED_TILES), false, mObserver,
|
Secure.getUriFor(Secure.QS_AUTO_ADDED_TILES), false, mObserver);
|
||||||
UserHandle.USER_ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void changeUser(UserHandle newUser) {
|
|
||||||
if (newUser.getIdentifier() == mUserId) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mUserId = newUser.getIdentifier();
|
|
||||||
mAutoAdded.clear();
|
|
||||||
mAutoAdded.addAll(getAdded());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCurrentUserId() {
|
|
||||||
return mUserId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAdded(String tile) {
|
public boolean isAdded(String tile) {
|
||||||
@@ -107,13 +86,12 @@ public class AutoAddTracker implements UserAwareController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void saveTiles() {
|
private void saveTiles() {
|
||||||
Secure.putStringForUser(mContext.getContentResolver(), Secure.QS_AUTO_ADDED_TILES,
|
Secure.putString(mContext.getContentResolver(), Secure.QS_AUTO_ADDED_TILES,
|
||||||
TextUtils.join(",", mAutoAdded), mUserId);
|
TextUtils.join(",", mAutoAdded));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Collection<String> getAdded() {
|
private Collection<String> getAdded() {
|
||||||
String current = Secure.getStringForUser(mContext.getContentResolver(),
|
String current = Secure.getString(mContext.getContentResolver(), Secure.QS_AUTO_ADDED_TILES);
|
||||||
Secure.QS_AUTO_ADDED_TILES, mUserId);
|
|
||||||
if (current == null) {
|
if (current == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
@@ -124,27 +102,7 @@ public class AutoAddTracker implements UserAwareController {
|
|||||||
protected final ContentObserver mObserver = new ContentObserver(new Handler()) {
|
protected final ContentObserver mObserver = new ContentObserver(new Handler()) {
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean selfChange) {
|
public void onChange(boolean selfChange) {
|
||||||
mAutoAdded.clear();
|
|
||||||
mAutoAdded.addAll(getAdded());
|
mAutoAdded.addAll(getAdded());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static class Builder {
|
|
||||||
private final Context mContext;
|
|
||||||
private int mUserId;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public Builder(Context context) {
|
|
||||||
mContext = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setUserId(int userId) {
|
|
||||||
mUserId = userId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AutoAddTracker build() {
|
|
||||||
return new AutoAddTracker(mContext, mUserId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -255,9 +255,6 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
|
|||||||
int currentUser = ActivityManager.getCurrentUser();
|
int currentUser = ActivityManager.getCurrentUser();
|
||||||
if (currentUser != mCurrentUser) {
|
if (currentUser != mCurrentUser) {
|
||||||
mUserContext = mContext.createContextAsUser(UserHandle.of(currentUser), 0);
|
mUserContext = mContext.createContextAsUser(UserHandle.of(currentUser), 0);
|
||||||
if (mAutoTiles != null) {
|
|
||||||
mAutoTiles.changeUser(UserHandle.of(currentUser));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (tileSpecs.equals(mTileSpecs) && currentUser == mCurrentUser) return;
|
if (tileSpecs.equals(mTileSpecs) && currentUser == mCurrentUser) return;
|
||||||
mTiles.entrySet().stream().filter(tile -> !tileSpecs.contains(tile.getKey())).forEach(
|
mTiles.entrySet().stream().filter(tile -> !tileSpecs.contains(tile.getKey())).forEach(
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import android.content.res.Resources;
|
|||||||
import android.hardware.display.ColorDisplayManager;
|
import android.hardware.display.ColorDisplayManager;
|
||||||
import android.hardware.display.NightDisplayListener;
|
import android.hardware.display.NightDisplayListener;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
@@ -35,7 +34,6 @@ import com.android.systemui.statusbar.policy.DataSaverController;
|
|||||||
import com.android.systemui.statusbar.policy.DataSaverController.Listener;
|
import com.android.systemui.statusbar.policy.DataSaverController.Listener;
|
||||||
import com.android.systemui.statusbar.policy.HotspotController;
|
import com.android.systemui.statusbar.policy.HotspotController;
|
||||||
import com.android.systemui.statusbar.policy.HotspotController.Callback;
|
import com.android.systemui.statusbar.policy.HotspotController.Callback;
|
||||||
import com.android.systemui.util.UserAwareController;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -45,7 +43,7 @@ import javax.inject.Inject;
|
|||||||
/**
|
/**
|
||||||
* Manages which tiles should be automatically added to QS.
|
* Manages which tiles should be automatically added to QS.
|
||||||
*/
|
*/
|
||||||
public class AutoTileManager implements UserAwareController {
|
public class AutoTileManager {
|
||||||
private static final String TAG = "AutoTileManager";
|
private static final String TAG = "AutoTileManager";
|
||||||
|
|
||||||
public static final String HOTSPOT = "hotspot";
|
public static final String HOTSPOT = "hotspot";
|
||||||
@@ -54,9 +52,7 @@ public class AutoTileManager implements UserAwareController {
|
|||||||
public static final String WORK = "work";
|
public static final String WORK = "work";
|
||||||
public static final String NIGHT = "night";
|
public static final String NIGHT = "night";
|
||||||
public static final String CAST = "cast";
|
public static final String CAST = "cast";
|
||||||
static final String SETTING_SEPARATOR = ":";
|
public static final String SETTING_SEPARATOR = ":";
|
||||||
|
|
||||||
private UserHandle mCurrentUser;
|
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final QSTileHost mHost;
|
private final QSTileHost mHost;
|
||||||
@@ -70,56 +66,43 @@ public class AutoTileManager implements UserAwareController {
|
|||||||
private final ArrayList<AutoAddSetting> mAutoAddSettingList = new ArrayList<>();
|
private final ArrayList<AutoAddSetting> mAutoAddSettingList = new ArrayList<>();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public AutoTileManager(Context context, AutoAddTracker.Builder autoAddTrackerBuilder,
|
public AutoTileManager(Context context, AutoAddTracker autoAddTracker, QSTileHost host,
|
||||||
QSTileHost host,
|
|
||||||
@Background Handler handler,
|
@Background Handler handler,
|
||||||
HotspotController hotspotController,
|
HotspotController hotspotController,
|
||||||
DataSaverController dataSaverController,
|
DataSaverController dataSaverController,
|
||||||
ManagedProfileController managedProfileController,
|
ManagedProfileController managedProfileController,
|
||||||
NightDisplayListener nightDisplayListener,
|
NightDisplayListener nightDisplayListener,
|
||||||
CastController castController) {
|
CastController castController) {
|
||||||
|
mAutoTracker = autoAddTracker;
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mHost = host;
|
mHost = host;
|
||||||
mCurrentUser = mHost.getUserContext().getUser();
|
|
||||||
mAutoTracker = autoAddTrackerBuilder.setUserId(mCurrentUser.getIdentifier()).build();
|
|
||||||
mHandler = handler;
|
mHandler = handler;
|
||||||
mHotspotController = hotspotController;
|
mHotspotController = hotspotController;
|
||||||
mDataSaverController = dataSaverController;
|
mDataSaverController = dataSaverController;
|
||||||
mManagedProfileController = managedProfileController;
|
mManagedProfileController = managedProfileController;
|
||||||
mNightDisplayListener = nightDisplayListener;
|
mNightDisplayListener = nightDisplayListener;
|
||||||
mCastController = castController;
|
mCastController = castController;
|
||||||
|
|
||||||
populateSettingsList();
|
|
||||||
startControllersAndSettingsListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void startControllersAndSettingsListeners() {
|
|
||||||
if (!mAutoTracker.isAdded(HOTSPOT)) {
|
if (!mAutoTracker.isAdded(HOTSPOT)) {
|
||||||
mHotspotController.addCallback(mHotspotCallback);
|
hotspotController.addCallback(mHotspotCallback);
|
||||||
}
|
}
|
||||||
if (!mAutoTracker.isAdded(SAVER)) {
|
if (!mAutoTracker.isAdded(SAVER)) {
|
||||||
mDataSaverController.addCallback(mDataSaverListener);
|
dataSaverController.addCallback(mDataSaverListener);
|
||||||
}
|
}
|
||||||
if (!mAutoTracker.isAdded(WORK)) {
|
if (!mAutoTracker.isAdded(WORK)) {
|
||||||
mManagedProfileController.addCallback(mProfileCallback);
|
managedProfileController.addCallback(mProfileCallback);
|
||||||
}
|
}
|
||||||
if (!mAutoTracker.isAdded(NIGHT)
|
if (!mAutoTracker.isAdded(NIGHT)
|
||||||
&& ColorDisplayManager.isNightDisplayAvailable(mContext)) {
|
&& ColorDisplayManager.isNightDisplayAvailable(mContext)) {
|
||||||
mNightDisplayListener.setCallback(mNightDisplayCallback);
|
nightDisplayListener.setCallback(mNightDisplayCallback);
|
||||||
}
|
}
|
||||||
if (!mAutoTracker.isAdded(CAST)) {
|
if (!mAutoTracker.isAdded(CAST)) {
|
||||||
mCastController.addCallback(mCastCallback);
|
castController.addCallback(mCastCallback);
|
||||||
}
|
|
||||||
|
|
||||||
int settingsN = mAutoAddSettingList.size();
|
|
||||||
for (int i = 0; i < settingsN; i++) {
|
|
||||||
if (!mAutoTracker.isAdded(mAutoAddSettingList.get(i).mSpec)) {
|
|
||||||
mAutoAddSettingList.get(i).setListening(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
populateSettingsList();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void stopListening() {
|
public void destroy() {
|
||||||
|
mAutoTracker.destroy();
|
||||||
mHotspotController.removeCallback(mHotspotCallback);
|
mHotspotController.removeCallback(mHotspotCallback);
|
||||||
mDataSaverController.removeCallback(mDataSaverListener);
|
mDataSaverController.removeCallback(mDataSaverListener);
|
||||||
mManagedProfileController.removeCallback(mProfileCallback);
|
mManagedProfileController.removeCallback(mProfileCallback);
|
||||||
@@ -133,11 +116,6 @@ public class AutoTileManager implements UserAwareController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void destroy() {
|
|
||||||
stopListening();
|
|
||||||
mAutoTracker.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populates a list with the pairs setting:spec in the config resource.
|
* Populates a list with the pairs setting:spec in the config resource.
|
||||||
* <p>
|
* <p>
|
||||||
@@ -159,39 +137,17 @@ public class AutoTileManager implements UserAwareController {
|
|||||||
if (split.length == 2) {
|
if (split.length == 2) {
|
||||||
String setting = split[0];
|
String setting = split[0];
|
||||||
String spec = split[1];
|
String spec = split[1];
|
||||||
// Populate all the settings. As they may not have been added in other users
|
if (!mAutoTracker.isAdded(spec)) {
|
||||||
AutoAddSetting s = new AutoAddSetting(mContext, mHandler, setting, spec);
|
AutoAddSetting s = new AutoAddSetting(mContext, mHandler, setting, spec);
|
||||||
mAutoAddSettingList.add(s);
|
mAutoAddSettingList.add(s);
|
||||||
|
s.setListening(true);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Log.w(TAG, "Malformed item in array: " + tile);
|
Log.w(TAG, "Malformed item in array: " + tile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void changeUser(UserHandle newUser) {
|
|
||||||
if (!Thread.currentThread().equals(mHandler.getLooper().getThread())) {
|
|
||||||
mHandler.post(() -> changeUser(newUser));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (newUser.getIdentifier() == mCurrentUser.getIdentifier()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
stopListening();
|
|
||||||
mCurrentUser = newUser;
|
|
||||||
int settingsN = mAutoAddSettingList.size();
|
|
||||||
for (int i = 0; i < settingsN; i++) {
|
|
||||||
mAutoAddSettingList.get(i).setUserId(newUser.getIdentifier());
|
|
||||||
}
|
|
||||||
mAutoTracker.changeUser(newUser);
|
|
||||||
startControllersAndSettingsListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCurrentUserId() {
|
|
||||||
return mCurrentUser.getIdentifier();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unmarkTileAsAutoAdded(String tabSpec) {
|
public void unmarkTileAsAutoAdded(String tabSpec) {
|
||||||
mAutoTracker.setTileRemoved(tabSpec);
|
mAutoTracker.setTileRemoved(tabSpec);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import static com.android.systemui.statusbar.phone.AutoTileManager.WORK;
|
|||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.provider.Settings.Secure;
|
import android.provider.Settings.Secure;
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
import android.testing.TestableLooper.RunWithLooper;
|
import android.testing.TestableLooper.RunWithLooper;
|
||||||
@@ -41,8 +40,6 @@ import org.junit.runner.RunWith;
|
|||||||
@SmallTest
|
@SmallTest
|
||||||
public class AutoAddTrackerTest extends SysuiTestCase {
|
public class AutoAddTrackerTest extends SysuiTestCase {
|
||||||
|
|
||||||
private static final int USER = 0;
|
|
||||||
|
|
||||||
private AutoAddTracker mAutoTracker;
|
private AutoAddTracker mAutoTracker;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -54,7 +51,7 @@ public class AutoAddTrackerTest extends SysuiTestCase {
|
|||||||
public void testMigration() {
|
public void testMigration() {
|
||||||
Prefs.putBoolean(mContext, Key.QS_DATA_SAVER_ADDED, true);
|
Prefs.putBoolean(mContext, Key.QS_DATA_SAVER_ADDED, true);
|
||||||
Prefs.putBoolean(mContext, Key.QS_WORK_ADDED, true);
|
Prefs.putBoolean(mContext, Key.QS_WORK_ADDED, true);
|
||||||
mAutoTracker = new AutoAddTracker(mContext, USER);
|
mAutoTracker = new AutoAddTracker(mContext);
|
||||||
|
|
||||||
assertTrue(mAutoTracker.isAdded(SAVER));
|
assertTrue(mAutoTracker.isAdded(SAVER));
|
||||||
assertTrue(mAutoTracker.isAdded(WORK));
|
assertTrue(mAutoTracker.isAdded(WORK));
|
||||||
@@ -71,7 +68,7 @@ public class AutoAddTrackerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testChangeFromBackup() {
|
public void testChangeFromBackup() {
|
||||||
mAutoTracker = new AutoAddTracker(mContext, USER);
|
mAutoTracker = new AutoAddTracker(mContext);
|
||||||
|
|
||||||
assertFalse(mAutoTracker.isAdded(SAVER));
|
assertFalse(mAutoTracker.isAdded(SAVER));
|
||||||
|
|
||||||
@@ -85,7 +82,7 @@ public class AutoAddTrackerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetAdded() {
|
public void testSetAdded() {
|
||||||
mAutoTracker = new AutoAddTracker(mContext, USER);
|
mAutoTracker = new AutoAddTracker(mContext);
|
||||||
|
|
||||||
assertFalse(mAutoTracker.isAdded(SAVER));
|
assertFalse(mAutoTracker.isAdded(SAVER));
|
||||||
mAutoTracker.setTileAdded(SAVER);
|
mAutoTracker.setTileAdded(SAVER);
|
||||||
@@ -97,35 +94,16 @@ public class AutoAddTrackerTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPersist() {
|
public void testPersist() {
|
||||||
mAutoTracker = new AutoAddTracker(mContext, USER);
|
mAutoTracker = new AutoAddTracker(mContext);
|
||||||
|
|
||||||
assertFalse(mAutoTracker.isAdded(SAVER));
|
assertFalse(mAutoTracker.isAdded(SAVER));
|
||||||
mAutoTracker.setTileAdded(SAVER);
|
mAutoTracker.setTileAdded(SAVER);
|
||||||
|
|
||||||
mAutoTracker.destroy();
|
mAutoTracker.destroy();
|
||||||
mAutoTracker = new AutoAddTracker(mContext, USER);
|
mAutoTracker = new AutoAddTracker(mContext);
|
||||||
|
|
||||||
assertTrue(mAutoTracker.isAdded(SAVER));
|
assertTrue(mAutoTracker.isAdded(SAVER));
|
||||||
|
|
||||||
mAutoTracker.destroy();
|
mAutoTracker.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testIndependentUsers() {
|
|
||||||
mAutoTracker = new AutoAddTracker(mContext, USER);
|
|
||||||
mAutoTracker.setTileAdded(SAVER);
|
|
||||||
|
|
||||||
mAutoTracker = new AutoAddTracker(mContext, USER + 1);
|
|
||||||
assertFalse(mAutoTracker.isAdded(SAVER));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testChangeUser() {
|
|
||||||
mAutoTracker = new AutoAddTracker(mContext, USER);
|
|
||||||
mAutoTracker.setTileAdded(SAVER);
|
|
||||||
|
|
||||||
mAutoTracker = new AutoAddTracker(mContext, USER + 1);
|
|
||||||
mAutoTracker.changeUser(UserHandle.of(USER));
|
|
||||||
assertTrue(mAutoTracker.isAdded(SAVER));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -16,34 +16,18 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.phone;
|
package com.android.systemui.statusbar.phone;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertFalse;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
|
||||||
import static org.mockito.ArgumentMatchers.isNotNull;
|
|
||||||
import static org.mockito.ArgumentMatchers.isNull;
|
|
||||||
import static org.mockito.Mockito.doNothing;
|
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.inOrder;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.spy;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.ContentResolver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.ContextWrapper;
|
|
||||||
import android.hardware.display.ColorDisplayManager;
|
import android.hardware.display.ColorDisplayManager;
|
||||||
import android.hardware.display.NightDisplayListener;
|
import android.hardware.display.NightDisplayListener;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
import android.testing.TestableContentResolver;
|
|
||||||
import android.testing.TestableContext;
|
|
||||||
import android.testing.TestableLooper;
|
import android.testing.TestableLooper;
|
||||||
import android.testing.TestableLooper.RunWithLooper;
|
import android.testing.TestableLooper.RunWithLooper;
|
||||||
|
|
||||||
@@ -54,18 +38,14 @@ import com.android.systemui.SysuiTestCase;
|
|||||||
import com.android.systemui.qs.AutoAddTracker;
|
import com.android.systemui.qs.AutoAddTracker;
|
||||||
import com.android.systemui.qs.QSTileHost;
|
import com.android.systemui.qs.QSTileHost;
|
||||||
import com.android.systemui.qs.SecureSetting;
|
import com.android.systemui.qs.SecureSetting;
|
||||||
import com.android.systemui.statusbar.phone.AutoTileManagerTest.MyContextWrapper;
|
|
||||||
import com.android.systemui.statusbar.policy.CastController;
|
import com.android.systemui.statusbar.policy.CastController;
|
||||||
import com.android.systemui.statusbar.policy.CastController.CastDevice;
|
import com.android.systemui.statusbar.policy.CastController.CastDevice;
|
||||||
import com.android.systemui.statusbar.policy.DataSaverController;
|
import com.android.systemui.statusbar.policy.DataSaverController;
|
||||||
import com.android.systemui.statusbar.policy.HotspotController;
|
import com.android.systemui.statusbar.policy.HotspotController;
|
||||||
|
|
||||||
import org.junit.After;
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Answers;
|
|
||||||
import org.mockito.InOrder;
|
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
@@ -84,18 +64,9 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
|||||||
private static final String TEST_CUSTOM_SPEC = "custom(" + TEST_COMPONENT + ")";
|
private static final String TEST_CUSTOM_SPEC = "custom(" + TEST_COMPONENT + ")";
|
||||||
private static final String SEPARATOR = AutoTileManager.SETTING_SEPARATOR;
|
private static final String SEPARATOR = AutoTileManager.SETTING_SEPARATOR;
|
||||||
|
|
||||||
private static final int USER = 0;
|
|
||||||
|
|
||||||
@Mock private QSTileHost mQsTileHost;
|
@Mock private QSTileHost mQsTileHost;
|
||||||
@Mock private AutoAddTracker mAutoAddTracker;
|
@Mock private AutoAddTracker mAutoAddTracker;
|
||||||
@Mock private CastController mCastController;
|
@Mock private CastController mCastController;
|
||||||
@Mock private HotspotController mHotspotController;
|
|
||||||
@Mock private DataSaverController mDataSaverController;
|
|
||||||
@Mock private ManagedProfileController mManagedProfileController;
|
|
||||||
@Mock private NightDisplayListener mNightDisplayListener;
|
|
||||||
@Mock(answer = Answers.RETURNS_SELF)
|
|
||||||
private AutoAddTracker.Builder mAutoAddTrackerBuilder;
|
|
||||||
@Mock private Context mUserContext;
|
|
||||||
|
|
||||||
private AutoTileManager mAutoTileManager;
|
private AutoTileManager mAutoTileManager;
|
||||||
|
|
||||||
@@ -111,109 +82,19 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
when(mAutoAddTrackerBuilder.build()).thenReturn(mAutoAddTracker);
|
mAutoTileManager = createAutoTileManager();
|
||||||
when(mQsTileHost.getUserContext()).thenReturn(mUserContext);
|
|
||||||
when(mUserContext.getUser()).thenReturn(UserHandle.of(USER));
|
|
||||||
|
|
||||||
mAutoTileManager = createAutoTileManager(new
|
|
||||||
MyContextWrapper(mContext));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
private AutoTileManager createAutoTileManager() {
|
||||||
public void tearDown() {
|
return new AutoTileManager(mContext, mAutoAddTracker, mQsTileHost,
|
||||||
mAutoTileManager.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
private AutoTileManager createAutoTileManager(Context context) {
|
|
||||||
return new AutoTileManager(context, mAutoAddTrackerBuilder, mQsTileHost,
|
|
||||||
Handler.createAsync(TestableLooper.get(this).getLooper()),
|
Handler.createAsync(TestableLooper.get(this).getLooper()),
|
||||||
mHotspotController,
|
mock(HotspotController.class),
|
||||||
mDataSaverController,
|
mock(DataSaverController.class),
|
||||||
mManagedProfileController,
|
mock(ManagedProfileController.class),
|
||||||
mNightDisplayListener,
|
mock(NightDisplayListener.class),
|
||||||
mCastController);
|
mCastController);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testChangeUserCallbacksStoppedAndStarted() throws Exception {
|
|
||||||
TestableLooper.get(this).runWithLooper(() ->
|
|
||||||
mAutoTileManager.changeUser(UserHandle.of(USER + 1))
|
|
||||||
);
|
|
||||||
|
|
||||||
InOrder inOrderHotspot = inOrder(mHotspotController);
|
|
||||||
inOrderHotspot.verify(mHotspotController).removeCallback(any());
|
|
||||||
inOrderHotspot.verify(mHotspotController).addCallback(any());
|
|
||||||
|
|
||||||
InOrder inOrderDataSaver = inOrder(mDataSaverController);
|
|
||||||
inOrderDataSaver.verify(mDataSaverController).removeCallback(any());
|
|
||||||
inOrderDataSaver.verify(mDataSaverController).addCallback(any());
|
|
||||||
|
|
||||||
InOrder inOrderManagedProfile = inOrder(mManagedProfileController);
|
|
||||||
inOrderManagedProfile.verify(mManagedProfileController).removeCallback(any());
|
|
||||||
inOrderManagedProfile.verify(mManagedProfileController).addCallback(any());
|
|
||||||
|
|
||||||
InOrder inOrderNightDisplay = inOrder(mNightDisplayListener);
|
|
||||||
inOrderNightDisplay.verify(mNightDisplayListener).setCallback(isNull());
|
|
||||||
inOrderNightDisplay.verify(mNightDisplayListener).setCallback(isNotNull());
|
|
||||||
|
|
||||||
InOrder inOrderCast = inOrder(mCastController);
|
|
||||||
inOrderCast.verify(mCastController).removeCallback(any());
|
|
||||||
inOrderCast.verify(mCastController).addCallback(any());
|
|
||||||
|
|
||||||
SecureSetting setting = mAutoTileManager.getSecureSettingForKey(TEST_SETTING);
|
|
||||||
assertEquals(USER + 1, setting.getCurrentUser());
|
|
||||||
assertTrue(setting.isListening());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testChangeUserSomeCallbacksNotAdded() throws Exception {
|
|
||||||
when(mAutoAddTracker.isAdded("hotspot")).thenReturn(true);
|
|
||||||
when(mAutoAddTracker.isAdded("work")).thenReturn(true);
|
|
||||||
when(mAutoAddTracker.isAdded("cast")).thenReturn(true);
|
|
||||||
when(mAutoAddTracker.isAdded(TEST_SPEC)).thenReturn(true);
|
|
||||||
|
|
||||||
TestableLooper.get(this).runWithLooper(() ->
|
|
||||||
mAutoTileManager.changeUser(UserHandle.of(USER + 1))
|
|
||||||
);
|
|
||||||
|
|
||||||
verify(mAutoAddTracker).changeUser(UserHandle.of(USER + 1));
|
|
||||||
|
|
||||||
InOrder inOrderHotspot = inOrder(mHotspotController);
|
|
||||||
inOrderHotspot.verify(mHotspotController).removeCallback(any());
|
|
||||||
inOrderHotspot.verify(mHotspotController, never()).addCallback(any());
|
|
||||||
|
|
||||||
InOrder inOrderDataSaver = inOrder(mDataSaverController);
|
|
||||||
inOrderDataSaver.verify(mDataSaverController).removeCallback(any());
|
|
||||||
inOrderDataSaver.verify(mDataSaverController).addCallback(any());
|
|
||||||
|
|
||||||
InOrder inOrderManagedProfile = inOrder(mManagedProfileController);
|
|
||||||
inOrderManagedProfile.verify(mManagedProfileController).removeCallback(any());
|
|
||||||
inOrderManagedProfile.verify(mManagedProfileController, never()).addCallback(any());
|
|
||||||
|
|
||||||
InOrder inOrderNightDisplay = inOrder(mNightDisplayListener);
|
|
||||||
inOrderNightDisplay.verify(mNightDisplayListener).setCallback(isNull());
|
|
||||||
inOrderNightDisplay.verify(mNightDisplayListener).setCallback(isNotNull());
|
|
||||||
|
|
||||||
InOrder inOrderCast = inOrder(mCastController);
|
|
||||||
inOrderCast.verify(mCastController).removeCallback(any());
|
|
||||||
inOrderCast.verify(mCastController, never()).addCallback(any());
|
|
||||||
|
|
||||||
SecureSetting setting = mAutoTileManager.getSecureSettingForKey(TEST_SETTING);
|
|
||||||
assertEquals(USER + 1, setting.getCurrentUser());
|
|
||||||
assertFalse(setting.isListening());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testGetCurrentUserId() throws Exception {
|
|
||||||
assertEquals(USER, mAutoTileManager.getCurrentUserId());
|
|
||||||
|
|
||||||
TestableLooper.get(this).runWithLooper(() ->
|
|
||||||
mAutoTileManager.changeUser(UserHandle.of(USER + 100))
|
|
||||||
);
|
|
||||||
|
|
||||||
assertEquals(USER + 100, mAutoTileManager.getCurrentUserId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void nightTileAdded_whenActivated() {
|
public void nightTileAdded_whenActivated() {
|
||||||
if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
|
if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) {
|
||||||
@@ -332,14 +213,14 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
|||||||
public void testEmptyArray_doesNotCrash() {
|
public void testEmptyArray_doesNotCrash() {
|
||||||
mContext.getOrCreateTestableResources().addOverride(
|
mContext.getOrCreateTestableResources().addOverride(
|
||||||
R.array.config_quickSettingsAutoAdd, new String[0]);
|
R.array.config_quickSettingsAutoAdd, new String[0]);
|
||||||
createAutoTileManager(mContext).destroy();
|
createAutoTileManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMissingConfig_doesNotCrash() {
|
public void testMissingConfig_doesNotCrash() {
|
||||||
mContext.getOrCreateTestableResources().addOverride(
|
mContext.getOrCreateTestableResources().addOverride(
|
||||||
R.array.config_quickSettingsAutoAdd, null);
|
R.array.config_quickSettingsAutoAdd, null);
|
||||||
createAutoTileManager(mContext).destroy();
|
createAutoTileManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Will only notify if it's listening
|
// Will only notify if it's listening
|
||||||
@@ -350,22 +231,4 @@ public class AutoTileManagerTest extends SysuiTestCase {
|
|||||||
s.onChange(false);
|
s.onChange(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyContextWrapper extends ContextWrapper {
|
|
||||||
|
|
||||||
private TestableContentResolver mSpiedTCR;
|
|
||||||
|
|
||||||
MyContextWrapper(TestableContext context) {
|
|
||||||
super(context);
|
|
||||||
mSpiedTCR = spy(context.getContentResolver());
|
|
||||||
doNothing().when(mSpiedTCR).registerContentObserver(any(), anyBoolean(), any(),
|
|
||||||
anyInt());
|
|
||||||
doNothing().when(mSpiedTCR).unregisterContentObserver(any());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ContentResolver getContentResolver() {
|
|
||||||
return mSpiedTCR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user