summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorSean Maas <seanmaas27@gmail.com>2016-10-30 19:21:36 -0400
committerSean Maas <seanmaas27@gmail.com>2016-11-26 18:29:25 -0500
commitd10b336b0ab5d0eac84224f9514e2988f56dbc64 (patch)
treeceda1f2991a40e58faa64fc88d7860dda45a0356 /Source/Android/app/src/main/java
parente21aa1d990b9b6a37f594018b1f035b95f0b85da (diff)
Android: Add InputBindingSetting class
Also update MotionAlertDialog to work with the new setting, and remove the old InputBindingPreference.
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/MotionAlertDialog.java21
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/InputBindingSetting.java53
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SettingsItem.java1
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java48
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/InputBindingSettingViewHolder.java53
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/InputBindingPreference.java64
6 files changed, 165 insertions, 75 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/MotionAlertDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/MotionAlertDialog.java
index bb83a7f1ae..33efbde2c5 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/MotionAlertDialog.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/MotionAlertDialog.java
@@ -3,13 +3,14 @@ package org.dolphinemu.dolphinemu.dialogs;
import android.app.AlertDialog;
import android.content.Context;
import android.content.SharedPreferences;
-import android.preference.Preference;
import android.preference.PreferenceManager;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
import org.dolphinemu.dolphinemu.NativeLibrary;
+import org.dolphinemu.dolphinemu.model.settings.StringSetting;
+import org.dolphinemu.dolphinemu.model.settings.view.InputBindingSetting;
import org.dolphinemu.dolphinemu.utils.Log;
import java.util.ArrayList;
@@ -22,7 +23,7 @@ import java.util.List;
public final class MotionAlertDialog extends AlertDialog
{
// The selected input preference
- private final Preference inputPref;
+ private final InputBindingSetting setting;
private boolean firstEvent = true;
private final ArrayList<Float> m_values = new ArrayList<>();
@@ -30,14 +31,14 @@ public final class MotionAlertDialog extends AlertDialog
/**
* Constructor
*
- * @param ctx The current {@link Context}.
- * @param inputPref The Preference to show this dialog for.
+ * @param context The current {@link Context}.
+ * @param setting The Preference to show this dialog for.
*/
- public MotionAlertDialog(Context ctx, Preference inputPref)
+ public MotionAlertDialog(Context context, InputBindingSetting setting)
{
- super(ctx);
+ super(context);
- this.inputPref = inputPref;
+ this.setting = setting;
}
@Override
@@ -150,7 +151,7 @@ public final class MotionAlertDialog extends AlertDialog
if (bindStr != null)
{
- NativeLibrary.SetConfig("Dolphin.ini", "Android", inputPref.getKey(), bindStr);
+ setting.setValue(bindStr);
}
else
{
@@ -163,10 +164,8 @@ public final class MotionAlertDialog extends AlertDialog
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor editor = preferences.edit();
- editor.putString(inputPref.getKey(), uiString);
+ editor.putString(setting.getKey(), uiString);
editor.apply();
-
- inputPref.setSummary(uiString);
}
else
{
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/InputBindingSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/InputBindingSetting.java
new file mode 100644
index 0000000000..4537ed2028
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/InputBindingSetting.java
@@ -0,0 +1,53 @@
+package org.dolphinemu.dolphinemu.model.settings.view;
+
+import org.dolphinemu.dolphinemu.model.settings.BooleanSetting;
+import org.dolphinemu.dolphinemu.model.settings.Setting;
+import org.dolphinemu.dolphinemu.model.settings.StringSetting;
+
+public final class InputBindingSetting extends SettingsItem
+{
+ public InputBindingSetting(String key, String section, int file, int titleId, Setting setting)
+ {
+ super(key, section, file, setting, titleId, 0);
+ }
+
+ public String getValue()
+ {
+ if (getSetting() == null)
+ {
+ return "";
+ }
+
+ StringSetting setting = (StringSetting) getSetting();
+ return setting.getValue();
+ }
+
+ /**
+ * Write a value to the backing string. If that string was previously null,
+ * initializes a new one and returns it, so it can be added to the Hashmap.
+ *
+ * @param bind The input that will be bound
+ * @return null if overwritten successfully; otherwise, a newly created StringSetting.
+ */
+ public StringSetting setValue(String bind)
+ {
+ if (getSetting() == null)
+ {
+ StringSetting setting = new StringSetting(getKey(), getSection(), getFile(), bind);
+ setSetting(setting);
+ return setting;
+ }
+ else
+ {
+ StringSetting setting = (StringSetting) getSetting();
+ setting.setValue(bind);
+ return null;
+ }
+ }
+
+ @Override
+ public int getType()
+ {
+ return TYPE_INPUT_BINDING;
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SettingsItem.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SettingsItem.java
index ebb800f4f0..094e8be91d 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SettingsItem.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SettingsItem.java
@@ -16,6 +16,7 @@ public abstract class SettingsItem
public static final int TYPE_SINGLE_CHOICE = 2;
public static final int TYPE_SLIDER = 3;
public static final int TYPE_SUBMENU = 4;
+ public static final int TYPE_INPUT_BINDING = 5;
private String mKey;
private String mSection;
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java
index dcd2c821e4..94d190ba8f 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java
@@ -2,6 +2,8 @@ package org.dolphinemu.dolphinemu.ui.settings;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
@@ -11,17 +13,20 @@ import android.widget.SeekBar;
import android.widget.TextView;
import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.dialogs.MotionAlertDialog;
import org.dolphinemu.dolphinemu.model.settings.BooleanSetting;
import org.dolphinemu.dolphinemu.model.settings.FloatSetting;
import org.dolphinemu.dolphinemu.model.settings.IntSetting;
import org.dolphinemu.dolphinemu.model.settings.StringSetting;
import org.dolphinemu.dolphinemu.model.settings.view.CheckBoxSetting;
+import org.dolphinemu.dolphinemu.model.settings.view.InputBindingSetting;
import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem;
import org.dolphinemu.dolphinemu.model.settings.view.SingleChoiceSetting;
import org.dolphinemu.dolphinemu.model.settings.view.SliderSetting;
import org.dolphinemu.dolphinemu.model.settings.view.SubmenuSetting;
import org.dolphinemu.dolphinemu.ui.settings.viewholder.CheckBoxSettingViewHolder;
import org.dolphinemu.dolphinemu.ui.settings.viewholder.HeaderViewHolder;
+import org.dolphinemu.dolphinemu.ui.settings.viewholder.InputBindingSettingViewHolder;
import org.dolphinemu.dolphinemu.ui.settings.viewholder.SettingViewHolder;
import org.dolphinemu.dolphinemu.ui.settings.viewholder.SingleChoiceViewHolder;
import org.dolphinemu.dolphinemu.ui.settings.viewholder.SliderViewHolder;
@@ -78,6 +83,10 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
view = inflater.inflate(R.layout.list_item_setting, parent, false);
return new SubmenuViewHolder(view, this);
+ case SettingsItem.TYPE_INPUT_BINDING:
+ view = inflater.inflate(R.layout.list_item_setting, parent, false);
+ return new InputBindingSettingViewHolder(view, this, mContext);
+
default:
Log.error("[SettingsAdapter] Invalid view type: " + viewType);
return null;
@@ -186,6 +195,45 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
mView.loadSubMenu(item.getMenuKey());
}
+ public void onInputBindingClick(final InputBindingSetting item, final int position)
+ {
+ final MotionAlertDialog dialog = new MotionAlertDialog(mContext, item);
+ dialog.setTitle(R.string.input_binding);
+ dialog.setMessage(String.format(mContext.getString(R.string.input_binding_descrip), mContext.getString(item.getNameId())));
+ dialog.setButton(AlertDialog.BUTTON_NEGATIVE, mContext.getString(R.string.cancel), this);
+ dialog.setButton(AlertDialog.BUTTON_NEUTRAL, mContext.getString(R.string.clear), new AlertDialog.OnClickListener()
+ {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i)
+ {
+ item.setValue("");
+
+ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putString(item.getKey(), "");
+ editor.apply();
+ }
+ });
+ dialog.setOnDismissListener(new AlertDialog.OnDismissListener()
+ {
+ @Override
+ public void onDismiss(DialogInterface dialog)
+ {
+ StringSetting setting = new StringSetting(item.getKey(), item.getSection(), item.getFile(), item.getValue());
+ notifyItemChanged(position);
+
+ if (setting != null)
+ {
+ mView.putSetting(setting);
+ }
+
+ mView.onSettingChanged();
+ }
+ });
+ dialog.setCanceledOnTouchOutside(false);
+ dialog.show();
+ }
+
@Override
public void onClick(DialogInterface dialog, int which)
{
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/InputBindingSettingViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/InputBindingSettingViewHolder.java
new file mode 100644
index 0000000000..d3df136ca9
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/InputBindingSettingViewHolder.java
@@ -0,0 +1,53 @@
+package org.dolphinemu.dolphinemu.ui.settings.viewholder;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.view.View;
+import android.widget.TextView;
+
+import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.model.settings.view.InputBindingSetting;
+import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem;
+import org.dolphinemu.dolphinemu.ui.settings.SettingsAdapter;
+
+public final class InputBindingSettingViewHolder extends SettingViewHolder
+{
+ private InputBindingSetting mItem;
+
+ private TextView mTextSettingName;
+ private TextView mTextSettingDescription;
+
+ private Context mContext;
+
+ public InputBindingSettingViewHolder(View itemView, SettingsAdapter adapter, Context context)
+ {
+ super(itemView, adapter);
+
+ mContext = context;
+ }
+
+ @Override
+ protected void findViews(View root)
+ {
+ mTextSettingName = (TextView) root.findViewById(R.id.text_setting_name);
+ mTextSettingDescription = (TextView) root.findViewById(R.id.text_setting_description);
+ }
+
+ @Override
+ public void bind(SettingsItem item)
+ {
+ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
+
+ mItem = (InputBindingSetting) item;
+
+ mTextSettingName.setText(item.getNameId());
+ mTextSettingDescription.setText(sharedPreferences.getString(mItem.getKey(), ""));
+ }
+
+ @Override
+ public void onClick(View clicked)
+ {
+ getAdapter().onInputBindingClick(mItem, getAdapterPosition());
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/InputBindingPreference.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/InputBindingPreference.java
deleted file mode 100644
index ba87dda893..0000000000
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/InputBindingPreference.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.dolphinemu.dolphinemu.utils;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.preference.EditTextPreference;
-import android.preference.Preference;
-import android.util.AttributeSet;
-
-import org.dolphinemu.dolphinemu.R;
-import org.dolphinemu.dolphinemu.dialogs.MotionAlertDialog;
-
-/**
- * {@link Preference} subclass that represents a preference
- * used for assigning a key bind.
- */
-public final class InputBindingPreference extends EditTextPreference
-{
- /**
- * Constructor that is called when inflating an InputBindingPreference from XML.
- *
- * @param context The current {@link Context}.
- * @param attrs The attributes of the XML tag that is inflating the preference.
- */
- public InputBindingPreference(Context context, AttributeSet attrs)
- {
- super(context, attrs);
- }
-
- @Override
- protected void onClick()
- {
- // Begin the creation of the input alert.
- final MotionAlertDialog dialog = new MotionAlertDialog(getContext(), this);
-
- // Set the cancel button.
- dialog.setButton(AlertDialog.BUTTON_NEGATIVE, getContext().getString(R.string.cancel), new AlertDialog.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog, int which)
- {
- // Do nothing. Just makes the cancel button show up.
- }
- });
-
- // Set the title and description message.
- dialog.setTitle(R.string.input_binding);
- dialog.setMessage(String.format(getContext().getString(R.string.input_binding_descrip), getTitle()));
-
- // Don't allow the dialog to close when a user taps
- // outside of it. They must press cancel or provide an input.
- dialog.setCanceledOnTouchOutside(false);
-
- // Everything is set, show the dialog.
- dialog.show();
- }
-
- @Override
- public CharSequence getSummary()
- {
- String summary = super.getSummary().toString();
- return String.format(summary, getText());
- }
-}