Merge changes from topic "setting-observer"

* changes:
  2/2 Remove GlobalSetting class
  1/2 Rename SecureSetting to SettingObserver
This commit is contained in:
TreeHugger Robot
2021-11-18 23:10:15 +00:00
committed by Android (Google) Code Review
13 changed files with 74 additions and 114 deletions

View File

@@ -87,7 +87,7 @@ import com.android.systemui.animation.Interpolators;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.qs.SecureSetting;
import com.android.systemui.qs.SettingObserver;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.events.PrivacyDotViewController;
import com.android.systemui.tuner.TunerService;
@@ -155,7 +155,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable {
private float mDensity;
private WindowManager mWindowManager;
private int mRotation;
private SecureSetting mColorInversionSetting;
private SettingObserver mColorInversionSetting;
private DelayableExecutor mExecutor;
private Handler mHandler;
private boolean mPendingRotationChange;
@@ -346,7 +346,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable {
// Watch color inversion and invert the overlay as needed.
if (mColorInversionSetting == null) {
mColorInversionSetting = new SecureSetting(mSecureSettings, mHandler,
mColorInversionSetting = new SettingObserver(mSecureSettings, mHandler,
Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED,
mUserTracker.getUserId()) {
@Override

View File

@@ -1,61 +0,0 @@
/*
* Copyright (C) 2014 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.qs;
import android.content.Context;
import android.database.ContentObserver;
import android.os.Handler;
import android.provider.Settings.Global;
import com.android.systemui.statusbar.policy.Listenable;
/** Helper for managing a global setting. **/
public abstract class GlobalSetting extends ContentObserver implements Listenable {
private final Context mContext;
private final String mSettingName;
protected abstract void handleValueChanged(int value);
public GlobalSetting(Context context, Handler handler, String settingName) {
super(handler);
mContext = context;
mSettingName = settingName;
}
public int getValue() {
return Global.getInt(mContext.getContentResolver(), mSettingName, 0);
}
public void setValue(int value) {
Global.putInt(mContext.getContentResolver(), mSettingName, value);
}
@Override
public void setListening(boolean listening) {
if (listening) {
mContext.getContentResolver().registerContentObserver(
Global.getUriFor(mSettingName), false, this);
} else {
mContext.getContentResolver().unregisterContentObserver(this);
}
}
@Override
public void onChange(boolean selfChange) {
handleValueChanged(getValue());
}
}

View File

@@ -21,11 +21,18 @@ import android.database.ContentObserver;
import android.os.Handler;
import com.android.systemui.statusbar.policy.Listenable;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.SecureSettings;
import com.android.systemui.util.settings.SettingsProxy;
import com.android.systemui.util.settings.SystemSettings;
/** Helper for managing a secure setting. **/
public abstract class SecureSetting extends ContentObserver implements Listenable {
private final SecureSettings mSecureSettings;
/**
* Helper for managing secure, global, and system settings through use of {@link SettingsProxy},
* which is the common superclass of {@link SecureSettings}, {@link GlobalSettings}, and
* {@link SystemSettings}.
*/
public abstract class SettingObserver extends ContentObserver implements Listenable {
private final SettingsProxy mSettingsProxy;
private final String mSettingName;
private final int mDefaultValue;
@@ -35,19 +42,19 @@ public abstract class SecureSetting extends ContentObserver implements Listenabl
protected abstract void handleValueChanged(int value, boolean observedChange);
public SecureSetting(SecureSettings secureSettings, Handler handler, String settingName,
public SettingObserver(SettingsProxy settingsProxy, Handler handler, String settingName,
int userId) {
this(secureSettings, handler, settingName, userId, 0);
this(settingsProxy, handler, settingName, userId, 0);
}
public SecureSetting(SecureSettings secureSetting, Handler handler, String settingName) {
this(secureSetting, handler, settingName, ActivityManager.getCurrentUser());
public SettingObserver(SettingsProxy settingsProxy, Handler handler, String settingName) {
this(settingsProxy, handler, settingName, ActivityManager.getCurrentUser());
}
public SecureSetting(SecureSettings secureSettings, Handler handler, String settingName,
public SettingObserver(SettingsProxy settingsProxy, Handler handler, String settingName,
int userId, int defaultValue) {
super(handler);
mSecureSettings = secureSettings;
mSettingsProxy = settingsProxy;
mSettingName = settingName;
mObservedValue = mDefaultValue = defaultValue;
mUserId = userId;
@@ -57,12 +64,17 @@ public abstract class SecureSetting extends ContentObserver implements Listenabl
return mListening ? mObservedValue : getValueFromProvider();
}
/**
* Set the value of the observed setting.
*
* @param value The new value for the setting.
*/
public void setValue(int value) {
mSecureSettings.putIntForUser(mSettingName, value, mUserId);
mSettingsProxy.putIntForUser(mSettingName, value, mUserId);
}
private int getValueFromProvider() {
return mSecureSettings.getIntForUser(mSettingName, mDefaultValue, mUserId);
return mSettingsProxy.getIntForUser(mSettingName, mDefaultValue, mUserId);
}
@Override
@@ -71,10 +83,10 @@ public abstract class SecureSetting extends ContentObserver implements Listenabl
mListening = listening;
if (listening) {
mObservedValue = getValueFromProvider();
mSecureSettings.registerContentObserverForUser(
mSecureSettings.getUriFor(mSettingName), false, this, mUserId);
mSettingsProxy.registerContentObserverForUser(
mSettingsProxy.getUriFor(mSettingName), false, this, mUserId);
} else {
mSecureSettings.unregisterContentObserver(this);
mSettingsProxy.unregisterContentObserver(this);
mObservedValue = mDefaultValue;
}
}
@@ -87,6 +99,9 @@ public abstract class SecureSetting extends ContentObserver implements Listenabl
handleValueChanged(value, changed);
}
/**
* Set user handle for which to observe the setting.
*/
public void setUserId(int userId) {
mUserId = userId;
if (mListening) {

View File

@@ -44,10 +44,11 @@ import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.GlobalSetting;
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.util.settings.GlobalSettings;
import javax.inject.Inject;
@@ -56,7 +57,7 @@ import dagger.Lazy;
/** Quick settings tile: Airplane mode **/
public class AirplaneModeTile extends QSTileImpl<BooleanState> {
private final Icon mIcon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_airplane);
private final GlobalSetting mSetting;
private final SettingObserver mSetting;
private final BroadcastDispatcher mBroadcastDispatcher;
private final Lazy<ConnectivityManager> mLazyConnectivityManager;
@@ -73,16 +74,17 @@ public class AirplaneModeTile extends QSTileImpl<BooleanState> {
ActivityStarter activityStarter,
QSLogger qsLogger,
BroadcastDispatcher broadcastDispatcher,
Lazy<ConnectivityManager> lazyConnectivityManager
Lazy<ConnectivityManager> lazyConnectivityManager,
GlobalSettings globalSettings
) {
super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
statusBarStateController, activityStarter, qsLogger);
mBroadcastDispatcher = broadcastDispatcher;
mLazyConnectivityManager = lazyConnectivityManager;
mSetting = new GlobalSetting(mContext, mHandler, Global.AIRPLANE_MODE_ON) {
mSetting = new SettingObserver(globalSettings, mHandler, Global.AIRPLANE_MODE_ON) {
@Override
protected void handleValueChanged(int value) {
protected void handleValueChanged(int value, boolean observedChange) {
// mHandler is the background handler so calling this is OK
handleRefreshState(value);
}

View File

@@ -36,7 +36,7 @@ import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.SecureSetting;
import com.android.systemui.qs.SettingObserver;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -49,7 +49,7 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements
private final BatteryController mBatteryController;
@VisibleForTesting
protected final SecureSetting mSetting;
protected final SettingObserver mSetting;
private int mLevel;
private boolean mPowerSave;
@@ -76,7 +76,7 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements
mBatteryController = batteryController;
mBatteryController.observe(getLifecycle(), this);
int currentUser = host.getUserContext().getUserId();
mSetting = new SecureSetting(
mSetting = new SettingObserver(
secureSettings,
mHandler,
Secure.LOW_POWER_WARNING_ACKNOWLEDGED,

View File

@@ -38,7 +38,7 @@ import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.SecureSetting;
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;
@@ -54,7 +54,7 @@ public class ColorInversionTile extends QSTileImpl<BooleanState> {
private static final String COLOR_INVERSION_PREFERENCE_KEY = "toggle_inversion_preference";
private final Icon mIcon = ResourceIcon.get(drawable.ic_invert_colors);
private final SecureSetting mSetting;
private final SettingObserver mSetting;
private boolean mListening;
@@ -74,7 +74,7 @@ public class ColorInversionTile extends QSTileImpl<BooleanState> {
super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
statusBarStateController, activityStarter, qsLogger);
mSetting = new SecureSetting(secureSettings, mHandler,
mSetting = new SettingObserver(secureSettings, mHandler,
Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, userTracker.getUserId()) {
@Override
protected void handleValueChanged(int value, boolean observedChange) {

View File

@@ -61,7 +61,7 @@ import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.SecureSetting;
import com.android.systemui.qs.SettingObserver;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.statusbar.phone.SystemUIDialog;
@@ -83,7 +83,7 @@ public class DndTile extends QSTileImpl<BooleanState> {
private final ZenModeController mController;
private final DndDetailAdapter mDetailAdapter;
private final SharedPreferences mSharedPreferences;
private final SecureSetting mSettingZenDuration;
private final SettingObserver mSettingZenDuration;
private boolean mListening;
private boolean mShowingDetail;
@@ -108,7 +108,7 @@ public class DndTile extends QSTileImpl<BooleanState> {
mSharedPreferences = sharedPreferences;
mDetailAdapter = new DndDetailAdapter();
mController.observe(getLifecycle(), mZenCallback);
mSettingZenDuration = new SecureSetting(secureSettings, mUiHandler,
mSettingZenDuration = new SettingObserver(secureSettings, mUiHandler,
Settings.Secure.ZEN_DURATION, getHost().getUserId()) {
@Override
protected void handleValueChanged(int value, boolean observedChange) {

View File

@@ -36,7 +36,7 @@ import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.SecureSetting;
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;
@@ -49,7 +49,7 @@ import javax.inject.Inject;
public class OneHandedModeTile extends QSTileImpl<BooleanState> {
private final Icon mIcon = ResourceIcon.get(
com.android.internal.R.drawable.ic_qs_one_handed_mode);
private final SecureSetting mSetting;
private final SettingObserver mSetting;
@Inject
public OneHandedModeTile(
@@ -65,7 +65,7 @@ public class OneHandedModeTile extends QSTileImpl<BooleanState> {
SecureSettings secureSettings) {
super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
statusBarStateController, activityStarter, qsLogger);
mSetting = new SecureSetting(secureSettings, mHandler,
mSetting = new SettingObserver(secureSettings, mHandler,
Settings.Secure.ONE_HANDED_MODE_ENABLED, userTracker.getUserId()) {
@Override
protected void handleValueChanged(int value, boolean observedChange) {

View File

@@ -31,7 +31,7 @@ import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.qs.AutoAddTracker;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.qs.ReduceBrightColorsController;
import com.android.systemui.qs.SecureSetting;
import com.android.systemui.qs.SettingObserver;
import com.android.systemui.qs.external.CustomTile;
import com.android.systemui.statusbar.policy.CastController;
import com.android.systemui.statusbar.policy.CastController.CastDevice;
@@ -383,8 +383,8 @@ public class AutoTileManager implements UserAwareController {
};
@VisibleForTesting
protected SecureSetting getSecureSettingForKey(String key) {
for (SecureSetting s : mAutoAddSettingList) {
protected SettingObserver getSecureSettingForKey(String key) {
for (SettingObserver s : mAutoAddSettingList) {
if (Objects.equals(key, s.getKey())) {
return s;
}
@@ -398,7 +398,7 @@ public class AutoTileManager implements UserAwareController {
* When the setting changes to a value different from 0, if the tile has not been auto added
* before, it will be added and the listener will be stopped.
*/
private class AutoAddSetting extends SecureSetting {
private class AutoAddSetting extends SettingObserver {
private final String mSpec;
AutoAddSetting(

View File

@@ -45,9 +45,10 @@ 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.qs.GlobalSetting;
import com.android.systemui.qs.SettingObserver;
import com.android.systemui.settings.CurrentUserTracker;
import com.android.systemui.util.Utils;
import com.android.systemui.util.settings.GlobalSettings;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -66,8 +67,8 @@ public class ZenModeControllerImpl extends CurrentUserTracker
private final ArrayList<Callback> mCallbacks = new ArrayList<>();
private final Object mCallbacksLock = new Object();
private final Context mContext;
private final GlobalSetting mModeSetting;
private final GlobalSetting mConfigSetting;
private final SettingObserver mModeSetting;
private final SettingObserver mConfigSetting;
private final NotificationManager mNoMan;
private final AlarmManager mAlarmManager;
private final SetupObserver mSetupObserver;
@@ -85,19 +86,20 @@ public class ZenModeControllerImpl extends CurrentUserTracker
Context context,
@Main Handler handler,
BroadcastDispatcher broadcastDispatcher,
DumpManager dumpManager) {
DumpManager dumpManager,
GlobalSettings globalSettings) {
super(broadcastDispatcher);
mContext = context;
mModeSetting = new GlobalSetting(mContext, handler, Global.ZEN_MODE) {
mModeSetting = new SettingObserver(globalSettings, handler, Global.ZEN_MODE) {
@Override
protected void handleValueChanged(int value) {
protected void handleValueChanged(int value, boolean observedChange) {
updateZenMode(value);
fireZenChanged(value);
}
};
mConfigSetting = new GlobalSetting(mContext, handler, Global.ZEN_MODE_CONFIG_ETAG) {
mConfigSetting = new SettingObserver(globalSettings, handler, Global.ZEN_MODE_CONFIG_ETAG) {
@Override
protected void handleValueChanged(int value) {
protected void handleValueChanged(int value, boolean observedChange) {
updateZenModeConfig();
}
};

View File

@@ -35,7 +35,7 @@ private typealias Callback = (Int, Boolean) -> Unit
@SmallTest
@RunWith(AndroidTestingRunner::class)
@TestableLooper.RunWithLooper
class SecureSettingTest : SysuiTestCase() {
class SettingObserverTest : SysuiTestCase() {
companion object {
private const val TEST_SETTING = "setting"
@@ -46,7 +46,7 @@ class SecureSettingTest : SysuiTestCase() {
}
private lateinit var testableLooper: TestableLooper
private lateinit var setting: SecureSetting
private lateinit var setting: SettingObserver
private lateinit var secureSettings: SecureSettings
private lateinit var callback: Callback
@@ -56,7 +56,7 @@ class SecureSettingTest : SysuiTestCase() {
testableLooper = TestableLooper.get(this)
secureSettings = FakeSettings()
setting = object : SecureSetting(
setting = object : SettingObserver(
secureSettings,
Handler(testableLooper.looper),
TEST_SETTING,

View File

@@ -51,7 +51,7 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.qs.AutoAddTracker;
import com.android.systemui.qs.QSTileHost;
import com.android.systemui.qs.ReduceBrightColorsController;
import com.android.systemui.qs.SecureSetting;
import com.android.systemui.qs.SettingObserver;
import com.android.systemui.statusbar.policy.CastController;
import com.android.systemui.statusbar.policy.CastController.CastDevice;
import com.android.systemui.statusbar.policy.DataSaverController;
@@ -249,7 +249,7 @@ public class AutoTileManagerTest extends SysuiTestCase {
verify(mWalletController, times(2)).getWalletPosition();
SecureSetting setting = mAutoTileManager.getSecureSettingForKey(TEST_SETTING);
SettingObserver setting = mAutoTileManager.getSecureSettingForKey(TEST_SETTING);
assertEquals(USER + 1, setting.getCurrentUser());
assertTrue(setting.isListening());
}
@@ -299,7 +299,7 @@ public class AutoTileManagerTest extends SysuiTestCase {
verify(mWalletController, times(2)).getWalletPosition();
SecureSetting setting = mAutoTileManager.getSecureSettingForKey(TEST_SETTING);
SettingObserver setting = mAutoTileManager.getSecureSettingForKey(TEST_SETTING);
assertEquals(USER + 1, setting.getCurrentUser());
assertFalse(setting.isListening());
}

View File

@@ -36,6 +36,7 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.statusbar.policy.ZenModeController.Callback;
import com.android.systemui.util.settings.FakeSettings;
import org.junit.Before;
import org.junit.Test;
@@ -70,7 +71,8 @@ public class ZenModeControllerImplTest extends SysuiTestCase {
mContext,
Handler.createAsync(Looper.myLooper()),
mBroadcastDispatcher,
mDumpManager);
mDumpManager,
new FakeSettings());
}
@Test