android: frontend: Settings: Various updates and preserve single choice text in UI.
This commit is contained in:
parent
27e84f9cfc
commit
e110b458a3
@ -36,7 +36,7 @@ public final class SliderSetting extends SettingsItem {
|
|||||||
return intSetting.getValue();
|
return intSetting.getValue();
|
||||||
} else if (setting instanceof FloatSetting) {
|
} else if (setting instanceof FloatSetting) {
|
||||||
FloatSetting floatSetting = (FloatSetting) setting;
|
FloatSetting floatSetting = (FloatSetting) setting;
|
||||||
if (floatSetting.getKey().equals(SettingsFile.KEY_FRAME_LIMIT)) {
|
if (isPercentSetting()) {
|
||||||
return Math.round(floatSetting.getValue() * 100);
|
return Math.round(floatSetting.getValue() * 100);
|
||||||
} else {
|
} else {
|
||||||
return Math.round(floatSetting.getValue());
|
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,
|
* 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.
|
* 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.SliderViewHolder;
|
||||||
import org.citra.citra_android.ui.settings.viewholder.SubmenuViewHolder;
|
import org.citra.citra_android.ui.settings.viewholder.SubmenuViewHolder;
|
||||||
import org.citra.citra_android.utils.Log;
|
import org.citra.citra_android.utils.Log;
|
||||||
import org.citra.citra_android.utils.SettingsFile;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@ -46,6 +45,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
private ArrayList<SettingsItem> mSettings;
|
private ArrayList<SettingsItem> mSettings;
|
||||||
|
|
||||||
private SettingsItem mClickedItem;
|
private SettingsItem mClickedItem;
|
||||||
|
private int mClickedPosition;
|
||||||
private int mSeekbarProgress;
|
private int mSeekbarProgress;
|
||||||
|
|
||||||
private AlertDialog mDialog;
|
private AlertDialog mDialog;
|
||||||
@ -54,6 +54,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
public SettingsAdapter(SettingsFragmentView view, Context context) {
|
public SettingsAdapter(SettingsFragmentView view, Context context) {
|
||||||
mView = view;
|
mView = view;
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
mClickedPosition = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -136,8 +137,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
mView.onSettingChanged();
|
mView.onSettingChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onSingleChoiceClick(SingleChoiceSetting item) {
|
public void onSingleChoiceClick(SingleChoiceSetting item, int position) {
|
||||||
mClickedItem = item;
|
mClickedItem = item;
|
||||||
|
mClickedPosition = position;
|
||||||
|
|
||||||
int value = getSelectionForSingleChoiceValue(item);
|
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;
|
mClickedItem = item;
|
||||||
|
mClickedPosition = position;
|
||||||
|
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity());
|
AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity());
|
||||||
|
|
||||||
@ -202,8 +205,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
mDialog = builder.show();
|
mDialog = builder.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onSliderClick(SliderSetting item) {
|
public void onSliderClick(SliderSetting item, int position) {
|
||||||
mClickedItem = item;
|
mClickedItem = item;
|
||||||
|
mClickedPosition = position;
|
||||||
mSeekbarProgress = item.getSelectedValue();
|
mSeekbarProgress = item.getSelectedValue();
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity());
|
AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity());
|
||||||
|
|
||||||
@ -269,6 +273,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
SingleChoiceSetting scSetting = (SingleChoiceSetting) mClickedItem;
|
SingleChoiceSetting scSetting = (SingleChoiceSetting) mClickedItem;
|
||||||
|
|
||||||
int value = getValueForSingleChoiceSelection(scSetting, which);
|
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)
|
// Get the backing Setting, which may be null (if for example it was missing from the file)
|
||||||
IntSetting setting = scSetting.setSelectedValue(value);
|
IntSetting setting = scSetting.setSelectedValue(value);
|
||||||
@ -279,10 +286,14 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
closeDialog();
|
closeDialog();
|
||||||
} else if (mClickedItem instanceof SliderSetting) {
|
} else if (mClickedItem instanceof SliderSetting) {
|
||||||
SliderSetting sliderSetting = (SliderSetting) mClickedItem;
|
SliderSetting sliderSetting = (SliderSetting) mClickedItem;
|
||||||
if (sliderSetting.getSetting() instanceof FloatSetting) {
|
if (sliderSetting.getSelectedValue() != mSeekbarProgress) {
|
||||||
|
mView.onSettingChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sliderSetting.isPercentSetting() || sliderSetting.getSetting() instanceof FloatSetting) {
|
||||||
float value;
|
float value;
|
||||||
|
|
||||||
if (sliderSetting.getKey().equals(SettingsFile.KEY_FRAME_LIMIT)) {
|
if (sliderSetting.isPercentSetting()) {
|
||||||
value = mSeekbarProgress / 100.0f;
|
value = mSeekbarProgress / 100.0f;
|
||||||
} else {
|
} else {
|
||||||
value = (float) mSeekbarProgress;
|
value = (float) mSeekbarProgress;
|
||||||
@ -298,15 +309,20 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
mView.putSetting(setting);
|
mView.putSetting(setting);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
closeDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
mView.onSettingChanged();
|
|
||||||
mClickedItem = null;
|
mClickedItem = null;
|
||||||
mSeekbarProgress = -1;
|
mSeekbarProgress = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void closeDialog() {
|
public void closeDialog() {
|
||||||
if (mDialog != null) {
|
if (mDialog != null) {
|
||||||
|
if (mClickedPosition != -1) {
|
||||||
|
notifyItemChanged(mClickedPosition);
|
||||||
|
mClickedPosition = -1;
|
||||||
|
}
|
||||||
mDialog.dismiss();
|
mDialog.dismiss();
|
||||||
mDialog = null;
|
mDialog = null;
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,6 @@ public final class DateTimeViewHolder extends SettingViewHolder {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View clicked) {
|
public void onClick(View clicked) {
|
||||||
getAdapter().onDateTimeClick(mItem);
|
getAdapter().onDateTimeClick(mItem, getAdapterPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package org.citra.citra_android.ui.settings.viewholder;
|
package org.citra.citra_android.ui.settings.viewholder;
|
||||||
|
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
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;
|
import org.citra.citra_android.ui.settings.SettingsAdapter;
|
||||||
|
|
||||||
public final class SingleChoiceViewHolder extends SettingViewHolder {
|
public final class SingleChoiceViewHolder extends SettingViewHolder {
|
||||||
private SingleChoiceSetting mItem;
|
private SettingsItem mItem;
|
||||||
|
|
||||||
private TextView mTextSettingName;
|
private TextView mTextSettingName;
|
||||||
private TextView mTextSettingDescription;
|
private TextView mTextSettingDescription;
|
||||||
@ -20,23 +21,37 @@ public final class SingleChoiceViewHolder extends SettingViewHolder {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void findViews(View root) {
|
protected void findViews(View root) {
|
||||||
mTextSettingName = root.findViewById(R.id.text_setting_name);
|
mTextSettingName = (TextView) root.findViewById(R.id.text_setting_name);
|
||||||
mTextSettingDescription = root.findViewById(R.id.text_setting_description);
|
mTextSettingDescription = (TextView) root.findViewById(R.id.text_setting_description);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bind(SettingsItem item) {
|
public void bind(SettingsItem item) {
|
||||||
mItem = (SingleChoiceSetting) item;
|
mItem = item;
|
||||||
|
|
||||||
mTextSettingName.setText(item.getNameId());
|
mTextSettingName.setText(item.getNameId());
|
||||||
|
|
||||||
if (item.getDescriptionId() > 0) {
|
if (item.getDescriptionId() > 0) {
|
||||||
mTextSettingDescription.setText(item.getDescriptionId());
|
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
|
@Override
|
||||||
public void onClick(View clicked) {
|
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
|
@Override
|
||||||
public void onClick(View clicked) {
|
public void onClick(View clicked) {
|
||||||
getAdapter().onSliderClick(mItem);
|
getAdapter().onSliderClick(mItem, getAdapterPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user