Take default for background activity starts from DeviceConfig.
We've modified the implementation to use the value set by DeviceConfig if the user has not touched the developer options setting (change fb227077b8652b817a094d37a5215ad7466ee603). We want the Settings screen to reflect this default until the user explicitly sets it. Additionally if the user disables developer settings we want to go back to using whatever DeviceConfig sets. Bug: 129533810 Test: croot && make RunSettingsRoboTests \ ROBOTEST_FILTER=AllowBackgroundActivityStartsPreferenceControllerTest Change-Id: I73901a22da928f9a6924b30882b26494cdcd94bc
This commit is contained in:
@@ -17,11 +17,13 @@
|
||||
package com.android.settings.development;
|
||||
|
||||
import android.content.Context;
|
||||
import android.provider.DeviceConfig;
|
||||
import android.provider.Settings;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
|
||||
|
||||
@@ -32,6 +34,11 @@ public class AllowBackgroundActivityStartsPreferenceController
|
||||
private static final String BACKGROUND_ACTIVITY_STARTS_ENABLED_KEY
|
||||
= "allow_background_activity_starts";
|
||||
|
||||
/** Key in DeviceConfig that stores the default for the preference (as a boolean). */
|
||||
@VisibleForTesting
|
||||
static final String KEY_DEFAULT_BACKGROUND_ACTIVITY_STARTS_ENABLED =
|
||||
"default_background_activity_starts_enabled";
|
||||
|
||||
public AllowBackgroundActivityStartsPreferenceController(Context context) {
|
||||
super(context);
|
||||
}
|
||||
@@ -47,22 +54,38 @@ public class AllowBackgroundActivityStartsPreferenceController
|
||||
return true;
|
||||
}
|
||||
|
||||
private void writeSetting(boolean isEnabled) {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED, isEnabled ? 1 : 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
final int mode = Settings.Global.getInt(mContext.getContentResolver(),
|
||||
Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED, 1);
|
||||
((SwitchPreference) mPreference).setChecked(mode != 0);
|
||||
Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED, -1);
|
||||
|
||||
boolean isEnabled = mode < 0 ? isDefaultEnabled() : mode != 0;
|
||||
((SwitchPreference) mPreference).setChecked(isEnabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDeveloperOptionsSwitchDisabled() {
|
||||
super.onDeveloperOptionsSwitchDisabled();
|
||||
writeSetting(true);
|
||||
((SwitchPreference) mPreference).setChecked(true);
|
||||
clearSetting();
|
||||
updateState(mPreference);
|
||||
}
|
||||
|
||||
private void writeSetting(boolean isEnabled) {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED, isEnabled ? 1 : 0);
|
||||
}
|
||||
|
||||
private void clearSetting() {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED, -1);
|
||||
}
|
||||
|
||||
private boolean isDefaultEnabled() {
|
||||
// The default in the absence of user preference is settable via DeviceConfig.
|
||||
// Note that the default default is enabled.
|
||||
return DeviceConfig.getBoolean(
|
||||
DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
|
||||
KEY_DEFAULT_BACKGROUND_ACTIVITY_STARTS_ENABLED,
|
||||
/*defaultValue*/ true);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user