Improve Preference

This commit is contained in:
seven332 committed 2015-05-29 11:33:15 +08:00
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);
}
}
}