Improve Preference
This commit is contained in:
1 parent
3bcb96d89f
commit
67c33ad8a2
6 files changed
+108
-13
No files matched your search
@@ -63,6 +63,8 @@ public class SimpleDialog extends SceneDialog implements View.OnClickListener,
|
||||
private View mSpacePositiveNegative;
|
||||
private TextView mPositiveButton;
|
||||
|
||||
private boolean mCancel = true;
|
||||
|
||||
private int mFitPaddingBottom;
|
||||
|
||||
private void setBuilder(@NonNull Builder builder) {
|
||||
@@ -110,10 +112,19 @@ public class SimpleDialog extends SceneDialog implements View.OnClickListener,
|
||||
mBuilder.mContext = getStageActivity();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
||||
OnCloseListener listener = mBuilder.mOnCloseListener;
|
||||
if (listener != null) {
|
||||
listener.onClose(this, mCancel);
|
||||
}
|
||||
}
|
||||
|
||||
private void bindDialog() {
|
||||
ListView listView = mListView;
|
||||
|
||||
|
||||
if (mBuilder.mTitle == null && mBuilder.mMessage == null && mBuilder.mCustomViewResId == 0) {
|
||||
ViewUtils.setVisibility(mBody, View.GONE);
|
||||
} else {
|
||||
@@ -243,11 +254,17 @@ public class SimpleDialog extends SceneDialog implements View.OnClickListener,
|
||||
}
|
||||
}
|
||||
|
||||
public int getSelectItemPosition() {
|
||||
// TODO check mListView isShown
|
||||
return mListView.getSelectedItemPosition();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (v == mPositiveButton) {
|
||||
if (mBuilder.mOnButtonClickListener == null ||
|
||||
mBuilder.mOnButtonClickListener.onClick(this, POSITIVE)) {
|
||||
mCancel = false;
|
||||
finish();
|
||||
}
|
||||
} else if (v == mNegativeButton) {
|
||||
@@ -263,6 +280,7 @@ public class SimpleDialog extends SceneDialog implements View.OnClickListener,
|
||||
if (parent == mListView) {
|
||||
OnClickListener listener = mBuilder.mOnListItemClickListener;
|
||||
if (listener == null || listener.onClick(this, position)) {
|
||||
mCancel = false;
|
||||
finish();
|
||||
}
|
||||
}
|
||||
@@ -299,6 +317,7 @@ public class SimpleDialog extends SceneDialog implements View.OnClickListener,
|
||||
private OnClickListener mOnButtonClickListener;
|
||||
|
||||
private boolean mCancelable = true;
|
||||
private OnCloseListener mOnCloseListener;
|
||||
|
||||
private int mStartX;
|
||||
private int mStartY;
|
||||
@@ -415,6 +434,11 @@ public class SimpleDialog extends SceneDialog implements View.OnClickListener,
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setOnCloseListener(OnCloseListener listener) {
|
||||
mOnCloseListener = listener;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setStartPoint(int startX, int startY) {
|
||||
mStartX = startX;
|
||||
mStartY = startY;
|
||||
@@ -447,8 +471,7 @@ public class SimpleDialog extends SceneDialog implements View.OnClickListener,
|
||||
boolean onClick(SimpleDialog dialog, int which);
|
||||
}
|
||||
|
||||
// TODO
|
||||
public interface OnCloseListener {
|
||||
void onClose();
|
||||
void onClose(SimpleDialog dialog, boolean cancel);
|
||||
}
|
||||
}
|
||||
@@ -2,22 +2,52 @@ package com.hippo.scene.preference;
|
||||
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
||||
import com.hippo.ehviewer.util.Config;
|
||||
import com.hippo.scene.SimpleDialog;
|
||||
|
||||
// TODO show current value as summary
|
||||
public class DialogPreference extends Preference {
|
||||
|
||||
private CharSequence[] mKeys;
|
||||
private int[] mValues;
|
||||
|
||||
private int mDefaultValue;
|
||||
|
||||
public DialogPreference(String key, String title, String summary) {
|
||||
super(key, title, summary);
|
||||
}
|
||||
|
||||
public void setKeys(CharSequence[] keys) {
|
||||
mKeys = keys;
|
||||
}
|
||||
|
||||
public void setValues(int[] values) {
|
||||
mValues = values;
|
||||
}
|
||||
|
||||
public void setDefaultValue(int defaultValue) {
|
||||
mDefaultValue = defaultValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onClick(RecyclerView.ViewHolder viewHolder, int x, int y) {
|
||||
if (!super.onClick(viewHolder, x, y)) {
|
||||
SimpleDialog.Builder builder = new SimpleDialog.Builder(viewHolder.itemView.getContext());
|
||||
builder.setTitle("Title");
|
||||
builder.setSingleChoiceItems(new CharSequence[]{"横向", "竖向", "斜向"}, 0, null);
|
||||
builder.setStartPoint(x, y);
|
||||
builder.show();
|
||||
new SimpleDialog.Builder(viewHolder.itemView.getContext())
|
||||
.setTitle(getTitle())
|
||||
.setSingleChoiceItems(mKeys, Config.getInt(getKey(), mDefaultValue), null)
|
||||
.setStartPoint(x, y)
|
||||
.setOnCloseListener(new SimpleDialog.OnCloseListener() {
|
||||
@Override
|
||||
public void onClose(SimpleDialog dialog, boolean cancel) {
|
||||
if (!cancel) {
|
||||
int position = dialog.getSelectItemPosition();
|
||||
if (position >= 0 && position < mValues.length) {
|
||||
Config.putInt(getKey(), mValues[position]);
|
||||
// TODO Update summary
|
||||
}
|
||||
}
|
||||
}
|
||||
}).show();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -25,11 +25,14 @@ import com.hippo.ehviewer.R;
|
||||
|
||||
public class Preference extends PreferenceBase {
|
||||
|
||||
private int mPosition;
|
||||
|
||||
private String mKey;
|
||||
private String mTitle;
|
||||
private String mSummary;
|
||||
|
||||
private OnClickListener mOnClickListener;
|
||||
private ViewHolderGetter mViewHolderGetter;
|
||||
|
||||
public Preference(String key, String title, String summary) {
|
||||
mKey = key;
|
||||
@@ -41,6 +44,14 @@ public class Preference extends PreferenceBase {
|
||||
return mKey;
|
||||
}
|
||||
|
||||
public int getPosition() {
|
||||
return mPosition;
|
||||
}
|
||||
|
||||
public void setPosition(int position) {
|
||||
mPosition = position;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getItemViewType() {
|
||||
return PreferenceCenter.TYPE_PEFERENCE;
|
||||
@@ -51,7 +62,7 @@ public class Preference extends PreferenceBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
void bindViewHolde(Context context, RecyclerView.ViewHolder viewHolder) {
|
||||
void bindViewHolder(Context context, RecyclerView.ViewHolder viewHolder) {
|
||||
PreferenceHolder pvh = (PreferenceHolder) viewHolder;
|
||||
pvh.title.setText(mTitle);
|
||||
pvh.summary.setText(mSummary);
|
||||
@@ -95,11 +106,27 @@ public class Preference extends PreferenceBase {
|
||||
mTitle = title;
|
||||
}
|
||||
|
||||
public RecyclerView.ViewHolder getViewHolder() {
|
||||
if (mViewHolderGetter != null) {
|
||||
return mViewHolderGetter.getViewHolder(mPosition);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setOnClickListener(OnClickListener listener) {
|
||||
mOnClickListener = listener;
|
||||
}
|
||||
|
||||
public void setViewHolderGetter(ViewHolderGetter viewHolderGetter) {
|
||||
mViewHolderGetter = viewHolderGetter;
|
||||
}
|
||||
|
||||
public interface OnClickListener {
|
||||
boolean onClick();
|
||||
}
|
||||
|
||||
public interface ViewHolderGetter {
|
||||
RecyclerView.ViewHolder getViewHolder(int position);
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,7 @@ abstract class PreferenceBase {
|
||||
|
||||
abstract int getItemViewType();
|
||||
|
||||
abstract void bindViewHolde(Context context, RecyclerView.ViewHolder viewHolder);
|
||||
abstract void bindViewHolder(Context context, RecyclerView.ViewHolder viewHolder);
|
||||
|
||||
/**
|
||||
* @param viewHolder the view holder of the view
|
||||
|
||||
@@ -41,7 +41,7 @@ public class PreferenceCategory extends PreferenceBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
void bindViewHolde(Context context, RecyclerView.ViewHolder viewHolder) {
|
||||
void bindViewHolder(Context context, RecyclerView.ViewHolder viewHolder) {
|
||||
PreferenceCategoryHolder pvh = (PreferenceCategoryHolder) viewHolder;
|
||||
pvh.title.setText(mTitle);
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ public class PreferenceScene extends AppbarScene {
|
||||
private EasyRecyclerView mRecyclerView;
|
||||
|
||||
private PreferenceAdapter mAdapter;
|
||||
private PreferenceViewHolderGetter mPreferenceViewHolderGetter = new PreferenceViewHolderGetter();
|
||||
|
||||
private List<PreferenceSet> mPreferenceSetList = new ArrayList<>();
|
||||
private List<PreferenceBase> mPreferenceBaseList = new ArrayList<>();
|
||||
@@ -71,19 +72,25 @@ public class PreferenceScene extends AppbarScene {
|
||||
preferenceSetList.clear();
|
||||
Collections.addAll(preferenceSetList, preferenceSets);
|
||||
// Update mPreferenceBasesList
|
||||
int position = 0;
|
||||
List<PreferenceBase> preferenceBaseList = mPreferenceBaseList;
|
||||
preferenceBaseList.clear();
|
||||
for (PreferenceSet ps : preferenceSets) {
|
||||
PreferenceCategory pc = ps.getPreferenceCategory();
|
||||
if (pc != null) {
|
||||
preferenceBaseList.add(pc);
|
||||
position++;
|
||||
}
|
||||
int pdCount = ps.getPreferenceCount();
|
||||
for (int i = 0; i < pdCount; i++) {
|
||||
if (i != 0) {
|
||||
preferenceBaseList.add(PREFERENCE_DIVIDER);
|
||||
position++;
|
||||
}
|
||||
preferenceBaseList.add(ps.getPreferenceData(i));
|
||||
Preference p = ps.getPreferenceData(i);
|
||||
p.setPosition(position);
|
||||
preferenceBaseList.add(p);
|
||||
position++;
|
||||
}
|
||||
}
|
||||
mAdapter.notifyDataSetChanged();
|
||||
@@ -98,7 +105,7 @@ public class PreferenceScene extends AppbarScene {
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
|
||||
mPreferenceBaseList.get(position).bindViewHolde(getStageActivity(), holder);
|
||||
mPreferenceBaseList.get(position).bindViewHolder(getStageActivity(), holder);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -133,4 +140,12 @@ public class PreferenceScene extends AppbarScene {
|
||||
!(pb instanceof PreferenceDivider);
|
||||
}
|
||||
}
|
||||
|
||||
private class PreferenceViewHolderGetter implements Preference.ViewHolderGetter {
|
||||
|
||||
@Override
|
||||
public RecyclerView.ViewHolder getViewHolder(int position) {
|
||||
return mRecyclerView.findViewHolderForAdapterPosition(position);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user