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
92 lines
3.3 KiB
Java
92 lines
3.3 KiB
Java
/*
|
|
* Copyright (C) 2018 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.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;
|
|
|
|
public class AllowBackgroundActivityStartsPreferenceController
|
|
extends DeveloperOptionsPreferenceController
|
|
implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
|
|
|
|
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);
|
|
}
|
|
|
|
@Override
|
|
public String getPreferenceKey() {
|
|
return BACKGROUND_ACTIVITY_STARTS_ENABLED_KEY;
|
|
}
|
|
|
|
@Override
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
writeSetting((boolean) newValue);
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void updateState(Preference preference) {
|
|
final int mode = Settings.Global.getInt(mContext.getContentResolver(),
|
|
Settings.Global.BACKGROUND_ACTIVITY_STARTS_ENABLED, -1);
|
|
|
|
boolean isEnabled = mode < 0 ? isDefaultEnabled() : mode != 0;
|
|
((SwitchPreference) mPreference).setChecked(isEnabled);
|
|
}
|
|
|
|
@Override
|
|
protected void onDeveloperOptionsSwitchDisabled() {
|
|
super.onDeveloperOptionsSwitchDisabled();
|
|
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);
|
|
}
|
|
}
|