]> hydra-www.ietfng.org Git - acmetensortoys-ctfws-android/commitdiff
Give in to androidx preferences
authorNathaniel Wesley Filardo <nwfilardo@gmail.com>
Tue, 2 Jun 2020 19:14:26 +0000 (20:14 +0100)
committerNathaniel Wesley Filardo <nwfilardo@gmail.com>
Tue, 2 Jun 2020 19:24:30 +0000 (20:24 +0100)
build.gradle
mobile/build.gradle
mobile/src/main/java/com/acmetensortoys/ctfwstimer/activity/SettingsActivity.java
mobile/src/main/java/com/acmetensortoys/ctfwstimer/activity/main/Activity.java
mobile/src/main/java/com/acmetensortoys/ctfwstimer/service/MainService.java
mobile/src/main/java/com/acmetensortoys/ctfwstimer/service/MainServiceNotification.java
mobile/src/main/java/com/acmetensortoys/ctfwstimer/utils/DefaultableEditTextPreference.java [deleted file]
mobile/src/main/res/values/strings.xml
mobile/src/main/res/xml/preferences.xml

index 31175778dae3a8987dc4b784dcfecef3d1ae9c77..7d3471549a6b286a7984d270a64c6bf3e047af79 100644 (file)
@@ -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
index 7b277aa3d748e413e22c5f5905636ea5e82b31b5..3b59c40cfe8a88452dae2b2e933b288eb548cf27 100644 (file)
@@ -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.
index ba5c2ede85e0008abf1ac17078be527a644bd4cc..5cb764ff51d9ea8025c1e54d3f82c9413661a30f 100644 (file)
@@ -1,23 +1,64 @@
 package com.acmetensortoys.ctfwstimer.activity;\r
 \r
-import android.preference.PreferenceActivity;\r
-import android.preference.PreferenceFragment;\r
+import android.content.SharedPreferences;\r
 import android.os.Bundle;\r
+import android.util.Log;\r
+\r
+import androidx.appcompat.app.AppCompatActivity;\r
+import androidx.preference.PreferenceFragmentCompat;\r
 \r
 import com.acmetensortoys.ctfwstimer.R;\r
 \r
-public class SettingsActivity extends PreferenceActivity {\r
+public class SettingsActivity extends AppCompatActivity {\r
     @Override\r
     protected void onCreate(Bundle savedInstanceState) {\r
         super.onCreate(savedInstanceState);\r
-        getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();\r
+        getSupportFragmentManager()\r
+                .beginTransaction()\r
+                .replace(android.R.id.content, new SettingsFragment())\r
+                .commit();\r
     }\r
 \r
-    public static class SettingsFragment extends PreferenceFragment {\r
+    public static class SettingsFragment extends PreferenceFragmentCompat {\r
+        private final SharedPreferences.OnSharedPreferenceChangeListener mOSPCL\r
+                = new SharedPreferences.OnSharedPreferenceChangeListener() {\r
+            @Override\r
+            public void onSharedPreferenceChanged(SharedPreferences sp, String key) {\r
+                switch (key) {\r
+                    case "server_def":\r
+                        findPreference("server").setVisible(!sp.getBoolean(key, false));\r
+                        break;\r
+                }\r
+            }\r
+        };\r
+\r
+        @Override\r
+        public void onResume() {\r
+            super.onResume();\r
+\r
+            getPreferenceScreen()\r
+                    .getSharedPreferences()\r
+                    .registerOnSharedPreferenceChangeListener(mOSPCL);\r
+        }\r
+\r
         @Override\r
-        public void onCreate(final Bundle savedInstanceBundle) {\r
-            super.onCreate(savedInstanceBundle);\r
-            addPreferencesFromResource(R.xml.preferences);\r
+        public void onPause() {\r
+            getPreferenceScreen()\r
+                    .getSharedPreferences()\r
+                    .unregisterOnSharedPreferenceChangeListener(mOSPCL);\r
+\r
+            super.onPause();\r
+        }\r
+\r
+        @Override\r
+        public void onCreatePreferences(Bundle savedInstanceBundle, String rootKey) {\r
+            setPreferencesFromResource(R.xml.preferences, rootKey);\r
+\r
+            findPreference("server").setVisible(!\r
+                    getPreferenceScreen()\r
+                            .getSharedPreferences()\r
+                            .getBoolean("server_def", false)\r
+            );\r
         }\r
     }\r
 }\r
index 40be764ea67c4b92ae099dda3d4d7cbba5efe9ca..f492e52324d87cd8e574ccaecdcefd402c97c844 100644 (file)
@@ -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);
 
index c3d0e43176b035609b73e48b7235623baad2d971..0c4707d1a6ce94aae1d3290e5c47ff17f7030e09 100644 (file)
@@ -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;
+            }
         }
     };
 
index 169c0b36084c2235b2350c9bdd2356b6d1cc1b43..9f1ef5a4457540084f265035cd2ccddb84047268 100644 (file)
@@ -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 (file)
index 1ed9ae3..0000000
+++ /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);
-                    }
-                });
-
-    }
-}
index e5c492b68d0fd5835997e830db0534b231b244ad..53d93e34bb7370c73d6b38875da627da297c31b4 100644 (file)
@@ -64,6 +64,9 @@
     <string name="mqtt_subbed_tdelta" tools:ignore="PluralsCandidate">Subscribed (est. %1$d sec. diff.)</string>
 
     <string name="preftext_mqtt">Set MQTT Server</string>
+    <string name="preftext_mqtt_def">Use Default MQTT Server</string>
+    <string name="preftext_mqtt_prefcat">MQTT Server</string>
+    <string name="preftext_notif_prefcat">Notification Settings</string>
     <string name="preftext_vibrate_jb">Vibrate on Jailbreak?</string>
     <string name="preftext_vibrate_flag">Vibrate on Flag Capture?</string>
     <string name="preftext_vibrate_mesg">Vibrate on Message?</string>
index fae6c1e576c88eecc56d0cbd8ab327422acab107..98c4949cbc5e3bc13e5e00ad33e7dca93ad7bcce 100644 (file)
@@ -1,13 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>\r
-<android.support.v7.preference.PreferenceScreen\r
-    xmlns:android="http://schemas.android.com/apk/res/android">\r
+<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"\r
+    xmlns:app="http://schemas.android.com/apk/res-auto">\r
 \r
-    <com.acmetensortoys.ctfwstimer.utils.DefaultableEditTextPreference\r
+    <PreferenceCategory android:title="@string/preftext_mqtt_prefcat">\r
+\r
+    <CheckBoxPreference\r
+        android:defaultValue="true"\r
+        android:key="server_def"\r
+        android:title="@string/preftext_mqtt_def"/>\r
+\r
+    <EditTextPreference\r
         android:selectAllOnFocus="true"\r
         android:singleLine="true"\r
         android:key="server"\r
         android:defaultValue="@string/server_default"\r
-        android:title="@string/preftext_mqtt" />\r
+        android:title="@string/preftext_mqtt"\r
+        app:isPreferenceVisible="false"/>\r
+\r
+    </PreferenceCategory>\r
+    <PreferenceCategory android:title="@string/preftext_notif_prefcat">\r
+\r
 \r
     <CheckBoxPreference\r
         android:defaultValue="true"\r
@@ -44,4 +56,6 @@
         android:key="prf_vibr_mesg"\r
         android:title="@string/preftext_sound_mesg" />\r
 \r
-</android.support.v7.preference.PreferenceScreen>\r
+    </PreferenceCategory>\r
+\r
+</androidx.preference.PreferenceScreen>\r