diff --git a/app/src/main/java/io/palaima/debugdrawer/app/DebugViewActivity.java b/app/src/main/java/io/palaima/debugdrawer/app/DebugViewActivity.java index b9f2cdf..91425b3 100644 --- a/app/src/main/java/io/palaima/debugdrawer/app/DebugViewActivity.java +++ b/app/src/main/java/io/palaima/debugdrawer/app/DebugViewActivity.java @@ -77,6 +77,7 @@ public void onClick() { }); SpinnerAction spinnerAction = new SpinnerAction<>( + "Test spinner", Arrays.asList("First", "Second", "Third"), new SpinnerAction.OnItemSelectedListener() { @Override diff --git a/app/src/main/java/io/palaima/debugdrawer/app/MainActivity.java b/app/src/main/java/io/palaima/debugdrawer/app/MainActivity.java index 27100be..a2238a0 100644 --- a/app/src/main/java/io/palaima/debugdrawer/app/MainActivity.java +++ b/app/src/main/java/io/palaima/debugdrawer/app/MainActivity.java @@ -19,6 +19,7 @@ import java.util.concurrent.TimeUnit; import io.palaima.debugdrawer.DebugDrawer; +import io.palaima.debugdrawer.actions.ActionSetup; import io.palaima.debugdrawer.actions.ActionsModule; import io.palaima.debugdrawer.actions.ButtonAction; import io.palaima.debugdrawer.actions.SpinnerAction; @@ -54,6 +55,10 @@ protected void onCreate(Bundle savedInstanceState) { setupToolBar(); + if (!ActionSetup.getInstance().isInitialised()) { + ActionSetup.getInstance().initDefault(this); + } + SwitchAction switchAction = new SwitchAction("Test switch", new SwitchAction.Listener() { @Override public void onCheckedChanged(boolean value) { @@ -69,14 +74,14 @@ public void onClick() { }); SpinnerAction spinnerAction = new SpinnerAction<>( + "Test spinner", Arrays.asList("First", "Second", "Third"), new SpinnerAction.OnItemSelectedListener() { @Override public void onItemSelected(String value) { Toast.makeText(MainActivity.this, "Spinner item selected - " + value, Toast.LENGTH_LONG).show(); } - }, - 1 + } ); new DebugDrawer.Builder(this).modules( diff --git a/build.gradle b/build.gradle index 095959e..ebfeb9d 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,9 @@ buildscript { repositories { + maven { + url "https://maven.google.com" + } jcenter() google() } @@ -18,6 +21,9 @@ buildscript { allprojects { repositories { + maven { + url "https://maven.google.com" + } jcenter() google() } diff --git a/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/Action.java b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/Action.java index d1b9545..7208bcc 100644 --- a/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/Action.java +++ b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/Action.java @@ -1,5 +1,6 @@ package io.palaima.debugdrawer.actions; +import android.content.SharedPreferences; import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; diff --git a/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/ActionSetup.java b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/ActionSetup.java new file mode 100644 index 0000000..9af2599 --- /dev/null +++ b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/ActionSetup.java @@ -0,0 +1,48 @@ +package io.palaima.debugdrawer.actions; + +import android.content.Context; +import android.support.annotation.NonNull; + +public class ActionSetup +{ + private static ActionSetup instance = null; + + public static ActionSetup getInstance() { + if(instance == null) { + instance = new ActionSetup(); + } + return instance; + } + + private DefaultValueHandler defaultValueHandler = null; + private SwitchAction.ValueHandler switchValueHandler = null; + private SpinnerAction.ValueHandler spinnerValueHandler = null; + + private ActionSetup() { + } + + public boolean isInitialised() { + return defaultValueHandler != null || (switchValueHandler != null && spinnerValueHandler != null); + } + + public void initDefault(Context context) { + defaultValueHandler = new DefaultValueHandler(context); + } + + public void initSwitchValueHandler(SwitchAction.ValueHandler switchValueHandler, SpinnerAction.ValueHandler spinnerValueHandler) { + this.switchValueHandler = switchValueHandler; + this.spinnerValueHandler = spinnerValueHandler; + } + + public final SwitchAction.ValueHandler getSwitchValueHandler() { + if (switchValueHandler == null && defaultValueHandler == null) { + throw new RuntimeException("You must initialised the ActionSetup class before you can use the ActionModule!"); } + return switchValueHandler != null ? switchValueHandler : defaultValueHandler; + } + + public final SpinnerAction.ValueHandler getSpinnerActionHandler() { + if (spinnerValueHandler == null && defaultValueHandler == null) { + throw new RuntimeException("You must initialised the ActionSetup class before you can use the ActionModule!"); } + return spinnerValueHandler != null ? spinnerValueHandler : defaultValueHandler; + } +} diff --git a/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/ActionsModule.java b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/ActionsModule.java index b9ec6ca..e9d0662 100644 --- a/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/ActionsModule.java +++ b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/ActionsModule.java @@ -22,6 +22,7 @@ public ActionsModule(String title, Action... actions) { if (actions != null) { this.actions.addAll(Arrays.asList(actions)); } + } public ActionsModule(Action... actions) { diff --git a/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/DefaultValueHandler.java b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/DefaultValueHandler.java new file mode 100644 index 0000000..7af0508 --- /dev/null +++ b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/DefaultValueHandler.java @@ -0,0 +1,41 @@ +package io.palaima.debugdrawer.actions; + +import android.content.Context; +import android.content.SharedPreferences; + +public class DefaultValueHandler implements SwitchAction.ValueHandler, SpinnerAction.ValueHandler +{ + private final SharedPreferences sharedPreferences; + + public DefaultValueHandler(Context context) { + sharedPreferences = context.getSharedPreferences("debugdrawer", Context.MODE_PRIVATE); + } + + public DefaultValueHandler(Context context, String preferenceName) { + sharedPreferences = context.getSharedPreferences(preferenceName, Context.MODE_PRIVATE); + } + + @Override + public boolean getSwitchValue(String preferenceName) + { + return sharedPreferences.getBoolean(preferenceName, false); + } + + @Override + public void setSwitchValue(String preferenceName, boolean enabled) + { + sharedPreferences.edit().putBoolean(preferenceName, enabled).apply(); + } + + @Override + public int getSpinnerValue(String preferenceName) + { + return sharedPreferences.getInt(preferenceName, 0); + } + + @Override + public void setSpinnerValue(String preferenceName, int selectedPosition) + { + sharedPreferences.edit().putInt(preferenceName, selectedPosition).apply(); + } +} diff --git a/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/SpinnerAction.java b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/SpinnerAction.java index e5227a5..e5fbdf8 100644 --- a/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/SpinnerAction.java +++ b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/SpinnerAction.java @@ -8,6 +8,7 @@ import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.Spinner; +import android.widget.TextView; import java.util.ArrayList; import java.util.List; @@ -18,29 +19,24 @@ public interface OnItemSelectedListener { void onItemSelected(T value); } - private final static int SPINNER_DEFAULT_POSITION = 0; - + private final String name; private final List titles; private final List values; private final OnItemSelectedListener listener; - private int selectedPosition = SPINNER_DEFAULT_POSITION; - - public SpinnerAction(List values, OnItemSelectedListener listener) { - this(getTitles(values), values, listener, SPINNER_DEFAULT_POSITION); - } + private int selectedPosition; - public SpinnerAction(List values, OnItemSelectedListener listener, int initialSelectedPosition) { - this(getTitles(values), values, listener, initialSelectedPosition); + public SpinnerAction(String name, List values, OnItemSelectedListener listener) { + this(name, getTitles(values), values, listener); } - public SpinnerAction(List titles, List values, OnItemSelectedListener listener, int initialSelectedPosition) { + public SpinnerAction(String name, List titles, List values, OnItemSelectedListener listener) { + this.name = name; this.values = values; this.titles = titles; this.listener = listener; - if (initialSelectedPosition >= 0 && initialSelectedPosition < values.size()) { - this.selectedPosition = initialSelectedPosition; - } else { + this.selectedPosition = ActionSetup.getInstance().getSpinnerActionHandler().getSpinnerValue(name); + if (selectedPosition < 0 || selectedPosition >= values.size()) { throw new IllegalStateException("initial selected position is out of bounds"); } } @@ -48,14 +44,23 @@ public SpinnerAction(List titles, List values, OnItemSelectedListener @Override public View getView(@NonNull final LayoutInflater inflater, @NonNull final LinearLayout parent) { final Context context = parent.getContext(); - final Spinner spinner = (Spinner) inflater.inflate(R.layout.dd_debug_drawer_module_actions_spinner, parent, false); + final View viewGroup = inflater.inflate(R.layout.dd_debug_drawer_module_actions_spinner, parent, false); + + final TextView textView = viewGroup.findViewById(R.id.action_spinner_name); + final Spinner spinner = viewGroup.findViewById(R.id.action_spinner); + + textView.setText(name); + spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { if (listener != null && position != selectedPosition) { listener.onItemSelected(values.get(position)); } - selectedPosition = position; + if (position != selectedPosition) { + selectedPosition = position; + ActionSetup.getInstance().getSpinnerActionHandler().setSpinnerValue(name, selectedPosition); + } } @Override @@ -72,7 +77,7 @@ public void onNothingSelected(AdapterView parent) { spinner.setSelection(selectedPosition); } - return spinner; + return viewGroup; } @Override @@ -112,4 +117,9 @@ private static List getTitles(List values) { } return titles; } + + public interface ValueHandler { + int getSpinnerValue(String preferenceName ); + void setSpinnerValue(String preferenceName, int selectedPosition); + } } diff --git a/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/SwitchAction.java b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/SwitchAction.java index 19829f9..f9926a6 100644 --- a/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/SwitchAction.java +++ b/debugdrawer-actions/src/main/java/io/palaima/debugdrawer/actions/SwitchAction.java @@ -1,7 +1,5 @@ package io.palaima.debugdrawer.actions; -import android.content.Context; -import android.content.SharedPreferences; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; @@ -11,16 +9,12 @@ import android.widget.Switch; import android.widget.TextView; -import java.lang.ref.WeakReference; - public class SwitchAction implements Action { private final String name; private final Listener listener; private final boolean shouldEmitFirstValue; - private WeakReference contextRef; - private Switch switchButton; public SwitchAction(String name, @Nullable Listener listener) { @@ -37,17 +31,14 @@ public SwitchAction(String name, @Nullable Listener listener, boolean shouldEmit @Override public View getView(@NonNull final LayoutInflater inflater, @NonNull final LinearLayout parent) { - final Context context = parent.getContext(); - - if (contextRef == null) { - contextRef = new WeakReference<>(context); - } - View viewGroup = inflater.inflate(R.layout.dd_debug_drawer_module_actions_switch, parent, false); final TextView textView = viewGroup.findViewById(R.id.action_switch_name); + switchButton = viewGroup.findViewById(R.id.action_switch_switch); + textView.setText(name); + switchButton.setChecked(ActionSetup.getInstance().getSwitchValueHandler().getSwitchValue(name)); switchButton = viewGroup.findViewById(R.id.action_switch_switch); switchButton.setOnCheckedChangeListener(switchListener); @@ -76,7 +67,7 @@ public void onPause() { @Override public void onStart() { - final boolean isChecked = readValue(); + final boolean isChecked = ActionSetup.getInstance().getSwitchValueHandler().getSwitchValue(name); switchButton.setOnCheckedChangeListener(null); switchButton.setChecked(isChecked); @@ -98,31 +89,17 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (listener != null) { listener.onCheckedChanged(isChecked); } - writeValue(isChecked); + ActionSetup.getInstance().getSwitchValueHandler().setSwitchValue(name, isChecked); } }; - public boolean isChecked() { - return readValue(); - } - - public void setChecked(boolean checked) { - switchButton.setChecked(checked); - } - - private boolean readValue() { - return getPreferences().getBoolean(name, false); - } - - private void writeValue(boolean b) { - getPreferences().edit().putBoolean(name, b).apply(); - } - - private SharedPreferences getPreferences() { - return contextRef.get().getSharedPreferences(name, Context.MODE_PRIVATE); - } - public interface Listener { void onCheckedChanged(boolean value); } + + public interface ValueHandler + { + boolean getSwitchValue(String preferenceName); + void setSwitchValue(String preferenceName, boolean enabled); + } } diff --git a/debugdrawer-actions/src/main/res/layout/dd_debug_drawer_module_actions_spinner.xml b/debugdrawer-actions/src/main/res/layout/dd_debug_drawer_module_actions_spinner.xml index 31ed009..a4fef12 100644 --- a/debugdrawer-actions/src/main/res/layout/dd_debug_drawer_module_actions_spinner.xml +++ b/debugdrawer-actions/src/main/res/layout/dd_debug_drawer_module_actions_spinner.xml @@ -1,6 +1,21 @@ - \ No newline at end of file + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + + + + + + \ No newline at end of file