android: frontend: Settings: Various updates and preserve single choice text in UI.
This commit is contained in:
parent
a349bc547d
commit
fb4d39c20e
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -38,6 +38,6 @@ public final class DateTimeViewHolder extends SettingViewHolder {
|
||||
|
||||
@Override
|
||||
public void onClick(View clicked) {
|
||||
getAdapter().onDateTimeClick(mItem);
|
||||
getAdapter().onDateTimeClick(mItem, getAdapterPosition());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ public final class SliderViewHolder extends SettingViewHolder {
|
||||
|
||||
@Override
|
||||
public void onClick(View clicked) {
|
||||
getAdapter().onSliderClick(mItem);
|
||||
getAdapter().onSliderClick(mItem, getAdapterPosition());
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user