From 0ca0b2a9bc9ea6d5af8b90da7fd14d2ce0cc6bc4 Mon Sep 17 00:00:00 2001 From: Yuku on yuku8 Date: Wed, 24 Aug 2016 20:50:36 +0800 Subject: [PATCH 01/15] Fix material-dialogs item adapter does not dismiss the dialog --- .../java/yuku/alkitab/base/IsiActivity.java | 24 +++++------- .../base/dialog/TypeBookmarkDialog.java | 37 +++++++------------ .../widget/MaterialDialogAdapterHelper.java | 30 +++++++++++++++ .../base/widget/TextAppearancePanel.java | 8 ++-- 4 files changed, 57 insertions(+), 42 deletions(-) create mode 100644 Alkitab/src/main/java/yuku/alkitab/base/widget/MaterialDialogAdapterHelper.java diff --git a/Alkitab/src/main/java/yuku/alkitab/base/IsiActivity.java b/Alkitab/src/main/java/yuku/alkitab/base/IsiActivity.java index a06580c87..0558df793 100644 --- a/Alkitab/src/main/java/yuku/alkitab/base/IsiActivity.java +++ b/Alkitab/src/main/java/yuku/alkitab/base/IsiActivity.java @@ -94,6 +94,7 @@ import yuku.alkitab.base.widget.GotoButton; import yuku.alkitab.base.widget.LabeledSplitHandleButton; import yuku.alkitab.base.widget.LeftDrawer; +import yuku.alkitab.base.widget.MaterialDialogAdapterHelper; import yuku.alkitab.base.widget.ScrollbarSetter; import yuku.alkitab.base.widget.SingleViewVerseAdapter; import yuku.alkitab.base.widget.SplitHandleButton; @@ -1164,10 +1165,7 @@ void bGoto_click() { void bGoto_longClick() { App.trackEvent("nav_goto_button_long_click"); if (history.getSize() > 0) { - new MaterialDialog.Builder(this) - .adapter(historyAdapter, null) - .autoDismiss(true) - .show(); + MaterialDialogAdapterHelper.show(new MaterialDialog.Builder(this), new HistoryAdapter()); } else { Snackbar.make(root, R.string.recentverses_not_available, Snackbar.LENGTH_SHORT).show(); } @@ -1183,7 +1181,7 @@ public HistoryEntryHolder(final View itemView) { } } - private RecyclerView.Adapter historyAdapter = new RecyclerView.Adapter() { + class HistoryAdapter extends MaterialDialogAdapterHelper.Adapter { private final java.text.DateFormat timeFormat = DateFormat.getTimeFormat(App.context); private final java.text.DateFormat mediumDateFormat = DateFormat.getMediumDateFormat(App.context); @@ -1222,6 +1220,8 @@ public void onBindViewHolder(final RecyclerView.ViewHolder _holder_, final int p } holder.itemView.setOnClickListener(v -> { + dismissDialog(); + final int which = holder.getAdapterPosition(); final int ari = history.getAri(which); @@ -1813,10 +1813,7 @@ public void onBookmarkAttributeClick(final Version version, final String version if (markers.size() == 1) { openBookmarkDialog(markers.get(0)._id); } else { - final MaterialDialog dialog = new MaterialDialog.Builder(IsiActivity.this) - .title(R.string.edit_bookmark) - .adapter(new MultipleMarkerSelectAdapter(version, versionId, markers, Marker.Kind.bookmark), null) - .show(); + MaterialDialogAdapterHelper.show(new MaterialDialog.Builder(IsiActivity.this).title(R.string.edit_bookmark), new MultipleMarkerSelectAdapter(version, versionId, markers, Marker.Kind.bookmark)); } } @@ -1830,10 +1827,7 @@ public void onNoteAttributeClick(final Version version, final String versionId, if (markers.size() == 1) { openNoteDialog(markers.get(0)._id); } else { - final MaterialDialog dialog = new MaterialDialog.Builder(IsiActivity.this) - .title(R.string.edit_note) - .adapter(new MultipleMarkerSelectAdapter(version, versionId, markers, Marker.Kind.note), null) - .show(); + MaterialDialogAdapterHelper.show(new MaterialDialog.Builder(IsiActivity.this).title(R.string.edit_note), new MultipleMarkerSelectAdapter(version, versionId, markers, Marker.Kind.note)); } } @@ -1853,7 +1847,7 @@ public MarkerHolder(final View itemView) { } } - class MultipleMarkerSelectAdapter extends RecyclerView.Adapter { + class MultipleMarkerSelectAdapter extends MaterialDialogAdapterHelper.Adapter { final Version version; final float textSizeMult; final List markers; @@ -1923,6 +1917,8 @@ public void onBindViewHolder(final RecyclerView.ViewHolder _holder_, final int p } holder.itemView.setOnClickListener(v -> { + dismissDialog(); + final int which = holder.getAdapterPosition(); final Marker marker = markers.get(which); if (kind == Marker.Kind.bookmark) { diff --git a/Alkitab/src/main/java/yuku/alkitab/base/dialog/TypeBookmarkDialog.java b/Alkitab/src/main/java/yuku/alkitab/base/dialog/TypeBookmarkDialog.java index 1f683015b..dca13afd4 100644 --- a/Alkitab/src/main/java/yuku/alkitab/base/dialog/TypeBookmarkDialog.java +++ b/Alkitab/src/main/java/yuku/alkitab/base/dialog/TypeBookmarkDialog.java @@ -15,6 +15,7 @@ import yuku.afw.V; import yuku.alkitab.base.S; import yuku.alkitab.base.U; +import yuku.alkitab.base.widget.MaterialDialogAdapterHelper; import yuku.alkitab.debug.R; import yuku.alkitab.model.Label; import yuku.alkitab.model.Marker; @@ -34,7 +35,6 @@ public interface Listener { final Context context; final Dialog dialog; FlowLayout panelLabels; - LabelAdapter adapter; EditText tCaption; Marker marker; @@ -81,16 +81,7 @@ private TypeBookmarkDialog(final Context context, final Marker marker, String re tCaption = V.get(dialogView, R.id.tCaption); final Button bAddLabel = V.get(dialogView, R.id.bAddLabel); - bAddLabel.setOnClickListener(v -> { - adapter = new LabelAdapter(); - - final MaterialDialog dialog = new MaterialDialog.Builder(context) - .title(R.string.add_label_title) - .adapter(adapter, null) - .build(); - - dialog.show(); - }); + bAddLabel.setOnClickListener(v -> MaterialDialogAdapterHelper.show(new MaterialDialog.Builder(context).title(R.string.add_label_title), new LabelAdapter())); if (marker != null) { labels = new TreeSet<>(); @@ -185,13 +176,13 @@ void setLabelsText() { int pos = 1; for (Label label: labels) { - panelLabels.addView(getLabelView(label), pos++); + panelLabels.addView(getLabelView(label, panelLabels), pos++); } } - private View getLabelView(Label label) { - TextView res = (TextView) LayoutInflater.from(context).inflate(R.layout.label_x, null); - res.setLayoutParams(panelLabels.generateDefaultLayoutParams()); + private View getLabelView(Label label, final ViewGroup parent) { + TextView res = (TextView) LayoutInflater.from(context).inflate(R.layout.label_x, parent, false); + res.setLayoutParams(this.panelLabels.generateDefaultLayoutParams()); res.setText(label.title); res.setTag(R.id.TAG_label, label); res.setOnClickListener(label_click); @@ -214,16 +205,12 @@ public LabelHolder(final View itemView) { } } - class LabelAdapter extends RecyclerView.Adapter { - private List