From 058796b7ebdda1e85ab6df86e571d99d6e893cda Mon Sep 17 00:00:00 2001 From: Kweku Adams Date: Fri, 18 Mar 2022 21:13:37 +0000 Subject: [PATCH] Update enable toggle processing. 1. Use a ContentObserver so the UI is always up-to-date. 2. Don't write a value when it would effectively be putting the default value and the current value is null. This allows us to have a "use default" option so that DeviceConfig can take over if a user ever resets to default settings. Bug: 158300259 Bug: 189850067 Bug: 205624100 Test: manually toggle and look at logcat for expected values Change-Id: I429977d37cd8afc2ce12b89cbac002503484ad7e --- .../development/tare/TareHomePage.java | 69 +++++++++++++++++-- 1 file changed, 64 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/development/tare/TareHomePage.java b/src/com/android/settings/development/tare/TareHomePage.java index cea09540d60..d0567f798b6 100644 --- a/src/com/android/settings/development/tare/TareHomePage.java +++ b/src/com/android/settings/development/tare/TareHomePage.java @@ -22,7 +22,11 @@ import static com.android.settings.development.tare.DropdownActivity.POLICY_JOB_ import android.app.Activity; import android.content.Intent; +import android.database.ContentObserver; +import android.net.Uri; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.provider.Settings; import android.view.View; import android.widget.Button; @@ -40,6 +44,9 @@ public class TareHomePage extends Activity { private Button mRevButton; private TextView mAlarmManagerView; private TextView mJobSchedulerView; + private ConfigObserver mConfigObserver; + + private static final int SETTING_VALUE_DEFAULT = -1; private static final int SETTING_VALUE_OFF = 0; private static final int SETTING_VALUE_ON = 1; @@ -53,14 +60,17 @@ public class TareHomePage extends Activity { mAlarmManagerView = findViewById(R.id.alarmmanager); mJobSchedulerView = findViewById(R.id.jobscheduler); - final boolean isTareEnabled = Settings.Global.getInt(getContentResolver(), - Settings.Global.ENABLE_TARE, Settings.Global.DEFAULT_ENABLE_TARE) == 1; - setEnabled(isTareEnabled); + mConfigObserver = new ConfigObserver(new Handler(Looper.getMainLooper())); mOnSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - setEnabled(isChecked); + if (mConfigObserver.mEnableTareSetting == SETTING_VALUE_DEFAULT + && isChecked == (Settings.Global.DEFAULT_ENABLE_TARE == SETTING_VALUE_ON)) { + // Don't bother writing something that's not new information. It would make + // it hard to use DeviceConfig if we did. + return; + } Settings.Global.putInt(getContentResolver(), Settings.Global.ENABLE_TARE, isChecked ? SETTING_VALUE_ON : SETTING_VALUE_OFF); @@ -68,6 +78,18 @@ public class TareHomePage extends Activity { }); } + @Override + protected void onResume() { + super.onResume(); + mConfigObserver.start(); + } + + @Override + protected void onPause() { + mConfigObserver.stop(); + super.onPause(); + } + /** Reverts the TARE settings to the original default settings */ public void revertSettings(View v) { Toast.makeText(this, R.string.tare_settings_reverted_toast, Toast.LENGTH_LONG).show(); @@ -77,7 +99,6 @@ public class TareHomePage extends Activity { Settings.Global.TARE_ALARM_MANAGER_CONSTANTS, null); Settings.Global.putString(getApplicationContext().getContentResolver(), Settings.Global.TARE_JOB_SCHEDULER_CONSTANTS, null); - setEnabled(Settings.Global.DEFAULT_ENABLE_TARE == SETTING_VALUE_ON); } /** Opens up the AlarmManager TARE policy page with its factors to view and edit */ @@ -101,4 +122,42 @@ public class TareHomePage extends Activity { mJobSchedulerView.setEnabled(tareStatus); mOnSwitch.setChecked(tareStatus); } + + private class ConfigObserver extends ContentObserver { + private int mEnableTareSetting; + + ConfigObserver(Handler handler) { + super(handler); + } + + public void start() { + getContentResolver().registerContentObserver( + Settings.Global.getUriFor(Settings.Global.ENABLE_TARE), false, this); + processEnableTareChange(); + } + + public void stop() { + getContentResolver().unregisterContentObserver(this); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + processEnableTareChange(); + } + + private void processEnableTareChange() { + final String setting = + Settings.Global.getString(getContentResolver(), Settings.Global.ENABLE_TARE); + if (setting == null ) { + mEnableTareSetting = SETTING_VALUE_DEFAULT; + } else { + try { + mEnableTareSetting = Integer.parseInt(setting); + } catch (NumberFormatException e) { + mEnableTareSetting = Settings.Global.DEFAULT_ENABLE_TARE; + } + } + setEnabled(mEnableTareSetting == SETTING_VALUE_ON); + } + } }