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
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.
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
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;
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);
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;
= 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;
+ }
}
};
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;
+++ /dev/null
-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);
- }
- });
-
- }
-}
<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>
<?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
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