diff options
| author | Sean Maas <seanmaas27@gmail.com> | 2016-10-30 19:21:36 -0400 |
|---|---|---|
| committer | Sean Maas <seanmaas27@gmail.com> | 2016-11-26 18:29:25 -0500 |
| commit | d10b336b0ab5d0eac84224f9514e2988f56dbc64 (patch) | |
| tree | ceda1f2991a40e58faa64fc88d7860dda45a0356 /Source/Android/app/src/main/java | |
| parent | e21aa1d990b9b6a37f594018b1f035b95f0b85da (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')
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()); - } -} |
