android: frontend: Settings: Various updates and preserve single choice text in UI.

This commit is contained in:
bunnei 2019-07-19 22:12:42 -04:00
parent a349bc547d
commit fb4d39c20e
5 changed files with 51 additions and 16 deletions

View File

@ -36,7 +36,7 @@ public final class SliderSetting extends SettingsItem {
return intSetting.getValue();
} else if (setting instanceof FloatSetting) {
FloatSetting floatSetting = (FloatSetting) setting;
if (floatSetting.getKey().equals(SettingsFile.KEY_FRAME_LIMIT)) {
if (isPercentSetting()) {
return Math.round(floatSetting.getValue() * 100);
} else {
return Math.round(floatSetting.getValue());
@ -47,6 +47,10 @@ public final class SliderSetting extends SettingsItem {
}
}
public boolean isPercentSetting() {
return getKey().equals(SettingsFile.KEY_FRAME_LIMIT);
}
/**
* Write a value to the backing int. If that int was previously null,
* initializes a new one and returns it, so it can be added to the Hashmap.

View File

@ -35,7 +35,6 @@ import org.citra.citra_android.ui.settings.viewholder.SingleChoiceViewHolder;
import org.citra.citra_android.ui.settings.viewholder.SliderViewHolder;
import org.citra.citra_android.ui.settings.viewholder.SubmenuViewHolder;
import org.citra.citra_android.utils.Log;
import org.citra.citra_android.utils.SettingsFile;
import java.util.ArrayList;
@ -46,6 +45,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
private ArrayList<SettingsItem> mSettings;
private SettingsItem mClickedItem;
private int mClickedPosition;
private int mSeekbarProgress;
private AlertDialog mDialog;
@ -54,6 +54,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
public SettingsAdapter(SettingsFragmentView view, Context context) {
mView = view;
mContext = context;
mClickedPosition = -1;
}
@Override
@ -136,8 +137,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
mView.onSettingChanged();
}
public void onSingleChoiceClick(SingleChoiceSetting item) {
public void onSingleChoiceClick(SingleChoiceSetting item, int position) {
mClickedItem = item;
mClickedPosition = position;
int value = getSelectionForSingleChoiceValue(item);
@ -156,8 +158,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
}
};
public void onDateTimeClick(DateTimeSetting item) {
public void onDateTimeClick(DateTimeSetting item, int position) {
mClickedItem = item;
mClickedPosition = position;
AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity());
@ -202,8 +205,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
mDialog = builder.show();
}
public void onSliderClick(SliderSetting item) {
public void onSliderClick(SliderSetting item, int position) {
mClickedItem = item;
mClickedPosition = position;
mSeekbarProgress = item.getSelectedValue();
AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity());
@ -269,6 +273,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
SingleChoiceSetting scSetting = (SingleChoiceSetting) mClickedItem;
int value = getValueForSingleChoiceSelection(scSetting, which);
if (scSetting.getSelectedValue() != value) {
mView.onSettingChanged();
}
// Get the backing Setting, which may be null (if for example it was missing from the file)
IntSetting setting = scSetting.setSelectedValue(value);
@ -279,10 +286,14 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
closeDialog();
} else if (mClickedItem instanceof SliderSetting) {
SliderSetting sliderSetting = (SliderSetting) mClickedItem;
if (sliderSetting.getSetting() instanceof FloatSetting) {
if (sliderSetting.getSelectedValue() != mSeekbarProgress) {
mView.onSettingChanged();
}
if (sliderSetting.isPercentSetting() || sliderSetting.getSetting() instanceof FloatSetting) {
float value;
if (sliderSetting.getKey().equals(SettingsFile.KEY_FRAME_LIMIT)) {
if (sliderSetting.isPercentSetting()) {
value = mSeekbarProgress / 100.0f;
} else {
value = (float) mSeekbarProgress;
@ -298,15 +309,20 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
mView.putSetting(setting);
}
}
closeDialog();
}
mView.onSettingChanged();
mClickedItem = null;
mSeekbarProgress = -1;
}
public void closeDialog() {
if (mDialog != null) {
if (mClickedPosition != -1) {
notifyItemChanged(mClickedPosition);
mClickedPosition = -1;
}
mDialog.dismiss();
mDialog = null;
}

View File

@ -38,6 +38,6 @@ public final class DateTimeViewHolder extends SettingViewHolder {
@Override
public void onClick(View clicked) {
getAdapter().onDateTimeClick(mItem);
getAdapter().onDateTimeClick(mItem, getAdapterPosition());
}
}
}

View File

@ -1,5 +1,6 @@
package org.citra.citra_android.ui.settings.viewholder;
import android.content.res.Resources;
import android.view.View;
import android.widget.TextView;
@ -9,7 +10,7 @@ import org.citra.citra_android.model.settings.view.SingleChoiceSetting;
import org.citra.citra_android.ui.settings.SettingsAdapter;
public final class SingleChoiceViewHolder extends SettingViewHolder {
private SingleChoiceSetting mItem;
private SettingsItem mItem;
private TextView mTextSettingName;
private TextView mTextSettingDescription;
@ -20,23 +21,37 @@ public final class SingleChoiceViewHolder extends SettingViewHolder {
@Override
protected void findViews(View root) {
mTextSettingName = root.findViewById(R.id.text_setting_name);
mTextSettingDescription = root.findViewById(R.id.text_setting_description);
mTextSettingName = (TextView) root.findViewById(R.id.text_setting_name);
mTextSettingDescription = (TextView) root.findViewById(R.id.text_setting_description);
}
@Override
public void bind(SettingsItem item) {
mItem = (SingleChoiceSetting) item;
mItem = item;
mTextSettingName.setText(item.getNameId());
if (item.getDescriptionId() > 0) {
mTextSettingDescription.setText(item.getDescriptionId());
} else if (item instanceof SingleChoiceSetting) {
SingleChoiceSetting setting = (SingleChoiceSetting) item;
int selected = setting.getSelectedValue();
Resources resMgr = mTextSettingDescription.getContext().getResources();
String[] choices = resMgr.getStringArray(setting.getChoicesId());
int[] values = resMgr.getIntArray(setting.getValuesId());
for (int i = 0; i < values.length; ++i) {
if (values[i] == selected) {
mTextSettingDescription.setText(choices[i]);
}
}
}
}
@Override
public void onClick(View clicked) {
getAdapter().onSingleChoiceClick(mItem);
int position = getAdapterPosition();
if (mItem instanceof SingleChoiceSetting) {
getAdapter().onSingleChoiceClick((SingleChoiceSetting) mItem, position);
}
}
}

View File

@ -37,7 +37,7 @@ public final class SliderViewHolder extends SettingViewHolder {
@Override
public void onClick(View clicked) {
getAdapter().onSliderClick(mItem);
getAdapter().onSliderClick(mItem, getAdapterPosition());
}
}