From 1d3c702f70602afd69925dea9401c230976791bd Mon Sep 17 00:00:00 2001 From: Nathaniel Wesley Filardo Date: Tue, 2 Jun 2020 20:14:26 +0100 Subject: [PATCH] Give in to androidx preferences --- build.gradle | 2 +- mobile/build.gradle | 4 +- .../ctfwstimer/activity/SettingsActivity.java | 57 ++++++++++++++++--- .../ctfwstimer/activity/main/Activity.java | 10 ---- .../ctfwstimer/service/MainService.java | 12 +++- .../service/MainServiceNotification.java | 2 +- .../utils/DefaultableEditTextPreference.java | 55 ------------------ mobile/src/main/res/values/strings.xml | 3 + mobile/src/main/res/xml/preferences.xml | 24 ++++++-- 9 files changed, 86 insertions(+), 83 deletions(-) delete mode 100644 mobile/src/main/java/com/acmetensortoys/ctfwstimer/utils/DefaultableEditTextPreference.java diff --git a/build.gradle b/build.gradle index 3117577..7d34715 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.1' + classpath 'com.android.tools.build:gradle:4.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/mobile/build.gradle b/mobile/build.gradle index 7b277aa..3b59c40 100644 --- a/mobile/build.gradle +++ b/mobile/build.gradle @@ -67,9 +67,9 @@ dependencies { api 'androidx.appcompat:appcompat:1.1.0' api 'androidx.legacy:legacy-support-v4:1.0.0' - api 'androidx.preference:preference:1.1.0' + api 'androidx.preference:preference:1.1.1' implementation 'androidx.annotation:annotation:1.1.0' - implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' // Nah. diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/activity/SettingsActivity.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/activity/SettingsActivity.java index ba5c2ed..5cb764f 100644 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/activity/SettingsActivity.java +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/activity/SettingsActivity.java @@ -1,23 +1,64 @@ package com.acmetensortoys.ctfwstimer.activity; -import android.preference.PreferenceActivity; -import android.preference.PreferenceFragment; +import android.content.SharedPreferences; import android.os.Bundle; +import android.util.Log; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.preference.PreferenceFragmentCompat; import com.acmetensortoys.ctfwstimer.R; -public class SettingsActivity extends PreferenceActivity { +public class SettingsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); + getSupportFragmentManager() + .beginTransaction() + .replace(android.R.id.content, new SettingsFragment()) + .commit(); } - public static class SettingsFragment extends PreferenceFragment { + public static class SettingsFragment extends PreferenceFragmentCompat { + private final SharedPreferences.OnSharedPreferenceChangeListener mOSPCL + = new SharedPreferences.OnSharedPreferenceChangeListener() { + @Override + public void onSharedPreferenceChanged(SharedPreferences sp, String key) { + switch (key) { + case "server_def": + findPreference("server").setVisible(!sp.getBoolean(key, false)); + break; + } + } + }; + + @Override + public void onResume() { + super.onResume(); + + getPreferenceScreen() + .getSharedPreferences() + .registerOnSharedPreferenceChangeListener(mOSPCL); + } + @Override - public void onCreate(final Bundle savedInstanceBundle) { - super.onCreate(savedInstanceBundle); - addPreferencesFromResource(R.xml.preferences); + public void onPause() { + getPreferenceScreen() + .getSharedPreferences() + .unregisterOnSharedPreferenceChangeListener(mOSPCL); + + super.onPause(); + } + + @Override + public void onCreatePreferences(Bundle savedInstanceBundle, String rootKey) { + setPreferencesFromResource(R.xml.preferences, rootKey); + + findPreference("server").setVisible(! + getPreferenceScreen() + .getSharedPreferences() + .getBoolean("server_def", false) + ); } } } diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/activity/main/Activity.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/activity/main/Activity.java index 40be764..f492e52 100644 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/activity/main/Activity.java +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/activity/main/Activity.java @@ -1,9 +1,7 @@ package com.acmetensortoys.ctfwstimer.activity.main; import android.content.Intent; -import android.content.SharedPreferences; import android.content.pm.ActivityInfo; -import androidx.preference.PreferenceManager; import androidx.annotation.StringRes; import android.os.Bundle; import androidx.appcompat.view.menu.MenuBuilder; @@ -112,14 +110,6 @@ public class Activity extends CtFwSActivityBase { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); - if (sp.getString("server", null) == null) { - sp.edit().putString("server", getString(R.string.server_default)).apply(); - } - if (BuildConfig.DEBUG && sp.getString("server", null) == null) { - throw new AssertionError("Shared Preferences not sticking!"); - } - mTvSU = findViewById(R.id.tv_mqtt_server_uri); mTvSS = findViewById(R.id.tv_mqtt_state); diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/service/MainService.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/service/MainService.java index c3d0e43..0c4707d 100644 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/service/MainService.java +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/service/MainService.java @@ -12,6 +12,7 @@ import androidx.annotation.Nullable; import androidx.core.util.Consumer; import android.util.Log; +import com.acmetensortoys.ctfwstimer.R; import com.acmetensortoys.ctfwstimer.lib.CtFwSGameStateManager; import com.acmetensortoys.ctfwstimer.lib.TimerProvider; import com.acmetensortoys.ctfwstimer.utils.CheckedAsyncDownloader; @@ -312,7 +313,16 @@ public class MainService extends Service { = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - switch(key) { case "server": doMqtt(sharedPreferences.getString(key,null)); break; } + switch(key) { + case "server_def" : + case "server": + boolean useDefault = sharedPreferences.getBoolean("server_def", true); + String server = useDefault + ? getString(R.string.server_default) + : sharedPreferences.getString("server", null); + doMqtt(server); + break; + } } }; diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/service/MainServiceNotification.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/service/MainServiceNotification.java index 169c0b3..9f1ef5a 100644 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/service/MainServiceNotification.java +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/service/MainServiceNotification.java @@ -13,7 +13,7 @@ import android.media.RingtoneManager; import android.net.Uri; import android.os.Build; import android.os.IBinder; -import android.preference.PreferenceManager; +import androidx.preference.PreferenceManager; import androidx.core.app.NotificationCompat; import android.util.Log; diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/utils/DefaultableEditTextPreference.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/utils/DefaultableEditTextPreference.java deleted file mode 100644 index 1ed9ae3..0000000 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/utils/DefaultableEditTextPreference.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.acmetensortoys.ctfwstimer.utils; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.res.TypedArray; -import android.os.Bundle; -import android.preference.EditTextPreference; -import android.util.AttributeSet; -import android.view.View; - -import com.acmetensortoys.ctfwstimer.R; - -public class DefaultableEditTextPreference extends EditTextPreference { - // GAH! Our parent Preference has this as a private field. Grrr Android! - private String defText; - - public DefaultableEditTextPreference(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - protected Object onGetDefaultValue(TypedArray a, int index) { - defText = a.getString(index); - return super.onGetDefaultValue(a, index); - } - - @Override - public void setDefaultValue(Object defaultValue) { - defText = (String) defaultValue; - super.setDefaultValue(defaultValue); - } - - @Override - protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { - super.onPrepareDialogBuilder(builder); - - // null callback is OK here because we're about to nuke the would-be caller below! - builder.setNeutralButton(R.string.dialog_reset, null); - } - - @Override - protected void showDialog(Bundle state) { - super.showDialog(state); - - ((AlertDialog)getDialog()) - .getButton(AlertDialog.BUTTON_NEUTRAL) - .setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - getEditText().setText(defText); - } - }); - - } -} diff --git a/mobile/src/main/res/values/strings.xml b/mobile/src/main/res/values/strings.xml index e5c492b..53d93e3 100644 --- a/mobile/src/main/res/values/strings.xml +++ b/mobile/src/main/res/values/strings.xml @@ -64,6 +64,9 @@ Subscribed (est. %1$d sec. diff.) Set MQTT Server + Use Default MQTT Server + MQTT Server + Notification Settings Vibrate on Jailbreak? Vibrate on Flag Capture? Vibrate on Message? diff --git a/mobile/src/main/res/xml/preferences.xml b/mobile/src/main/res/xml/preferences.xml index fae6c1e..98c4949 100644 --- a/mobile/src/main/res/xml/preferences.xml +++ b/mobile/src/main/res/xml/preferences.xml @@ -1,13 +1,25 @@ - + - + + + + + android:title="@string/preftext_mqtt" + app:isPreferenceVisible="false"/> + + + + - + + + -- 2.50.1