From 3f11ad9f5361330d675503f97b9bae0d8396f39a Mon Sep 17 00:00:00 2001
From: seven332
Date: Wed, 23 Mar 2016 17:26:05 +0800
Subject: [PATCH] Improve favorite info dialog
---
.../client/parser/FavoritesParser.java | 21 +---
.../ehviewer/ui/scene/FavoritesScene.java | 104 +++++++++++++-----
.../main/res/layout/dialog_favorite_info.xml | 24 ++++
.../res/layout/item_favorite_info_data.xml | 42 +++++++
.../res/layout/item_favorite_info_header.xml | 42 +++++++
app/src/main/res/values-zh-rCN/strings.xml | 1 +
app/src/main/res/values-zh-rHK/strings.xml | 1 +
app/src/main/res/values-zh-rTW/strings.xml | 1 +
app/src/main/res/values/strings.xml | 1 +
yorozuya | 2 +-
10 files changed, 193 insertions(+), 46 deletions(-)
create mode 100644 app/src/main/res/layout/dialog_favorite_info.xml
create mode 100644 app/src/main/res/layout/item_favorite_info_data.xml
create mode 100644 app/src/main/res/layout/item_favorite_info_header.xml
diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.java
index 5d8c769b8..4d3f024a7 100644
--- a/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.java
+++ b/app/src/main/java/com/hippo/ehviewer/client/parser/FavoritesParser.java
@@ -30,35 +30,27 @@ import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
public class FavoritesParser {
- private static final Pattern LIMIT_PATTERN = Pattern.compile("Currently Used Favorite Slots: ([\\d,]+) / ([\\d,]+)");
-
public static class Result {
public String[] catArray; // Size 10
public int[] countArray; // Size 10
- public int current; // -1 for error
- public int limit; // -1 for error
public int pages;
public List galleryInfoList;
}
- @SuppressWarnings("ConstantConditions")
public static Result parse(String body) throws Exception {
if (body.contains("This page requires you to log on.
")) {
throw new EhException(GetText.getString(R.string.need_sign_in));
}
String[] catArray = new String[10];
int[] countArray = new int[10];
- int current;
- int limit;
try {
Document d = Jsoup.parse(body);
Element ido = JsoupUtils.getElementByClass(d, "ido");
+ //noinspection ConstantConditions
Elements fps = ido.getElementsByClass("fp");
// Last one is "fp fps"
AssertUtils.assertEqualsEx(11, fps.size());
@@ -68,15 +60,6 @@ public class FavoritesParser {
countArray[i] = ParserUtils.parseInt(fp.child(0).text());
catArray[i] = ParserUtils.trim(fp.child(2).text());
}
-
- Matcher m = LIMIT_PATTERN.matcher(body);
- if (m.find()) {
- current = ParserUtils.parseInt(m.group(1));
- limit = ParserUtils.parseInt(m.group(2));
- } else {
- current = -1;
- limit = -1;
- }
} catch (Exception e) {
e.printStackTrace();
throw new ParseException("Parse favorites error", body);
@@ -87,8 +70,6 @@ public class FavoritesParser {
Result re = new Result();
re.catArray = catArray;
re.countArray = countArray;
- re.current = current;
- re.limit = limit;
re.pages = result.pages;
re.galleryInfoList = result.galleryInfoList;
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java
index 13b7f11bd..bd177150f 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java
@@ -16,6 +16,7 @@
package com.hippo.ehviewer.ui.scene;
+import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
@@ -28,6 +29,7 @@ import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AlertDialog;
+import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.text.Spannable;
@@ -44,6 +46,7 @@ import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
+import android.widget.TextView;
import com.github.amlcurran.showcaseview.ShowcaseView;
import com.github.amlcurran.showcaseview.SimpleShowcaseEventListener;
@@ -52,6 +55,7 @@ import com.hippo.annotation.Implemented;
import com.hippo.drawable.DrawerArrowDrawable;
import com.hippo.easyrecyclerview.EasyRecyclerView;
import com.hippo.easyrecyclerview.FastScroller;
+import com.hippo.easyrecyclerview.LinearDividerItemDecoration;
import com.hippo.ehviewer.EhApplication;
import com.hippo.ehviewer.EhDB;
import com.hippo.ehviewer.R;
@@ -77,7 +81,9 @@ import com.hippo.widget.FabLayout;
import com.hippo.widget.SearchBarMover;
import com.hippo.widget.refreshlayout.RefreshLayout;
import com.hippo.yorozuya.AssertUtils;
+import com.hippo.yorozuya.LayoutUtils;
import com.hippo.yorozuya.ObjectUtils;
+import com.hippo.yorozuya.ResourcesUtils;
import com.hippo.yorozuya.SimpleHandler;
import com.hippo.yorozuya.ViewUtils;
@@ -85,7 +91,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-// TODO Bug for FavoritesScene and GalleryListScene, if list view of SearchBar expand first, RecyclerView padding top will be wrong
// TODO Get favorite, modify favorite, add favorite, what a mess!
public class FavoritesScene extends BaseScene implements
EasyRecyclerView.OnItemClickListener, EasyRecyclerView.OnItemLongClickListener,
@@ -98,8 +103,6 @@ public class FavoritesScene extends BaseScene implements
private static final String KEY_SEARCH_MODE = "search_mode";
private static final String KEY_HAS_FIRST_REFRESH = "has_first_refresh";
private static final String KEY_FAV_COUNT_ARRAY = "fav_count_array";
- private static final String KEY_ALL_COUNT = "all_count";
- private static final String KEY_ALL_LIMIT = "all_limit";
@Nullable
@ViewLifeCircle
@@ -146,8 +149,6 @@ public class FavoritesScene extends BaseScene implements
@Nullable
private int[] mFavCountArray;
- private int mAllCount = -1;
- private int mAllLimit = -1;
private boolean mHasFirstRefresh;
private boolean mSearchMode;
@@ -210,8 +211,6 @@ public class FavoritesScene extends BaseScene implements
mSearchMode = savedInstanceState.getBoolean(KEY_SEARCH_MODE);
mHasFirstRefresh = savedInstanceState.getBoolean(KEY_HAS_FIRST_REFRESH);
mFavCountArray = savedInstanceState.getIntArray(KEY_FAV_COUNT_ARRAY);
- mAllCount = savedInstanceState.getInt(KEY_ALL_COUNT);
- mAllLimit = savedInstanceState.getInt(KEY_ALL_LIMIT);
}
@Override
@@ -228,8 +227,6 @@ public class FavoritesScene extends BaseScene implements
outState.putParcelable(KEY_URL_BUILDER, mUrlBuilder);
outState.putBoolean(KEY_SEARCH_MODE, mSearchMode);
outState.putIntArray(KEY_FAV_COUNT_ARRAY, mFavCountArray);
- outState.putInt(KEY_ALL_COUNT, mAllCount);
- outState.putInt(KEY_ALL_LIMIT, mAllLimit);
}
@Override
@@ -420,22 +417,85 @@ public class FavoritesScene extends BaseScene implements
mOldKeyword = null;
}
+ private class InfoHolder extends RecyclerView.ViewHolder {
+
+ private final TextView key;
+ private final TextView value;
+
+ public InfoHolder(View itemView) {
+ super(itemView);
+ key = (TextView) ViewUtils.$$(itemView, R.id.key);
+ value = (TextView) ViewUtils.$$(itemView, R.id.value);
+ }
+ }
+
+ private class InfoAdapter extends RecyclerView.Adapter {
+
+ private static final int TYPE_HEADER = 0;
+ private static final int TYPE_DATA = 1;
+
+ private final LayoutInflater mInflater;
+
+ public InfoAdapter(LayoutInflater inflater) {
+ mInflater = inflater;
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ return 0 == position ? TYPE_HEADER : TYPE_DATA;
+ }
+
+ @Override
+ public InfoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ return new InfoHolder(mInflater.inflate(TYPE_HEADER == viewType ?
+ R.layout.item_favorite_info_header : R.layout.item_favorite_info_data, parent, false));
+ }
+
+ @Override
+ @SuppressLint("SetTextI18n")
+ public void onBindViewHolder(InfoHolder holder, int position) {
+ if (0 == position) {
+ holder.key.setText(R.string.collections);
+ holder.value.setText(R.string.count);
+ holder.itemView.setEnabled(false);
+ } else {
+ if (null == mFavCatArray || null == mFavCountArray ||
+ mFavCatArray.length < position || mFavCountArray.length < position) {
+ return;
+ }
+ holder.key.setText(mFavCatArray[position - 1]);
+ holder.value.setText(Integer.toString(mFavCountArray[position - 1]));
+ holder.itemView.setEnabled(true);
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return 11;
+ }
+ }
+
+ @SuppressLint("InflateParams")
private void showFavoritesInfoDialog() {
Context context = getContext2();
if (null == context || null == mFavCatArray || null == mFavCountArray) {
return;
}
- StringBuilder sb = new StringBuilder();
- sb.append(mAllCount).append("/").append(mAllLimit).append("\n");
- for (int i = 0, n = 10; i < n; i++) {
- sb.append(mFavCatArray[i]).append(": ").append(mFavCountArray[i]).append("\n");
- }
-
- new AlertDialog.Builder(context)
- .setTitle(R.string.favorites_info)
- .setMessage(sb.toString())
- .show();
+ AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ context = builder.getContext();
+ final LayoutInflater inflater = LayoutInflater.from(context);
+ EasyRecyclerView rv = (EasyRecyclerView) inflater.inflate(R.layout.dialog_favorite_info, null);
+ rv.setAdapter(new InfoAdapter(inflater));
+ rv.setLayoutManager(new LinearLayoutManager(context));
+ LinearDividerItemDecoration decoration = new LinearDividerItemDecoration(
+ LinearDividerItemDecoration.VERTICAL, context.getResources().getColor(R.color.divider),
+ LayoutUtils.dp2pix(context, 1));
+ decoration.setPadding(ResourcesUtils.getAttrDimensionPixelOffset(context, R.attr.dialogPreferredPadding));
+ rv.addItemDecoration(decoration);
+ rv.setSelector(RippleSalon.generateRippleDrawable(false));
+ rv.setClipToPadding(false);
+ builder.setView(rv).show();
}
@Override
@@ -823,12 +883,6 @@ public class FavoritesScene extends BaseScene implements
}
mFavCountArray = result.countArray;
- if (result.current != -1) {
- mAllCount = result.current;
- }
- if (result.limit != -1) {
- mAllLimit = result.limit;
- }
updateSearchBar();
mHelper.setPages(taskId, result.pages);
diff --git a/app/src/main/res/layout/dialog_favorite_info.xml b/app/src/main/res/layout/dialog_favorite_info.xml
new file mode 100644
index 000000000..d841fa7cc
--- /dev/null
+++ b/app/src/main/res/layout/dialog_favorite_info.xml
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/app/src/main/res/layout/item_favorite_info_data.xml b/app/src/main/res/layout/item_favorite_info_data.xml
new file mode 100644
index 000000000..54db768c8
--- /dev/null
+++ b/app/src/main/res/layout/item_favorite_info_data.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_favorite_info_header.xml b/app/src/main/res/layout/item_favorite_info_header.xml
new file mode 100644
index 000000000..76a34584f
--- /dev/null
+++ b/app/src/main/res/layout/item_favorite_info_header.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 44020a1e2..18f19ac9d 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -476,6 +476,7 @@
让我选择
收藏信息
收藏夹
+ 数量
需要登录
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index 5bd5a0517..3344c612d 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -476,6 +476,7 @@
讓我選擇
收藏信息
收藏夾
+ 數量
需要登錄
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 118ce8429..612683c39 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -476,6 +476,7 @@
讓我選擇
收藏資訊
收藏夾
+ 數量
需要登入
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6ae10d39e..e24e8e594 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -523,6 +523,7 @@
Let me select
Favorites info
Collections
+ Count
Signing in is required
diff --git a/yorozuya b/yorozuya
index e9d22840d..467ca2a2d 160000
--- a/yorozuya
+++ b/yorozuya
@@ -1 +1 @@
-Subproject commit e9d22840d0bd36b46fe59383d482aa400f551db4
+Subproject commit 467ca2a2dd0965ee5072e4f3ae1845369dd122ac