From f755c1886f37987643aca061731c0daee55d58f2 Mon Sep 17 00:00:00 2001 From: Nathaniel Wesley Filardo Date: Mon, 20 Feb 2017 03:09:48 -0500 Subject: [PATCH] Improve settings panel Remove custom Dialog in favor of custom EditTextPreference Fix some subscription issues in MainAcitivty --- .../DefaultableEditTextPreference.java | 55 +++++++++++ .../ctfwstimer/MainActivity.java | 15 ++- .../StringSettingDialogFragment.java | 92 ------------------- mobile/src/main/res/layout/activity_main.xml | 2 +- mobile/src/main/res/layout/server_dialog.xml | 18 ---- mobile/src/main/res/menu/mainmenu.xml | 7 -- mobile/src/main/res/values/strings.xml | 2 +- mobile/src/main/res/xml/preferences.xml | 6 +- 8 files changed, 67 insertions(+), 130 deletions(-) create mode 100644 mobile/src/main/java/com/acmetensortoys/ctfwstimer/DefaultableEditTextPreference.java delete mode 100644 mobile/src/main/java/com/acmetensortoys/ctfwstimer/StringSettingDialogFragment.java delete mode 100644 mobile/src/main/res/layout/server_dialog.xml diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/DefaultableEditTextPreference.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/DefaultableEditTextPreference.java new file mode 100644 index 0000000..33656e1 --- /dev/null +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/DefaultableEditTextPreference.java @@ -0,0 +1,55 @@ +package com.acmetensortoys.ctfwstimer; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.res.TypedArray; +import android.os.Bundle; +import android.preference.EditTextPreference; +import android.util.AttributeSet; +import android.view.View; +import android.widget.Button; + +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/java/com/acmetensortoys/ctfwstimer/MainActivity.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/MainActivity.java index 3d81b1a..78a1e1f 100644 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/MainActivity.java +++ b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/MainActivity.java @@ -103,8 +103,13 @@ public class MainActivity extends AppCompatActivity { Log.d("CtFwS", "onStart"); super.onStart(); - Intent si = new Intent(this, MainService.class); - bindService(si, ctfwssc, Context.BIND_AUTO_CREATE); + if (mSrvBinder == null) { + Intent si = new Intent(this, MainService.class); + bindService(si, ctfwssc, Context.BIND_AUTO_CREATE); + } else { + mSrvBinder.getGameState().registerObserver(mCdl); + mSrvBinder.registerObserver(mSrvObs); + } } @Override @@ -166,12 +171,6 @@ public class MainActivity extends AppCompatActivity { startActivity(new Intent(this, AboutActivity.class)); return true; // Cam: Changing this doesn't appear to do anything? Leaving just in case. - case R.id.menu_mqtt : - DialogFragment d = - StringSettingDialogFragment.newInstance( - R.layout.server_dialog, R.id.server_text, "server", defserver); - d.show(getSupportFragmentManager(),"serverdialog"); - return true; default: return super.onOptionsItemSelected(mi); } diff --git a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/StringSettingDialogFragment.java b/mobile/src/main/java/com/acmetensortoys/ctfwstimer/StringSettingDialogFragment.java deleted file mode 100644 index bf17eb5..0000000 --- a/mobile/src/main/java/com/acmetensortoys/ctfwstimer/StringSettingDialogFragment.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.acmetensortoys.ctfwstimer; - -import android.app.AlertDialog; -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.annotation.NonNull; -import android.support.v4.app.DialogFragment; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.TextView; - -public class StringSettingDialogFragment extends DialogFragment - implements SharedPreferences.OnSharedPreferenceChangeListener -{ - private final static String ARG_LRES_IX = "lres"; // layout id - private final static String ARG_VRES_IX = "vres"; // text view id - private final static String ARG_PREF_IX = "pref"; // preference name - private final static String ARG_DEFL_IX = "def"; // optional default - - private TextView mTv; - - public static StringSettingDialogFragment newInstance(int lres, int vres, String pref, String def) { - StringSettingDialogFragment ssdf = new StringSettingDialogFragment(); - Bundle args = new Bundle(); - args.putInt (ARG_LRES_IX, lres); - args.putInt (ARG_VRES_IX, vres); - args.putString(ARG_PREF_IX, pref); - if (def != null) { args.putString(ARG_DEFL_IX, def); } - ssdf.setArguments(args); - return ssdf; - } - - @NonNull @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - Bundle a = getArguments(); - AlertDialog.Builder adb = new AlertDialog.Builder(getActivity()); - LayoutInflater li = getActivity().getLayoutInflater(); - View v = li.inflate(a.getInt(ARG_LRES_IX), null); - - mTv = (TextView)v.findViewById(a.getInt(ARG_VRES_IX)); - final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); - sp.registerOnSharedPreferenceChangeListener(this); - onSharedPreferenceChanged(sp,a.getString(ARG_PREF_IX)); - - adb.setView(v) - .setPositiveButton(R.string.dialog_ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - sp.edit().putString("server", mTv.getText().toString()).apply(); - } - }) - .setNegativeButton(R.string.dialog_cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // NOP - } - }); - - final String def = a.getString(ARG_DEFL_IX); - if (def != null) { - adb.setNeutralButton(R.string.dialog_reset, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - mTv.post(new Runnable() { - @Override - public void run() { - mTv.setText(def); - } - }); - } - }); - } - - return adb.create(); - } - - @Override - public void onSharedPreferenceChanged(final SharedPreferences sp, final String p) { - if (p != null && getArguments().getString(ARG_PREF_IX).equals(p)) { - mTv.post(new Runnable() { - @Override - public void run() { - mTv.setText(sp.getString(p, "")); - } - }); - } - } -} diff --git a/mobile/src/main/res/layout/activity_main.xml b/mobile/src/main/res/layout/activity_main.xml index cd57489..ef3f488 100644 --- a/mobile/src/main/res/layout/activity_main.xml +++ b/mobile/src/main/res/layout/activity_main.xml @@ -203,7 +203,7 @@ - - - - - - \ No newline at end of file diff --git a/mobile/src/main/res/menu/mainmenu.xml b/mobile/src/main/res/menu/mainmenu.xml index e4686b2..eb5c15e 100644 --- a/mobile/src/main/res/menu/mainmenu.xml +++ b/mobile/src/main/res/menu/mainmenu.xml @@ -8,13 +8,6 @@ android:id="@+id/menu_prf" android:icon="@android:drawable/ic_menu_manage" android:checkable="false"/> - About Set MQTT Server - Server URI: Settings Connection Metadata: + Server URI: Server State: Connected but not subscribed Disconnected diff --git a/mobile/src/main/res/xml/preferences.xml b/mobile/src/main/res/xml/preferences.xml index 8f56170..d8e14ae 100644 --- a/mobile/src/main/res/xml/preferences.xml +++ b/mobile/src/main/res/xml/preferences.xml @@ -1,12 +1,12 @@ - + android:title="@string/menutext_mqtt" />