From 6c7b33e86f1a3f138fa8646c85597dcb428745c0 Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 14 Nov 2017 21:35:02 +0800 Subject: [PATCH 001/630] Add community links --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f43bc2e41..2f57466da 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![Telegram](https://img.shields.io/badge/chat-Telegram-blue.svg)](https://t.me/ehviewer) [![G+](https://img.shields.io/badge/chat-G%2B-red.svg)](https://plus.google.com/communities/103823982034655188459) + # EhViewer ![Icon](art/launcher_icon-web.png) From 877c354f844eb9c2c3bf516fe122f320cece89ef Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 14 Nov 2017 21:42:58 +0800 Subject: [PATCH 002/630] Add the Telegram link --- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/about_settings.xml | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fbac2644b..6b28a9911 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -527,6 +527,7 @@ About Author Hippo <ehviewersu$gmail.com> + Telegram Google+ Community Website Source diff --git a/app/src/main/res/xml/about_settings.xml b/app/src/main/res/xml/about_settings.xml index 7b36eac8a..fd17ade35 100644 --- a/app/src/main/res/xml/about_settings.xml +++ b/app/src/main/res/xml/about_settings.xml @@ -23,6 +23,11 @@ android:key="author" android:title="@string/settings_about_author"/> + + Date: Sun, 17 Dec 2017 21:39:54 +0900 Subject: [PATCH 003/630] Add enable/disable feature on Filter --- .../main/java/com/hippo/ehviewer/EhDB.java | 18 +++++++++++++ .../com/hippo/ehviewer/client/EhFilter.java | 14 ++++++++--- .../com/hippo/ehviewer/ui/FilterActivity.java | 25 +++++++++++++++++-- .../ehviewer/daogenerator/EhDaoGenerator.java | 4 ++- 4 files changed, 54 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/EhDB.java b/app/src/main/java/com/hippo/ehviewer/EhDB.java index 421d0e2ef..f9ea510d2 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhDB.java +++ b/app/src/main/java/com/hippo/ehviewer/EhDB.java @@ -93,6 +93,19 @@ private static void upgradeDB(SQLiteDatabase db, int oldVersion) { switch (oldVersion) { case 1: // 1 to 2 FilterDao.createTable(db, true); + break; + case 2: // add ENABLE column to table FILTER + db.execSQL("CREATE TABLE " + "\"FILTER2\" (" + + "\"_id\" INTEGER PRIMARY KEY ," + + "\"MODE\" INTEGER NOT NULL ," + + "\"TEXT\" TEXT," + + "\"ENABLE\" INTEGER);"); + db.execSQL("INSERT INTO \"FILTER2\" (" + + "_id, MODE, TEXT, ENABLE)" + + "SELECT _id, MODE, TEXT, 1 FROM FILTER;"); + db.execSQL("DROP TABLE FILTER"); + db.execSQL("ALTER TABLE FILTER2 RENAME TO FILTER"); + break; } } @@ -606,6 +619,11 @@ public static synchronized void deleteFilter(Filter filter) { sDaoSession.getFilterDao().delete(filter); } + public static synchronized void triggerFilter(Filter filter) { + filter.setEnable(!filter.enable); + sDaoSession.getFilterDao().update(filter); + } + public static synchronized boolean exportDB(Context context, File file) { File dbFile = context.getDatabasePath("eh.db"); if (null == dbFile || !dbFile.isFile()) { diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java b/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java index 62e19e543..def6b062b 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhFilter.java @@ -92,6 +92,8 @@ public List getTagNamespaceFilterList() { } public synchronized void addFilter(Filter filter) { + // enable filter by default before it is added to database + filter.enable = true; EhDB.addFilter(filter); switch (filter.mode) { @@ -116,6 +118,10 @@ public synchronized void addFilter(Filter filter) { } } + public synchronized void triggerFilter(Filter filter) { + EhDB.triggerFilter(filter); + } + public synchronized void deleteFilter(Filter filter) { EhDB.deleteFilter(filter); @@ -153,7 +159,7 @@ public synchronized boolean filterTitle(GalleryInfo info) { if (null != title && filters.size() > 0) { title = title.toLowerCase(); for (int i = 0, n = filters.size(); i < n; i++) { - if (title.contains(filters.get(i).text)) { + if (filters.get(i).enable && title.contains(filters.get(i).text)) { return false; } } @@ -172,7 +178,7 @@ public synchronized boolean filterUploader(GalleryInfo info) { List filters = mUploaderFilterList; if (null != uploader && filters.size() > 0) { for (int i = 0, n = filters.size(); i < n; i++) { - if (uploader.equals(filters.get(i).text)) { + if (filters.get(i).enable && uploader.equals(filters.get(i).text)) { return false; } } @@ -229,7 +235,7 @@ public synchronized boolean filterTag(GalleryInfo info) { if (null != tags && filters.size() > 0) { for (String tag: tags) { for (int i = 0, n = filters.size(); i < n; i++) { - if (matchTag(tag, filters.get(i).text)) { + if (filters.get(i).enable && matchTag(tag, filters.get(i).text)) { return false; } } @@ -264,7 +270,7 @@ public synchronized boolean filterTagNamespace(GalleryInfo info) { if (null != tags && filters.size() > 0) { for (String tag: tags) { for (int i = 0, n = filters.size(); i < n; i++) { - if (matchTagNamespace(tag, filters.get(i).text)) { + if (filters.get(i).enable && matchTagNamespace(tag, filters.get(i).text)) { return false; } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/FilterActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/FilterActivity.java index 458ddfd17..1e609c95c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/FilterActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/FilterActivity.java @@ -17,6 +17,7 @@ package com.hippo.ehviewer.ui; import android.content.DialogInterface; +import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.Nullable; @@ -247,6 +248,8 @@ public FilterHolder(View itemView) { if (null != icon) { icon.setOnClickListener(this); } + // click on the filter text to enable/disable it + text.setOnClickListener(this); } @Override @@ -257,7 +260,15 @@ public void onClick(View v) { } Filter filter = mFilterList.get(position); if (FilterList.MODE_HEADER != filter.mode) { - showDeleteFilterDialog(filter); + if (v instanceof ImageView) { + showDeleteFilterDialog(filter); + } else if (v instanceof TextView) { + mFilterList.trigger(filter); + + //for updating delete line on filter text + mAdapter.notifyDataSetChanged(); + } + } } } @@ -314,12 +325,18 @@ public void onBindViewHolder(FilterHolder holder, int position) { holder.text.setText(filter.text); } else { holder.text.setText(filter.text); + // add a delete line if the filter is disabled + if (!filter.enable) { + holder.text.setPaintFlags(holder.text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); + } else { + holder.text.setPaintFlags(holder.text.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG)); + } } } @Override public int getItemCount() { - return null != mFilterList ? mFilterList.size(): 0; + return null != mFilterList ? mFilterList.size() : 0; } } @@ -450,5 +467,9 @@ public void add(Filter filter) { public void delete(Filter filter) { mEhFilter.deleteFilter(filter); } + + public void trigger(Filter filter) { + mEhFilter.triggerFilter(filter); + } } } diff --git a/daogenerator/src/main/java/com/hippo/ehviewer/daogenerator/EhDaoGenerator.java b/daogenerator/src/main/java/com/hippo/ehviewer/daogenerator/EhDaoGenerator.java index a7e155608..35a8245b5 100644 --- a/daogenerator/src/main/java/com/hippo/ehviewer/daogenerator/EhDaoGenerator.java +++ b/daogenerator/src/main/java/com/hippo/ehviewer/daogenerator/EhDaoGenerator.java @@ -32,7 +32,7 @@ public class EhDaoGenerator { private static final String OUT_DIR = "../app/src/main/java-gen"; private static final String DELETE_DIR = "../app/src/main/java-gen/com/hippo/ehviewer/dao"; - private static final int VERSION = 2; + private static final int VERSION = 3; private static final String DOWNLOAD_INFO_PATH = "../app/src/main/java-gen/com/hippo/ehviewer/dao/DownloadInfo.java"; private static final String HISTORY_INFO_PATH = "../app/src/main/java-gen/com/hippo/ehviewer/dao/HistoryInfo.java"; @@ -190,6 +190,7 @@ private static void addFilter(Schema schema) { entity.addIdProperty(); entity.addIntProperty("mode").notNull(); entity.addStringProperty("text"); + entity.addBooleanProperty("enable"); } private static void adjustDownloadInfo() throws Exception { @@ -496,6 +497,7 @@ private static void adjustFilter() throws Exception { // Set field public javaClass.getField("mode").setPublic(); javaClass.getField("text").setPublic(); + javaClass.getField("enable").setPublic(); // Add equals method javaClass.addImport("com.hippo.yorozuya.ObjectUtils"); javaClass.addMethod("\t@Override\n" + From 34632342fc93344741a4720b37a2400ea1ea8784 Mon Sep 17 00:00:00 2001 From: LackOfDream Date: Tue, 19 Dec 2017 01:44:21 +0900 Subject: [PATCH 004/630] Notify change of single item instead of the whole data set, disable item animation --- app/src/main/java/com/hippo/ehviewer/ui/FilterActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/FilterActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/FilterActivity.java index 1e609c95c..c3d347e85 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/FilterActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/FilterActivity.java @@ -78,6 +78,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { mRecyclerView.setClipChildren(false); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.hasFixedSize(); + mRecyclerView.setItemAnimator(null); updateView(false); } @@ -266,7 +267,7 @@ public void onClick(View v) { mFilterList.trigger(filter); //for updating delete line on filter text - mAdapter.notifyDataSetChanged(); + mAdapter.notifyItemChanged(getAdapterPosition()); } } From b48b38e8c46f2953991cc2e6163bbe260dea1753 Mon Sep 17 00:00:00 2001 From: LackOfDream Date: Sun, 24 Dec 2017 06:49:29 +0900 Subject: [PATCH 005/630] remove redundant trailing whitespace of tags when parsing gallery detail --- .../com/hippo/ehviewer/client/parser/GalleryDetailParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java index 93ff9eb14..a21fe862c 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java @@ -303,7 +303,7 @@ private static GalleryTagGroup parseTagGroup(Element element) { // Sometimes parody tag is followed with '|' and english translate, just remove them int index = tag.indexOf('|'); if (index >= 0) { - tag = tag.substring(0, index); + tag = tag.substring(0, index).trim(); } group.addTag(tag); } From 185ab00431c48f2e6f162a28664b7b9dad5da014 Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 28 Dec 2017 22:00:51 +0800 Subject: [PATCH 006/630] 1.0.25 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index bcc651249..09c8a1016 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.hippo.ehviewer" minSdkVersion 14 targetSdkVersion 25 - versionCode 77 - versionName "1.0.24" + versionCode 78 + versionName "1.0.25" vectorDrawables.useSupportLibrary = true resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", "es" From fb7b9b28a7a32521898f6e44597c7cf861ff396d Mon Sep 17 00:00:00 2001 From: gui Date: Wed, 15 Nov 2017 17:18:51 +0800 Subject: [PATCH 007/630] =?UTF-8?q?=E9=87=9D=E5=B0=8D=E5=8F=B0=E7=81=A3?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E8=80=85=E6=85=A3=E7=94=A8=E8=AA=9E(?= =?UTF-8?q?=E6=88=96=E5=B7=B2=E6=9C=89=E6=97=A2=E6=9C=89=E7=94=A8=E6=B3=95?= =?UTF-8?q?)=E7=9A=84=E6=96=87=E5=AD=97=E5=AD=97=E4=B8=B2=E9=80=B2?= =?UTF-8?q?=E8=A1=8C=E8=AA=BF=E6=95=B4=20=E4=BB=A5=E8=BF=8E=E5=90=88?= =?UTF-8?q?=E5=8F=B0=E7=81=A3=E4=BD=BF=E7=94=A8=E8=80=85=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=BF=92=E6=85=A3=20localization=20for=20values-zh-rTW=20=20in?= =?UTF-8?q?=20order=20to=20fit=20Taiwanese=20user's=20habit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-zh-rTW/strings.xml | 508 ++++++++++----------- 1 file changed, 254 insertions(+), 254 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 08d6c25e6..d77a93c45 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -19,7 +19,7 @@ EhViewer - 主頁 + 首頁 熱門 收藏 歷史 @@ -36,76 +36,76 @@ 登入 註冊 - 通過網頁登入 - 通過 Cookie 登入 + 透過網頁登入 + 透過 Cookie 登入 輸入暱稱 暱稱 - 暱稱為空 + 暱稱是空的 請先登入 Little Hippo - Cookie 是儲存在瀏覽器裡的一小塊資料。如果您不清楚 Cookie 什麼或者怎麼獲取 Cookie,最好搜尋一下。\n\n請輸入特定的 Cookie 來登入。 - 文字為空 + Cookie 是儲存在瀏覽器裡的一小塊資料。如果您不清楚 Cookie 什麼或者如何取得 Cookie,最好去查一下。\n\n請輸入特定的 Cookie 來登入。 + 文字是空的 警告 - 看起來您輸入的 Cookie 是錯誤的,最好檢查一下。 + 看來您輸入的 Cookie 是錯誤的,最好再檢查一下。 好的 - 我沒輸錯 - 找到舊版 Cookie + 我覺得我沒打錯 + 找到舊版 Cookie了! - 似乎下載路徑不可用。請到重新設定下載路徑。 + 下載路徑似乎無法使用。請至設定重新設定下載路徑。 - 正在使用行動網路 + 正在使用行動數據 - 錯誤的狀態碼:%d - 超時 - 未知主機 - 太多重定向 + 錯誤狀態碼:%d + 逾時 + 未知的主機 + 過多重新導向 網路錯誤 奇怪的錯誤 - 找不到相應的應用 + 找不到相對應的應用程式 無法解析連結 非資料夾路徑 無 provider 解碼失敗 - 未找到 + 沒能找到 - 無效 zip 檔案 + 不正確的 zip 檔案 讀取失敗 - 越界 + 超出範圍 寫入失敗 解析失敗 509 - 無效連結 - 獲取 pToken 錯誤 - 指定畫廊的關鍵字應該看起來像 “618395 0439fa3666” - 無法建立臨時檔案 + 不正確的連結 + 取得 pToken 時發生錯誤 + 指定的圖庫關鍵字應該看起來像 “618395 0439fa3666” + 無法建立暫存檔案 無法儲存圖片 - 非法數字 + 不正確的數字 - 本應用中內容來自網際網路,部分內容可能對您的生理及心理造成難以恢復的傷害。本應用作者不會對由本應用造成的任何後果負責。 - 使用者名稱不可為空 - 密碼不可為空 - 跳過登入 + 本應用程式中內容來自網際網路,部分內容可能對您的生理及心理造成難以恢復的傷害。本應用程式的作者不會對由其所造成的任何影響負責。 + 使用者名稱不能是空的 + 密碼不能是空的 + 略過登入 登入失敗 - 這可能是網站更新導致的,也有可能是發生了奇怪的事情。您可以選擇在登入按鈕下方通過網頁登入或者輸入 cookie,或者跳過登入。跳過登入可能導致無法正常使用應用。如果你已經在 0.6.x 版登入過了,請優先嚐試選擇“通過 Cookie 登入”。 - 再按一次退出 - 點選重試 - EhViewer 將申請裝置儲存空間訪問許可權以便下載畫廊。您願意授權嗎? - 好痛 - 您同意讓開發者收集您的裝置資訊與使用情況嗎?這將對開發有很大幫助。<br><br>資料統計服務由 Google Analytics 提供,其隱私政策可在 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> 檢視。<br><br>若您同意參與資料統計,您的裝置資訊與應用使用情況將會被記錄,其包括但不限於:Android API 版本、裝置型號、語言所在地、本應用版本號、會話時長、應用功能使用次數。開發者承諾以下資訊並不會被記錄:電話號碼、電子郵件地址、IMEI。<br><br>在您同意參與資料統計之前,您的資訊不會被記錄。<br><br>被記錄的資料會由 Google Analytics 進行分析,分析報表僅可被本應用開發者訪問。 + 這可能是網站更新造成的,也有可能是發生了奇怪的事情。您可以選擇在登入按鈕下方透過網頁登入或者輸入 cookie,也可以略過登入。略過登入可能導致無法正常使用應用程式。如果你已經在 0.6.x 版登入過了,請先試試“透過 Cookie 登入”。 + 再按一次離開 + 點擊重試 + EhViewer 將請求裝置外部儲存空間的存取許可以下載圖庫。您願意授權嗎? + 好難過 + 您同意讓開發者收集您的裝置資訊與使用方式嗎?這對開發有很大幫助。<br><br>資料統計服務由 Google Analytics 提供,其隱私政策可在 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> 檢視。<br><br>若您同意參與資料統計,您的裝置資訊與應用使用情況將會被記錄,其包括但不限於:Android API 版本、裝置型號、語言所在地、本應用版本號、會話時長、應用功能使用次數。開發者承諾以下資訊並不會被記錄:電話號碼、電子郵件地址、IMEI。<br><br>在您同意參與資料統計之前,您的資訊不會被記錄。<br><br>被記錄的資料會由 Google Analytics 進行分析,分析報表僅由此應用程式開發者存取。 知道了 接受 拒絕 傳送 - 上次應用崩潰了。你願意把錯誤日誌傳送給開發者以便以後得到更好的使用者體驗?(以電子郵件的形式傳送) + 上次程式當掉了。你願意把錯誤紀錄傳送給開發者讓未來的使用者體驗變得更好嗎?(以電子郵件傳送) - 你想選擇哪個畫廊站點? + 你想選擇哪個圖庫站台? e-hentai:對任何人開放\nexhentai:僅對登入使用者開放 - 請選擇一個站點 + 請選擇一個站台 更新 @@ -113,57 +113,57 @@ EhViewer 已是最新版本 - 搜尋 ExHentai - 搜尋 E-Hentai - 什麼都沒有找到 + 在 ExHentai 中搜尋 + 在 E-Hentai 搜尋 + 什麼都沒找到 搜尋 關鍵字搜尋 圖片搜尋 - 普通搜尋 - 高階選項 + 一般搜尋 + 進階選項 圖片搜尋 一般搜尋 指定上傳者 指定標籤 - 指定畫廊 - 啟用高階選項 + 指定圖庫 + 啟用進階選項 - 一般搜尋:就是搜尋。\n\n指定上傳者:列出該上傳者上傳的畫廊。其他選項會被忽略。\n\n指定標籤:列出含有該標籤的畫廊。其他選項會被忽略。\n\n指定畫廊:跳轉至該畫廊。關鍵字應為“gid token”。 + 一般搜尋:就是搜尋。\n\n指定上傳者:列出該上傳者上傳的圖庫。其他選項會被忽略。\n\n指定標籤:列出含有該標籤的圖庫。其他選項會被忽略。\n\n指定圖庫:直接前往圖庫。關鍵字應為“gid token”。 - 搜尋畫廊 - 搜尋畫廊標籤 - 搜尋畫廊描述 + 搜尋圖庫 + 搜尋圖庫的標籤 + 搜尋圖庫的描述 搜尋種子檔名 - 僅顯示有種子的畫廊 - 搜尋低願力標籤 - 搜尋差評標籤 - 顯示被刪除的畫廊 + 只顯示有種子的圖庫 + 搜尋標籤:低願力 + 搜尋標籤:被噓爆的 + 顯示已被移除的的圖庫 最低評分: 選擇圖片 - 使用相似搜尋 + 使用相似性搜尋 只搜尋封面 - 顯示被刪除的畫廊 + 顯示被刪除的圖庫 請先選擇圖片 收藏 快速搜尋 - 點選“+”來新增快速搜尋 + 點擊“+”以新增快速搜尋 新增快速搜尋 - 名稱為空 + 名稱是空的 刪除 刪除快速搜尋 - 刪除“%s”? - 這裡是快速搜尋 - 畫廊列表的狀態將被儲存為快速搜尋。如果你想儲存搜尋面板的狀態,請先執行搜尋。 - 讀我 - 無法新增圖片搜尋為快速搜尋 + 刪除“%s”嗎? + 快速搜尋會顯示在這裡 + 圖庫列表的狀態將被儲存為快速搜尋。如果你想儲存搜尋面板的狀態,請先進行搜尋。 + 讀我檔 + 無法將圖片搜尋加入快速搜尋 已存在相同的快速搜尋,名稱為“%s”。 - 已存在相同名稱 + 已經由重複的名稱了 第 %1$d 頁,共 %2$d 頁 @@ -174,10 +174,10 @@ 5 星 - 找不到畫廊 + 找不到圖庫 下載 閱讀 - 檢視更多資訊 + 更多資訊 %d 頁 @@ -187,114 +187,114 @@ 種子 (%d) 分享 評分 - 相似畫廊 - 搜尋封面 - 暫無標籤 - 暫無評論 - 已顯示所有評論 - 檢視更多評論 + 類似的圖庫 + 以封面搜尋 + 還沒有標籤 + 沒有留言 + 已顯示所有的留言了 + 更多留言 沒有預覽 - 已顯示所有預覽 - 檢視更多預覽 + 已經顯示所有預覽了 + 更多預覽 重新整理 - 在其他應用中開啟 + 在其他應用程式中開啟 評分成功 評分失敗 沒有種子 種子 已收藏 未收藏 - 新增收藏 - 記住收藏夾 - 已新增至收藏 - 移除收藏 - 新增收藏失敗 - 移除收藏失敗 - 新增上傳者過濾項“%s”? - 已新增過濾項 + 新增到收藏裡 + 記住常用收藏 + 已新增至收藏中 + 從收藏中移除 + 無法新增至收藏 + 無法從收藏中移除 + 把上傳者“%s”加入濾除列表? + 已經新增篩選條件 根本把持不住 - 好極了 + 太神啦 很棒 不錯 - 還行 - 一般般 + 還好 + 普通 不行 - 糟糕 - 瞎眼 + 超爛 + 快瞎了 快要窒息了 - 畫廊資訊 - 已複製到剪下板 - - + 圖庫資訊 + 已複製到剪貼簿 + 索引鍵 + 數值 Gid Token - 連結 + 網址 標題 日文標題 縮圖 分類 上傳者 上傳時間 - 父畫廊 - 可見性 + 上層圖庫 + 可見 語言 頁數 大小 收藏次數 收藏 - 評價次數 - 評分 - 種子個數 - 種子 + 評分次數 + 分數 + 種子數 + 種子連結 - 畫廊評論 - 暫時沒有評論 - 評論成功 - 評論失敗 - 複製評論文字 - 深表贊同 - 不再深表贊同 - 垃圾評論 - 不是垃圾評論 - 已深表贊同 - 已不再深表贊同 - 已欽定為垃圾評論 - 已不再欽定為垃圾評論 - 投票失敗 - 檢視投票情況 + 圖庫留言 + 目前沒有留言 + 留言成功 + 留言失敗 + 複製留言文字 + + 收回推 + + 收回噓 + 發出推了 + 已經收回推了 + 發出噓了 + 已經收回噓了 + 推噓失敗 + 檢視推噓狀態 - 畫廊預覽 - 跳頁 + 圖庫預覽 + 跳到 - 下載 - %s - 這裡是下載專案 - 未啟動 + 正在下載 - %s + 下載的物件將會顯示在此 + 閒置中 等待中 下載中 已下載 - 失敗 - %d 未完成 - 已完成 + 下載失敗 + 還有 %d 尚未完成 + 大功告成 509 警告 圖片配額已用盡。請停止下載,休息一下。 下載結束 - %d 項下載成功 - %d 項下載失敗 - %1$d 項下載成功,%2$d 項下載失敗 - 下載成功:%s - 下載失敗:%s - 移除下載項 - 從下載列表移除 %s ? - 從下載列表移除 %d 項? - 刪除圖片檔案 + 有 %d 項已成功下載 + 有 %d 項下載失敗 + %1$d 項成功下載,%2$d 項下載失敗 + %s 下載成功 + %s 下載失敗 + 移除下載佇列 + 將 %s 從下載佇列中移除嗎? + 從下載佇列中移除 %s 項任務嗎? + 刪除圖檔 全部停止 標籤 預設 @@ -310,41 +310,41 @@ 已新增至下載列表 - 這裡是下載標籤 + 下載標籤將會顯示在這裡 新增 新標籤 - 標籤文字為空 - “預設”是無效標籤 + 標籤文字是空的 + “預設”是無效的標籤 標籤已存在 重新命名標籤 刪除標籤 - 刪除“%s”? + 將 “%s”刪除? - 這裡是閱讀歷史 + 歷史紀錄將會顯示在這裡 全部清除 - 清除所有閱讀歷史? + 清除所有歷史紀錄? - 過濾 - 這裡是過濾列表 + 篩選器 + 篩選列表將會顯示在這裡 標題 上傳者 標籤 - 標籤組 - 刪除標題過濾項“%s”? - 刪除上傳者過濾項“%s”? - 刪除標籤過濾項“%s”? - 刪除過濾項“%s”? + 標籤命名空間 + 要將標題篩選項目“%s”移除嗎? + 要將上傳者篩選項目“%s”移除嗎? + 要將標籤篩選項目“%s”移除嗎? + 要將篩選項目“%s”嗎? 提示 - 新增過濾項 + 新增篩選條件 檢視定義 - 過濾項文字 - 標題過濾項:排除標題含有該關鍵字的畫廊。\n\n上傳者過濾項:排除該上傳者上傳的畫廊。\n\n標籤過濾項:排除包含該標籤的畫廊,這會使獲取畫廊列表花費更多時間。\n\n標籤組過濾項:排除包含該標籤組的畫廊,這會使獲取畫廊列表花費更多時間。 + 篩選文字 + 標題篩選:排除標題含有該關鍵字的圖庫。\n\n上傳者篩選:排除該上傳者上傳的圖庫。\n\n標籤篩選:排除包含該標籤的圖庫,這會使獲取圖庫列表花費更多時間。\n\n標籤命名空間篩選:排除包含該標籤命名空間(標籤標題)的圖庫,這會使獲取圖庫列表花費更多時間。 - 設定圖案保護 - 繪製圖案來設定圖案保護\n留空來取消圖案保護 + 設定繪圖解鎖 + 繪製圖案來設定繪圖解鎖\n留白以取消圖案保護 設定 允許使用指紋解鎖 @@ -356,20 +356,20 @@ 新增書籤 選單 分享圖片 - 圖片已儲存至 %s + 已將圖片儲存至 %s EH - 退出登入 - 退出登入後重啟應用以便再次登入 - 天哪,我的老夥計,你要退出登入嗎?我是說,你真的要退出登入嗎? - 是的,我是說,真的 - 已退出登入,重啟應用以便再次登入 - 畫廊站點 + 登出 + 登出後重新啟動程式以再次登入 + 天哪,老兄,你真的要登出嗎?我是說,你真的要登出嗎? + 沒錯,我是說,對 + 已登出,重新啟動程式以再次登入 + 圖庫站台 列表模式 - 詳情 + 詳細資料 縮圖 - 詳情大小 + 詳細大小 縮圖大小 @@ -377,109 +377,109 @@ 縮圖解析度 - %s,指定解析度可能使獲取縮圖失敗 + %s,指定解析度可能會使縮圖取得失敗 自動 修正縮圖連結 - 主頁分類顯示 - 預設在主頁所顯示的分類 - 排除標籤組 - 在預設搜尋中排除指定標籤組 + 顯示在首頁的分類 + 顯示在首頁的分類就跟預設一樣 + 除標籤命名空間 + 在預設標籤搜尋中排除特定的標籤命名空間 排除語言 - 在主頁與搜尋中隱藏指定語言的畫廊 + 在首頁與搜尋中隱藏指定語言的圖庫 H@H %1$s %2$s:%3$d - 未設定 + 顯示日文標題 - 嘗試顯示日文標題。這會使獲取畫廊列表花費更多時間 - 顯示預設標題。一般是英文標題 - 過濾 - 過濾標題,上傳者,標籤和標籤組 - 行動網路警告 + 嘗試顯示日文標題。這會使取得圖庫列表時間增加 + 顯示預設的標題。通常是英文的 + 篩選 + 篩選標題,上傳者,標籤和標籤命名空間 + 行動數據警告 閱讀 螢幕方向 系統預設 - 豎屏 - 橫屏 + 直向 + 橫向 閱讀方向 - 從左至右 - 從右至左 - 從上至下 + 由左到右 + 由右到左 + 由上到下 頁面縮放 原始尺寸 - 匹配寬度 - 匹配長度 - 匹配螢幕 - 固定縮放 - 開頁位置 + 貼齊寬度 + 貼齊長度 + 以螢幕大小縮放 + 固定尺寸 + 開始位置 左上角 右上角 左下角 右下角 - 中心 - 螢幕常亮 + 中間 + 讓螢幕開著 顯示時鐘 顯示進度 顯示電量 使用音量鍵翻頁 - 全屏 - 自定義螢幕亮度 + 全螢幕 + 自訂螢幕亮度 螢幕亮度 下載 下載路徑 無效的下載路徑 - 無法獲取下載路徑 - 在 KitKat 中您無法把資料寫入外接 SD 卡,除非您做了奇怪的事情。不過 <SD card>/Android/data/com.hippo.ehviewer 這個路徑比較特殊,是可以寫入的。 - Lollipop 提供了新的寫入外接 SD 卡的 API。如果您想把下載路徑設定到外接 SD 卡上,點選“文件”按鈕 - 文件 + 無法取得下載路徑 + 在 Android 4.4+ KitKat 中您無法把數據寫到外接 SD 卡裡,除非你駭了他。不過 <SD card>/Android/data/com.hippo.ehviewer 這個路徑比較特別,是可以寫入的。 + Android 5.0+ Lollipop 提供了新的寫入外接 SD 卡的 API。如果您想把下載路徑設定到外接 SD 卡上,點擊“檔案”按鈕 + 檔案 繼續 - 下載執行緒數 + 同時多重下載 最多同時下載 %s 張圖片 預載圖片 向後預載 %s 張圖片 圖片解析度 - %s,大於 1280x 的解析度可能不好使 + %s,大於 1280x 的解析度可能不會生效 自動 下載原圖 - 這很危險!勾選此項會導致下載配額迅速流失 - 允許媒體掃描 - 請避免他人翻看你的相簿應用 - 大多數相簿應用將不會顯示下載目錄中的圖片 - 恢復下載項 - 恢復下載目錄裡的所有下載項 - 恢復中 - 未找到可恢復下載項 - 恢復失敗 - 成功恢復 %s 項 - 清理下載冗餘 - 清理下載目錄中不在下載列表裡的圖片檔案 - 未發現冗餘 - 完成冗餘清理,共清理 %d 項 - - 高階 - 解析失敗時儲存頁面內容 - 頁面內容可能含有隱私敏感資訊 - 匯出日誌 - 儲存日誌至外接儲存器 - 匯出日誌失敗 - 已儲存日誌至 %s - 清除畫廊下載路徑快取 - 畫廊下載路徑可能出錯了,導致重新下載。清除畫廊下載路徑快取可能解決這個問題。 - 清除畫廊下載路徑快取? - 清理記憶體快取 - 清理縮圖、畫廊資訊的記憶體快取 + 這很危險!勾選這個選項會導致下載額度快速耗用 + 允許其他程式進行媒體掃描 + 請別讓別人看到你的相簿 + 大部分相簿軟體將會忽略顯示下載路徑中的影像 + 回復下載的檔案 + 回復下載路徑中的所有下載的檔案 + 回復中 + 未尋獲可回復的已下載檔案 + 回復失敗 + 成功回復 %s 項 + 清除冗餘的檔案 + 清除已下載但不在下載列表中的圖檔 + 未發現冗餘檔案 + 完成冗餘檔案清理,共清理了 %d 個檔案 + + 進階 + 解析失敗時儲存網頁的內容 + 網頁內容可能含有敏感的隱私資料 + 傾印log + 儲存log紀錄至外接儲存裝置中 + 無法傾印log紀錄 + 已儲存log紀錄至 %s + 清除下載路徑的快取 + 圖庫下載路徑可能錯了,所以需要重新下載。清除圖庫下載路徑的快取可能可以解決這個問題。 + 清除圖庫下載路徑的快取? + 清除記憶體快取 + 清除縮圖、圖庫詳細資料的記憶體快取 閱讀快取大小 - 圖案保護 - 未設定圖案保護 - 已設定圖案保護 - 匯出資料 - 儲存資料至外接儲存器,例如下載列表,快速搜尋列表 + 繪圖解鎖 + 尚未設定繪圖解鎖 + 已設定繪圖解鎖 + 匯出檔案 + 儲存資料至外接儲存設備,例如下載列表,快速搜尋列表 已匯出資料至 %s - 匯出資料失敗 - 匯入資料 - 從置儲存器已匯出的資料 - 匯入資料成功 + 無法匯出資料 + 匯入檔案 + 從之前儲存的檔案匯入 + 成功將資料匯入 關於 作者 @@ -487,28 +487,28 @@ 網站 原始碼 更新日誌 - 幫助 - 開源許可 + 說明 + 授權 EhViewer 的誕生離不開許多開源專案 - 捐贈 + 贊助 支付寶:seven332$163.com - 你的捐贈能幫助我開發更多更好的應用。\n\n支付寶:seven332$163.com - 郵箱地址已複製到剪下板 + 你的贊助能幫助我開發更多更好的軟體。\n\n支付寶:seven332$163.com + 已將電子信箱地址複製到剪貼簿 啟用資料統計 關於資料統計 - 版本號 + 版本號碼 檢查更新 更新測試版 - 測試版可能在你的裝置上出現不可預知的錯誤 + 測試版可能在你的裝置上可能出現不可預測的錯誤 排除語言 全選 全取消 - 反選 + 反轉選取 語言 原作 - 翻譯 + 翻譯版 改寫 日語 英語 @@ -534,30 +534,30 @@ 已啟用 未啟用 IP - + 通訊埠 金鑰 - 不支援域名 - 無效的埠 + 不支援的域名 + 無效的通訊埠 - 無法獲取資料資料夾 + 無法取得檔案資料夾 找不到任何資料 無法讀取檔案 - 開源許可 + 授權 選擇資料夾 - 該資料夾不可寫 + 該資料夾無法寫入 雲端收藏 - 本地收藏 + 本機收藏 搜尋 %s %s %1$s - %2$s - 刪除收藏 - 刪除 %d 項收藏? + 移除收藏 + 將 %d 項收藏移除? 移動收藏 預設收藏夾 讓我選擇 @@ -571,18 +571,18 @@ 快速搜尋 - 從右側滑動開啟快速搜尋面板 + 從右側滑動以開啟快速搜尋面板 收藏夾 - 從右側滑動來選擇收藏夾 + 從右側滑動選擇收藏夾 下載標籤 - 從右側滑動開啟下載標籤面板 - 畫廊詳情 - 點選縮圖檢視畫廊詳情 + 從右側滑動以開啟下載標籤面板 + 圖庫詳細資訊 + 點擊縮圖檢視圖庫詳細資訊 翻頁 翻頁 選單 進度條 - 長按開啟頁面選單 + 長按以開啟頁面選單 來自未來 @@ -611,11 +611,11 @@ - 通過 H@H 下載 - 沒有壓縮包 - 開始下載壓縮包 - 無法下載壓縮包 - 壓縮包 - 下載壓縮包需要 H@H 客戶端 + 透過 H@H 下載 + 沒有壓縮檔 + 開始下載壓縮檔 + 下載失敗 + 壓縮檔 + 下載壓縮檔需要 H@H 客戶端 From 7509bf9776cd7c1e0ac3cfe229ee1b22ccada3f3 Mon Sep 17 00:00:00 2001 From: gui Date: Sat, 18 Nov 2017 00:14:05 +0800 Subject: [PATCH 008/630] polish --- app/src/main/res/values-zh-rTW/strings.xml | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index d77a93c45..040a638bc 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -50,17 +50,17 @@ 警告 看來您輸入的 Cookie 是錯誤的,最好再檢查一下。 好的 - 我覺得我沒打錯 - 找到舊版 Cookie了! + 我覺得沒打錯 + 找到 Cookie了! - 下載路徑似乎無法使用。請至設定重新設定下載路徑。 + 看來下載路徑似乎沒辦法使用。請至設定重新設定下載路徑。 正在使用行動數據 錯誤狀態碼:%d 逾時 未知的主機 - 過多重新導向 + 重新導向迴圈 網路錯誤 奇怪的錯誤 找不到相對應的應用程式 @@ -70,7 +70,7 @@ 解碼失敗 沒能找到 - 不正確的 zip 檔案 + 無效的 zip 檔案 讀取失敗 超出範圍 寫入失敗 @@ -81,14 +81,14 @@ 指定的圖庫關鍵字應該看起來像 “618395 0439fa3666” 無法建立暫存檔案 無法儲存圖片 - 不正確的數字 + 無效的數字 本應用程式中內容來自網際網路,部分內容可能對您的生理及心理造成難以恢復的傷害。本應用程式的作者不會對由其所造成的任何影響負責。 使用者名稱不能是空的 密碼不能是空的 略過登入 登入失敗 - 這可能是網站更新造成的,也有可能是發生了奇怪的事情。您可以選擇在登入按鈕下方透過網頁登入或者輸入 cookie,也可以略過登入。略過登入可能導致無法正常使用應用程式。如果你已經在 0.6.x 版登入過了,請先試試“透過 Cookie 登入”。 + 這可能是網站更新造成的,也有可能是哪裡出錯了。您可以選擇在登入按鈕下方透過網頁登入或者輸入 cookie,也可以略過登入。略過登入可能導致無法正常使用應用程式。如果你已經在 0.6.x 版登入過了,請先試試“透過 Cookie 登入”。 再按一次離開 點擊重試 EhViewer 將請求裝置外部儲存空間的存取許可以下載圖庫。您願意授權嗎? @@ -100,7 +100,7 @@ 傳送 - 上次程式當掉了。你願意把錯誤紀錄傳送給開發者讓未來的使用者體驗變得更好嗎?(以電子郵件傳送) + 剛剛當掉了。你願意把錯誤紀錄傳送給開發者讓未來的使用者體驗變得更好嗎?(以電子郵件傳送) 你想選擇哪個圖庫站台? @@ -284,7 +284,7 @@ 還有 %d 尚未完成 大功告成 509 警告 - 圖片配額已用盡。請停止下載,休息一下。 + 圖片流量已用盡。請停止下載,休息一下。 下載結束 有 %d 項已成功下載 有 %d 項下載失敗 @@ -430,7 +430,7 @@ 下載路徑 無效的下載路徑 無法取得下載路徑 - 在 Android 4.4+ KitKat 中您無法把數據寫到外接 SD 卡裡,除非你駭了他。不過 <SD card>/Android/data/com.hippo.ehviewer 這個路徑比較特別,是可以寫入的。 + 在 Android 4.4+ KitKat 中您無法把數據寫到外接 SD 卡裡,除非你駭了他。不過 <SD card>/Android/data/com.hippo.ehviewer 這個路徑比較特別,可以寫入。 Android 5.0+ Lollipop 提供了新的寫入外接 SD 卡的 API。如果您想把下載路徑設定到外接 SD 卡上,點擊“檔案”按鈕 檔案 繼續 @@ -442,7 +442,7 @@ %s,大於 1280x 的解析度可能不會生效 自動 下載原圖 - 這很危險!勾選這個選項會導致下載額度快速耗用 + 這很危險!勾選這個選項會導致圖片流量配額快速耗用 允許其他程式進行媒體掃描 請別讓別人看到你的相簿 大部分相簿軟體將會忽略顯示下載路徑中的影像 @@ -507,7 +507,7 @@ 全取消 反轉選取 語言 - 原作 + 原史作品 翻譯版 改寫 日語 From 20c0030cdc091c1683b1cff17bf7fa454f402b6c Mon Sep 17 00:00:00 2001 From: gui Date: Sat, 18 Nov 2017 00:21:32 +0800 Subject: [PATCH 009/630] polish --- app/src/main/res/values-zh-rTW/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 040a638bc..72d27891c 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -100,7 +100,7 @@ 傳送 - 剛剛當掉了。你願意把錯誤紀錄傳送給開發者讓未來的使用者體驗變得更好嗎?(以電子郵件傳送) + 剛剛當掉了。你是否願意把錯誤紀錄傳送給開發者讓未來的使用者體驗變得更好?(以電子郵件傳送) 你想選擇哪個圖庫站台? @@ -224,7 +224,7 @@ 超爛 快瞎了 快要窒息了 - + 下去 ! 圖庫資訊 From 18f1ec7403a26146e8d12a906ca0296cd437634d Mon Sep 17 00:00:00 2001 From: GUIHU Date: Sat, 13 Jan 2018 19:19:43 +0800 Subject: [PATCH 010/630] Update strings.xml --- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 72d27891c..c82687aeb 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -45,7 +45,7 @@ Little Hippo - Cookie 是儲存在瀏覽器裡的一小塊資料。如果您不清楚 Cookie 什麼或者如何取得 Cookie,最好去查一下。\n\n請輸入特定的 Cookie 來登入。 + Cookie 是儲存在瀏覽器裡的一小塊資料。如果您不清楚 Cookie 是什麼或者如何取得 Cookie,最好去查一下。\n\n請輸入特定的 Cookie 來登入。 文字是空的 警告 看來您輸入的 Cookie 是錯誤的,最好再檢查一下。 From 70bb0d06b22d729832c4df92594b87d53af58fe9 Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 25 Jan 2018 11:19:59 +0800 Subject: [PATCH 011/630] Update ISSUE_TEMPLATE.md --- .github/ISSUE_TEMPLATE.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 51ddc7258..72a68ac15 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,5 +1,7 @@ 感谢您提交 Issue,请在提交前仔细阅读以下信息。 +请在阅读完毕后,删除这些文字,并写下对该 Issue 的描述。 + Issue 的内容仅可为 * Bug 反馈 * 功能申请 From d5cd23c1301427aec385e4bf9f8e1c3b841203d8 Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 25 Jan 2018 18:42:29 +0800 Subject: [PATCH 012/630] Update Image library to avoid gif super short delay --- app/build.gradle | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 09c8a1016..69ed458bd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,7 +19,8 @@ android { } lintOptions { - abortOnError true + abortOnError false + checkReleaseBuilds false } buildTypes { @@ -83,3 +84,9 @@ dependencies { testCompile 'org.robolectric:robolectric:3.4' testCompile 'org.jooq:joor:0.9.6' } + +configurations.all { + resolutionStrategy { + force 'com.github.seven332:image:bab9b11' + } +} From bb655783b8b8ce6d39f90b0ef22fa6073359edc2 Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 25 Jan 2018 21:38:06 +0800 Subject: [PATCH 013/630] Update GLView-Image library to fix invalid gif autoplay --- app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/app/build.gradle b/app/build.gradle index 69ed458bd..5739b7d56 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -88,5 +88,6 @@ dependencies { configurations.all { resolutionStrategy { force 'com.github.seven332:image:bab9b11' + force 'com.github.seven332:glview-image:4c744db' } } From 3a2172434240951dd14cd8d377c73a0626101f0a Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 25 Jan 2018 22:33:43 +0800 Subject: [PATCH 014/630] Add an option to disable page interval --- app/build.gradle | 3 ++- app/src/main/java/com/hippo/ehviewer/Settings.java | 11 +++++++++++ .../java/com/hippo/ehviewer/ui/GalleryActivity.java | 11 +++++++++-- app/src/main/res/layout/dialog_gallery_menu.xml | 7 +++++++ 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 + app/src/main/res/xml/read_settings.xml | 5 +++++ 9 files changed, 38 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5739b7d56..984408cd2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -87,7 +87,8 @@ dependencies { configurations.all { resolutionStrategy { - force 'com.github.seven332:image:bab9b11' + force 'com.github.seven332:glgallery:0f276c0' force 'com.github.seven332:glview-image:4c744db' + force 'com.github.seven332:image:bab9b11' } } diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index f41b95bcf..91e345734 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -520,6 +520,17 @@ public static void putShowBattery(boolean value) { putBoolean(KEY_SHOW_BATTERY, value); } + private static final String KEY_SHOW_PAGE_INTERVAL = "gallery_show_page_interval"; + private static final boolean DEFAULT_SHOW_PAGE_INTERVAL = true; + + public static boolean getShowPageInterval() { + return getBoolean(KEY_SHOW_PAGE_INTERVAL, DEFAULT_SHOW_PAGE_INTERVAL); + } + + public static void putShowPageInterval(boolean value) { + putBoolean(KEY_SHOW_PAGE_INTERVAL, value); + } + private static final String KEY_VOLUME_PAGE = "volume_page"; private static final boolean DEFAULT_VOLUME_PAGE = false; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 609597a24..2910c148f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -280,8 +280,8 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { .setStartPage(startPage) .setBackgroundColor(resources.getColor(R.color.gallery_background)) .setEdgeColor(primaryColor & 0xffffff | 0x33000000) - .setPagerInterval(resources.getDimensionPixelOffset(R.dimen.gallery_pager_interval)) - .setScrollInterval(resources.getDimensionPixelOffset(R.dimen.gallery_scroll_interval)) + .setPagerInterval(Settings.getShowPageInterval() ? resources.getDimensionPixelOffset(R.dimen.gallery_pager_interval) : 0) + .setScrollInterval(Settings.getShowPageInterval() ? resources.getDimensionPixelOffset(R.dimen.gallery_scroll_interval) : 0) .setPageMinHeight(resources.getDimensionPixelOffset(R.dimen.gallery_page_min_height)) .setPageInfoInterval(resources.getDimensionPixelOffset(R.dimen.gallery_page_info_interval)) .setProgressColor(primaryColor) @@ -702,6 +702,7 @@ private class GalleryMenuHelper implements DialogInterface.OnClickListener { private final SwitchCompat mShowClock; private final SwitchCompat mShowProgress; private final SwitchCompat mShowBattery; + private final SwitchCompat mShowPageInterval; private final SwitchCompat mVolumePage; private final SwitchCompat mReadingFullscreen; private final SwitchCompat mCustomScreenLightness; @@ -718,6 +719,7 @@ public GalleryMenuHelper(Context context) { mShowClock = (SwitchCompat) mView.findViewById(R.id.show_clock); mShowProgress = (SwitchCompat) mView.findViewById(R.id.show_progress); mShowBattery = (SwitchCompat) mView.findViewById(R.id.show_battery); + mShowPageInterval = (SwitchCompat) mView.findViewById(R.id.show_page_interval); mVolumePage = (SwitchCompat) mView.findViewById(R.id.volume_page); mReadingFullscreen = (SwitchCompat) mView.findViewById(R.id.reading_fullscreen); mCustomScreenLightness = (SwitchCompat) mView.findViewById(R.id.custom_screen_lightness); @@ -731,6 +733,7 @@ public GalleryMenuHelper(Context context) { mShowClock.setChecked(Settings.getShowClock()); mShowProgress.setChecked(Settings.getShowProgress()); mShowBattery.setChecked(Settings.getShowBattery()); + mShowPageInterval.setChecked(Settings.getShowPageInterval()); mVolumePage.setChecked(Settings.getVolumePage()); mReadingFullscreen.setChecked(Settings.getReadingFullscreen()); mCustomScreenLightness.setChecked(Settings.getCustomScreenLightness()); @@ -759,6 +762,7 @@ public void onClick(DialogInterface dialog, int which) { boolean showClock = mShowClock.isChecked(); boolean showProgress = mShowProgress.isChecked(); boolean showBattery = mShowBattery.isChecked(); + boolean showPageInterval = mShowPageInterval.isChecked(); boolean volumePage = mVolumePage.isChecked(); boolean readingFullscreen = mReadingFullscreen.isChecked(); boolean customScreenLightness = mCustomScreenLightness.isChecked(); @@ -774,6 +778,7 @@ public void onClick(DialogInterface dialog, int which) { Settings.putShowClock(showClock); Settings.putShowProgress(showProgress); Settings.putShowBattery(showBattery); + Settings.putShowPageInterval(showPageInterval); Settings.putVolumePage(volumePage); Settings.putReadingFullscreen(readingFullscreen); Settings.putCustomScreenLightness(customScreenLightness); @@ -812,6 +817,8 @@ public void onClick(DialogInterface dialog, int which) { if (mBattery != null) { mBattery.setVisibility(showBattery ? View.VISIBLE : View.GONE); } + mGalleryView.setPagerInterval(showPageInterval ? getResources().getDimensionPixelOffset(R.dimen.gallery_pager_interval) : 0); + mGalleryView.setScrollInterval(showPageInterval ? getResources().getDimensionPixelOffset(R.dimen.gallery_scroll_interval) : 0); setScreenLightness(customScreenLightness, screenLightness); // Update slider diff --git a/app/src/main/res/layout/dialog_gallery_menu.xml b/app/src/main/res/layout/dialog_gallery_menu.xml index 2c7fd2bc3..fb2e80b7b 100644 --- a/app/src/main/res/layout/dialog_gallery_menu.xml +++ b/app/src/main/res/layout/dialog_gallery_menu.xml @@ -150,6 +150,13 @@ android:text="@string/settings_read_show_battery" android:textColor="@color/primary_text_dark"/> + + 显示时钟 显示进度 显示电量 + 显示页面间隔 使用音量键翻页 全屏 自定义屏幕亮度 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 686d1cc55..5120e47d6 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -421,6 +421,7 @@ 顯示時鐘 顯示進度 顯示電量 + 顯示頁面間隔 使用音量鍵翻頁 全屏 自定義屏幕亮度 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index c82687aeb..13e2bf6ec 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -421,6 +421,7 @@ 顯示時鐘 顯示進度 顯示電量 + 顯示頁面間隔 使用音量鍵翻頁 全螢幕 自訂螢幕亮度 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6b28a9911..8498acbe8 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -464,6 +464,7 @@ Show clock Show progress Show battery + Show page interval Use volume key to turn pages Fullscreen Custom screen lightness diff --git a/app/src/main/res/xml/read_settings.xml b/app/src/main/res/xml/read_settings.xml index ce519fadc..f9100471e 100644 --- a/app/src/main/res/xml/read_settings.xml +++ b/app/src/main/res/xml/read_settings.xml @@ -71,6 +71,11 @@ android:title="@string/settings_read_show_battery" android:defaultValue="true"/> + + Date: Mon, 29 Jan 2018 20:04:40 +0800 Subject: [PATCH 015/630] Closes #320, fix strings.xml --- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rHK/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 78451f9ec0..f52b945e9 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -479,7 +479,7 @@ 已导出数据至 %s 导出数据失败 导入数据 - 从置存储器已导出的数据 + 从置存储器导入数据 导入数据成功 关于 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 5120e47d6..e510553ae 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -479,7 +479,7 @@ 已導出數據至 %s 導出數據失敗 導入數據 - 從置存儲器已導出的數據 + 從置存儲器導入數據 導入數據成功 關於 From ce70859fb2f9418a8ff9e150abcb7cfe22afbc7d Mon Sep 17 00:00:00 2001 From: scese250 Date: Mon, 5 Feb 2018 00:36:34 -0400 Subject: [PATCH 016/630] Fixed orthography and translation (Spanish) Some words weren't translated and there were several orthographic errors. --- app/src/main/res/values-es/strings.xml | 411 ++++++++++++------------- 1 file changed, 205 insertions(+), 206 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index b4546d623..ba0395797 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -26,31 +26,31 @@ Favoritos Historial Descargas - Configuraciones + Configuración Usuario Contraseña Iniciar sesión Registrarse - Iniciar sesión vía WebView + Iniciar sesión vía web Iniciar sesión vía cookies Ingresa un nombre para mostrar Nombre para mostrar El nombre a mostrar esta vacío - Primero debes iniciar sesión + Por favor, inicie sesión primero Little Hippo - Un cookie es una pequeña pieza de datos almacenados en el navegador web. Busque si no conoce lo que es o cómo obtenerlo.\n\nPor favor ingrese cookies especiales para iniciar sesión. - El texto esta vacío - Advertencia. - Parece que las cookies que ingresaste son erróneas. Debe revisarlos. + Una cookie es una pequeña pieza de datos almacenados en el navegador web. Búsquelo si no sabe lo que es o cómo obtenerlo.\n\nIngrese cookies especiales para iniciar sesión. + El texto está vacío + Advertencia + Parece que las cookies que ingresaste son incorrectas. Debe revisarlos. Comprobar ahora No lo creo ¡Cookies encontradas! - Parece que la ubicación de descarga no está disponible. Configure esta opción en configuraciones. + Parece que la ubicación de descarga no está disponible. Establece la ubicación en Configuración. Conectado a redes móviles @@ -76,95 +76,94 @@ Url invalida Error al obtener token Keyword should looks like \"618395 0439fa3666\" for specify gallery - Imposible crear archivo temporal. + Imposible crear archivo temporal Imposible guardar la imagen - Numero invalido + Número invalido - The content of this application is from the Internet. Some of it may do physical or mental harm to you. You have learnt the risks above and would like to undertake them. + El contenido de esta aplicación es de Internet. Algunas de ellas pueden causarle daño psicológico. Ahora sabes los riesgos anteriormente mencionado y te gustaría asumirlos El usuario no puede estar vacío Saltar inicio de sesión Inicio de sesión fallido - Tal ves sea debido a un error de actualización de el sitio web o algo mal sucedió.Pude intentar iniciar sesión vía WebView, ingresar una cookie o saltar el inicio de sesión presionando el boton de abajo.\nPero pude salir un \"Panda Triste\" después de saltar el inicio de sesión. Intente \"Ingresar via cookies\" primero si ha iniciado sesión en la versión 0.6.x de HeViewer. - Presione una ves más para salir - Click para reintentar - EhViewer solicitara el permiso WRITE_EXTERNAL_STORAGE para descargar galerías. ¿Desea conceder el permiso? - Duele + Tal ves sea debido a un error de actualización de el sitio web o algo mal sucedió. Puedes intentar iniciar sesión vía WebView, ingresar una cookie o saltar el inicio de sesión presionando el boton de abajo.\nEs posible que te salga un \"Panda Triste\" después de saltar el inicio de sesión. Intente \"Ingresar via cookies\" primero si ha iniciado sesión en la versión 0.6.x de HeViewer. + Presione una vez más para salir + Puslar para reintentar + EhViewer solicitará el permiso WRITE_EXTERNAL_STORAGE para descargar galerías. ¿Desea conceder el permiso? + Me has rechazado :( Would you mind if the developer collected your device information and your usage? It will help the developer a lot.<br><br>Data analysis service is provided by Google Analytics. Its privacy policy can be found at <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a>.<br><br>If you agree to join data analysis, your device information and your usage will be collected, including but not limited to Android API version, equipment model, language residence, the application version, conversion time, function times. The developer promise that these information will NOT be collected, including phone number, e-mail address, IMEI.<br><br>Your information will not be collected until you agree to join data analysis.<br><br>The collected information will be analyzed by Google Analytics. The analysis report can only be viewed by the developer of this application. - Lo tengo + Entendido Aceptar Rechazar Enviar - Esta aplicación se crasheó la ultima vez. ¿Desea enviarle un logcat al desarrollador para una mejor experiencia en el futuro? (vía e-mail) + Esta aplicación se cerró inesperadamente la ultima vez. ¿Desea enviarle un logcat (registro) al desarrollador para una mejor experiencia en el futuro? (vía e-mail) - ¿Qué galería quiere seleccionar? - e-hentai: Disponible para cualquier persona.\nexhentai: Solo para usuarios que iniciaron sesión. - Por favor selecciona un sitio + ¿Qué galería deseas seleccionar? + e-hentai: Disponible para cualquiera .\nexhentai: Solo para usuarios que han iniciado sesión + Por favor seleccione un sitio - Actualizar. + Actualizar Versión: %1$s\nSize: %2$s\n\n%3$s - EhViewer esta actualizado + EhViewer está actualizado Buscar ExHentai Buscar E-Hentai - El Mundo es Grande y el panda está sentado solo + El mundo es grande y el panda está sentado solo Buscar Búsqueda por palabras clave - Búsqueda de Imagen - - Búsqueda Normal - Opciones Avanzadas - Búsqueda de Imágenes - Búsqueda General + Búsqueda de imagen + Búsqueda normal + Opciones avanzadas + Búsqueda de imágenes + Búsqueda general Uploader específicos - Etiquetas especificas - Galerías Especificas + Etiquetas específicas + Galerías específicas Habilitar opciones avanzadas - Búsqueda Normal: Solo busca.\n\nUploader Especifico: Lista de galerías que subió el uploader. Otras opciones serán ignoradas.\n\nSpecify tag: List galleries which contains the tag. Only one tag accepted. Otras opciones serán ignoradas.\n\nGaleria Especifica: Ir a la Galería. La palabra clave debe ser \"gid token\". + Búsqueda normal: Solo busca.\n\nUploader especifico: Listar de galerías subidas por el uploader. Otras opciones serán ignoradas.\n\nEtiquetas específicas: Listar las galerías que contienen la etiqueta. Solo se acepta una etiqueta. Otras opciones serán ignoradas.\n\nGalería especifica: Ir a la Galería. La palabra clave debe ser \"gid token\". - Buscar Galerías - Buscar Etiquetas de Galerías - Buscar Descripción de Galería - Buscar por Nombres de Torrent - Mostrar Solo Galerías con Torrents - Buscar Etiquetas Low-Power + Buscar galerías + Buscar etiquetas de galería + Buscar descripción de galería + Buscar nombres de archivo torrent + Mostrar solo galerías con torrents + Buscar etiquetas Low-Power Buscar etiquetas pobres - Mostrar Galerías Borradas - Valoración Mínima: + Mostrar galerías borradas + Valoración mínima: - Seleccionar Imagen + Seleccionar imagen Usar búsqueda similar Buscar solo portadas - Mostrar Borrados + Mostrar borrados Seleccione la imagen primero - Búsqueda Rápida - Clic \"+\" para añadir a la búsqueda rápida - Añadir Búsqueda Rápida + Búsqueda rápida + Pulsar \"+\" para añadir a la búsqueda rápida + Añadir búsqueda rápida Nombre vacío - Eliminar Búsqueda Rápida - Eliminar \"%s\"? + Eliminar búsqueda rápida + ¿Eliminar \"%s\"? La búsqueda rápida se muestra acá - El estado de la lista de galerías se guardara como búsqueda rápida. Aplique la búsqueda primero si usted desea guardar el estado del panel de búsqueda. - LEEME - No se puede añadir la búsqueda por imágenes la la búsqueda rápida + El estado de la lista de galerías se guardará como búsqueda rápida. Aplique la búsqueda primero si desea guardar el estado del panel de búsqueda. + LÉEME + No se puede añadir la búsqueda de imágenes como búsqueda rápida Búsqueda rápida duplicada. El nombre es \"%s\". Nombre duplicado existente - Pagina %1$d, total %2$d paginas + Página %1$d, total %2$d páginas - 2 stars - 3 stars - 4 stars - 5 stars + 2 estrellas + 3 estrellas + 4 estrellas + 5 estrellas No se encuentra la galería @@ -172,8 +171,8 @@ Leer Más información - %d page - %d pages + %d páginas + %d páginas \u2665 %d %1$s (%2$.2f, %3$d) @@ -182,7 +181,7 @@ Compartir Valorar Similar - Buscar Portada + Buscar portada Sin etiquetas Sin comentarios No hay más comentarios @@ -190,73 +189,73 @@ Sin vistas previas No hay más vistas previas Más vistas previas - Refrescar - Abrir en otra app - Valoración Completada + Actualizar + Abrir en otra aplicación + Valoración completada Valoración fallida Sin torrents Torrents Favorito Sin favoritos - Añadir a Favoritos - Recordar Favoritos + Añadir a favoritos + Recordar favoritos Eliminado de favoritos - No se a podido agregar a favoritos + No se ha podido agregar a favoritos Error al borrar de favoritos - Añadir el cargador \"%s\" a la lista de filtros? + ¿Añadir el uploader \"%s\" a la lista de filtros? Filtro añadido - PIEZA MAESTRA - INGREIBLE + OBRA MAESTRA + ASOMBROSO GRANDIOSO BUENO - OKAY + DECENTE MEDIOCRE MALO HORRIBLE DOLOROSO - INAGUANTABLE + INSORPOTABLE DESASTRE - Información de la Galería + Información de la galería Copiado al portapapeles Clave Valor Guía Clave - Url + URL Título - Título Japonés - Thumb + Título en japonés + Miniatura Categoría Uploader Publicado Padre Visible Lenguaje - Paginas + Páginas Tamaño Número de favoritos Favorito - Número de Valoraciones - Rating + Número de valoraciones + Valoración Torrents - Url de Torrent + Url de torrent - Comentarios de la Galería + Comentarios de la galería Sin comentarios en esta galería - Comentario exitoso - Copiar el texto del comentario - Voto positivo - Cancelar voto positivo - Voto negativo + Comentario publicado + Copiar texto de comentario + Votar positivo + Cancelar voto + Votar negativo Voto positivo completado - Voto positivo cancelado satisfactoriamente - Vote negativo completado - Voto negativo cancelado satisfactoriamente + Voto cancelado + Voto negativo completado + Voto cancelado Voto fallido Verificar estado del voto @@ -265,78 +264,78 @@ Ir a - Descargar - %s - Las descargas de archivos se mostraran acá + Descargas - %s + Las descargas de galerías se muestran acá Esperando Descargando Descargado %d incompleto - Completada + Completado Alerta 509 - Limite de imagen alcanzado. Por favor deje de descargar y espere un poco. - Descarga Terminada. - %d Completado + Se alcanzó el límite de imágenes. Detenga la descarga y espere un poco + Descarga completada + %d completada %d fallido %1$d completado, %2$d fallido Completado: %s Fallido: %s - Borrar elemento descargado - Borrar %s de la lista de descarga ? - Borrar %d elementos de la lista de descarga? - Eliminar imágenes + Borrar galería descargada + ¿Borrar %s de la lista de descargas? + ¿Borrar %d galerías de la lista de descargas? + Borrar imágenes Detener todo Etiquetas - Predeterminado. + Predeterminado Mover Descargar etiquetas Iniciar todo Detener todo - EhViewer Servicio de Descarga + Servicio de descarga EhViewer %s - %1$s, %2$s izquierda - Recordar descargas + %1$s, %2$s restantes + Recordar etiqueta de descarga Etiqueta predeterminada de descarga Añadido a la lista de descargas - Las etiquetas de descarga se mostraran acá + Las etiquetas de descarga se muestran acá Añadir Nueva etiqueta - Nombre de la etiqueta vacia - \"Defecto\" Es una etiqueta invalida + Nombre de la etiqueta vacía + \"Defecto\" es una etiqueta invalida Etiqueta existente Renombrar etiqueta Eliminar etiqueta - Eliminar \"%s\"? + ¿Eliminar \"%s\"? - El historial de lectura esta acá - Limpiar todo el historial? + Las galerías visualizadas se muestran aquí + ¿Limpiar historial? Filtros - Los filtros se mostrarán acá - Titulo + Los filtros se muestran acá + Título Uploader - Tag - Tag namespace - Eliminar filtro de titulo \"%s\"? - Eliminar filtros de uploader \"%s\"? - Eliminar filtro de etiquetas \"%s\"? - Eliminar filtro \"%s\"? - Tip - Añadir Filtros - Mostrar definicion - Filter text - Title Filter: exclude the gallery whose title contains the word.\n\nUploader Filter: exclude the gallery which was uploaded by the uploader.\n\nTag Filter: exclude the gallery which contain the tag, it takes more time to get gallery list.\n\nTag Namespace Filter: exclude the gallery which contain the tag namespace, it takes more time to get gallery list. + Etiqueta + Etiqueta de espacio de nombres + ¿Eliminar filtro de título \"%s\"? + ¿Eliminar filtro de uploader \"%s\"? + ¿Eliminar filtro de etiquetas \"%s\"? + ¿Eliminar filtro \"%s\"? + Sugerencia + Añadir filtro + Mostrar definición + Filtro de texto + Filtro de título: excluye la galería cuyo título contiene la palabra.\n\nFiltro de uploader: excluye las galerías subidas por el uploader.\n\nFiltro de etiquetas: excluye la galería que contiene la etiqueta, toma más tiempo para cargar la lista de galerías.\n\nFiltro de etiqueta de nombre de espacio: excluye la galería que contiene el espacio de nombres de la etiqueta, toma más tiempo para cargar la lista de galerías. Establecer protección por patrón - Dibuje un patrón para establecer la protección por patrón. \nDejar en blanco para quitar la protección por patrón. + Dibuje un patrón para establecer la protección por patrón. \nDéjelo en blanco para quitar la protección por patrón Establecer - Pagina %d + Página %d @string/refresh @string/share Guardar @@ -346,13 +345,13 @@ Imagen guardada en %s EH - Cerrar sesión. - Reiniciar la aplicación para inicia sesion - ¿Esta seguro de cerrar sesión? + Cerrar sesión + Reinicie la aplicación para iniciar sesiónn + ¿Estás seguro de cerrar sesión? @android:string/ok Sesión cerrada. Reinicie la aplicación para iniciar sesión - Sitio de la Galería - Modo de Lista + Seleccionar galería + Modo lista Detallado Vista previa Detalles de tamaño @@ -364,34 +363,34 @@ Pequeño Resolución de vista previa %s, las resoluciones especiales podrían causar errores en la vista previa - Auto + Automático Reparar URL de vistas previas Categorías en la página de inicio - Las categorías que se muestran en la página de inicio por defecto. + Categorías que se muestran en la página de inicio por defecto. Idiomas excluidos - Ocultar galerías en ciertos idiomas de las búsquedas y la lista de galerías - Excluir etiquetas variables - Excluir ciertas variables de una búsqueda de etiquetas por defecto + Ocultar galerías en ciertos idiomas de la lista de galerías y búsquedas + Excluir etiquetas espacios de nombres + Excluir ciertos espacios de nombres de una búsqueda de etiquetas por defecto H@H proxy %1$s %2$s:%3$d - Sin Establecer - Mostrar titulo en japonés - Intentar mostrar titulo en japonés. Pude tomar más tiempo en cargar la lista de galerías - Mostrar titulo por defecto, usualmente es en ingles + Sin establecer + Mostrar título en japonés + Intentar mostrar títulos en japonés. Tomará más tiempo en cargar la lista de galerías + Mostrar títulos por defecto, usualmente es en inglés Filtros - Filtrar por titulo, uploader,etiqueta y etiquetas variables + Filtrar por titulo, uploader, etiqueta y etiquetas variables Advertencia de redes moviles - Leer + Lectura Orientación de la pantalla Defecto Retrato Paisaje Dirección de lectura - Izquierda a Derecha - Derecha a Izquierda - Arriba hacia Abajo - Escala de pagina + Izquierda a derecha + Derecha a izquierda + Arriba hacia abajo + Escala de página Tamaño actual Ajustar a lo ancho Ajustar a la altura @@ -407,8 +406,8 @@ Mostrar hora Mostrar progreso Mostrar batería - Usar teclas de volumen para pasar paginas - Pantalla Completa + Pasar páginas con tecla de volumen + Pantalla completa Brillo de pantalla personalizado Brillo de la pantalla @@ -421,58 +420,58 @@ Document Continuar Permitir escaneo de medios - Por favor mantenga sus aplicaciones de galeria lejor de otras personas (si no quiere que vean sus descargas) + Mantenga las aplicaciones de galería fuera del alcanze de otra personas (podrán ver las galerías almacenadas) Las aplicaciones de galería de imágenes ignoraran la ruta de descargas de galerías - Multi hilos al descargar + Multi-hilos al descargar Máximo de %s imágenes Precargar Imagen Precargar las siguientes %s imágenes Resolución de la imagen - %s, resoluciones mayores a 1280x podrían no funcionar + %s, resoluciones mayores a 1280x podrían dar error Auto Descargar imagen original - Es peligroso! Puede obtener el error 509 + ¡Cuidado! Podrías recibir error 509 Restaurar los elementos de descarga Restaurar todos los elementos de descarga en la ubicación de descarga Restaurando... No se han encontrado elementos para restaurar - restauración fallida + Restauración fallida Restauración de %d elementos completados - Borrar descargas redundantes - Eliminar galería de imágenes si no esta en la lista de descargas pero si en la direccion de descargas - Sin redundancia - Borrado de redundancia completado, Borrados %d elemtos totales + Borrar descargas innecesarias + Eliminar las imágenes de la galería que no se encuentran en la lista de descarga pero sí la ubicación de descarga + Sin elementos innecesarios + Borrado de redundancia completado, un total de %d elementos borrados Avanzado Guardar contenido en HTML al analizar el error El contenido HTML puede ser sensible a la privacidad - Dump logcat + Guardado de logcat Guardar logcat en almacenamiento externo - Dump logcat fallado + Guardado de logcat fallido Logcat guardado en %s - Borrar cache de la ruta de descarga - Gallery download path might be wrong and it need to be redownload. Clearing download path cache might solve the problem. - Borrar cache de la ruta de descarga? - Borrar cache de memoria - Borrar vistas previas, galerías, información y cache de memoria - Leer el tamaño de la caché + Borrar caché de la ruta de descarga + La ruta de descarga de la galería podría ser incorrecta y necesita ser descargada de nuevo. Borrar el caché de la ruta de descarga debería resolver el problema + ¿Borrar caché de la ruta de descarga? + Borrar caché de memoria + Borrar vistas previas, galerías, información y caché de memoria + Tamaño del caché (archivos temporales) Protección por patrón No se ha configurado la protección por patrón La protección por patrón ha sido configurado Exportar datos - Guardar datos en almacenamiento externo, tales como la lista de descarga, lista de búsqueda raida, etc + Guardar datos en almacenamiento externo, tales como la lista de descarga, lista de búsqueda rápida, entre otros Datos exportados en %s - Exportación de datos fallado - importar datos - Cargar datos guardados anteriormente + Exportación de datos fallido + Importar datos + Cargar datos que han sido guardado antes Importación de datos completo Acerca de Autor Comunidad en Google+ PaginaWeb - Código Fuente - Registro de Cambios. + Código fuente + Registro de cambios Ayuda Licencia EhViewer es posible gracias a varios proyectos de código abierto @@ -483,9 +482,9 @@ Habilitar analytics Acerca de analytics Versión de compilación - Verificar actualizaciones. - Canal de actualizaciones Beta - Las versiones beta pueden fallar en tu dispositivo. + Verificar actualizaciones + Canal de versiones de prueba + Las versiones de prueba podrían tener errores Habilitar Habilitado @@ -507,9 +506,9 @@ Idioma Original Traducido - Reescribir - Japones - ingles + Reescrito + Japonés + Inglés Chino Holandés Francés @@ -535,78 +534,78 @@ Favoritos en la nube - Favoritos Locales + Favoritos locales Buscar %s %s %1$s - %2$s Eliminar de favoritos - Eliminar %d Elementos de favoritos? + ¿Eliminar %d galerías de favoritos? Mover favoritos Colección de favoritos por defecto - Permiteme seleccionar + Déjame elegir Información de favoritos - Colecciones - Inicio de sesión requerido + Colección + Se necesita iniciar sesión Búsqueda rápida Desliza a la derecha para abrir el panel de búsqueda rápida - Colecciones + Colección Desliza hacia la derecha para elegir favoritos Descargas Desliza hacia la derecha para abrir el panel de descarga Detalles de galería - Clic en la imagen para ver detalles de la galería - Giro de Pagina - Giro de Pagina + Pulsar en la imagen para ver detalles de la galería + Cambiar de página + Cambiar de página Menú Progreso - Clic largo para abrir el menú de pagina + Pulso largo para abrir el menú de página Desde el futuro - Ahora! + Ahora - A minute ago - %d minutes ago + Hace un minuto + Hace %d minutos - An hour ago - %d hours ago + Hace una hora + Hace %d horas - Ayer. - %d dias atras + Ayer + Hace %d días atrás - sec - secs + segundo + segundos - min - mins + minuto + minutos - hour - hours + hora + horas - day - days + día + días - year - years + año + años - Sin Archivos + Sin archivos Descarga de archivos iniciada Error al descargar archivo Necesita un cliente H@H para descargar archivo Añadido a favoritos Agregar a favoritos Cancelar voto negativo - Limpiar Todo - Comentario Fallido + Limpiar todo + Comentario fallido Contar Archivo Eliminar @@ -614,9 +613,9 @@ No se puede escribir en el directorio Deshabilitado Descarga fallida - Descarga Parada - La contraseña no puede estar vacia - Sucedió algo malo + Descarga en pausa + La contraseña no puede estar vacía + Ocurrió algo malo H@H Downloader From 30819fc7c6f2e5576d5912e95c731ec79250d50d Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 10 Feb 2018 14:02:20 +0800 Subject: [PATCH 017/630] Add UConfigActivity --- app/src/main/AndroidManifest.xml | 6 + .../java/com/hippo/ehviewer/client/EhUrl.java | 13 + .../hippo/ehviewer/ui/UConfigActivity.java | 255 ++++++++++++++++++ .../main/res/drawable/v_check_dark_x24.xml | 29 ++ app/src/main/res/layout/activity_u_config.xml | 38 +++ app/src/main/res/layout/dialog_js_prompt.xml | 38 +++ app/src/main/res/menu/activity_u_config.xml | 28 ++ app/src/main/res/values-zh-rCN/strings.xml | 6 + app/src/main/res/values-zh-rHK/strings.xml | 6 + app/src/main/res/values-zh-rTW/strings.xml | 6 + app/src/main/res/values/pathdata.xml | 1 + app/src/main/res/values/strings.xml | 6 + app/src/main/res/xml/eh_settings.xml | 26 +- 13 files changed, 438 insertions(+), 20 deletions(-) create mode 100644 app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java create mode 100644 app/src/main/res/drawable/v_check_dark_x24.xml create mode 100644 app/src/main/res/layout/activity_u_config.xml create mode 100644 app/src/main/res/layout/dialog_js_prompt.xml create mode 100644 app/src/main/res/menu/activity_u_config.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 27eb8daf7..75b9a314f 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -132,6 +132,12 @@ android:theme="@style/AppTheme.NoActionBar" android:label="@string/set_pattern_protection"/> + + diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java index d7e1bf2b8..1ee8516aa 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java @@ -52,6 +52,9 @@ public class EhUrl { public static final String URL_FAVORITES_EX = HOST_EX + "favorites.php"; public static final String URL_FORUMS = "https://forums.e-hentai.org/"; + public static final String UCONFIG_E = HOST_E + "uconfig.php"; + public static final String UCONFIG_EX = HOST_EX + "uconfig.php"; + private static final String URL_PREFIX_THUMB_E = "https://ehgt.org/t/"; private static final String URL_PREFIX_THUMB_EX = "https://exhentai.org/t/"; @@ -89,6 +92,16 @@ public static String getApiUrl() { } } + public static String getUConfigUrl() { + switch (Settings.getGallerySite()) { + default: + case SITE_E: + return UCONFIG_E; + case SITE_EX: + return UCONFIG_EX; + } + } + public static String getGalleryDetailUrl(long gid, String token, int index, boolean allComment) { UrlBuilder builder = new UrlBuilder(getHost() + "g/" + gid + '/' + token + '/'); if (index != 0) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java new file mode 100644 index 000000000..3a68f2f8d --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java @@ -0,0 +1,255 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.ehviewer.ui; + +/* + * Created by Hippo on 2018/2/9. + */ + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AlertDialog; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.JsPromptResult; +import android.webkit.JsResult; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.EditText; +import android.widget.TextView; +import com.hippo.ehviewer.EhApplication; +import com.hippo.ehviewer.R; +import com.hippo.ehviewer.client.EhCookieStore; +import com.hippo.ehviewer.client.EhUrl; +import com.hippo.widget.ProgressView; +import okhttp3.Cookie; +import okhttp3.HttpUrl; + +public class UConfigActivity extends ToolbarActivity { + + private WebView webView; + private ProgressView progress; + private String url; + private boolean loaded; + + @SuppressLint("SetJavaScriptEnabled") + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // http://stackoverflow.com/questions/32284642/how-to-handle-an-uncatched-exception + CookieManager cookieManager = CookieManager.getInstance(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.flush(); + cookieManager.removeAllCookies(null); + cookieManager.removeSessionCookies(null); + } else { + CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(this); + cookieSyncManager.startSync(); + cookieManager.removeAllCookie(); + cookieManager.removeSessionCookie(); + cookieSyncManager.stopSync(); + } + + // Copy cookies from okhttp cookie store to CookieManager + url = EhUrl.getUConfigUrl(); + EhCookieStore store = EhApplication.getEhCookieStore(this); + for (Cookie cookie : store.getCookies(HttpUrl.parse(url))) { + cookieManager.setCookie(url, cookie.toString()); + } + + setContentView(R.layout.activity_u_config); + webView = (WebView) findViewById(R.id.webview); + webView.getSettings().setJavaScriptEnabled(true); + webView.setWebViewClient(new UConfigWebViewClient()); + webView.setWebChromeClient(new UConfigWebChromeClient()); + webView.loadUrl(url); + progress = (ProgressView) findViewById(R.id.progress); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + getMenuInflater().inflate(R.menu.activity_u_config, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + case R.id.action_apply: + if (loaded) { + webView.loadUrl("javascript:" + + "(function() {\n" + + " var apply = document.getElementById(\"apply\").children[0];\n" + + " apply.click();\n" + + "})();"); + } + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + private Cookie longLive(Cookie cookie) { + return new Cookie.Builder() + .name(cookie.name()) + .value(cookie.value()) + .domain(cookie.domain()) + .path(cookie.path()) + .expiresAt(Long.MAX_VALUE) + .build(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + webView.destroy(); + + // Put cookies back to okhttp cookie store + CookieManager cookieManager = CookieManager.getInstance(); + String cookiesString = cookieManager.getCookie(url); + + if (cookiesString != null && !cookiesString.isEmpty()) { + EhCookieStore store = EhApplication.getEhCookieStore(this); + HttpUrl eUrl = HttpUrl.parse(EhUrl.HOST_E); + HttpUrl exUrl = HttpUrl.parse(EhUrl.HOST_EX); + + // The cookies saved in the uconfig page should be shared between e and ex + for (String header : cookiesString.split(";")) { + Cookie eCookie = Cookie.parse(eUrl, header); + if (eCookie != null) { + store.addCookie(longLive(eCookie)); + } + + Cookie exCookie = Cookie.parse(exUrl, header); + if (exCookie != null) { + store.addCookie(longLive(exCookie)); + } + } + } + } + + private class UConfigWebViewClient extends WebViewClient { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + // Never load other urls + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + progress.setVisibility(View.VISIBLE); + loaded = false; + } + + @Override + public void onPageFinished(WebView view, String url) { + progress.setVisibility(View.GONE); + loaded = true; + } + } + + private class UConfigWebChromeClient extends WebChromeClient { + + private Context context = UConfigActivity.this; + + @Override + public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, + final JsPromptResult result) { + + View promptView = UConfigActivity.this.getLayoutInflater() + .inflate(R.layout.dialog_js_prompt, null, false); + TextView messageView = (TextView) promptView.findViewById(R.id.message); + messageView.setText(message); + final EditText valueView = (EditText) promptView.findViewById(R.id.value); + valueView.setText(defaultValue); + + new AlertDialog.Builder(context) + .setView(promptView) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + result.confirm(valueView.getText().toString()); + } + }) + .setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + result.cancel(); + } + }) + .show(); + + return true; + } + + @Override + public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { + new AlertDialog.Builder(context) + .setMessage(message) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + result.confirm(); + } + }) + .setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + result.cancel(); + } + }) + .show(); + + return true; + } + + @Override + public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { + new AlertDialog.Builder(context) + .setMessage(message) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + result.confirm(); + } + }) + .setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + result.cancel(); + } + }) + .show(); + + return true; + } + } +} diff --git a/app/src/main/res/drawable/v_check_dark_x24.xml b/app/src/main/res/drawable/v_check_dark_x24.xml new file mode 100644 index 000000000..695620ecf --- /dev/null +++ b/app/src/main/res/drawable/v_check_dark_x24.xml @@ -0,0 +1,29 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_u_config.xml b/app/src/main/res/layout/activity_u_config.xml new file mode 100644 index 000000000..841181f7f --- /dev/null +++ b/app/src/main/res/layout/activity_u_config.xml @@ -0,0 +1,38 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_js_prompt.xml b/app/src/main/res/layout/dialog_js_prompt.xml new file mode 100644 index 000000000..691f8b9f8 --- /dev/null +++ b/app/src/main/res/layout/dialog_js_prompt.xml @@ -0,0 +1,38 @@ + + + + + + + + + + diff --git a/app/src/main/res/menu/activity_u_config.xml b/app/src/main/res/menu/activity_u_config.xml new file mode 100644 index 000000000..a24c1244a --- /dev/null +++ b/app/src/main/res/menu/activity_u_config.xml @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f52b945e9..4dededdb7 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -348,6 +348,10 @@ 设置 允许使用指纹解锁 + + EHentai 设置 + 应用 + 第 %d 页 @string/refresh @@ -365,6 +369,8 @@ 天哪,我的老伙计,你要退出登录吗?我是说,你真的要退出登录吗? 是的,我是说,真的 已退出登录,重启应用以便再次登录 + EHentai 设置 + EHentai 网站上的设置 画廊站点 列表模式 详情 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index e510553ae..fadf73abd 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -348,6 +348,10 @@ 設置 允許使用指紋解鎖 + + EHentai 設置 + 應用 + 第 %d 頁 @string/refresh @@ -365,6 +369,8 @@ 天哪,我的老夥計,你要退出登錄嗎?我是説,你真的要退出登錄嗎? 是的,我是説,真的 已退出登錄,重啟應用以便再次登錄 + EHentai 設置 + EHentai 網站上的設置 畫廊站點 列表模式 詳情 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 13e2bf6ec..4e2c00bae 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -348,6 +348,10 @@ 設定 允許使用指紋解鎖 + + EHentai 設定 + 應用 + 第 %d 頁 @string/refresh @@ -365,6 +369,8 @@ 天哪,老兄,你真的要登出嗎?我是說,你真的要登出嗎? 沒錯,我是說,對 已登出,重新啟動程式以再次登入 + EHentai 設定 + EHentai 網站上的設定 圖庫站台 列表模式 詳細資料 diff --git a/app/src/main/res/values/pathdata.xml b/app/src/main/res/values/pathdata.xml index a13598bb4..c85e6adb1 100644 --- a/app/src/main/res/values/pathdata.xml +++ b/app/src/main/res/values/pathdata.xml @@ -60,6 +60,7 @@ M2,20L17,10L22,22M14,9L2,8L11,2Z M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z M9,13A3,3 0 0,0 12,16A3,3 0 0,0 15,13A3,3 0 0,0 12,10A3,3 0 0,0 9,13M20,19.59V8L14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18C18.45,22 18.85,21.85 19.19,21.6L14.76,17.17C13.96,17.69 13,18 12,18A5,5 0 0,1 7,13A5,5 0 0,1 12,8A5,5 0 0,1 17,13C17,14 16.69,14.96 16.17,15.75L20,19.59Z + M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z M12.88,2H4V11L14.97,22.14L24,13.1L12.88,2ZM7.26,5.26C7.96,4.58,9.06,4.58,9.74,5.26C10.42,5.96,10.42,7.06,9.74,7.74S7.94,8.42,7.26,7.74S6.58,5.94,7.26,5.26ZM14.98,19.3L8.76,12.95L14.88,6.83L21.18,13.11L14.98,19.31ZM11.6,21.56L10.23,23L0,12.74V5H2V11.9L11.6,21.56Z M20.46,14.65C21.86,16.15,20.31,18.6,18.32,17.87C19.78,17.57,20.79,16.37,20.46,14.65ZM4.32,17.87C6.32,18.6,7.86,16.17,6.46,14.65C6.79,16.38,5.78,17.55,4.32,17.87ZM16.87,4.3C16.6,3.56,15.87,3,15,3C13.7,3,12.7,4.24,13.1,5.58C14.2,5.18,15.44,4.48,16.87,4.31ZM24,16C24,18.76,21.76,21,19,21C14.96,21,14.84,16.88,12,16.88S9.04,21,5,21C2.24,21,0,18.76,0,16C0,13.87,1.53,11.43,3.94,7.18C5.84,3.81,8.69,5.92,10.76,6.58C11.54,6.85,12.41,6.88,13.24,6.58C15.3,5.92,18.14,3.81,20.06,7.18C22.46,11.43,24,13.88,24,16ZM8,16C8,14.35,6.65,13,5,13S2,14.35,2,16S3.35,19,5,19S8,17.65,8,16ZM13,14C13,13.45,12.55,13,12,13S11,13.45,11,14S11.45,15,12,15S13,14.55,13,14ZM22,16C22,14.35,20.65,13,19,13S16,14.35,16,16S17.35,19,19,19S22,17.65,22,16ZM9,3C8.14,3,7.4,3.55,7.13,4.3C8.56,4.48,9.79,5.2,10.9,5.58C11.3,4.24,10.3,3,9,3Z diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8498acbe8..9a9e1bd5c 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -392,6 +392,10 @@ Set Also allow unlock with fingerprint + + EHentai settings + Apply + Page %d @string/refresh @@ -408,6 +412,8 @@ Do you really want to sign out? @android:string/ok Signed out, restart the application to sign in + EHentai settings + Settings on EHentai website Gallery site List mode Detail diff --git a/app/src/main/res/xml/eh_settings.xml b/app/src/main/res/xml/eh_settings.xml index 7c79a0969..8c1d24a8a 100644 --- a/app/src/main/res/xml/eh_settings.xml +++ b/app/src/main/res/xml/eh_settings.xml @@ -32,6 +32,12 @@ app:entryValues="@array/gallery_site_entry_values" android:defaultValue="1"/> + + - - - - - - - - Date: Sat, 10 Feb 2018 14:51:18 +0800 Subject: [PATCH 018/630] Add uconfig saving tip --- .../hippo/ehviewer/ui/UConfigActivity.java | 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 + 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java index 3a68f2f8d..736f815da 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java @@ -27,6 +27,7 @@ import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; import android.view.Menu; import android.view.MenuItem; @@ -82,12 +83,23 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { } setContentView(R.layout.activity_u_config); + setNavigationIcon(R.drawable.v_arrow_left_dark_x24); webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(new UConfigWebViewClient()); webView.setWebChromeClient(new UConfigWebChromeClient()); webView.loadUrl(url); progress = (ProgressView) findViewById(R.id.progress); + + Snackbar.make(webView, R.string.apply_tip, Snackbar.LENGTH_LONG).show(); + } + + private void apply() { + webView.loadUrl("javascript:" + + "(function() {\n" + + " var apply = document.getElementById(\"apply\").children[0];\n" + + " apply.click();\n" + + "})();"); } @Override @@ -105,11 +117,7 @@ public boolean onOptionsItemSelected(MenuItem item) { return true; case R.id.action_apply: if (loaded) { - webView.loadUrl("javascript:" - + "(function() {\n" - + " var apply = document.getElementById(\"apply\").children[0];\n" - + " apply.click();\n" - + "})();"); + apply(); } return true; default: @@ -210,8 +218,7 @@ public void onCancel(DialogInterface dialog) { return true; } - @Override - public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { + private void showMessageDialog(String message, final JsResult result) { new AlertDialog.Builder(context) .setMessage(message) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @@ -227,28 +234,17 @@ public void onCancel(DialogInterface dialog) { } }) .show(); + } + @Override + public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { + showMessageDialog(message, result); return true; } @Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { - new AlertDialog.Builder(context) - .setMessage(message) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - result.confirm(); - } - }) - .setOnCancelListener(new DialogInterface.OnCancelListener() { - @Override - public void onCancel(DialogInterface dialog) { - result.cancel(); - } - }) - .show(); - + showMessageDialog(message, result); return true; } } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 4dededdb7..eb7109be1 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -351,6 +351,7 @@ EHentai 设置 应用 + 点击右上角的对勾来保存设置 第 %d 页 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index fadf73abd..696f5841a 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -351,6 +351,7 @@ EHentai 設置 應用 + 點擊右上角的對勾來保存設置 第 %d 頁 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 4e2c00bae..05f57bf58 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -351,6 +351,7 @@ EHentai 設定 應用 + 點選右上角的對勾來儲存設定 第 %d 頁 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9a9e1bd5c..b6d54b559 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -395,6 +395,7 @@ EHentai settings Apply + Click the check mark to save the settings Page %d From 9ec74934bc0e0a989e4a5ac2bae31c07a6d176b6 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 10 Feb 2018 15:56:21 +0800 Subject: [PATCH 019/630] Always show the help route in error message --- app/src/main/java/com/hippo/widget/ContentLayout.java | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values-zh-rHK/strings.xml | 2 ++ app/src/main/res/values-zh-rTW/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/widget/ContentLayout.java b/app/src/main/java/com/hippo/widget/ContentLayout.java index 80dbeee91..ded772c0b 100644 --- a/app/src/main/java/com/hippo/widget/ContentLayout.java +++ b/app/src/main/java/com/hippo/widget/ContentLayout.java @@ -709,7 +709,7 @@ public void showProgressBar(boolean animation) { } public void showText(CharSequence text) { - mTipView.setText(text); + mTipView.setText(text + "\n\n" + getContext().getString(R.string.help_route)); mViewTransition.showView(2); } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index eb7109be1..73f38c5ad 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -98,6 +98,8 @@ 接受 拒绝 + 设置->关于->帮助 + 发送 上次应用崩溃了。你愿意把错误日志发送给开发者以便以后得到更好的用户体验?(以电子邮件的形式发送) diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 696f5841a..709559c0d 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -98,6 +98,8 @@ 接受 拒絕 + 設置->關於->幫助 + 發送 上次應用崩潰了。你願意把錯誤日誌發送給開發者以便以後得到更好的用户體驗?(以電子郵件的形式發送) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 05f57bf58..c8ee8eaaa 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -98,6 +98,8 @@ 接受 拒絕 + 設定->關於->幫助 + 傳送 剛剛當掉了。你是否願意把錯誤紀錄傳送給開發者讓未來的使用者體驗變得更好?(以電子郵件傳送) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b6d54b559..e4e1ea38a 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -140,6 +140,8 @@ Accept Reject + Settings->About->Help + Send This application crashed last time. Would you mind to send logcat to the developer for a better user experience in future ? (via e-mail) From 95ed0eb7ea15e2b061ae4458f430502e9e4ad2b6 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 10 Feb 2018 16:02:41 +0800 Subject: [PATCH 020/630] 1.0.26 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 984408cd2..a9d54a4d4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.hippo.ehviewer" minSdkVersion 14 targetSdkVersion 25 - versionCode 78 - versionName "1.0.25" + versionCode 79 + versionName "1.0.26" vectorDrawables.useSupportLibrary = true resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", "es" From 7a02103e05281caa5c8dce8a7c4ae839d4780eea Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 10 Feb 2018 21:50:22 +0800 Subject: [PATCH 021/630] =?UTF-8?q?Close=20#328,=20fix=20Chinese=20languag?= =?UTF-8?q?e=20detection=20Add=20=E4=B8=AD=E5=9B=BD=E7=BF=BB=E8=A8=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/hippo/ehviewer/client/data/GalleryInfo.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java b/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java index f47fbb5d2..3f94a14ab 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java +++ b/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java @@ -63,8 +63,8 @@ public class GalleryInfo implements Parcelable { public static final Pattern[] S_LANG_PATTERNS = { Pattern.compile("[(\\[]eng(?:lish)?[)\\]]", Pattern.CASE_INSENSITIVE), - // [((\[]ch(?:inese)?[))\]]|[汉漢]化|中[国國][语語]|中文 - Pattern.compile("[(\uFF08\\[]ch(?:inese)?[)\uFF09\\]]|[汉漢]化|中[国國][语語]|中文", Pattern.CASE_INSENSITIVE), + // [((\[]ch(?:inese)?[))\]]|[汉漢]化|中[国國][语語]|中文|中国翻訳 + Pattern.compile("[(\uFF08\\[]ch(?:inese)?[)\uFF09\\]]|[汉漢]化|中[国國][语語]|中文|中国翻訳", Pattern.CASE_INSENSITIVE), Pattern.compile("[(\\[]spanish[)\\]]|[(\\[]Español[)\\]]", Pattern.CASE_INSENSITIVE), Pattern.compile("[(\\[]korean?[)\\]]", Pattern.CASE_INSENSITIVE), Pattern.compile("[(\\[]rus(?:sian)?[)\\]]", Pattern.CASE_INSENSITIVE), From b3a23ad4e8481e6380d99f13496cb2b278faf284 Mon Sep 17 00:00:00 2001 From: "0w0@0w0.pw" <0w0@0w0.pw> Date: Sat, 10 Feb 2018 17:57:45 +0800 Subject: [PATCH 022/630] Add Privacy and Security Settings --- .../java/com/hippo/ehviewer/Settings.java | 13 ++++++++ .../hippo/ehviewer/ui/DirPickerActivity.java | 13 ++++++++ .../hippo/ehviewer/ui/GalleryActivity.java | 6 ++++ .../hippo/ehviewer/ui/LicenseActivity.java | 13 ++++++++ .../com/hippo/ehviewer/ui/MainActivity.java | 8 +++++ .../ehviewer/ui/SetSecurityActivity.java | 12 ++++++++ .../hippo/ehviewer/ui/SettingsActivity.java | 15 ++++++++++ .../hippo/ehviewer/ui/UConfigActivity.java | 13 ++++++++ .../ui/fragment/AdvancedFragment.java | 6 ---- .../ehviewer/ui/fragment/SecFragment.java | 30 +++++++++++++++++++ .../main/res/drawable/v_sec_primary_x24.xml | 9 ++++++ app/src/main/res/values-es/strings.xml | 3 ++ app/src/main/res/values-zh-rCN/strings.xml | 3 ++ app/src/main/res/values-zh-rHK/strings.xml | 3 ++ app/src/main/res/values-zh-rTW/strings.xml | 3 ++ app/src/main/res/values/strings.xml | 3 ++ app/src/main/res/xml/advanced_settings.xml | 6 ---- app/src/main/res/xml/secure_settings.xml | 18 +++++++++++ app/src/main/res/xml/settings_headers.xml | 5 ++++ 19 files changed, 170 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/hippo/ehviewer/ui/fragment/SecFragment.java create mode 100644 app/src/main/res/drawable/v_sec_primary_x24.xml create mode 100644 app/src/main/res/xml/secure_settings.xml diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 91e345734..77a6bc309 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -575,6 +575,19 @@ public static void putScreenLightness(int value) { putInt(KEY_SCREEN_LIGHTNESS, value); } + /******************** + ****** Privacy and Security + ********************/ + public static final String KEY_SEC_SECURITY = "enabled_secure"; + public static final boolean VALUE_SEC_SECURITY = false; + + public static boolean getEnabledSecurity() { + return getBoolean(KEY_SEC_SECURITY, VALUE_SEC_SECURITY); + } + public static void putEnabledSecurity(boolean value) { + putBoolean(KEY_READING_FULLSCREEN, value); + } + /******************** ****** Download ********************/ diff --git a/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java index 59dac07ad..798c8205c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java @@ -23,10 +23,12 @@ import android.support.annotation.Nullable; import android.view.MenuItem; import android.view.View; +import android.view.WindowManager; import android.widget.TextView; import android.widget.Toast; import com.hippo.ehviewer.R; +import com.hippo.ehviewer.Settings; import com.hippo.ripple.Ripple; import com.hippo.widget.DirExplorer; import com.hippo.yorozuya.ViewUtils; @@ -149,4 +151,15 @@ public void onChangeDir(File dir) { mPath.setText(dir.getPath()); } } + + @Override + protected void onResume() { + super.onResume(); + if(Settings.getEnabledSecurity()){ + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, + WindowManager.LayoutParams.FLAG_SECURE); + }else{ + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 2910c148f..dd9b273cf 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -407,6 +407,12 @@ protected void onResume() { if (mGLRootView != null) { mGLRootView.onResume(); } + if(Settings.getEnabledSecurity()){ + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, + WindowManager.LayoutParams.FLAG_SECURE); + }else{ + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/ui/LicenseActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/LicenseActivity.java index 17a1f3c85..0f39c3ce0 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/LicenseActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/LicenseActivity.java @@ -19,9 +19,11 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.view.MenuItem; +import android.view.WindowManager; import android.webkit.WebView; import com.hippo.ehviewer.R; +import com.hippo.ehviewer.Settings; public class LicenseActivity extends ToolbarActivity { @@ -59,4 +61,15 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } } + + @Override + protected void onResume() { + super.onResume(); + if(Settings.getEnabledSecurity()){ + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, + WindowManager.LayoutParams.FLAG_SECURE); + }else{ + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index f0032a5c9..7d30ab3c5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -36,6 +36,7 @@ import android.view.Gravity; import android.view.MenuItem; import android.view.View; +import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.TextView; import android.widget.Toast; @@ -392,6 +393,13 @@ protected void onResume() { super.onResume(); setNavCheckedItem(mNavCheckedItem); + + if(Settings.getEnabledSecurity()){ + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, + WindowManager.LayoutParams.FLAG_SECURE); + }else{ + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java index e17ca11a0..a678c4da6 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java @@ -22,6 +22,7 @@ import android.text.TextUtils; import android.view.MenuItem; import android.view.View; +import android.view.WindowManager; import android.widget.CheckBox; import com.hippo.ehviewer.R; @@ -108,4 +109,15 @@ public void onClick(View v) { finish(); } } + + @Override + protected void onResume() { + super.onResume(); + if(Settings.getEnabledSecurity()){ + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, + WindowManager.LayoutParams.FLAG_SECURE); + }else{ + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java index 4c0d61dba..e50549a9e 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java @@ -30,14 +30,17 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import android.widget.ListAdapter; import com.hippo.ehviewer.R; +import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.ui.fragment.AboutFragment; import com.hippo.ehviewer.ui.fragment.AdvancedFragment; import com.hippo.ehviewer.ui.fragment.DownloadFragment; import com.hippo.ehviewer.ui.fragment.EhFragment; import com.hippo.ehviewer.ui.fragment.ReadFragment; +import com.hippo.ehviewer.ui.fragment.SecFragment; import com.hippo.util.DrawableManager; import java.lang.reflect.Field; @@ -53,6 +56,7 @@ public final class SettingsActivity extends EhPreferenceActivity { DownloadFragment.class.getName(), AdvancedFragment.class.getName(), AboutFragment.class.getName(), + SecFragment.class.getName(), }; private class FakeLayoutInflater extends LayoutInflater { @@ -195,4 +199,15 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } } + + @Override + protected void onResume() { + super.onResume(); + if(Settings.getEnabledSecurity()){ + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, + WindowManager.LayoutParams.FLAG_SECURE); + }else{ + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java index 736f815da..f20a065cd 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java @@ -32,6 +32,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.WindowManager; import android.webkit.CookieManager; import android.webkit.CookieSyncManager; import android.webkit.JsPromptResult; @@ -43,6 +44,7 @@ import android.widget.TextView; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; +import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.client.EhCookieStore; import com.hippo.ehviewer.client.EhUrl; import com.hippo.widget.ProgressView; @@ -248,4 +250,15 @@ public boolean onJsConfirm(WebView view, String url, String message, final JsRes return true; } } + + @Override + protected void onResume() { + super.onResume(); + if(Settings.getEnabledSecurity()){ + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, + WindowManager.LayoutParams.FLAG_SECURE); + }else{ + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java index ebd490f26..23aa503cd 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java @@ -42,7 +42,6 @@ public class AdvancedFragment extends PreferenceFragment implements Preference.O private static final String KEY_DUMP_LOGCAT = "dump_logcat"; private static final String KEY_CLEAR_MEMORY_CACHE = "clear_memory_cache"; - private static final String KEY_PATTERN_PROTECTION = "pattern_protection"; private static final String KEY_EXPORT_DATA = "export_data"; private static final String KEY_IMPORT_DATA = "import_data"; @@ -65,11 +64,6 @@ public void onCreate(Bundle savedInstanceState) { @Override public void onResume() { super.onResume(); - - Preference patternProtection = findPreference(KEY_PATTERN_PROTECTION); - patternProtection.setSummary(TextUtils.isEmpty(Settings.getSecurity()) ? - R.string.settings_advanced_pattern_protection_not_set : - R.string.settings_advanced_pattern_protection_set); } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/SecFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/SecFragment.java new file mode 100644 index 000000000..5e464e5d2 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/SecFragment.java @@ -0,0 +1,30 @@ +package com.hippo.ehviewer.ui.fragment; + +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceFragment; +import android.text.TextUtils; + +import com.hippo.ehviewer.R; +import com.hippo.ehviewer.Settings; + +/** + * Created by Mo10 on 2018/2/10. + */ + +public class SecFragment extends PreferenceFragment { + private static final String KEY_PATTERN_PROTECTION = "pattern_protection"; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.secure_settings); + } + @Override + public void onResume() { + super.onResume(); + Preference patternProtection = findPreference(KEY_PATTERN_PROTECTION); + patternProtection.setSummary(TextUtils.isEmpty(Settings.getSecurity()) ? + R.string.settings_advanced_pattern_protection_not_set : + R.string.settings_advanced_pattern_protection_set); + } +} diff --git a/app/src/main/res/drawable/v_sec_primary_x24.xml b/app/src/main/res/drawable/v_sec_primary_x24.xml new file mode 100644 index 000000000..290d428a0 --- /dev/null +++ b/app/src/main/res/drawable/v_sec_primary_x24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ba0395797..0f5e784af 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -617,5 +617,8 @@ La contraseña no puede estar vacía Ocurrió algo malo H@H Downloader + Privacidad y seguridad + Captura de pantalla no permitida + Si está habilitado, no puede tomar capturas de pantalla de la aplicación, y el sistema no mostrará el contenido de la aplicación en el selector de tareas diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 73f38c5ad..e680c0778 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -627,5 +627,8 @@ 无法下载压缩包 压缩包 下载压缩包需要 H@H 客户端 + 隐私和安全 + 不允许屏幕抓取 + 启用后,将不能截取该应用的屏幕截图,同时,将不会在系统任务切换器中显示该应用的内容预览\n\n重新启动应用以生效此更改 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 709559c0d..b233e590a 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -627,5 +627,8 @@ 無法下載壓縮包 壓縮包 下載壓縮包需要 H@H 客户端 + 隱私和安全 + 不允許荧幕抓取 + 啟用後,將不能截取該應用的螢幕截圖,同時,將不會在系統任務切換器中顯示該應用的內容預覽\n\n重新啟動應用以生效此更改 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index c8ee8eaaa..9d6028fa8 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -627,5 +627,8 @@ 下載失敗 壓縮檔 下載壓縮檔需要 H@H 客戶端 + 隱私和安全 + 不允許荧幕抓取 + 啟用後,將不能截取該應用的螢幕截圖,同時,將不會在系統任務切換器中顯示該應用的內容預覽\n\n重新啟動應用以生效此更改 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e4e1ea38a..d2715c942 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -678,5 +678,8 @@ Failed to download archive Archive Need H@H client for archive download + Privacy and Security + Not Allowed Screen Capture + If enabled, you cannot take screenshots of the app, and the system will not display app contents in the task switcher\n\nNeed to restart the app for this to take effect diff --git a/app/src/main/res/xml/advanced_settings.xml b/app/src/main/res/xml/advanced_settings.xml index e351ccf68..3d57ca03c 100644 --- a/app/src/main/res/xml/advanced_settings.xml +++ b/app/src/main/res/xml/advanced_settings.xml @@ -48,12 +48,6 @@ app:entryValues="@array/read_cache_size_entry_values" android:defaultValue="160"/> - - + + + + + + diff --git a/app/src/main/res/xml/settings_headers.xml b/app/src/main/res/xml/settings_headers.xml index a1c82f418..d3750e12c 100644 --- a/app/src/main/res/xml/settings_headers.xml +++ b/app/src/main/res/xml/settings_headers.xml @@ -33,6 +33,11 @@ android:title="@string/settings_download" android:icon="@drawable/v_download_primary_x24"/> +
+
Date: Sat, 10 Feb 2018 18:30:00 +0800 Subject: [PATCH 023/630] Clean Code --- .../com/hippo/ehviewer/ui/DirPickerActivity.java | 11 ----------- .../main/java/com/hippo/ehviewer/ui/EhActivity.java | 13 +++++++++++++ .../com/hippo/ehviewer/ui/EhPreferenceActivity.java | 13 +++++++++++++ .../java/com/hippo/ehviewer/ui/GalleryActivity.java | 6 ------ .../java/com/hippo/ehviewer/ui/LicenseActivity.java | 13 ------------- .../java/com/hippo/ehviewer/ui/MainActivity.java | 8 -------- .../com/hippo/ehviewer/ui/SetSecurityActivity.java | 12 ------------ .../com/hippo/ehviewer/ui/SettingsActivity.java | 13 ------------- .../java/com/hippo/ehviewer/ui/UConfigActivity.java | 13 ------------- 9 files changed, 26 insertions(+), 76 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java index 798c8205c..535316727 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java @@ -151,15 +151,4 @@ public void onChangeDir(File dir) { mPath.setText(dir.getPath()); } } - - @Override - protected void onResume() { - super.onResume(); - if(Settings.getEnabledSecurity()){ - getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, - WindowManager.LayoutParams.FLAG_SECURE); - }else{ - getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); - } - } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java index 474702f8e..f379ffdb7 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java @@ -19,6 +19,8 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.WindowManager; import com.google.analytics.tracking.android.EasyTracker; import com.hippo.ehviewer.EhApplication; @@ -61,4 +63,15 @@ public void onStop() { mTrackStarted = false; } } + + @Override + protected void onResume() { + super.onResume(); + if(Settings.getEnabledSecurity()){ + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, + WindowManager.LayoutParams.FLAG_SECURE); + }else{ + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java index 6efdabb30..6863eebd4 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java @@ -18,6 +18,8 @@ import android.os.Bundle; import android.support.annotation.Nullable; +import android.util.Log; +import android.view.WindowManager; import com.google.analytics.tracking.android.EasyTracker; import com.hippo.app.AppCompatPreferenceActivity; @@ -61,4 +63,15 @@ public void onStop() { mTrackStarted = false; } } + + @Override + protected void onResume() { + super.onResume(); + if(Settings.getEnabledSecurity()){ + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, + WindowManager.LayoutParams.FLAG_SECURE); + }else{ + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index dd9b273cf..2910c148f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -407,12 +407,6 @@ protected void onResume() { if (mGLRootView != null) { mGLRootView.onResume(); } - if(Settings.getEnabledSecurity()){ - getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, - WindowManager.LayoutParams.FLAG_SECURE); - }else{ - getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); - } } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/ui/LicenseActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/LicenseActivity.java index 0f39c3ce0..17a1f3c85 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/LicenseActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/LicenseActivity.java @@ -19,11 +19,9 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.view.MenuItem; -import android.view.WindowManager; import android.webkit.WebView; import com.hippo.ehviewer.R; -import com.hippo.ehviewer.Settings; public class LicenseActivity extends ToolbarActivity { @@ -61,15 +59,4 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } } - - @Override - protected void onResume() { - super.onResume(); - if(Settings.getEnabledSecurity()){ - getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, - WindowManager.LayoutParams.FLAG_SECURE); - }else{ - getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); - } - } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index 7d30ab3c5..f0032a5c9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -36,7 +36,6 @@ import android.view.Gravity; import android.view.MenuItem; import android.view.View; -import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.TextView; import android.widget.Toast; @@ -393,13 +392,6 @@ protected void onResume() { super.onResume(); setNavCheckedItem(mNavCheckedItem); - - if(Settings.getEnabledSecurity()){ - getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, - WindowManager.LayoutParams.FLAG_SECURE); - }else{ - getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); - } } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java index a678c4da6..e17ca11a0 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java @@ -22,7 +22,6 @@ import android.text.TextUtils; import android.view.MenuItem; import android.view.View; -import android.view.WindowManager; import android.widget.CheckBox; import com.hippo.ehviewer.R; @@ -109,15 +108,4 @@ public void onClick(View v) { finish(); } } - - @Override - protected void onResume() { - super.onResume(); - if(Settings.getEnabledSecurity()){ - getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, - WindowManager.LayoutParams.FLAG_SECURE); - }else{ - getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); - } - } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java index e50549a9e..312b0e6c8 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java @@ -30,11 +30,9 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; import android.widget.ListAdapter; import com.hippo.ehviewer.R; -import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.ui.fragment.AboutFragment; import com.hippo.ehviewer.ui.fragment.AdvancedFragment; import com.hippo.ehviewer.ui.fragment.DownloadFragment; @@ -199,15 +197,4 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } } - - @Override - protected void onResume() { - super.onResume(); - if(Settings.getEnabledSecurity()){ - getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, - WindowManager.LayoutParams.FLAG_SECURE); - }else{ - getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); - } - } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java index f20a065cd..736f815da 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/UConfigActivity.java @@ -32,7 +32,6 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.WindowManager; import android.webkit.CookieManager; import android.webkit.CookieSyncManager; import android.webkit.JsPromptResult; @@ -44,7 +43,6 @@ import android.widget.TextView; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; -import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.client.EhCookieStore; import com.hippo.ehviewer.client.EhUrl; import com.hippo.widget.ProgressView; @@ -250,15 +248,4 @@ public boolean onJsConfirm(WebView view, String url, String message, final JsRes return true; } } - - @Override - protected void onResume() { - super.onResume(); - if(Settings.getEnabledSecurity()){ - getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, - WindowManager.LayoutParams.FLAG_SECURE); - }else{ - getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); - } - } } From fa3f409a702a19c56d22c6fe29dff04a51d3aa0d Mon Sep 17 00:00:00 2001 From: "0w0@0w0.pw" <0w0@0w0.pw> Date: Sat, 10 Feb 2018 18:35:08 +0800 Subject: [PATCH 024/630] Clean up the import --- app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java index 535316727..59dac07ad 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/DirPickerActivity.java @@ -23,12 +23,10 @@ import android.support.annotation.Nullable; import android.view.MenuItem; import android.view.View; -import android.view.WindowManager; import android.widget.TextView; import android.widget.Toast; import com.hippo.ehviewer.R; -import com.hippo.ehviewer.Settings; import com.hippo.ripple.Ripple; import com.hippo.widget.DirExplorer; import com.hippo.yorozuya.ViewUtils; From a56c79d4bbbce9420f68dcacccfbcc2f20893094 Mon Sep 17 00:00:00 2001 From: "0w0@0w0.pw" <0w0@0w0.pw> Date: Sat, 10 Feb 2018 23:02:21 +0800 Subject: [PATCH 025/630] Remove some translations Rename Privacy settings --- .../java/com/hippo/ehviewer/Settings.java | 2 +- .../hippo/ehviewer/ui/SettingsActivity.java | 4 +- .../ehviewer/ui/fragment/AboutFragment.java | 17 +------ .../ehviewer/ui/fragment/PrivacyFragment.java | 47 +++++++++++++++++++ .../ehviewer/ui/fragment/SecFragment.java | 30 ------------ app/src/main/res/values-es/strings.xml | 14 +++--- app/src/main/res/values-zh-rCN/strings.xml | 16 +++---- app/src/main/res/values-zh-rHK/strings.xml | 16 +++---- app/src/main/res/values-zh-rTW/strings.xml | 16 +++---- app/src/main/res/values/strings.xml | 16 +++---- app/src/main/res/xml/about_settings.xml | 12 ----- app/src/main/res/xml/privacy_settings.xml | 30 ++++++++++++ app/src/main/res/xml/secure_settings.xml | 18 ------- app/src/main/res/xml/settings_headers.xml | 4 +- 14 files changed, 121 insertions(+), 121 deletions(-) create mode 100644 app/src/main/java/com/hippo/ehviewer/ui/fragment/PrivacyFragment.java delete mode 100644 app/src/main/java/com/hippo/ehviewer/ui/fragment/SecFragment.java create mode 100644 app/src/main/res/xml/privacy_settings.xml delete mode 100644 app/src/main/res/xml/secure_settings.xml diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 77a6bc309..3ac143126 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -578,7 +578,7 @@ public static void putScreenLightness(int value) { /******************** ****** Privacy and Security ********************/ - public static final String KEY_SEC_SECURITY = "enabled_secure"; + public static final String KEY_SEC_SECURITY = "enable_secure"; public static final boolean VALUE_SEC_SECURITY = false; public static boolean getEnabledSecurity() { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java index 312b0e6c8..f0001c803 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java @@ -38,7 +38,7 @@ import com.hippo.ehviewer.ui.fragment.DownloadFragment; import com.hippo.ehviewer.ui.fragment.EhFragment; import com.hippo.ehviewer.ui.fragment.ReadFragment; -import com.hippo.ehviewer.ui.fragment.SecFragment; +import com.hippo.ehviewer.ui.fragment.PrivacyFragment; import com.hippo.util.DrawableManager; import java.lang.reflect.Field; @@ -54,7 +54,7 @@ public final class SettingsActivity extends EhPreferenceActivity { DownloadFragment.class.getName(), AdvancedFragment.class.getName(), AboutFragment.class.getName(), - SecFragment.class.getName(), + PrivacyFragment.class.getName(), }; private class FakeLayoutInflater extends LayoutInflater { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java index 04226c2ca..c5f689a6f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java @@ -33,8 +33,7 @@ import com.hippo.util.AppHelper; public class AboutFragment extends PreferenceFragment - implements Preference.OnPreferenceChangeListener, - Preference.OnPreferenceClickListener { + implements Preference.OnPreferenceClickListener { private static final String KEY_AUTHOR = "author"; private static final String KEY_DONATE = "donate"; @@ -46,7 +45,6 @@ public void onCreate(Bundle savedInstanceState) { addPreferencesFromResource(R.xml.about_settings); Preference author = findPreference(KEY_AUTHOR); - Preference enableAnalytics = findPreference(Settings.KEY_ENABLE_ANALYTICS); Preference donate = findPreference(KEY_DONATE); Preference checkForUpdate = findPreference(KEY_CHECK_FOR_UPDATES); @@ -56,21 +54,8 @@ public void onCreate(Bundle savedInstanceState) { author.setOnPreferenceClickListener(this); donate.setOnPreferenceClickListener(this); checkForUpdate.setOnPreferenceClickListener(this); - - enableAnalytics.setOnPreferenceChangeListener(this); } - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - String key = preference.getKey(); - if (Settings.KEY_ENABLE_ANALYTICS.equals(key)) { - if (newValue instanceof Boolean && (Boolean) newValue) { - Analytics.start(getActivity()); - } - return true; - } - return true; - } @Override public boolean onPreferenceClick(Preference preference) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/PrivacyFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/PrivacyFragment.java new file mode 100644 index 000000000..6757946ad --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/PrivacyFragment.java @@ -0,0 +1,47 @@ +package com.hippo.ehviewer.ui.fragment; + +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceFragment; +import android.text.TextUtils; + +import com.hippo.ehviewer.Analytics; +import com.hippo.ehviewer.R; +import com.hippo.ehviewer.Settings; + +/** + * Created by Mo10 on 2018/2/10. + */ + +public class PrivacyFragment extends PreferenceFragment + implements Preference.OnPreferenceChangeListener { + private static final String KEY_PATTERN_PROTECTION = "pattern_protection"; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.privacy_settings); + Preference enableAnalytics = findPreference(Settings.KEY_ENABLE_ANALYTICS); + + enableAnalytics.setOnPreferenceChangeListener(this); + } + @Override + public void onResume() { + super.onResume(); + Preference patternProtection = findPreference(KEY_PATTERN_PROTECTION); + patternProtection.setSummary(TextUtils.isEmpty(Settings.getSecurity()) ? + R.string.settings_privacy_pattern_protection_not_set : + R.string.settings_privacy_pattern_protection_set); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + String key = preference.getKey(); + if (Settings.KEY_ENABLE_ANALYTICS.equals(key)) { + if (newValue instanceof Boolean && (Boolean) newValue) { + Analytics.start(getActivity()); + } + return true; + } + return true; + } +} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/SecFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/SecFragment.java deleted file mode 100644 index 5e464e5d2..000000000 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/SecFragment.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.hippo.ehviewer.ui.fragment; - -import android.os.Bundle; -import android.preference.Preference; -import android.preference.PreferenceFragment; -import android.text.TextUtils; - -import com.hippo.ehviewer.R; -import com.hippo.ehviewer.Settings; - -/** - * Created by Mo10 on 2018/2/10. - */ - -public class SecFragment extends PreferenceFragment { - private static final String KEY_PATTERN_PROTECTION = "pattern_protection"; - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.secure_settings); - } - @Override - public void onResume() { - super.onResume(); - Preference patternProtection = findPreference(KEY_PATTERN_PROTECTION); - patternProtection.setSummary(TextUtils.isEmpty(Settings.getSecurity()) ? - R.string.settings_advanced_pattern_protection_not_set : - R.string.settings_advanced_pattern_protection_set); - } -} diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0f5e784af..43fb20963 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -455,9 +455,9 @@ Borrar caché de memoria Borrar vistas previas, galerías, información y caché de memoria Tamaño del caché (archivos temporales) - Protección por patrón - No se ha configurado la protección por patrón - La protección por patrón ha sido configurado + Protección por patrón + No se ha configurado la protección por patrón + La protección por patrón ha sido configurado Exportar datos Guardar datos en almacenamiento externo, tales como la lista de descarga, lista de búsqueda rápida, entre otros Datos exportados en %s @@ -479,8 +479,8 @@ Alipay: seven332$163.com Tu donación me ayuda a desarrollar más y mejores aplicaciones.\n\nAlipay: seven332$163.com Email copiado al portapapeles - Habilitar analytics - Acerca de analytics + Habilitar analytics + Acerca de analytics Versión de compilación Verificar actualizaciones Canal de versiones de prueba @@ -617,8 +617,6 @@ La contraseña no puede estar vacía Ocurrió algo malo H@H Downloader - Privacidad y seguridad - Captura de pantalla no permitida - Si está habilitado, no puede tomar capturas de pantalla de la aplicación, y el sistema no mostrará el contenido de la aplicación en el selector de tareas + Privacidad diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e680c0778..c76e05e3d 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -480,9 +480,9 @@ 清理内存缓存 清理缩略图、画廊信息的内存缓存 阅读缓存大小 - 图案保护 - 未设置图案保护 - 已设置图案保护 + 图案保护 + 未设置图案保护 + 已设置图案保护 导出数据 保存数据至外置存储器,例如下载列表,快速搜索列表 已导出数据至 %s @@ -504,8 +504,8 @@ 支付宝:seven332$163.com 你的捐赠能帮助我开发更多更好的应用。\n\n支付宝:seven332$163.com 邮箱地址已复制到剪切板 - 启用数据统计 - 关于数据统计 + 启用数据统计 + 关于数据统计 版本号 检查更新 更新测试版 @@ -627,8 +627,8 @@ 无法下载压缩包 压缩包 下载压缩包需要 H@H 客户端 - 隐私和安全 - 不允许屏幕抓取 - 启用后,将不能截取该应用的屏幕截图,同时,将不会在系统任务切换器中显示该应用的内容预览\n\n重新启动应用以生效此更改 + 隐私 + 不允许屏幕抓取 + 启用后,将不能截取该应用的屏幕截图,同时,将不会在系统任务切换器中显示该应用的内容预览\n\n重新启动应用以生效此更改 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index b233e590a..d624587ff 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -480,9 +480,9 @@ 清理內存緩存 清理縮略圖、畫廊信息的內存緩存 閲讀緩存大小 - 圖案保護 - 未設置圖案保護 - 已設置圖案保護 + 圖案保護 + 未設置圖案保護 + 已設置圖案保護 導出數據 保存數據至外置存儲器,例如下載列表,快速搜索列表 已導出數據至 %s @@ -504,8 +504,8 @@ 支付寶:seven332$163.com 你的捐贈能幫助我開發更多更好的應用。\n\n支付寶:seven332$163.com 郵箱地址已複製到剪切板 - 啟用數據統計 - 關於數據統計 + 啟用數據統計 + 關於數據統計 版本號 檢查更新 更新測試版 @@ -627,8 +627,8 @@ 無法下載壓縮包 壓縮包 下載壓縮包需要 H@H 客户端 - 隱私和安全 - 不允許荧幕抓取 - 啟用後,將不能截取該應用的螢幕截圖,同時,將不會在系統任務切換器中顯示該應用的內容預覽\n\n重新啟動應用以生效此更改 + 隱私和安 + 不允許荧幕抓取 + 啟用後,將不能截取該應用的螢幕截圖,同時,將不會在系統任務切換器中顯示該應用的內容預覽\n\n重新啟動應用以生效此更改 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 9d6028fa8..e686f8771 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -480,9 +480,9 @@ 清除記憶體快取 清除縮圖、圖庫詳細資料的記憶體快取 閱讀快取大小 - 繪圖解鎖 - 尚未設定繪圖解鎖 - 已設定繪圖解鎖 + 繪圖解鎖 + 尚未設定繪圖解鎖 + 已設定繪圖解鎖 匯出檔案 儲存資料至外接儲存設備,例如下載列表,快速搜尋列表 已匯出資料至 %s @@ -504,8 +504,8 @@ 支付寶:seven332$163.com 你的贊助能幫助我開發更多更好的軟體。\n\n支付寶:seven332$163.com 已將電子信箱地址複製到剪貼簿 - 啟用資料統計 - 關於資料統計 + 啟用資料統計 + 關於資料統計 版本號碼 檢查更新 更新測試版 @@ -627,8 +627,8 @@ 下載失敗 壓縮檔 下載壓縮檔需要 H@H 客戶端 - 隱私和安全 - 不允許荧幕抓取 - 啟用後,將不能截取該應用的螢幕截圖,同時,將不會在系統任務切換器中顯示該應用的內容預覽\n\n重新啟動應用以生效此更改 + 隱私 + 不允許荧幕抓取 + 啟用後,將不能截取該應用的螢幕截圖,同時,將不會在系統任務切換器中顯示該應用的內容預覽\n\n重新啟動應用以生效此更改 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d2715c942..91fab5bd8 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -523,9 +523,9 @@ Clear memory cache Clear thumb, gallery info memory cache Read cache size - Pattern protection - Pattern protection has not been set - Pattern protection has been set + Pattern protection + Pattern protection has not been set + Pattern protection has been set Export data Save data to external storage, such as download list, quick search list Exported data to %s @@ -549,8 +549,8 @@ Alipay: seven332$163.com Your donation can help me develop more and better applications.\n\nAlipay: seven332$163.com Email address copied to clipboard - Enable analytics - About analytics + Enable analytics + About analytics Build version Check for updates Beta update channel @@ -678,8 +678,8 @@ Failed to download archive Archive Need H@H client for archive download - Privacy and Security - Not Allowed Screen Capture - If enabled, you cannot take screenshots of the app, and the system will not display app contents in the task switcher\n\nNeed to restart the app for this to take effect + Privacy + Not Allowed Screen Capture + If enabled, you cannot take screenshots of the app, and the system will not display app contents in the task switcher\n\nNeed to restart the app for this to take effect diff --git a/app/src/main/res/xml/about_settings.xml b/app/src/main/res/xml/about_settings.xml index fd17ade35..061936603 100644 --- a/app/src/main/res/xml/about_settings.xml +++ b/app/src/main/res/xml/about_settings.xml @@ -72,18 +72,6 @@ android:summary="@string/settings_about_beta_update_channel_summary" android:defaultValue="@bool/beta"/> - - - - diff --git a/app/src/main/res/xml/privacy_settings.xml b/app/src/main/res/xml/privacy_settings.xml new file mode 100644 index 000000000..a06e131fd --- /dev/null +++ b/app/src/main/res/xml/privacy_settings.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/app/src/main/res/xml/secure_settings.xml b/app/src/main/res/xml/secure_settings.xml deleted file mode 100644 index b256c56ff..000000000 --- a/app/src/main/res/xml/secure_settings.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/xml/settings_headers.xml b/app/src/main/res/xml/settings_headers.xml index d3750e12c..d58f4aac5 100644 --- a/app/src/main/res/xml/settings_headers.xml +++ b/app/src/main/res/xml/settings_headers.xml @@ -34,8 +34,8 @@ android:icon="@drawable/v_download_primary_x24"/>
Date: Sat, 24 Feb 2018 19:03:09 +0800 Subject: [PATCH 026/630] Close #341, update gallery comment post format --- app/src/main/java/com/hippo/ehviewer/client/EhEngine.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java index f52595aad..4062a85d5 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -370,8 +370,7 @@ public static RateGalleryParser.Result rateGallery(@Nullable EhClient.Task task, public static GalleryComment[] commentGallery(@Nullable EhClient.Task task, OkHttpClient okHttpClient, String url, String comment) throws Exception { FormBody.Builder builder = new FormBody.Builder() - .add("commenttext", comment) - .add("postcomment", "Post New"); + .add("commenttext_new", comment); Log.d(TAG, url); Request request = new EhRequestBuilder(url, null != task ? task.getEhConfig() : Settings.getEhConfig()) .post(builder.build()) From cc39e0dda32bd8f110917db300944b25d92567c2 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 25 Feb 2018 20:26:34 +0800 Subject: [PATCH 027/630] Show post gallery comment error --- .../com/hippo/ehviewer/client/EhEngine.java | 7 +++++++ .../hippo/ehviewer/ui/scene/EhCallback.java | 18 ++++++++++++++++++ .../ui/scene/GalleryCommentsScene.java | 3 ++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java index 4062a85d5..0225eb6ec 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -55,6 +55,7 @@ import org.json.JSONObject; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; import java.io.File; import java.util.ArrayList; @@ -391,6 +392,12 @@ public static GalleryComment[] commentGallery(@Nullable EhClient.Task task, headers = response.headers(); body = response.body().string(); Document document = Jsoup.parse(body); + + Elements elements = document.select("#chd + p"); + if (elements.size() > 0) { + throw new EhException(elements.get(0).text()); + } + return GalleryDetailParser.parseComments(document); } catch (Exception e) { throwException(call, code, headers, body, e); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/EhCallback.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/EhCallback.java index 5f7fd140a..eec0a7b95 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/EhCallback.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/EhCallback.java @@ -40,6 +40,14 @@ public EhCallback(Context context, int stageId, String sceneTag) { public abstract boolean isInstance(SceneFragment scene); + public Context getContent() { + Context context = getStageActivity(); + if (context == null) { + context = getApplication(); + } + return context; + } + public EhApplication getApplication() { return mApplication; } @@ -71,4 +79,14 @@ public void showTip(@StringRes int id, int length) { length == BaseScene.LENGTH_LONG ? Toast.LENGTH_LONG : Toast.LENGTH_SHORT).show(); } } + + public void showTip(String tip, int length) { + StageActivity activity = getStageActivity(); + if (activity instanceof MainActivity) { + ((MainActivity) activity).showTip(tip, length); + } else { + Toast.makeText(getApplication(), tip, + length == BaseScene.LENGTH_LONG ? Toast.LENGTH_LONG : Toast.LENGTH_SHORT).show(); + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java index 22cd8f3b3..cea1072bb 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java @@ -69,6 +69,7 @@ import com.hippo.text.Html; import com.hippo.text.URLImageGetter; import com.hippo.util.DrawableManager; +import com.hippo.util.ExceptionUtils; import com.hippo.util.ReadableTime; import com.hippo.util.TextUrl; import com.hippo.view.ViewTransition; @@ -737,7 +738,7 @@ public void onSuccess(GalleryComment[] result) { @Override public void onFailure(Exception e) { - showTip(R.string.comment_failed, LENGTH_SHORT); + showTip(getContent().getString(R.string.comment_failed) + "\n" + ExceptionUtils.getReadableString(e), LENGTH_SHORT); } @Override From 6da2bc352d0312d0d0895a0c6b844320cfb7c29a Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 25 Feb 2018 20:27:40 +0800 Subject: [PATCH 028/630] Update gradle --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 99945643d..6fe0349ae 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { maven { url "https://jitpack.io" } } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.github.seven332:android-chinese-string-gradle-plugin:0.1.0' // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c3bb56012..12517833f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jan 18 22:31:05 CST 2016 +#Sun Feb 25 19:25:50 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip From 02abba52a7636c1243ef0a56e60dcea3c577d325 Mon Sep 17 00:00:00 2001 From: trhjew Date: Tue, 27 Feb 2018 20:45:47 +0800 Subject: [PATCH 029/630] Create strings.xml --- app/src/main/res/values-ja/strings.xml | 635 +++++++++++++++++++++++++ 1 file changed, 635 insertions(+) create mode 100644 app/src/main/res/values-ja/strings.xml diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml new file mode 100644 index 000000000..4b5eeacdc --- /dev/null +++ b/app/src/main/res/values-ja/strings.xml @@ -0,0 +1,635 @@ + + + + + + EhViewer + + ホームページ + 人気 + 気に入り + 閲覧履歴 + ダウンロード + 設定 + + ユーザー名 + パスワード + 検証コード(必要ではない) + + こちらにクリック + ロード中… + 失敗 + + ログイン + 登録 + Webでログイン + Cookieでログイン + ニックネームを入力 + ニックネーム + ニックネームが空 + ログインください + + Little Hippo + + Cookieは、ブラウザに格納された小さなデータです。Cookie及びその入手方法がかわからない場合は、Webで検索してください。\n\n特定のCookieを入力することでログインしてください。 + テキストが空 + 警告 + あなたが入力したCookieは間違ったようです。チェックしてください。 + よい + 間違ってない + 古いCookieを探す + + ダウンロードパスは利用できません。ダウンロードパスをリセットしてください。 + + モバイルネットワークを使っている + + 間違ったステータスコード:%d + タイムアウト + 未知ホスト + リダイレクトが多すぎ + ネットエラー + おかしいエラー + アクティビティが見つからない + リンクを分析できない + フォルダパスではない + providerがない + デコード失敗 + 見つからない + + 無効のzipファイル + 読み取り失敗 + 範囲外 + 書き込み失敗 + 分析失敗 + 509 + 無効のリンク + pToken取得エラー + 指定ギャラリーのキーワードは「618395 0439fa3666」のようはずです。 + 一時ファイルを作成できない + 画像を保存できない + 無効数字 + + このアプリの内容はインターネットからのもので、内容によっては生理や心理に回復不能な損害を与えることが可能です。このアプリの作成者は、このアプリケによって引き起こされるいかなる結果に対しても責任を負いません。 + ユーザー名が空は不可能 + パスワードが空は不可能 + ログインをスキップ + ログイン失敗 + これはウェブサイトのアップデートによって引き起こされることかもしれず、またおかしいことが起こったかもしれません。ログインボタンの下でWebでログインするか、Cookieを入力するか、あるいはログインをスキップします。ログインをスキップするでアプリが正常に使用できなくなることがあります。0.6.xバージョンでログインした場合は、「Cookieでログイン」を選択することが推奨です。 + もう一度押して終了 + クリックしてもう一度試し + EhViewerはギャラリーをダウンロードするためにデバイスのストレージへのアクセスを要求します。あなたは許可しますか? + 痛い + あなたは、開発者があなたのデバイスや使用状況に関する情報を収集できるように同意しますか?これは開発にとって大きな助けになります。<br><br>データ統計サービスはGoogleアナリティクスによって提供で、 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> にプライバシーポリシーを閲覧できます。<br><br>データ統計に参加することに同意すると、Android APIのバージョン、デバイスモデル、言語の場所、アプリのバージョン番号、セッションの長さ、使用するアプリの数など、デバイス情報とアプリの使用状況が記録されます。開発者は、電話番号、電子メールアドレス、IMEIの情報は記録しないことを約束します。<br><br>統計に参加することに同意するまで、あなたの情報は記録されません。<br><br>記録されたデータはGoogleアナリティクスで分析され、分析レポートはアプリ開発者のみがアクセスできます。 + 了解 + 認める + 断る + + 設定->アプリについて->ヘルプ + + + 发送 + 前回のアプリがクラッシュしました。エラーログを開発者に送信して、今後のユーザーエクスペリエンスを向上させますか?(Eメール送信) + + + どのギャラリーサイトを選択しますか? + e-hentai:誰にでも開ける\nexhentai:ログインしたユーザーにのみ開ける + サイトを選択してください + + + 更新 + バージョン:%1$s\nサイズ:%2$s\n\n%3$s + EhViewerはもう最新バージョン + + + ExHentaiを検索 + E-Hentaiを検索 + 何も見つかない + + 検索 + + キーワード検索 + 画像検索 + + 普通検索 + 詳細オプション + 画像検索 + 一般検索 + 指定アップローダー + 指定タグ + 指定ギャラリー + 詳細オプションを有効にする + + 一般検索:搜索です。\n\n指定アップローダー:このアップローダーによってアップロードされたギャラリーを一覧表示します。他のオプションは無視されます。\n\n指定タグ:このタッグを含むギャラリーを一覧表示します。 他のオプションは無視されます。\n\n指定画廊:このギャラリーにジャンプします。 キーワードは「gid token」のはずです。 + + ギャラリーを検索 + ギャラリータグを検索 + ギャラリー説明を検索 + トレントファイル名を検索 + トレントのあるギャラリーだけを表示 + 低希望タグを検索 + 低評価タグを検索 + 削除されたギャラリーを表示 + 最低採点: + + 画像を選択 + 類似検索を使用 + カバーのみを検索 + 削除されたギャラリーを表示 + まずは画像を選択してください + + 気に入り + + クイック検索 + 「+」をクリックしてクイック検索を追加 + クイック検索を追加 + ネームが空 + 削除 + クイック検索を削除 + 「%s」を削除? + ここがクイック検索 + ギャラリーリストのステータスはクイック検索として保存されます。検索パネルのステータスを保存する場合は、まず検索を実行してください。 + 私を読んで + 画像検索をクイック検索として追加できません + 同じクイック検索がすでに名前が「%s」として存在しています。 + 同じ名前が既に存在 + + 第%1$dページ,合計%2$dページ + + + 星2 + 星3 + 星4 + 星5 + + + ギャラリーを見つけない + ダウンロード + 閲覧 + 詳しい情報を見る + + %dページ + + \u2665 %d + %1$s (%2$.2f, %3$d) + 気に入り + トレント (%d) + シェア + 採点 + 類似のギャラリー + カバーを検索 + タグなし + コメントなし + すべてのコメントが表示された + 他のコメントを見る + プレビューなし + すべてのプレビューが表示された + 他のプレビューを見る + リフレッシュ + 他のアプリケーションで開く + 採点成功 + 採点失敗 + トレントなし + トレント + 気に入った + 気に入りに追加してない + 気に入りに追加 + 気に入りを覚える + 気に入りに追加した + 気に入りから削除 + 気に入りに追加失敗 + 気に入りから削除失敗 + アップローダフィルター「%s」を追加? + フィルターが追加された + + + 良すぎてたまらない + ベリーグッド + とてもいい + いい + まあまあ + 普通だな + 悪い + とても悪い + 目の障害になる + 悪くて呼吸できない + + + + ギャラリー詳細 + クリップボードにコピーされた + キー + + Gid + Token + リンク + タイトル + 日本語タイトル + サムネイル + カテゴリー + アップローダー + アップロード時間 + 親ギャラリー + 可視性 + 言語 + ページ数 + サイズ + 気に入り回数 + 気に入った + 採点回数 + 採点 + トレント数 + トレント + + + ギャラリーコメント + コメントはまだない + コメント成功 + コメント失敗 + コメントテキストをコピー + 賛成 + もう賛成しない + ゴミコメント + ゴミコメントではない + もう賛成した + もう賛成しなかった + ゴミコメントと指定した + もうゴミコメントと指定しない + 投票失敗 + 投票状況を見る + + + ギャラリープレビュー + ジャンプ + + + ダウンロード - %s + ここがダウンロード情報 + 起動してない + 待っている + ダウンロード中 + ダウンロードした + ダウンロード失敗 + %d 未完成 + 完成した + 509警告 + 画像クオータが使い果たされました。ダウンロードをやめて休んでください。 + ダウンロード終了 + %dつダウンロード成功 + %dつダウンロード失敗 + %1$dつダウンロード成功,%2$dつダウンロード失敗 + ダウンロード成功:%s + ダウンロード失敗:%s + ダウンロードを削除 + ダウンロードリストから%sを削除? + ダウンロードリストから%dつを削除? + 画像ファイルを削除 + 全部停止 + ラベル + デフォルト + 移動 + ダウンロードラベル + 全部开始 + 全部停止 + EhViewerダウンロードサービス + %s + %1$s,残り%2$s + ダウンロードラベルを覚える + デフォルトダウンロードラベル + ダウンロードリストに追加した + + + ここがダウンロードラベル + 追加 + 新ラベル + ラベルテキストが空 + 「デフォルト」は無効ラベル + ラベルは既に存在 + ラベルの名前を変更 + ラベルを削除 + 「%s」を削除? + + + ここが閲覧履歴 + 全部クリア + すべて閲覧履歴をクリア? + + + フィルター + ここがフィルターリスト + タイトル + アップローダー + タグ + タグセット + タイトルフィルター「%s」を削除? + アップローダーフィルター「%s」を削除? + タグフィルター「%s」を削除? + フィルター「%s」を削除? + 提示 + フィルターを追加 + 定義を確認 + フィルターテキスト + タイトルフィルター:このキーワードがタイトルに含むギャラリーを除外します。\n\nアップローダー:このアップローダーがアップロードしたギャラリーを除外します。\n\nタグフィルター:このタグを含むギャラリーを除外します。ギャラリーリストを取得する時間が長くなります。\n\nタグセットフィルター:このタグセットを含むギャラリーを除外します。ギャラリーリストを取得する時間が長くなります。 + + + パターン保護を設定 + パターンを描いてパターン保護を設定する\n空白のままパターン保護を解除する + 設定 + 指紋でのロック解除を許可する + + + EHentai設定 + 応用 + 右上隅のチェックマークをクリックして設定を保存します。 + + + 第%dページ + @string/refresh + @string/share + 保存 + ブックマークを追加 + メニュー + 画像をシェア + 画像は%sに保存された + + + EH + ログアウト + ログアウト後はアプリを再起動して、再度ログインします。 + おう、マイディア、君は本当にログアウトしたい?本当にログアウトしますか? + イエス、オレはログアウトします + ログアウトした。アプリを再起動することで再度ログインします。 + EHentai設定 + EHentaiサイト上の設定 + ギャラリーサイト + リストモード + 詳細 + サムネイル + 詳細サイズ + + + サムネイルサイズ + + + + サムネイル解像度 + %s、解像度を指定すると、サムネイルを取得できない場合があります + 自動 + サムネイルリンクを修正 + ホームページをカテゴリ表示 + ホームページに表示されるデフォルトカテゴリ + タグセットを除外 + 指定したタグセットをデフォルト検索から除外 + 言語を除外 + 指定した言語のギャラリーをホームページと検索から隠す + H@H + %1$s %2$s:%3$d + 未設定 + 日本語タイトルを表示 + 日本のタイトルを表示してみます。これにより、ギャラリーリストを取得する時間が長くなります + デフォルトのタイトルを表示します。通常は英語 + フィルター + タイトル、アップローダ、タグ、タグセットをフィルター + モバイルネットワーク警告 + + 閲覧 + スクリーン方向 + システムデフォルト + 縦画面 + 横画面 + 閲覧方向 + 左から右へ + 右から左へ + 上から下へ + ページをズーム + 元のサイズ + 幅に合わせ + 長さに合わせ + スクリーンに合わせ + 固定ズーム + ページを開く位置 + 左上隅 + 右上隅 + 左下隅 + 右下隅 + 中心 + 画面を常に明るい + 時計を表示 + 進捗を表示 + 電量を表示 + ページ間隔を表示 + ボリュームキーでページをめくる + フルスクリーン + スクリーンの明るさをカスタム + スクリーンの明るさ + + ダウンロード + ダウンロードパス + 無効なダウンロードパス + ダウンロードパスを取得できない + おかしいことをしない限り、KitKatの外部SDカードにデータを書き込むことはできません。 ただし、<SD card>/Android/data/com.hippo.ehviewerこのパスは特殊なものであり、書き込むことができます。 + Lollipopは外部SDカードに書き込むために新しいAPIを提供しました。 ダウンロードパスを外部SDカードに設定したい場合は、「ドキュメント」ボタンをクリックしてください + ドキュメント + 続く + ダウンロードスレッド数 + 同時に最大%s枚の画像をダウンロードできる + 画像をプリロード + %s枚の画像を後ろへプリロード + 画像解像度 + %s,1280xを超える解像度は良くない場合があります + 自動 + 元の画像をダウンロード + これは危険です!これを確認すると、ダウンロードクォータが急激に失われます + メディアスキャンを許可 + あなたのギャラリーアプリを他の人から避けてください + ほとんどのギャラリーアプリはダウンロードディレクトリの写真を表示しません + ダウンロードを復元 + ダウンロードディレクトリのすべてを復元 + 復元中 + 復元可能なダウンロードが見つからない + 復元失敗 + %sつ復元成功 + ダウンロードリダンダンシーを整理 + ダウンロードリストにない画像ファイルをダウンロードディレクトリから整理 + リダンダンシーが見つからない + ダンダンシー整理完成、合計%dつ + + 詳細 + 解析失敗したときにページ内容を保存 + ページ内容にプライバシーに関する機密情報が含まれるかもしれない + ログをエクスポート + ログを外部メモリーにエクスポート + ログをエクスポート失敗 + ログを%sにエクスポートした + ギャラリーのダウンロードパスキャッシュをクリア + ギャラリーのダウンロードパスが間違っているかもしれず、再ダウンロードにつながりました。ギャラリーのダウンロードパスキャッシュをクリアすると、この問題が解決できるかもしれません。 + ギャラリーのダウンロードパスキャッシュをクリア? + メモリキャッシュを整理 + サムネイル、ギャラリー情報のメモリキャッシュを整理 + 閲覧キャッシュサイズ + パターン保護 + パターン保護は +未設定 + パターン保護は設定した + データをエクスポート + データを外部メモリーにエクスポートする、例えダウンロードリスト、クイック検索リストなど + データを%sにエクスポート + データをエクスポート失敗 + データをインポート + 外部メモリーからインポート + データをインポート成功 + + アプリについて + 作成者 + Google+コミュニティ + サイト + ソース + 更新ログ + ヘルプ + オープンソースライセンス + EhViewerの誕生は、多くのオープンソースプロジェクトから切り離すことができません + 寄付 + Alipay:seven332$163.com + あなたの寄付はより多くのより良いアプリの開発に役立ちます。\n\nAlipay:seven332$163.com + メールアドレスがクリップボードにコピーされた + データ統計を起用 + データ統計について + バージョン番号 + アップデートを確認 + ベータ版をアップデート + ベータ版ではデバイスに予期しないエラーが発生することがあります + + + 言語を除外 + すべて選択 + すべてキャンセル + 选択范囲を反転 + 言語 + 原作 + 翻訳 + 書き換え + 日本語 + 英語 + 中国語 + オランダ語 + フランス語 + ドイツ語 + ハンガリー語 + イタリア語 + 韓国語 + ポーランド語 + ポルトガル語 + ロシア語 + スペイン語 + タイ語 + ベトナム語 + N/A + + + 待ってください + + 起用 + 起用した + 未起用 + IP + ポート + パスキー + ドメイン名はサポートしない + 無効なポート + + データフォルダを取得できない + データが見つからない + ファイルを読み取れない + + + オープンソースライセンス + + + フォルダを選択 + このフォルダは書き込めない + + + クラウドの気に入り + ローカルの気に入り + %sを検索 + %s + %1$s - %2$s + 気に入りを削除 + %dつの気に入りを削除? + 気に入りを移動 + デフォルト気に入り + 私で選ぶ + 気に入り情報 + 気に入りコレクション + 数量 + ログインが必要 + + + 激しいプレイで壊れた + + + クイック検索 + 右からスワイプしてクイック検索パネルを開く + 気に入りコレクション + 右からスワイプして気に入りコレクションを選ぶ + ダウンロードラベル + 右からスワイプしてダウンロードラベルパネルを開く + ギャラリーの詳細 + サムネイルをクリックしてギャラリーの詳細を表示 + ページをめくる + ページをめくる + メニュー + プログレスバー + 長く押すとページメニューが開く + + + 未来から + ちょうど今 + + %d分前 + + + %d時前 + + 昨日 + %d日前 + + + + + + + + + + + + + + + + + H@Hからダウンロード + 圧縮パッケージはない + 圧縮パッケージのダウンロードを開始する + 圧縮パッケージをダウンロードできない + 圧縮パッケージ + 圧縮パッケージのダウンロードはH@Hのクライアントが必要 + プライバシー + スクリーンキャプチャは許可しない + 有効にすると、アプリのスクリーンショットはキャプチャされず、アプリのコンテンツプレビューはシステムタスクスイッチャーに表示されません\n\nこの変更を適用するにはアプリを再起動することが必要 + + From a8faa2930a3ce76ec72349b5941a139481d6c44a Mon Sep 17 00:00:00 2001 From: trhjew Date: Tue, 27 Feb 2018 21:17:56 +0800 Subject: [PATCH 030/630] Update strings.xml --- app/src/main/res/values-ja/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 4b5eeacdc..2bf197fef 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -101,7 +101,7 @@ 設定->アプリについて->ヘルプ - 发送 + 送信 前回のアプリがクラッシュしました。エラーログを開発者に送信して、今後のユーザーエクスペリエンスを向上させますか?(Eメール送信) @@ -167,7 +167,7 @@ 同じクイック検索がすでに名前が「%s」として存在しています。 同じ名前が既に存在 - 第%1$dページ,合計%2$dページ + 第%1$dページ、合計%2$dページ 星2 @@ -465,7 +465,7 @@ ダウンロードリダンダンシーを整理 ダウンロードリストにない画像ファイルをダウンロードディレクトリから整理 リダンダンシーが見つからない - ダンダンシー整理完成、合計%dつ + ダンダンシー整理完成、%dつ 詳細 解析失敗したときにページ内容を保存 From 3ef2447eeffdeb3a6af4ed8bebc9b6408e505d0e Mon Sep 17 00:00:00 2001 From: trhjew Date: Tue, 27 Feb 2018 21:59:47 +0800 Subject: [PATCH 031/630] Update strings.xml --- app/src/main/res/values-ja/strings.xml | 27 +++++++++++++------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 2bf197fef..e2d178f6a 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -117,7 +117,7 @@ ExHentaiを検索 E-Hentaiを検索 - 何も見つかない + 何も見つからない 検索 @@ -167,7 +167,7 @@ 同じクイック検索がすでに名前が「%s」として存在しています。 同じ名前が既に存在 - 第%1$dページ、合計%2$dページ + ページ%1$d、合計%2$dページ 星2 @@ -351,12 +351,12 @@ 指紋でのロック解除を許可する - EHentai設定 + EHentaiの設定 応用 右上隅のチェックマークをクリックして設定を保存します。 - 第%dページ + ページ%d @string/refresh @string/share 保存 @@ -379,14 +379,14 @@ 詳細 サムネイル 詳細サイズ - + サムネイルサイズ サムネイル解像度 - %s、解像度を指定すると、サムネイルを取得できない場合があります + %s。解像度を指定すると、サムネイルを取得できない場合があります 自動 サムネイルリンクを修正 ホームページをカテゴリ表示 @@ -399,7 +399,7 @@ %1$s %2$s:%3$d 未設定 日本語タイトルを表示 - 日本のタイトルを表示してみます。これにより、ギャラリーリストを取得する時間が長くなります + 日本語タイトルを表示してみます。これにより、ギャラリーリストを取得する時間が長くなります デフォルトのタイトルを表示します。通常は英語 フィルター タイトル、アップローダ、タグ、タグセットをフィルター @@ -414,7 +414,7 @@ 左から右へ 右から左へ 上から下へ - ページをズーム + ページのズーム 元のサイズ 幅に合わせ 長さに合わせ @@ -433,7 +433,7 @@ ページ間隔を表示 ボリュームキーでページをめくる フルスクリーン - スクリーンの明るさをカスタム + スクリーンの明るさをカスタムに スクリーンの明るさ ダウンロード @@ -449,7 +449,7 @@ 画像をプリロード %s枚の画像を後ろへプリロード 画像解像度 - %s,1280xを超える解像度は良くない場合があります + %s。1280xを超える解像度は良くない場合があります 自動 元の画像をダウンロード これは危険です!これを確認すると、ダウンロードクォータが急激に失われます @@ -481,8 +481,7 @@ サムネイル、ギャラリー情報のメモリキャッシュを整理 閲覧キャッシュサイズ パターン保護 - パターン保護は -未設定 + パターン保護は未設定 パターン保護は設定した データをエクスポート データを外部メモリーにエクスポートする、例えダウンロードリスト、クイック検索リストなど @@ -502,8 +501,8 @@ オープンソースライセンス EhViewerの誕生は、多くのオープンソースプロジェクトから切り離すことができません 寄付 - Alipay:seven332$163.com - あなたの寄付はより多くのより良いアプリの開発に役立ちます。\n\nAlipay:seven332$163.com + Alipay: seven332$163.com + あなたの寄付はより多くのより良いアプリの開発に役立ちます。\n\nAlipay: seven332$163.com メールアドレスがクリップボードにコピーされた データ統計を起用 データ統計について From 5cebca42e9cfdecc21f9cec47b3608fc26790359 Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 27 Feb 2018 22:20:08 +0800 Subject: [PATCH 032/630] Add Japanese support --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index a9d54a4d4..1f1812ce2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ android { versionName "1.0.26" vectorDrawables.useSupportLibrary = true resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", - "es" + "es", "ja" } lintOptions { From bad4cdac1affa0819b5195245a0bc948b3f13b44 Mon Sep 17 00:00:00 2001 From: trhjew Date: Tue, 27 Feb 2018 22:11:07 +0800 Subject: [PATCH 033/630] Update strings.xml --- app/src/main/res/values-ja/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index e2d178f6a..6e844163b 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -133,7 +133,7 @@ 指定ギャラリー 詳細オプションを有効にする - 一般検索:搜索です。\n\n指定アップローダー:このアップローダーによってアップロードされたギャラリーを一覧表示します。他のオプションは無視されます。\n\n指定タグ:このタッグを含むギャラリーを一覧表示します。 他のオプションは無視されます。\n\n指定画廊:このギャラリーにジャンプします。 キーワードは「gid token」のはずです。 + 一般検索:搜索です。\n\n指定アップローダー:このアップローダーによってアップロードされたギャラリーを一覧表示します。他のオプションは無視されます。\n\n指定タグ:このタッグを含むギャラリーを一覧表示します。他のオプションは無視されます。\n\n指定画廊:このギャラリーにジャンプします。キーワードは「gid token」のはずです。 ギャラリーを検索 ギャラリータグを検索 @@ -440,8 +440,8 @@ ダウンロードパス 無効なダウンロードパス ダウンロードパスを取得できない - おかしいことをしない限り、KitKatの外部SDカードにデータを書き込むことはできません。 ただし、<SD card>/Android/data/com.hippo.ehviewerこのパスは特殊なものであり、書き込むことができます。 - Lollipopは外部SDカードに書き込むために新しいAPIを提供しました。 ダウンロードパスを外部SDカードに設定したい場合は、「ドキュメント」ボタンをクリックしてください + おかしいことをしない限り、KitKatの外部SDカードにデータを書き込むことはできません。ただし、<SD card>/Android/data/com.hippo.ehviewerこのパスは特殊なものであり、書き込むことができます。 + Lollipopは外部SDカードに書き込むために新しいAPIを提供しました。ダウンロードパスを外部SDカードに設定したい場合は、「ドキュメント」ボタンをクリックしてください ドキュメント 続く ダウンロードスレッド数 From 32efad2b330f33d22d945ecf07a9904ad109bf29 Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 28 Feb 2018 10:08:03 +0800 Subject: [PATCH 034/630] 1.0.27 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1f1812ce2..26de46581 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.hippo.ehviewer" minSdkVersion 14 targetSdkVersion 25 - versionCode 79 - versionName "1.0.26" + versionCode 80 + versionName "1.0.27" vectorDrawables.useSupportLibrary = true resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", "es", "ja" From b969177244af7ad3098f65c9358e944ff8089064 Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 28 Feb 2018 17:03:00 +0800 Subject: [PATCH 035/630] Update values-zh-rHK/strings.xml --- app/src/main/res/values-zh-rHK/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index d624587ff..24d4454e0 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -627,7 +627,7 @@ 無法下載壓縮包 壓縮包 下載壓縮包需要 H@H 客户端 - 隱私和安 + 隱私 不允許荧幕抓取 啟用後,將不能截取該應用的螢幕截圖,同時,將不會在系統任務切換器中顯示該應用的內容預覽\n\n重新啟動應用以生效此更改 From ff34acfe59b38ba9805dee74848c85b69d8821a0 Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 2 Mar 2018 09:03:42 +0800 Subject: [PATCH 036/630] Update values-zh-rTW/strings.xml --- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e686f8771..66cbc724b 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -98,7 +98,7 @@ 接受 拒絕 - 設定->關於->幫助 + 設定->關於->說明 傳送 From 3f3c0c6c6a4076d9d50269ad99b33ecdadbf8df5 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 3 Mar 2018 23:52:28 +0800 Subject: [PATCH 037/630] Show sign in failure reason --- .../com/hippo/ehviewer/ui/scene/SignInScene.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java index d1eb2684f..40f9a08fe 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java @@ -43,6 +43,7 @@ import com.hippo.ehviewer.widget.RecaptchaView; import com.hippo.scene.Announcer; import com.hippo.scene.SceneFragment; +import com.hippo.util.ExceptionUtils; import com.hippo.yorozuya.IntIdGenerator; import com.hippo.yorozuya.ViewUtils; @@ -328,7 +329,7 @@ private void redirectTo() { finish(); } - private void whetherToSkip() { + private void whetherToSkip(Exception e) { Context context = getContext2(); if (null == context) { return; @@ -336,12 +337,12 @@ private void whetherToSkip() { new AlertDialog.Builder(context) .setTitle(R.string.sign_in_failed) - .setMessage(R.string.sign_in_failed_plain) + .setMessage(ExceptionUtils.getReadableString(e)) .setPositiveButton(R.string.get_it, null) .show(); } - public void onSignInEnd() { + public void onSignInEnd(Exception e) { Context context = getContext2(); if (null == context) { return; @@ -352,7 +353,7 @@ public void onSignInEnd() { } else { mSigningIn = false; hideProgress(); - whetherToSkip(); + whetherToSkip(e); } } @@ -375,7 +376,7 @@ public void onSuccess(String result) { SignInScene scene = getScene(); if (scene != null) { - scene.onSignInEnd(); + scene.onSignInEnd(null); } } @@ -386,7 +387,7 @@ public void onFailure(Exception e) { SignInScene scene = getScene(); if (scene != null) { - scene.onSignInEnd(); + scene.onSignInEnd(e); } } From 46c9197ccef279d38094c08834e04065900170d1 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 4 Mar 2018 15:59:32 +0800 Subject: [PATCH 038/630] Update sdk version and libraries --- app/build.gradle | 9 ++++----- build.gradle | 4 +++- daogenerator/build.gradle | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 26de46581..2c3491e97 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,13 +4,12 @@ apply plugin: 'com.android.application' apply plugin: 'android-chinese-string' android { - compileSdkVersion 25 - buildToolsVersion "25.0.3" + compileSdkVersion 27 defaultConfig { applicationId "com.hippo.ehviewer" minSdkVersion 14 - targetSdkVersion 25 + targetSdkVersion 27 versionCode 80 versionName "1.0.27" vectorDrawables.useSupportLibrary = true @@ -78,8 +77,8 @@ dependencies { compile 'com.github.seven332:yorozuya-collect:0.1.4' compile 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.9.2' compile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' - compile 'org.greenrobot:greendao:2.2.0' - compile 'org.jsoup:jsoup:1.9.2' + compile 'org.greenrobot:greendao:2.2.1' + compile 'org.jsoup:jsoup:1.11.2' testCompile 'junit:junit:4.12' testCompile 'org.robolectric:robolectric:3.4' testCompile 'org.jooq:joor:0.9.6' diff --git a/build.gradle b/build.gradle index 6fe0349ae..784f87a22 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ buildscript { repositories { + google() jcenter() maven { url "https://jitpack.io" } } @@ -16,6 +17,7 @@ buildscript { allprojects { repositories { + google() jcenter() maven { url "https://jitpack.io" } } @@ -26,7 +28,7 @@ task clean(type: Delete) { } ext { - supportLibrary = '25.3.1' + supportLibrary = '27.1.0' } subprojects { diff --git a/daogenerator/build.gradle b/daogenerator/build.gradle index b5c683bab..a608c6623 100644 --- a/daogenerator/build.gradle +++ b/daogenerator/build.gradle @@ -24,6 +24,6 @@ task executeDaoGenerator(type:JavaExec) { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'org.greenrobot:greendao-generator:2.2.0' - compile 'org.jboss.forge.roaster:roaster-api:2.18.7.Final' - compile 'org.jboss.forge.roaster:roaster-jdt:2.18.7.Final' + compile 'org.jboss.forge.roaster:roaster-api:2.20.1.Final' + compile 'org.jboss.forge.roaster:roaster-jdt:2.20.1.Final' } From 998f57f435bda0fbd3867166a25e4d384cd92e66 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 5 Mar 2018 10:09:47 +0800 Subject: [PATCH 039/630] Fix gallery comment parsing --- .../com/hippo/ehviewer/client/parser/GalleryDetailParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java index a21fe862c..a9f94123e 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java @@ -397,7 +397,7 @@ public static GalleryComment parseComment(Element element) { // time Element c3 = JsoupUtils.getElementByClass(element, "c3"); String temp = c3.ownText(); - temp = temp.substring("Posted on ".length(), temp.length() - " by:  ".length()); + temp = temp.substring("Posted on ".length(), temp.length() - " by:".length()); comment.time = WEB_COMMENT_DATE_FORMAT.parse(temp).getTime(); // user comment.user = c3.child(0).text(); From db63a8f05bcca761888f8691d5a4ae19ea3a316b Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 8 Mar 2018 19:33:44 +0800 Subject: [PATCH 040/630] Print exception in ExceptionUtils.getReadableString() I don't want to track all callings, just add it here --- app/src/main/java/com/hippo/util/ExceptionUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/hippo/util/ExceptionUtils.java b/app/src/main/java/com/hippo/util/ExceptionUtils.java index b6a7d8fad..e5648e450 100644 --- a/app/src/main/java/com/hippo/util/ExceptionUtils.java +++ b/app/src/main/java/com/hippo/util/ExceptionUtils.java @@ -38,6 +38,7 @@ public final class ExceptionUtils { @NonNull public static String getReadableString(@NonNull Exception e) { + e.printStackTrace(); if (e instanceof MalformedURLException) { return GetText.getString(R.string.error_invalid_url); } else if (e instanceof ConnectTimeoutException || From b2bef7a4b0ec7b52ef7f1c35d401193a7cd6dbbd Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 8 Mar 2018 20:35:02 +0800 Subject: [PATCH 041/630] Update okhttp --- app/build.gradle | 3 ++ .../hippo/ehviewer/client/EhCookieStore.java | 28 ++++--------------- .../com/hippo/network/CookieRepository.java | 3 +- 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2c3491e97..070b0d158 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -76,6 +76,7 @@ dependencies { compile 'com.github.seven332:yorozuya-thread:0.1.1' compile 'com.github.seven332:yorozuya-collect:0.1.4' compile 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.9.2' + compile 'com.squareup.okhttp3:okhttp:3.10.0' compile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' compile 'org.greenrobot:greendao:2.2.1' compile 'org.jsoup:jsoup:1.11.2' @@ -89,5 +90,7 @@ configurations.all { force 'com.github.seven332:glgallery:0f276c0' force 'com.github.seven332:glview-image:4c744db' force 'com.github.seven332:image:bab9b11' + + exclude group: 'com.github.seven332', module: 'okhttp' } } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.java b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.java index 089d43432..59f1daf14 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.java @@ -26,7 +26,6 @@ import okhttp3.Cookie; import okhttp3.HttpUrl; -import okhttp3.Request; public class EhCookieStore extends CookieRepository { @@ -86,41 +85,26 @@ public static Cookie newCookie(Cookie cookie, String newDomain, boolean forcePer } @Override - public List loadForRequest(HttpUrl url, Request request) { - List cookies = super.loadForRequest(url, request); - Object tag = request.tag(); + public List loadForRequest(HttpUrl url) { + List cookies = super.loadForRequest(url); boolean checkTips = domainMatch(url, EhUrl.DOMAIN_E); - boolean checkUconfig = (domainMatch(url, EhUrl.DOMAIN_E) || domainMatch(url, EhUrl.DOMAIN_EX)) && tag instanceof EhConfig; - if (checkTips || checkUconfig) { + if (checkTips) { List result = new ArrayList<>(cookies.size() + 1); // Add all but skip some for (Cookie cookie: cookies) { String name = cookie.name(); - if (checkTips && EhConfig.KEY_CONTENT_WARNING.equals(name)) { + if (EhConfig.KEY_CONTENT_WARNING.equals(name)) { continue; } - if (checkUconfig && EhConfig.KEY_UCONFIG.equals(name)) { + if (EhConfig.KEY_UCONFIG.equals(name)) { continue; } result.add(cookie); } // Add some - if (checkTips) { - result.add(sTipsCookie); - } - if (checkUconfig) { - EhConfig ehConfig = (EhConfig) tag; - Cookie uconfigCookie = new Cookie.Builder() - .name(EhConfig.KEY_UCONFIG) - .value(ehConfig.uconfig()) - .domain(url.host()) - .path("/") - .expiresAt(Long.MAX_VALUE) - .build(); - result.add(uconfigCookie); - } + result.add(sTipsCookie); return Collections.unmodifiableList(result); } else { return cookies; diff --git a/app/src/main/java/com/hippo/network/CookieRepository.java b/app/src/main/java/com/hippo/network/CookieRepository.java index 9fab98c15..d776a745e 100644 --- a/app/src/main/java/com/hippo/network/CookieRepository.java +++ b/app/src/main/java/com/hippo/network/CookieRepository.java @@ -31,7 +31,6 @@ import okhttp3.Cookie; import okhttp3.CookieJar; import okhttp3.HttpUrl; -import okhttp3.Request; public class CookieRepository implements CookieJar { @@ -146,7 +145,7 @@ public void saveFromResponse(HttpUrl httpUrl, List list) { } @Override - public List loadForRequest(HttpUrl httpUrl, Request request) { + public List loadForRequest(HttpUrl httpUrl) { return getCookies(httpUrl); } From aca061ecf61d198c2ecd930706e19b505a0a4f25 Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 8 Mar 2018 20:42:32 +0800 Subject: [PATCH 042/630] Ignore release dir --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 28bbe8f98..87ec63472 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ *.iml .idea /captures +release From ed8151632e8ddfd344cfd6a0af8d0a54b64e773e Mon Sep 17 00:00:00 2001 From: lilymaniac Date: Sun, 18 Mar 2018 19:52:53 +0900 Subject: [PATCH 043/630] Add Korean to resConfigs entry --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 070b0d158..fcfa85a74 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,7 @@ android { versionName "1.0.27" vectorDrawables.useSupportLibrary = true resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", - "es", "ja" + "es", "ja", "ko" } lintOptions { From a97a6682fb95c9d520ed70b7cef45c39e866cc43 Mon Sep 17 00:00:00 2001 From: lilymaniac Date: Sun, 18 Mar 2018 20:18:07 +0900 Subject: [PATCH 044/630] Add Korean localization --- app/src/main/res/values-ko/strings.xml | 610 +++++++++++++++++++++++++ 1 file changed, 610 insertions(+) create mode 100755 app/src/main/res/values-ko/strings.xml diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml new file mode 100755 index 000000000..7c9933275 --- /dev/null +++ b/app/src/main/res/values-ko/strings.xml @@ -0,0 +1,610 @@ + + + + + + + 인기 갤러리 + 즐겨찾기 + 방문 기록 + 다운로드 + 설정 + + 사용자 이름 + 비밀번호 + Recaptcha (선택) + + Recaptcha 불러오기 + 불러오는 중… + 실패 + + 로그인 + 회원가입 + WebView를 통하여 로그인 + 쿠키를 사용하여 로그인 + 별명 입력 + 별명 + 별명이 비어 있습니다. + 먼저 로그인하세요. + + 작은 하마 + + 쿠키는 웹 브라우저에 저장되는 적은 양의 데이터입니다. 이게 뭐고 어떻게 찾는지 잘 모르겠으면 검색해 보세요.\n\n특정 쿠키를 입력하여 로그인하세요. + 텍스트가 비어 있습니다. + 경고 + 입력한 쿠키가 잘못된 것 같습니다. 확인해 보는 게 좋겠어요. + 확인해 볼게요 + 아닌데요 + 쿠키를 찾았어요! + + 다운로드 위치가 잘못되었습니다. 설정을 확인하세요. + + 모바일 데이터를 사용하는 중입니다. + + 비정상 상태 코드: %d + 시간 초과 + 알 수 없는 호스트 + 너무 많은 서버 리디렉션 + 네트워크 오류 + 이상함 + 앱을 찾을 수 없음 + URL을 분석할 수 없음 + 폴더 경로가 아님 + 제공자가 없음 + 디코딩 실패 + 찾을 수 없음 + 비어 있음 + 잘못된 압축 파일 + 읽기 실패 + 범위 초과 + 쓰기 실패 + 구문 분석 오류 + 509 + 잘못된 URL + pToken 획득 오류 + 갤러리를 지정하려면 키워드를 \"618395 0439fa3666\" 형식으로 입력해야 합니다. + 임시 파일을 만들 수 없음 + 이미지를 저장할 수 없음 + 잘못된 번호 + + 이 앱의 내용은 인터넷에서 받아옵니다. 이 앱을 사용하기 위해서는 받아온 내용 중 일부가 사용자에게 가할 수 있는 신체적 또는 정신적 피해를 감수해야 합니다. + 사용자 이름은 비워둘 수 없습니다. + 비밀번호는 비워둘 수 없습니다. + 로그인 건너뛰기 + 로그인 실패 + 뭔가가 잘못되었습니다. 웹사이트가 업데이트 중일 수 있습니다. WebView 또는 쿠키를 사용하여 로그인하거나 아래 버튼을 눌러 로그인을 건너뛸 수 있습니다. 그러나 로그인을 건너뛰면 "슬픈 팬더"를 보게 될 것입니다. + 한 번 더 누르면 종료됩니다. + 다시 시도하려면 누르기 + 앱이 갤러리를 다운로드하려면 WRITE_EXTERNAL_STORAGE 권한이 필요합니다. 권한을 허용하시겠습니까? + 안돼요 + 앱 개발자에게 기기 및 사용 정보를 보내시겠습니까? 앱 개발에 굉장한 도움이 됩니다. <br><br>데이터 분석 서비스는 Google Analytics를 사용하며, 개인 정보 보호 정책은 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> 에서 확인하실 수 있습니다.<br><br>데이터 분석을 허용하면 사용자의 기기 및 앱 사용 정보가 수집됩니다. 전화번호나 이메일 주소, IMEI와 같은 개인 정보는 수집하지 않습니다.<br><br>데이터 분석을 허용하기 전까지는 정보가 수집되지 않습니다.<br><br>수집된 정보는 Google Analytics에 의해 분석됩니다. 분석된 정보는 이 애플리케이션의 개발자만 볼 수 있습니다. + 알겠습니다 + 동의 + 거부 + + 설정 -> 정보 -> 도움말 + + + 보내기 + 지난번 실행 시 이 애플리케이션이 충돌로 인해 종료되었습니다. 이메일을 통해 앱 개발자에게 로그를 보내시겠습니까? + + + 어느 갤러리 사이트를 사용하시겠습니까? + e-hentai: 모든 사람들이 사용할 수 있음\nexhentai: 로그인한 사람만 사용할 수 있음 + 두 사이트 중 하나를 선택하세요. + + + 업데이트 + 버전: %1$s\n파일 크기: %2$s\n\n%3$s + EhViewer가 최신 버전입니다. + + + ExHentai 검색 + E-Hentai 검색 + The World is Big and the panda sit alone + + 검색 + + 키워드 검색 + 이미지 검색 + + 일반 검색 + 고급 옵션 + 이미지 검색 + 일반 검색 + 업로더 지정 + 태그 지정 + 갤러리 지정 + 고급 옵션 사용 + + 일반 검색: 그냥 검색합니다.\n\n업로더 지정: 해당 업로더가 업로드한 갤러리를 나열합니다. 다른 옵션은 무시됩니다.\n\n태그 지정: 해당 태그를 포함한 갤러리를 나열합니다. 하나의 태그만 지정할 수 있습니다. 다른 옵션은 무시됩니다.\n\n갤러리 지정: 해당 갤러리로 이동합니다. 키워드는 \"GID 토큰\" 형식으로 입력해야 합니다. + + 갤러리 검색 + 갤러래 태그 검색 + 갤러리 설명 검색 + 토렌트 파일 이름 검색 + 토렌트 파일이 있는 갤러리만 검색 + Low-Power 태그 검색 + Downvoted 태그 검색 + Expunged 갤러리 표시 + 최소 평점: + + 이미지 선택 + 유사한 이미지 검색 + 커버만 검색 + Expunged 이미지 표시 + 먼저 이미지를 선택해 주세요. + + 즐겨찾기에 추가 + + 빠른 검색 + 빠른 검색을 추가하려면 \"+\" 버튼을 누르세요. + 빠른 검색 추가 + 이름이 비어 있습니다. + 삭제 + 빠른 검색 삭제 + \"%s\" 항목을 삭제하시겠습니까? + 빠른 검색 목록이 여기에 표시됩니다. + 갤러리 목록의 상태가 빠른 검색으로 저장됩니다. 검색 패널의 상태를 저장하려면 먼저 검색 옵션을 지정하세요. + README + 이미지 검색은 빠른 검색에 추가할 수 없습니다. + 중복되는 빠른 검색 항목이 있습니다. 이름은 \"%s\"입니다. + 같은 이름의 항목이 이미 있습니다. + + 페이지 %1$d, 총 %2$d 페이지 + + + 2개 + 3개 + 4개 + 5개 + + + 갤러리를 찾을 수 없습니다. + 다운로드 + 읽기 + 추가 정보 + + %d 페이지 + + 즐겨찾기 + 토렌트 (%d) + 공유 + 평가 + 유사 + 커버 검색 + 태그 없음 + 코멘트 없음 + 코멘트가 더 없음 + 코멘트 더 보기 + 미리 보기 없음 + 미리 보기가 더 없음 + 더 불러오기 + 새로고침 + 다른 앱에서 열기 + 성공적으로 평가했습니다. + 평가에 실패했습니다. + 토렌트 없음 + 토렌트 + 즐겨찾기에 있음 + 즐겨찾기에 없음 + 즐겨찾기에 추가 + 즐겨찾기 저장 위치 기억 + 즐겨찾기에 추가되었습니다. + 즐겨찾기에서 제거되었습니다. + 즐겨찾기에 추가하지 못했습니다. + 즐겨찾기에서 제거하지 못했습니다. + 필터 목록에 \"%s\" 업로더를 추가하시겠습니까? + 필터 추가됨 + + + 갤러리 정보 + 클립보드에 복사되었습니다. + + + GID + 토큰 + 주소 + 제목 + 일본어 제목 + 섬네일 + 카테고리 + 업로더 + 날짜 + 부모 + 가시성 + 언어 + 페이지 + 크기 + 즐겨찾기\n횟수 + 즐겨찾기됨 + 평가 횟수 + 평가 + 토렌트 + 토렌트 주소 + + + 갤러리 코멘트 + 아무도 이 갤러리에 코멘트를 남기지 않음 + 성공적으로 코멘트를 남겼습니다. + 코멘트를 남기지 못했습니다. + 코멘트 텍스트 복사 + 추천 (Vote up) + 추천 취소 + 비추천 (Vote down) + 비추천 취소 + 추천 성공 + 추천 취소 성공 + 비추천 성공 + 비추천 취소 성공 + 추천/비추천 실패 + 추천/비추천 상태 확인 + + + 갤러리 미리 보기 + 이동 + + + 다운로드 - %s + 다운로드한 항목이 여기에 표시됩니다. + 유휴 상태 + 대기 중 + 다운로드 중 + 다운로드함 + 실패함 + %d 남아 있음 + 완료 + 509 경고 + 이미지 제한에 도달하였습니다. 다운로드를 멈추고 잠시 쉬세요. + 다운로드 완료 + %d 성공 + %d 실패 + %1$d 성공, %2$d 실패 + 성공: %s + 실패: %s + 다운로드 항목 제거 + %s 항목을 다운로드 목록에서 제거하시겠습니까? + %d개 항목을 다운로드 목록에서 제거하시겠습니까? + 이미지 파일 삭제 + 모두 중지 + 레이블 + 기본 + 이동 + 다운로드 레이블 + 모두 시작 + 모두 중지 + EhViewer 다운로드 서비스 + %s + %1$s, %2$s 남음 + 다운로드 레이블 기억 + 기본 다운로드 레이블 + 다운로드 목록에 추가됨 + + + 다운로드 레이블이 여기에 표시됩니다. + 추가 + 새 레이블 + 레이블 텍스트가 비어 있습니다. + \"기본\"은 레이블 이름으로 사용할 수 없습니다. + 이미 있는 레이블입니다. + 레이블 이름 바꾸기 + 레이블 삭제 + \"%s\" 레이블을 삭제하시겠습니까? + + + 읽은 갤러리가 여기에 표시됩니다. + 모두 지우기 + 모든 방문 기록을 지우시겠습니까? + + + 필터 + 필터가 여기에 표시됩니다. + 제목 + 업로더 + 태그 + 태그 네임스페이스 + \"%s\" 제목 필터를 삭제하시겠습니까? + \"%s\" 업로더 필터를 삭제하시겠습니까? + \"%s\" 태그 필터를 삭제하시겠습니까? + \"%s\" 필터를 삭제하시겠습니까? + + 필터 추가 + 정의 표시 + 텍스트 필터 + 제목 필터: 제목에 해당 단어를 포함한 갤러리를 제외합니다.\n\n업로더 필터: 해당 업로더가 업로드한 갤러리를 제외합니다.\n\n태그 필터: 해당 태그를 포함한 갤러리를 제외합니다. 갤러리 목록을 불러오는 데 시간이 좀 더 걸립니다.\n\n태그 네임스페이스 필터: 해당 태그 네임스페이스를 포함한 갤러리를 제외합니다. 갤러리 목록을 불러오는 데 시간이 좀 더 걸립니다. + + + 패턴 보호 사용 + 패턴 보호를 사용하려면 패턴을 그리세요.\n비워두면 패턴 보호가 해제됩니다. + 지정 + 지문으로 잠금 해제 허용 + + + E-Hentai 설정 + 적용 + 설정을 저장하려면 체크 표시를 누르세요. + + + 페이지 %d + 저장 + 북마크에 추가 + 메뉴 + 이미지 공유 + 이미지가 %s 경로에 저장됨 + + EH + 로그아웃 + 다시 로그인하려면 앱을 다시 시작하세요. + E-Hentai 설정 + E-Hentai 사이트의 설정 페이지를 엽니다. + 정말 로그아웃하시겠습니까? + 로그아웃되었습니다. 로그인하려면 앱을 다시 시작하세요. + 갤러리 사이트 + 목록 모드 + 자세히 + 섬네일 + 상세 정보 크기 + 길게 + 짧게 + 섬네일 크기 + 크게 + 중간 + 작게 + 섬네일 해상도 + 현재 설정\u003a \u005b%s\u005d, 특정 해상도로 설정하면 섬네일을 불러오지 못할 수 있습니다. + 자동 + 섬네일 URL 바로잡기 + 홈페이지 카테고리 + 홈페이지에 기본으로 보여질 카테고리 + 제외할 언어 + 갤러리 목록과 검색에서 특정 언어 숨기기 + 제외할 태그 네임스페이스 + 기본 태그 검색에서 특정 네임스페이스 제외 + H@H 프록시 + %1$s %2$s:%3$d + 없음 + 일본어 제목 표시 + 가능하면 일본어 제목을 표시합니다. 갤러리 목록을 불러오는 데 시간이 좀 더 걸립니다. + 기본 제목을 표시합니다. 대부분 영어로 표시됩니다. + 필터 + 제목, 업로더, 태그 및 태그 네임스페이스를 기반으로 필터링 + 모바일 데이터 경고 + + 읽기 + 화면 회전 + 기본값 + 세로 모드 + 가로 모드 + 읽기 방향 + 왼쪽에서 오른쪽으로 + 오른쪽에서 왼쪽으로 + 위에서 아래로 + 페이지 표시 + 실제 크기 + 너비에 맞춤 + 높이에 맞춤 + 화면에 맞춤 + 비율 고정 + 시작 위치 + 왼쪽 상단 + 오른쪽 상단 + 왼쪽 하단 + 오른쪽 하단 + 중앙 + 화면 켜짐 유지 + 시계 표시 + 진행도 표시 + 배터리 표시 + 페이지 간격 표시 + 볼륨 키로 페이지 넘기기 + 전체 화면 + 화면 밝기 사용자 지정 + 화면 밝기 + + 다운로드 + 다운로드 위치 + 다운로드 위치가 잘못되었습니다. + 다운로드 위치를 가져올 수 없습니다. + Android 4.4 이상에서는 루트 권한 없이 외장 SD 카드에 데이터를 쓸 수 있는 방법이 없습니다. 그러나 <SD 카드>/Android/data/me.loverain.fleur 폴더만은 쓸 수 있습니다. + Android 5.0 이상에서는 외장 SD 카드에 쓰기 작업을 할 수 있는 새 API를 제공합니다. SD 카드를 다운로드 위치로 지정하려면 \"문서\" 버튼을 누르세요. + 문서 + 계속 + 미디어 스캔 허용 + 다른 사람들에게 갤러리 앱을 들키지 마세요. + 대부분의 갤러리 앱에서 다운로드 경로에 있는 사진을 무시합니다. + 다중 스레드 다운로드 + %s개 이미지까지 + 이미지 미리 불러오기 + 다음 %s개 이미지를 미리 불러옴 + 이미지 해상도 + 현재 설정\u003a \u005b%s\u005d, 1280x 이상으로 설정하면 작동하지 않을 수 있습니다. + 자동 + 원본 이미지 다운로드 + 이 옵션은 위험합니다! 509 오류가 발생할 수 있습니다. + 다운로드 항목 복구 + 다운로드 위치에 존재하는 모든 다운로드 항목 복구 + 복구 중 + 복구할 다운로드 항목을 찾을 수 없습니다. + 복구하지 못했습니다. + %d개 항목을 성공적으로 복구했습니다. + 잉여 파일 삭제 + 다운로드 위치에 존재하지만 다운로드 목록에는 없는 갤러리 이미지 제거 + 잉여 파일이 없습니다. + 잉여 파일을 청소했습니다. 모두 %d개 항목을 지웠습니다. + + 고급 + 파싱 오류 시 HTML 내용 저장 + HTML 파일에는 개인 정보가 포함될 수 있습니다. + 로그캣 덤프 + 외부 저장소에 로그캣 저장 + 로그캣을 덤프하지 못했습니다. + %s 경로에 로그캣이 저장되었습니다. + 다운로드 경로 캐시 삭제 + 갤러리 다운로드 경로가 잘못되었을 때 다운로드 경로 캐시를 삭제하면 문제가 해결될 수 있습니다. + 다운로드 경로 캐시를 지우시겠습니까? + 메모리 캐시 삭제 + 섬네일, 갤러리 정보 메모리 캐시 삭제 + 읽기 캐시 크기 + 패턴 보호 + 패턴 보호가 설정되어 있지 않음 + 패턴 보호가 설정됨 + 데이터 내보내기 + 다운로드 목록, 빠른 검색 목록과 같은 데이터를 외부 저장소에 저장 + %s 경로에 데이터를 내보냈습니다. + 데이터를 내보내지 못했습니다. + 데이터 가져오기 + 이전에 저장한 데이터 불러오기 + 데이터를 성공적으로 가져왔습니다. + + 앱 정보 + 개발자 + 웹사이트 + 소스 코드 + 변경 사항 + 도움말 + 라이선스 + EhViewer는 많은 오픈 소스 프로젝트 덕분에 만들 수 있었습니다. + 후원 + 후원해 주시면 더 좋은 앱을 만드는 데 도움이 됩니다.\n\nAlipay: seven332$163.com + 이메일 주소를 클립보드에 복사했습니다. + 데이터 분석 사용 + 데이터 분석 정보 + 빌드 버전 + 업데이트 확인 + 베타 업데이트 채널 + 베타 버전은 사용자의 기기에서 정상적으로 작동하지 않을 수 있습니다. + + 사용 + 사용함 + 사용 안 함 + IP + 포트 + 암호 + 지원하지 않는 도메인입니다. + 잘못된 포트입니다. + + 데이터 디렉터리를 찾을 수 없습니다. + 데이터를 가져올 수 없습니다. + 파일을 읽을 수 없습니다. + + + 제외할 언어 + 모두 선택 + 모두 선택 해제 + 선택 반전 + 언어 + 원어 + 역본 + 재필 + 일본어 + 영어 + 중국어 + 네덜란드어 + 프랑스어 + 독일어 + 헝가리어 + 이탈리아어 + 한국어 + 폴란드어 + 포르투갈어 + 러시아어 + 스페인어 + 타이어 + 베트남어 + 없음 + 기타 + + 잠시만 기다려 주세요. + + + 라이선스 + + + 디렉터리 선택기 + 쓸 수 있는 디렉터리가 아닙니다. + + + 클라우드 즐겨찾기 + 로컬 즐겨찾기 + %s 검색 + %s + %1$s - %2$s + 즐겨찾기에서 삭제 + %d개 항목을 즐겨찾기에서 삭제하시겠습니까? + 즐겨찾기 이동 + 기본 즐겨찾기 컬렉션 + 직접 선택 + 즐겨찾기 정보 + 컬렉션 + 개수 + 로그인 필요 + + + 뭔가 잘못되었습니다. + + + 빠른 검색 + 왼쪽으로 밀면 빠른 검색 패널이 열립니다. + 컬렉션 + 왼쪽으로 밀면 컬렉션을 선택할 수 있습니다. + 다운로드 레이블 + 왼쪽으로 밀면 다운로드 레이블 패널이 열립니다. + 갤러리 자세히 보기 + 섬네일을 누르면 갤러리를 자세히 볼 수 있습니다. + 페이지 넘기기 + 페이지 넘기기 + 메뉴 + 진행도 + 페이지 메뉴를 열려면 길게 누르세요. + + + 미래에 + 방금 + + %d분 전 + + + %d시간 전 + + 어제 + %d일 전 + + + + + + + + 시간 + + + + + + + + H@H 다운로더 + 아카이브 없음 + 아카이브 다운로드가 시작되었습니다. + 아카이브 다운로드에 실패했습니다. + 아카이브 + 아카이브를 다운로드하려면 H@H 클라이언트가 필요합니다. + 개인 정보 + 화면 캡처 허용 안 함 + 이 옵션을 켜면 이 앱에서 스크린샷을 찍을 수 없고, 멀티태스킹 화면에서 앱의 내용을 볼 수 없습니다.\n\n이 옵션을 변경하면 앱을 다시 시작해야 합니다. + + From c8a32ba76e22e1f3dbf54e4f9b76d989e598483e Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 19 Mar 2018 18:15:10 +0800 Subject: [PATCH 045/630] =?UTF-8?q?Update=20ISSUE=5FTEMPLATE.md=20?= =?UTF-8?q?=E8=83=BD=E8=AF=B4=E4=B8=AD=E6=96=87=E5=B0=B1=E5=88=AB=E8=AF=B4?= =?UTF-8?q?=E8=8B=B1=E6=96=87=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 72a68ac15..7f353637b 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -2,6 +2,8 @@ 请在阅读完毕后,删除这些文字,并写下对该 Issue 的描述。 +若您能熟练使用现代标准汉语,请务必使用该语言描述 Issue。 + Issue 的内容仅可为 * Bug 反馈 * 功能申请 From 25312953af915baa47543f8b672913f7d9bcc941 Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 19 Mar 2018 14:45:25 +0800 Subject: [PATCH 046/630] add notification channel for Oreo --- .../ehviewer/download/DownloadService.java | 24 ++++++++++++++----- app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java b/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java index 64c31b52f..4d15f1e03 100644 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java +++ b/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java @@ -16,12 +16,14 @@ package com.hippo.ehviewer.download; +import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.graphics.BitmapFactory; +import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.os.SystemClock; @@ -90,6 +92,8 @@ public class DownloadService extends Service implements DownloadManager.Download private static int sFinishedCount; private static int sDownloadedCount; + private String CHANNEL_ID; + public static void clear() { sFailedCount = 0; sFinishedCount = 0; @@ -102,7 +106,12 @@ public static void clear() { public void onCreate() { super.onCreate(); + CHANNEL_ID = getPackageName()+".download"; mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ + mNotifyManager.createNotificationChannel(new NotificationChannel(CHANNEL_ID, getString(R.string.download_service), + NotificationManager.IMPORTANCE_LOW)); + } mDownloadManager = EhApplication.getDownloadManager(getApplicationContext()); mDownloadManager.setDownloadListener(this); } @@ -208,14 +217,15 @@ private void ensureDownloadingBuilder() { stopAllIntent.setAction(ACTION_STOP_ALL); PendingIntent piStopAll = PendingIntent.getService(this, 0, stopAllIntent, 0); - mDownloadingBuilder = new NotificationCompat.Builder(getApplicationContext()) + mDownloadingBuilder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID) .setSmallIcon(android.R.drawable.stat_sys_download) .setOngoing(true) .setAutoCancel(false) .setCategory(NotificationCompat.CATEGORY_PROGRESS) .setColor(getResources().getColor(R.color.colorPrimary)) .addAction(R.drawable.ic_pause_x24, getString(R.string.stat_download_action_stop_all), piStopAll) - .setShowWhen(false); + .setShowWhen(false) + .setChannelId(CHANNEL_ID); mDownloadingDelay = new NotificationDelay(this, mNotifyManager, mDownloadingBuilder, ID_DOWNLOADING); } @@ -238,14 +248,15 @@ private void ensureDownloadedBuilder() { PendingIntent piActivity = PendingIntent.getActivity(DownloadService.this, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT); - mDownloadedBuilder = new NotificationCompat.Builder(getApplicationContext()) + mDownloadedBuilder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID) .setSmallIcon(android.R.drawable.stat_sys_download_done) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) .setContentTitle(getString(R.string.stat_download_done_title)) .setDeleteIntent(piClear) .setOngoing(false) .setAutoCancel(true) - .setContentIntent(piActivity); + .setContentIntent(piActivity) + .setChannelId(CHANNEL_ID); mDownloadedDelay = new NotificationDelay(this, mNotifyManager, mDownloadedBuilder, ID_DOWNLOADED); } @@ -255,14 +266,15 @@ private void ensure509Builder() { return; } - m509dBuilder = new NotificationCompat.Builder(getApplicationContext()) + m509dBuilder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID) .setSmallIcon(R.drawable.ic_stat_alert) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) .setContentText(getString(R.string.stat_509_alert_title)) .setContentText(getString(R.string.stat_509_alert_text)) .setAutoCancel(true) .setOngoing(false) - .setCategory(NotificationCompat.CATEGORY_ERROR); + .setCategory(NotificationCompat.CATEGORY_ERROR) + .setChannelId(CHANNEL_ID); m509Delay = new NotificationDelay(this, mNotifyManager, m509dBuilder, ID_509); } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index c76e05e3d..b22fc099f 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -631,4 +631,5 @@ 不允许屏幕抓取 启用后,将不能截取该应用的屏幕截图,同时,将不会在系统任务切换器中显示该应用的内容预览\n\n重新启动应用以生效此更改 + 下载服务 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 91fab5bd8..a85315737 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -682,4 +682,5 @@ Not Allowed Screen Capture If enabled, you cannot take screenshots of the app, and the system will not display app contents in the task switcher\n\nNeed to restart the app for this to take effect + Download Service From 8e3585b32dde77db66b6fcf8eb171ddf2ef05b29 Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 19 Mar 2018 23:28:30 +0800 Subject: [PATCH 047/630] use implementation for gradle 3.0+ --- app/build.gradle | 64 ++++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fcfa85a74..3eb10fa19 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -51,38 +51,38 @@ clean { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile "com.android.support:appcompat-v7:$supportLibrary" - compile "com.android.support:design:$supportLibrary" - compile 'com.github.amlcurran.showcaseview:library:5.4.3' - compile 'com.github.seven332:android-recaptcha:2bbb3459a8' - compile 'com.github.seven332:animator:0.1.0' - compile 'com.github.seven332:beerbelly:0.1.4' - compile 'com.github.seven332:conaco:0.1.5-eh' - compile 'com.github.seven332:drawerlayout:0.2.1' - compile 'com.github.seven332:easyrecyclerview:0.1.1' - compile 'com.github.seven332:glgallery:0.1.2' - compile 'com.github.seven332:glview:0.1.0' - compile 'com.github.seven332:glview-image:0.1.0' - compile 'com.github.seven332:hotspot:0.1.0' - compile 'com.github.seven332:image:0.1.12' - compile 'com.github.seven332:okhttp:3.5.0' - compile 'com.github.seven332:refreshlayout:0.1.0' - compile 'com.github.seven332:ripple:0.1.2' - compile 'com.github.seven332:streampipe:0.1.0' - compile 'com.github.seven332:tuxiang:0.1.2' - compile 'com.github.seven332:unifile:0.2.0' - compile 'com.github.seven332:yorozuya:0.1.2' - compile 'com.github.seven332:yorozuya-thread:0.1.1' - compile 'com.github.seven332:yorozuya-collect:0.1.4' - compile 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.9.2' - compile 'com.squareup.okhttp3:okhttp:3.10.0' - compile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' - compile 'org.greenrobot:greendao:2.2.1' - compile 'org.jsoup:jsoup:1.11.2' - testCompile 'junit:junit:4.12' - testCompile 'org.robolectric:robolectric:3.4' - testCompile 'org.jooq:joor:0.9.6' + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation "com.android.support:appcompat-v7:$supportLibrary" + implementation "com.android.support:design:$supportLibrary" + implementation 'com.github.amlcurran.showcaseview:library:5.4.3' + implementation 'com.github.seven332:android-recaptcha:2bbb3459a8' + implementation 'com.github.seven332:animator:0.1.0' + implementation 'com.github.seven332:beerbelly:0.1.4' + implementation 'com.github.seven332:conaco:0.1.5-eh' + implementation 'com.github.seven332:drawerlayout:0.2.1' + implementation 'com.github.seven332:easyrecyclerview:0.1.1' + implementation 'com.github.seven332:glgallery:0.1.2' + implementation 'com.github.seven332:glview:0.1.0' + implementation 'com.github.seven332:glview-image:0.1.0' + implementation 'com.github.seven332:hotspot:0.1.0' + implementation 'com.github.seven332:image:0.1.12' + implementation 'com.github.seven332:okhttp:3.5.0' + implementation 'com.github.seven332:refreshlayout:0.1.0' + implementation 'com.github.seven332:ripple:0.1.2' + implementation 'com.github.seven332:streampipe:0.1.0' + implementation 'com.github.seven332:tuxiang:0.1.2' + implementation 'com.github.seven332:unifile:0.2.0' + implementation 'com.github.seven332:yorozuya:0.1.2' + implementation 'com.github.seven332:yorozuya-thread:0.1.1' + implementation 'com.github.seven332:yorozuya-collect:0.1.4' + implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.9.2' + implementation 'com.squareup.okhttp3:okhttp:3.10.0' + implementation 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' + implementation 'org.greenrobot:greendao:2.2.1' + implementation 'org.jsoup:jsoup:1.11.2' + testImplementation 'junit:junit:4.12' + testImplementation 'org.robolectric:robolectric:3.4' + testImplementation 'org.jooq:joor:0.9.6' } configurations.all { From 44694f351e72cb21174a14bf88ffa219b5ac48ad Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 19 Mar 2018 15:04:41 +0800 Subject: [PATCH 048/630] add adaptive icons for android 8.0+ --- .../main/res/mipmap-anydpi-v26/ic_launcher.xml | 5 +++++ .../res/mipmap-anydpi-v26/ic_launcher_round.xml | 5 +++++ .../res/mipmap-nodpi/ic_launcher_foreground.png | Bin 0 -> 7189 bytes app/src/main/res/values/colors.xml | 2 ++ 4 files changed, 12 insertions(+) create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-nodpi/ic_launcher_foreground.png diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..f4091292b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..f4091292b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/mipmap-nodpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-nodpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ad3570eff3b2dadfb1cadb2560172443bf63fa GIT binary patch literal 7189 zcmd^k`9GBFAGeu_WGO@TvgCwgNy5k)2dQjzYRq(GOeB?wY#CXa5@v{sV;^awj=_wS zqQRWZBzti%2sO53YfQ*G&viTJ`}_gVuTQUf@w)Eo{w(j$_Ws;aj=MWcOQ=YQh=@oZ zJ>vMghzN`U{Sy}hC-2?&>xqb{emd%Ce~Q>YGZ=lB8j<^z|0VC1*ZWkv-!$y@eF_e} zC(jKcur6_jp;Q^)_UfA#_hzDgT7hBo5eC`9rYjFYx&I)uYajpY@6h3M~{k+ z=VY}sw;ew6;ckm2Ch=T4b;z!ck<81UDo>*_)i>CPn(Rb^7)5qvpooICM8-q(%w)MVX<#6SuVo z&Fa*N*fq$birX2%uP)3Ez7hV}ns(oHek5`Ug`esvqwQq)xttF_fLJdR`5-shH_JHp zPTQnB<*0Cg+YvKvqJAMb*hhIkzVYgT$6i#q8%NAqj|hy#*t9RW+TgOWX^rv;qRlid1dkM+6)a)b(<1*7ex z`$=RRZnZ#?_3%&kR)+1UO^=JcG}fG1matWbfK%lf&+la1XVVV0Q%IzRhos#;#Lx7r zaxQ+x%&~f0Z`N&9F2LDDorBQS{Hh2V0JppMpJI%tyEsvGMQRP=| z(k7`t6O3ZMtlxlpUS=jgWt;jU3glq0z*$meT{*2d%r`J_>gZ9H=RZn}KSmCE#j4|vOH#Qj3scUs{V%6DDsTloToE$NeM_hu<7E2QCc`Ge9EX`}O^Q4vcwM;m zX%V-9i^w1Ccu|>1N~P_0Mu)k(#^r0JFMFH8-pn`adr0r1&y)Muq{OWRZgZx7@cIJ% zy3OOt(+vFIy)6NJ9w+khK-J}_V0EmOrRC5OwIB8M7d}3sN0><}?qk+=zIgf4jc)3a zW$@RfEJH7pUrUyu@U%Zmk3;)eQ~o&m4aHxHaS6Df`OdlOXP(ksxvdIngbv;OF01^M zeKlWij@r*p4%ss57J9sB_59S}wTSsZ>hEXWXV1Hr?AP(kk<)7vRXlTL{989oy>t)W zhJp!6n|5O#kieGlElUi1MWiF`zSvj!GLOMgM)4%GUvN#k3hi0%t{OkScFnz21OJeR z-ZkNP?&@slrGQ|4CCUe!(*%iPx38Vz zr@v+Tg%rGp(WW0yicqBU!lT`#lo+Kvvy%NBGHi65`tv@~Uxty`sE^-Ffm1Qbu@6Z8 zyXm|q_O@ILjkhGY1(8Eh{zJUX_5?*7@o*-LW`=8w zkgvE6&+=y`n{)z&T^1p(1#r(-m1mo7)3xz5&$1e;hl|=Sj~%-hiBxG5aV#0U`aYmAb}Z4H$xk46 zZ@kMh326Ub=JjgB^f*hUCQ4Ka`<_^9^XgM*%j(tHPs_hc!&)4e&01m~4mSCXK5Rn# ztQQlJBwdamh+TkFs#{{sq*^f zu5oluh(n^3#fHAma zAQ5?ncxej8Wv+hjvGV~9S?Q5?K~_bPF&80!i^Z{n9f?tC7%^DONl@U9`ARaeECQ|| zW@(fJYw-gCV{)e0q$3DzTmc&-&`ow=_@kFE7nsX}iR*;E=ltag zJEnf6d$@M7KhUHqcz9#2-22VY5g(i5sDiq;4-PhU^rgqFNoH`@3!fIoU3>fDVwd}& z&m=@mGME`;Z9IxD!9Nx-KiV{LN|iyQ*R4DmdN<|bv(h=4qF`7Px4yD490*!JwXWx~ zhsM!XRM0@xOw(9P_Vq7;KCAtc1qA%$E^S}CA>iR4TR-=s*_P>h60m5G*S71E9)&9) z`{I7>dl8p=>%2q4jGp6r)LzZi<**K$rH>CClG1c3{{p!tS_)8+2xyoc$vnXtqV#-8 zQny{H8VIrq=q^DEnSPCF=q8UT?#V;Jg^InUr%fU{pB!zBkgfQV05vsT_<4aI1w>WMxa>SCt-H$~0isukBIr>+Cp58X|;h6LD z!|JnNzY=X)PM$S#PgYGQ$BwNDIu4Z(5UMyb7q-EHMM>unBV_3$ShUp{Mep#BuR(2o zQP1$1w7;Io0dWpmEaEWYsT{e-D756_Ri`OysKXT zN2*rm>V;HyIO-FqQ7>@wH)dz`WO06bxi((aJSav7fAXojO*Dl3U~TkLesrk8^3VR> za&IfYPp?C?tom4;%Kf}PirsejznDJ`+{V?ho>}vc!f22 znqF+DS}5v#5ek0HJP4{=9zQwvdL*qf?t8p?%=hYv`}sL*IUPY<#+RWVPR+17g{ttC zACo$0aV($u6<`qr_w4FpB$LK0fu_>$3dd`siocYPP7scwN}OmI`o<;MlKR)66S%vg z9{Pz%DIK3I7#oh$f2Qe>c$+zz?vfU@#&10I6EGQTYTe~ih91XUt48lcRNj!*r+|=N zz_M;K8xDUanOQ>$vMUDC34tEv*a}{u?Q)YxapByhy1mU-Ve?HocUC|YA}>2THwJdc zx#puTUwe{Iq$u58B`y5irV2x3r4YNd@RPkSJA+e0S7%-ocK^Pzivbb! z{7jlT7FSy&sbKIkDXYIeBQ%?@=RUu><|f;Mp;-i$pQ)Z-QF|A7;V9JXrr}pX*@i1J zN^lcsKUSzB{al)aGUG>XLcV$M#;fYE37jpSMbfHF!&pw{|Iof}RR4_U7c01PeQo5Q zARbzc@es_BELikQQ0k8jm6=DX6G>wSaGHoLTm6uccd5bym-}CsOv%%Er9Sl=?RxFx zH?IhN^T&dJ{A6HdPnlO_$LGJ}ox4W}SX4u{!Rh&> z?wFP=KxNjaq9zK=pCrah}96e}*d&J-h5iCzSZoP~NaU>NL z&?Y720o%0Dxk)l}f)e%*geP$w(=Z~hi+>21@(u7#j})v04cJ_jbv&ut5C?;2p_$ta zT~#XLHqh}Tjtb)wM?Y69xOSn(1kerdk<1X*rBpC12)-KlkD>SO=uSX@`$|@qs9Z^ETn;Awc=`v!9CR&51{wX02J;)^FRy0WCmdBc}Cp5 z2VgKK!Hor-JnAb^R2)0Y15@*x8c2mh4rth$rJ-n#3s<1T6~}S`FCxs7mV7f|E&fnE zwRj7Qt4f~AjHmirO7HXaQn{eCWPr93kc_DysAdK@&Q9iH5#@ER(=3?if z)wk`YXNeExyn6LtmKegKKi}BuPS(J2+z5vz9KXJS$Tt+UwZRE%Pg^c?G&J zYrC$a)K@?7@HrGm2NYcjp4CgtOe5Q?OZ>+G0xv)wCjPr>ei#LJ_wmqytnxRrH5Gst zJ|J;q={zY0#XfASD^riHUvROjxZu7$>zfK)1eRim+qzRbm0PD~_+a_J@vQ}dGB|>E zVL|OD<_U-hs6SH|*6f?Px*aK)C4RF8L_rV4n@C`XM$l@;4=8|a?d41CVzd_O4WpT0 zNiyJvy5F*u+0WNY!LUeX1OccH<9C51ASeJZj0`ABp!^QvjT`j~Hb5Y(|F7Nk8!N`C z)~e@a7~B!GWjjSC>R(EdYa6?Av3m;v(1{%pa*P@Rl-{oVZ$3)Mc!BH4-|6R1vPhy72!K&S&IwkYF>a68Ju!o99|6eizjT;UAY-wyS*|YS~E;Xg-u|H!08!%L^}a z2S~Nc&Bc)a z#`xTKU@cuJBF^ae-W8I@v~dZf!Q&2Kj{w~x5p@8RV2|R+Uf;VTq%l3v^Uu_TUwjFZ zRG{1ar^2Ywg{_eUYw>1Y632cZ7KJtLj->v6nH9w3zw-mb!w%$uFfZ0gY97fr1L;D` z)6Z>h0lhU9Ln2XnuQvwzAmhcvrZ)gDLjk8T7ecSD?Rx}s4{RUbD;0bXgr zv#fP%=RY{?@a{<$1XE;n@n#$#5!%(IT6OWU79bo6N;BE5$fnz0IlBs5>(LcA%A&sg z^|UK`=Hp5q+IwyZQv{Y(zeYwTkeco@#JmT9w?h`#;!8T$2 zFD}mIf-$^24!-*Mzus5-qw{0eQ;$P?V{aZ_{sad9)8dbM?VqZ{gnPDeTWZ&>gTdCq zS6~0?JSPN1JvP)5nu8E~@)m&65Eov?S2=j)^Miq)H#1+8)Z>2sY}by}f99+n8y+*i zRQD`dNMCD&#`lgVNc{qJ;m=0DiPl_`;uvjrD)EAP3Lrd^1xxd~hkdqlFHVkd)Ji-R z7|Hp)^J6XaVL-)%fj=6Vpbtb}8f5OP9!+oP9~iiv6JLKb4J;~xmE+9CUsdy!;D_5_ zQ;US0N>X8C>pBaaxTl1WHwe1nz* z_D&%K2?qKy0jox@b&`TmSwcD}TM!&b8WtGI;oA=N5Mi~UaDx+$x za6sTk8VMbflu8vXEso^AKgj}Az9@`C>)Moj2i`L?;4r3(A1>L8yC+&oFOU|Mf<4B- zrck(hTS}ez$si|U1+qqYmiVnU!Zm^VdXq=o{HrlRSK&tZ??uaf9dV21-K`lOwozz| zN$?PpcK_P9zv^c%-H%(D)TiY_pC9OYZANkY6#be!uu*%Inl?>*iw7T%EPd9$VLV)I zht;9Y#5S+>*0D{Ylu-qGj;G;7Z7R)NXAY&uREY@E4f*x~+Gk!gx;5 z`EZx^VRRkg@Tr{7!?&MT5;NNv5*aCTPtN>`^A9_cz+Y!lr8UD=<<*EB7bd%9T=Ybc zuQM6bz%z4YvR#-D7Q=WK_|Ky#*_E1XqPz9xAzRY-kWO-TTlslt5TUgn^)Q- zA6bKQA|;z>|7Sk;3O^LJ(xo%K_&IIG*Uo&EKF4K;jX;EU=D$6RQPq^9L~}FH*n$ zH4iBlJ#m;o@@SI*p*+aYfR4AJOu zBQQ1*g&P;jB@Jw%#lGggYaaxKU28t%D5TA4`onL30$=CGeSzvR zg1D(0`@g4Fo3T)o8Ppyp=mH?@{>;yT;E^OB@J%8^;e)k3r%%EKYzZ!XDW|hC;`ixBf(e4~GPtNSmxNP)oY7 z=jvU^aW?qu2Ic1mSEL*ybdT>=kb*#HehvUqBu~#5;3V?V$#qj?N)C~tXcvxD)qrej zQ!w6Cthg!h*?$sEy&$AS?|MZ?AU7ZAqAE5FA=hO>HlN58)ap5cjF;3{LQeJa0Ei+; zJsX{V=%mK2v>sAX`oAY`vc~y}A|D<9cRWzf>60O8C+DgIiF_ zYl^tZ8-vG7$bqMjmiJoc1#lpkqA21fXB^-FT_VC{(7+23$BV&y_=D4Xw85{y|NpL? z=yzd?T*!jnfFKhADZvx9>vEL(fBwI*&}kt8^RxFsUsGf=B;=@*yJPup_?!O+fD>#i literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 5bb42c6ac..48465666c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -114,4 +114,6 @@ @color/colorPrimary @color/red_500 + #009688 + From 6707f0ee35f0cdc2976f058e5f149d5463954122 Mon Sep 17 00:00:00 2001 From: onlymash Date: Tue, 20 Mar 2018 18:40:00 +0800 Subject: [PATCH 049/630] update launcher backgound --- app/src/main/res/values/colors.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 48465666c..66fd45a1c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -114,6 +114,6 @@ @color/colorPrimary @color/red_500 - #009688 + @color/colorPrimary From aed7acfdc8d9b1b01b14997c32fc4a9274bd2d03 Mon Sep 17 00:00:00 2001 From: onlymash Date: Tue, 20 Mar 2018 18:40:50 +0800 Subject: [PATCH 050/630] update foreground --- .../res/mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 2189 bytes .../res/mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1752 bytes .../res/mipmap-nodpi/ic_launcher_foreground.png | Bin 7189 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 2677 bytes .../res/mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 3703 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 4684 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-nodpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..104ec7587af3a59acdc23c4eb1debb0db97b3ca3 GIT binary patch literal 2189 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8c8afff6716e36a9ed63cdc8f49f2d854ac37a GIT binary patch literal 1752 zcma)7`#;l*8~@BSYN1@mnRJw0rQy%4HrcPA?YTFD?(ybfRA< z#2QWc<%!0Jw57j?c{#KcH|Uc34yZ$zCmP5?ti8Sop&zFuit$7h)gG$*J%GGqxdj^RAp4eZ_Aa{525=Rg5s{n~{5dAXQlSMV>7 z$&t*G) zWX55*_j}R!^GC6=YdfxgQ2(sUst4`@NwF!s8o^?U)*J{q`#nNB_44J*b-OqBFe1Yf zO&-xIQ%(xdGf-B%y%sM5m|~K1laHcWx^0eN$as-PgRlyb3FDQ^=9WzXmk7j4=(j zl+PX`4a43cSSWVX3SiRv$LGMA!=uaW9VFm5RWvbQq|aO5%zE)2N)d&=NY)X_Zf(Me z1VY)3M~PEyrm2qbeqeTM?N6Q2p-Zdoo3^?8(IU;E7-o!D$it1SCmO)Mn92?yqq}G6 zzlC}~a8+TB4STxsSicbM;Xs>Fl838YwvBAUW6p5r3*@=Yi!c~0xxJ+&>xgFViS**p z#WWoq9dV9wLs6Xl^$X}aCYr2eZ3*u`3RPFrXiJ)&Ec4^!P9(H3($e76xVSw}2e>tL zyQVr)=9<}T_CDYipWlNg5L!={J9cL*Zw2a02qo{78S=rhPg$;SPm15>GmQ>HpC?TL8Un(fGO{ zbkv{_Ei-M#=jFD04?#s!%gVtr>$ljhF=3e9qGc^IzEF54a+#f9R-B6oTHAc2S_m#h zyacl(QK2N!MEF^0?$g;wN4Pe*h-6o>F*!Nee)F|lF8`U0L3~`xT)v`XmZYKU-C?Tj zO^;t185v=lp3YEK!f8=aQSJLRiC6j*MHWT%AQVSFf!hCh?jDndw70*^@1H6@RPv?v zetro<1ySNc5Lz7kIb>{+jg8^ZP^-3I0!rMB#o4vWd@v=?oWGa!hw+EZxX;)DHQjz)L79O=dBcVgY6mN| zRS&;Yn*~N`q7Z%Of6NCVj$WWPXo4|eL|KR~G~vJgELc?z2>cJHS`&qNboD4Fa` zbf}7|N~K-LSpt^>zR+Hvv+YPR`RK1j-`!ID@hLMjm!=|kljLSX(X zuYshcHBgl-SoDHL?xuF>LKY&pAM-(5oEjX7by>JbgjM@fZC#+?)x$#q28s1TVC)X7 zK1B7}3t2#O+4-PTzfh1QmQ-krhgFlPUIvi3U@p4=WO9>|rjiBhN9tU*wD*wch{8Gb mVt_Nw5t!die;4uwyW|$mdxf4IaAK*x5P5hgHYFzj literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-nodpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-nodpi/ic_launcher_foreground.png deleted file mode 100644 index e5ad3570eff3b2dadfb1cadb2560172443bf63fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7189 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 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..c2369de371aac3fe83867193f020b71c9667d904 GIT binary patch literal 2677 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..0ab0efeedf633a8fd643e2e3434a1b9e94a9eeaa GIT binary patch literal 4684 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 literal 0 HcmV?d00001 From c8c0a3aae0f21b9d6024200c4badac742e0d494c Mon Sep 17 00:00:00 2001 From: onlymash Date: Tue, 20 Mar 2018 22:30:48 +0800 Subject: [PATCH 051/630] update foreground --- .../mipmap-hdpi/ic_launcher_foreground.png | Bin 2189 -> 2074 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 1752 -> 1530 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 2677 -> 2459 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 3703 -> 3850 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 4684 -> 4624 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png index 104ec7587af3a59acdc23c4eb1debb0db97b3ca3..f849542d18aa056365e383e23dcab459f3df0c54 100644 GIT binary patch literal 2074 zcmb_d{X5g^A9oUt)rrqYDUUOa8M4|$4C^yP=46dSMTvQqZ)*&Zb56Pp8+l6ekYkY| zIb`iH57$>H4`Zx6%t417M0{f?72mD%2Yi3|-q&@%U-$KXzuvFc`@XLGy6&_y9>gCY zhad_H3O~5IfMgkR<@Cp2HaeKj2%u3FoPwe+Qw?0B0z#-{YCur@ z)o!Ytf`Ur3E9gXtlPndV57qqX;Ljn5>q6?au(M&@Gry~ay>89ZGFKuwGF|qEY3|Or zwS|%nl7GMS!Ku6V?(gGxYRbm@zpU?7fY@IgLJOZgf7jxEWbL==>P3s|s>68j z^zwvYv&N^K-4ev^vGBRspph2JO;FMX>ip-OyH-KP$>4F%P7?;6q7-<8PM11ji%86o z{F0N58+Y7~OdT~p|HW-f6-b0?Vn3=gx)atSKrg>Pw~4C9BDSSz0oi#VXDrALP!roF{mB2~oEblSZES zy&ylLT;v=-JaTr`$gg8I&h8%HwRaYFKS&EueAyJUxXgT~@9BS_A}lfSOO)Ys^2#2k zN;N&ZxaZEd_w(kNK~ZmW&>KCWp$*!)&R}4Z*%DgW9y5@(%9r-zVMJ)*{RgC!T=d51 z(pfWAcGKCsU~um<76TO2yg8#Tbk-rFwIE8bD^kh|tWYKSjqJnL9^StA`~vjuY;lV zujx`v_7#^(u}Y?n&FbRl=;&{8rsi%?AX{Xuy)xPIxmzR>Sw5nKk5{P>yu?XKNmDxZ z3CDG{v`-y7>RsMysVU~oEi5b?hHdFsAVeJ<9abOwuZr;4BHfku@4pVQQ=UG3>VUPj zj>bIWH#ZmO(>QGd)6>&;=U=geLZN+RRMf<)p&_)-RtW-u_>sY2l%iYfP1fk%?EsJ= zCgTlX2#j^J(v7&jc*7~)=>iMgDFI{UZhT3`0n00gbaZsEmgAF?7PH5}$kzoI4KS&W z?U3uk9=6Dy_v3tr{g2`wQt+QbHkT*(dJZ=dCC!N_t?>)>ex`xHG7pv~+Z`gQsj0OE zw%$WkQh^m-{Ovj^on(c{VzHK{_|a45f*3;Xn>(M-<(>6i25Cy*UIm)MP4$`UStW;v zo|xS3;`1c@>?dl+f#DX~Y|r1@+uKFPz1T%@MtLx~G5204NW?)0~AgnQN@)yY^dq5KRI>#vHWN{yKKn z6OZ6SJ^}zcY$jzB3d6>o!_ntOcT-(_u2OhRX1-K1li+87QJH(iDgbP}fx0DIEud~_ z#h4n22jLA{s23&0kRNq9i$3>XzO3100nan4W}B=_7sQW+)RQAnq*lSlNElbFPoUHm z09Fdno^zRxvHp3_8$rxlc&F`&q!}!%i7oPMStIk&L(bCJ&W_MaPtW?@G{6Vhdl z+a6Pt&*^Cq+Pcz0vwYFR*$h*9 zkzfi_sZNibETxuvKKA%GJhwaQ0e1Q|1-V{USA16=JDKrfrl@1}eOF@HnK+a5#5>#^ z7x;#WrT;k2ba)I_9uXZLF1fsYp>9%tI+-(6aB_TXEPj}1%1f~EcUpezvJmU@V3!xE zDEeQkhe)?Bt@xV5-%1QJ^3}=hKB$e>&ZcP2?j0dQ)m8Xicpy@5-xb2;KXgXs!!>Py zI=8<5{+_x0{ue7WE}7+Z-p8lc&e0n8TRWPgP#1XNb2UfExYD+;5%^K{-ib}m_NE-G zmz$X0(4DH)otU5ax*87qX!eoS%f^&E2pmx zTOEi%271Kbh)zvUVII_!C+vGoO4|$nV_*b@acj}u&~GF?d8|G%(|k&P7y-NfV6$A9 z%m_VgBN^}>P@LglM`2HBd6*nw`l>o>uHRC#=@A1mDdUr-%tIA=> zO{NQb4m!z-#BWCJIjvJL8Otf(Do-|mHN^O{nkrED7j-XBCREC*QqewTX$aeTLA!;9 zm3iz=O*CG{e^Y~A`$tXPk8nahL_?eWc5VwA@p7~DVB~yPf(Q5nf9co%0t*D9umAu6 literal 2189 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 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png index 1d8c8afff6716e36a9ed63cdc8f49f2d854ac37a..2cd049c04a35999145ed12417dd28ca27bcc5632 100644 GIT binary patch delta 1512 zcma)+YdF&j0LDFylk6dv=yc2y5n^spt>Gk>=91j!-q>g*j=Poo%dN<5Y{+dDvy;ia znb;w1a*NEhwUN`JG)ivG^*Gr1S>hCEEWyUW3Ukp+bhWBpGIY_4oieRJIJ2on3Bd{}uKv#rkW93LOo zQjvO^;FqY69GF`c-u$ZF=f+HX1hTaO-+&!mUp6Oy^W+NXEiK<*`uc!emd#P1uDbfB zdsr7m&ly8_a0w2vGGR-yM9$j(FNBb|u$_Vz9M3?dW41}RpaHPNVb-ol!)k6@9TktN9lQzIi6 zKLMhc2&HMkj%h&2L_aSklWD>6HF@be^*E^2cQC-R06{ggA-HJ(X7GkUBCTUiyZqyl zF54J^l4`eGI+a6>*I)!l%ScP}mF6aSJV?+}I+Z$iQ-`!sj@dbx-LQ=@61jVNPPpF# z2qd{!j8_foC={CL_hQ75&S3n+HDF(Ix!l5))@xKd*Jm{r7ekblm8UN!oHH?rp`ofj zk_6_2i-J!Zz{W-xo%|;F+q0S)9-7dLv9T`c>+6ftVt0%F=0|Xnbov6{XJlj?UhnTk zg|_#!S0a~-8D`JT&CK|G4(CTcFS~MERw^~DetT^#md+efnhMpkZP<^tO(8A%-tl;1 zggEX5MLUdt`0(Mnii*m5=EC^Ige{FmTTgZVGOY?IsyV~-_UymcG)XDt9ZW6qAS8C| z{tmNG4sK+i`1PFy9g+^*G=)lSb=|T{yRbOTtfWE*D@Ee!56P286DrqEWCh}n7rKV} zH=n|$SXT^RYOP4O(1TAD$=g$$Xos$kFUrC6a&(6Mhn>H_IX!?2ema<~8)VmP*R;u= zwFcHou7O#}gFYzK&(av-9;o!jslm^~jb7&6W5z4wh;TC;W z!=~b$ucxq_GTBIuh#mAP?$dT|F$^5ALG{K`I5jIT9L~)JAlw|&CCXZxn^}uj>dD^S z^69KU*$@vq#u&sy7$ub1twqix5dl;vW^8OMX8BP3J<|^4UQU!uiT1EvWbU-|*(hA1 zL@JIem#ENGG9TJ}lB5QjBS6c3j*j|pcMozPN!4AjR%21nK8Y4GYlp>Rt#)^JE6@DF zI1d4f?_1iNh&g45FgrUdx8@H3zy%+l_sV;%S6#Iww<5u-2OHlBfo+uTS{YxI2Ocre zkKjZpDdSob0j}$>tcD$4TJDZ=tnJhn<4qLs<_<Y@#Q!!eDp_|Ap(T-v6u%gG)T! z8`)$~amuqNvdsX0cOfcSw@y+aGNHQvhg!%EPxU`uu~YjySqvnWS~m@vEZ)EQuLEg) K$*R`!O42_RTi$yB delta 1736 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 literal 3703 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png index 0ab0efeedf633a8fd643e2e3434a1b9e94a9eeaa..a9fb19ae126170ba48de75735b900ca341c0251e 100644 GIT binary patch literal 4624 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 literal 4684 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 From a0e957b1fd14a7c74ab28c816420dad7cab54371 Mon Sep 17 00:00:00 2001 From: bfkro Date: Sun, 18 Mar 2018 20:03:05 +0800 Subject: [PATCH 052/630] Fix a bug so when user clicks the SeekBarPanel, the x coordinate with the correct x-offset is sent to SeekBar. --- .../main/java/com/hippo/ehviewer/widget/SeekBarPanel.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java b/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java index d5ba675aa..a350b7163 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java +++ b/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java @@ -21,6 +21,7 @@ import android.support.annotation.NonNull; import android.util.AttributeSet; import android.view.MotionEvent; +import android.view.View; import android.widget.LinearLayout; import android.widget.SeekBar; @@ -54,8 +55,9 @@ public boolean onTouchEvent(@NonNull MotionEvent event) { if (mSeekBar == null) { return super.onTouchEvent(event); } else { - final float offsetX = -mSeekBar.getLeft(); - final float offsetY = -mSeekBar.getTop(); + View containingView = (View) mSeekBar.getParent(); + final float offsetX = -(containingView.getLeft() + mSeekBar.getLeft()); + final float offsetY = -(containingView.getTop() + mSeekBar.getTop()); event.offsetLocation(offsetX, offsetY); mSeekBar.onTouchEvent(event); event.offsetLocation(-offsetX, -offsetY); From dcb11102f6114721cf5a9dfdcdf1eaaec594b097 Mon Sep 17 00:00:00 2001 From: bfkro Date: Wed, 21 Mar 2018 19:02:51 +0800 Subject: [PATCH 053/630] use ViewUtils to calculate offset between SeekBar and SeekBarPanel --- .../main/java/com/hippo/ehviewer/widget/SeekBarPanel.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java b/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java index a350b7163..dcaf4dada 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java +++ b/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java @@ -21,7 +21,6 @@ import android.support.annotation.NonNull; import android.util.AttributeSet; import android.view.MotionEvent; -import android.view.View; import android.widget.LinearLayout; import android.widget.SeekBar; @@ -55,9 +54,10 @@ public boolean onTouchEvent(@NonNull MotionEvent event) { if (mSeekBar == null) { return super.onTouchEvent(event); } else { - View containingView = (View) mSeekBar.getParent(); - final float offsetX = -(containingView.getLeft() + mSeekBar.getLeft()); - final float offsetY = -(containingView.getTop() + mSeekBar.getTop()); + int[] location = new int[2]; + ViewUtils.getLocationInAncestor(mSeekBar, location, this); + final float offsetX = -location[0]; + final float offsetY = -location[1]; event.offsetLocation(offsetX, offsetY); mSeekBar.onTouchEvent(event); event.offsetLocation(-offsetX, -offsetY); From 6bcdbfeaa4136cebaad5c671241969e5f57cfb76 Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 21 Mar 2018 19:41:12 +0800 Subject: [PATCH 054/630] Use field mLocation instead of local variable location --- .../main/java/com/hippo/ehviewer/widget/SeekBarPanel.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java b/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java index dcaf4dada..e124371f1 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java +++ b/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java @@ -30,6 +30,7 @@ public class SeekBarPanel extends LinearLayout { private SeekBar mSeekBar; + private int[] mLocation = new int[2]; public SeekBarPanel(Context context) { super(context); @@ -54,10 +55,9 @@ public boolean onTouchEvent(@NonNull MotionEvent event) { if (mSeekBar == null) { return super.onTouchEvent(event); } else { - int[] location = new int[2]; - ViewUtils.getLocationInAncestor(mSeekBar, location, this); - final float offsetX = -location[0]; - final float offsetY = -location[1]; + ViewUtils.getLocationInAncestor(mSeekBar, mLocation, this); + final float offsetX = -mLocation[0]; + final float offsetY = -mLocation[1]; event.offsetLocation(offsetX, offsetY); mSeekBar.onTouchEvent(event); event.offsetLocation(-offsetX, -offsetY); From d59a520aa51cf3b0d7e97b18f81b90016e9b807f Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 23 Mar 2018 12:09:15 +0800 Subject: [PATCH 055/630] Fix test --- .../test/java/com/hippo/network/CookieRepositoryTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/test/java/com/hippo/network/CookieRepositoryTest.java b/app/src/test/java/com/hippo/network/CookieRepositoryTest.java index b0c7964ad..ffa1972c2 100644 --- a/app/src/test/java/com/hippo/network/CookieRepositoryTest.java +++ b/app/src/test/java/com/hippo/network/CookieRepositoryTest.java @@ -258,9 +258,9 @@ public void testGet() throws InterruptedException { repository.saveFromResponse(urlEh1, Arrays.asList(cookieEh1, cookieEh2)); repository.saveFromResponse(urlEh1, Collections.singletonList(cookieEh3)); repository.saveFromResponse(urlNMB, Collections.singletonList(cookieNMB)); - equals(Arrays.asList(cookieEh1, cookieEh3), repository.loadForRequest(urlEh2, null)); + equals(Arrays.asList(cookieEh1, cookieEh3), repository.loadForRequest(null)); Thread.sleep(3000); - equals(Collections.singletonList(cookieEh3), repository.loadForRequest(urlEh2, null)); + equals(Collections.singletonList(cookieEh3), repository.loadForRequest(null)); repository.close(); } @@ -325,7 +325,7 @@ public void testSort() { CookieRepository repository = new CookieRepository(app, "cookie.db"); repository.saveFromResponse(url, Arrays.asList(cookie1, cookie2, cookie3, cookie4)); - List list = repository.loadForRequest(url, null); + List list = repository.loadForRequest(null); List expected = Arrays.asList(cookie3, cookie4, cookie2, cookie1); assertEquals(expected.size(), list.size()); for (int i = 0; i < list.size(); i++) { From 35c97a777229aea6d815fb91f2fe31d202d1ade7 Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 23 Mar 2018 12:10:03 +0800 Subject: [PATCH 056/630] Add Hosts --- .../main/java/com/hippo/ehviewer/Hosts.java | 350 ++++++++++++++++++ .../java/com/hippo/ehviewer/HostsTest.java | 127 +++++++ 2 files changed, 477 insertions(+) create mode 100644 app/src/main/java/com/hippo/ehviewer/Hosts.java create mode 100644 app/src/test/java/com/hippo/ehviewer/HostsTest.java diff --git a/app/src/main/java/com/hippo/ehviewer/Hosts.java b/app/src/main/java/com/hippo/ehviewer/Hosts.java new file mode 100644 index 000000000..39b8f29b0 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/Hosts.java @@ -0,0 +1,350 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.ehviewer; + +/* + * Created by Hippo on 2018/3/21. + */ + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.support.annotation.Nullable; +import android.util.Pair; +import com.hippo.database.MSQLiteBuilder; +import com.hippo.util.SqlUtils; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; + +public class Hosts { + + private static final int VERSION_1 = 1; + private static final String TABLE_HOSTS = "HOSTS"; + private static final String COLUMN_HOST = "HOST"; + private static final String COLUMN_IP = "IP"; + + private static final int DB_VERSION = VERSION_1; + + private final SQLiteOpenHelper helper; + private final SQLiteDatabase db; + + public Hosts(Context context, String name) { + helper = new MSQLiteBuilder() + .version(VERSION_1) + .createTable(TABLE_HOSTS) + .insertColumn(TABLE_HOSTS, COLUMN_HOST, String.class) + .insertColumn(TABLE_HOSTS, COLUMN_IP, String.class) + .build(context, name, DB_VERSION); + db = helper.getWritableDatabase(); + } + + /** + * Gets a InetAddress with the host. + */ + @Nullable + public InetAddress get(String host) { + if (!isValidHost(host)) { + return null; + } + + Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_HOSTS + " WHERE " + COLUMN_HOST + " = ?;", new String[] {host}); + try { + if (cursor.moveToNext()) { + String ip = SqlUtils.getString(cursor, COLUMN_IP, null); + return toInetAddress(host, ip); + } else { + return null; + } + } finally { + cursor.close(); + } + } + + private boolean contains(String host) { + Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_HOSTS + " WHERE " + COLUMN_HOST + " = ?;", new String[] {host}); + try { + return cursor.moveToNext(); + } finally { + cursor.close(); + } + } + + /** + * Puts the host-ip pair into this hosts. + */ + public boolean put(String host, String ip) { + if (!isValidHost(host) || !isValidIp(ip)) { + return false; + } + + ContentValues values = new ContentValues(); + values.put(COLUMN_HOST, host); + values.put(COLUMN_IP, ip); + + if (contains(host)) { + db.update(TABLE_HOSTS, values, COLUMN_HOST + " = ?", new String[] { host }); + } else { + db.insert(TABLE_HOSTS, null, values); + } + + return true; + } + + /** + * Puts delete the entry with the host. + */ + public void delete(String host) { + db.delete(TABLE_HOSTS, COLUMN_HOST + " = ?", new String[] { host }); + } + + /** + * Get all data from this host. + */ + public List> getAll() { + List> result = new ArrayList<>(); + + Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_HOSTS + ";", null); + try { + while (cursor.moveToNext()) { + String host = SqlUtils.getString(cursor, COLUMN_HOST, null); + String ip = SqlUtils.getString(cursor, COLUMN_IP, null); + + InetAddress inetAddress = toInetAddress(host, ip); + if (inetAddress == null) { + continue; + } + + result.add(new Pair<>(host, ip)); + } + } finally { + cursor.close(); + } + + return result; + } + + @Nullable + private static InetAddress toInetAddress(String host, String ip) { + if (!isValidHost(host)) { + return null; + } + + if (ip == null) { + return null; + } + + byte[] bytes = parseV4(ip); + if (bytes == null) { + bytes = parseV6(ip); + } + if (bytes == null) { + return null; + } + + try { + return InetAddress.getByAddress(host, bytes); + } catch (UnknownHostException e) { + return null; + } + } + + /** + * Returns true if the host is valid. + */ + public static boolean isValidHost(String host) { + if (host == null) { + return false; + } + + if (host.length() > 253) { + return false; + } + + int labelLength = 0; + for (int i = 0, n = host.length(); i < n; i++) { + char ch = host.charAt(i); + + if (ch == '.') { + if (labelLength < 1 || labelLength > 63) { + return false; + } + labelLength = 0; + } else { + labelLength++; + } + + if ((ch < 'a' || ch > 'z') && (ch < '0' || ch > '9') && ch != '-' && ch != '.') { + return false; + } + } + + if (labelLength < 1 || labelLength > 63) { + return false; + } + + return true; + } + + /** + * Returns true if the ip is valid. + */ + public static boolean isValidIp(String ip) { + return ip != null && (parseV4(ip) != null || parseV6(ip) != null); + } + + // org.xbill.DNS.Address.parseV4 + @Nullable + private static byte[] parseV4(String s) { + int numDigits; + int currentOctet; + byte [] values = new byte[4]; + int currentValue; + int length = s.length(); + + currentOctet = 0; + currentValue = 0; + numDigits = 0; + for (int i = 0; i < length; i++) { + char c = s.charAt(i); + if (c >= '0' && c <= '9') { + /* Can't have more than 3 digits per octet. */ + if (numDigits == 3) + return null; + /* Octets shouldn't start with 0, unless they are 0. */ + if (numDigits > 0 && currentValue == 0) + return null; + numDigits++; + currentValue *= 10; + currentValue += (c - '0'); + /* 255 is the maximum value for an octet. */ + if (currentValue > 255) + return null; + } else if (c == '.') { + /* Can't have more than 3 dots. */ + if (currentOctet == 3) + return null; + /* Two consecutive dots are bad. */ + if (numDigits == 0) + return null; + values[currentOctet++] = (byte) currentValue; + currentValue = 0; + numDigits = 0; + } else + return null; + } + /* Must have 4 octets. */ + if (currentOctet != 3) + return null; + /* The fourth octet can't be empty. */ + if (numDigits == 0) + return null; + values[currentOctet] = (byte) currentValue; + return values; + } + + // org.xbill.DNS.Address.parseV6 + @Nullable + private static byte[] parseV6(String s) { + int range = -1; + byte [] data = new byte[16]; + + String [] tokens = s.split(":", -1); + + int first = 0; + int last = tokens.length - 1; + + if (tokens[0].length() == 0) { + // If the first two tokens are empty, it means the string + // started with ::, which is fine. If only the first is + // empty, the string started with :, which is bad. + if (last - first > 0 && tokens[1].length() == 0) + first++; + else + return null; + } + + if (tokens[last].length() == 0) { + // If the last two tokens are empty, it means the string + // ended with ::, which is fine. If only the last is + // empty, the string ended with :, which is bad. + if (last - first > 0 && tokens[last - 1].length() == 0) + last--; + else + return null; + } + + if (last - first + 1 > 8) + return null; + + int i, j; + for (i = first, j = 0; i <= last; i++) { + if (tokens[i].length() == 0) { + if (range >= 0) + return null; + range = j; + continue; + } + + if (tokens[i].indexOf('.') >= 0) { + // An IPv4 address must be the last component + if (i < last) + return null; + // There can't have been more than 6 components. + if (i > 6) + return null; + byte [] v4addr = parseV4(tokens[i]); + if (v4addr == null) + return null; + for (int k = 0; k < 4; k++) + data[j++] = v4addr[k]; + break; + } + + try { + for (int k = 0; k < tokens[i].length(); k++) { + char c = tokens[i].charAt(k); + if (Character.digit(c, 16) < 0) + return null; + } + int x = Integer.parseInt(tokens[i], 16); + if (x > 0xFFFF || x < 0) + return null; + data[j++] = (byte)(x >>> 8); + data[j++] = (byte)(x & 0xFF); + } + catch (NumberFormatException e) { + return null; + } + } + + if (j < 16 && range < 0) + return null; + + if (range >= 0) { + int empty = 16 - j; + System.arraycopy(data, range, data, range + empty, j - range); + for (i = range; i < range + empty; i++) + data[i] = 0; + } + + return data; + } +} diff --git a/app/src/test/java/com/hippo/ehviewer/HostsTest.java b/app/src/test/java/com/hippo/ehviewer/HostsTest.java new file mode 100644 index 000000000..3d67bae82 --- /dev/null +++ b/app/src/test/java/com/hippo/ehviewer/HostsTest.java @@ -0,0 +1,127 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.ehviewer; + +/* + * Created by Hippo on 2018/3/22. + */ + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import android.util.Pair; +import java.util.List; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@Config(manifest = Config.NONE) +@RunWith(RobolectricTestRunner.class) +public class HostsTest { + + @Test + public void testIsValidHost() { + assertTrue(Hosts.isValidHost("ni.hao")); + assertFalse(Hosts.isValidHost("ni.ha~o")); + assertFalse(Hosts.isValidHost(".ni.hao")); + assertFalse(Hosts.isValidHost("ni.hao.")); + assertFalse(Hosts.isValidHost("ni..hao.")); + assertFalse(Hosts.isValidHost(".")); + assertFalse(Hosts.isValidHost("")); + assertFalse(Hosts.isValidHost(null)); + } + + @Test + public void testIsValidIp() { + assertTrue(Hosts.isValidIp("127.0.0.1")); + assertTrue(Hosts.isValidIp("0.0.0.0")); + assertFalse(Hosts.isValidIp("324.0.0.1")); + assertFalse(Hosts.isValidIp("127.0.0.")); + assertFalse(Hosts.isValidIp("127.0.0")); + assertFalse(Hosts.isValidIp("-1.0.0")); + assertFalse(Hosts.isValidIp("")); + assertFalse(Hosts.isValidIp(null)); + } + + @Test + public void testGet() { + Hosts hosts = new Hosts(RuntimeEnvironment.application, "hosts.db"); + + assertEquals(null, hosts.get("ni.hao")); + hosts.put("ni.hao", "127.0.0.1"); + assertEquals("ni.hao/127.0.0.1", hosts.get("ni.hao").toString()); + + assertEquals(null, hosts.get(null)); + } + + @Test + public void testPut() { + Hosts hosts = new Hosts(RuntimeEnvironment.application, "hosts.db"); + + assertEquals(null, hosts.get("ni.hao")); + assertEquals(true, hosts.put("ni.hao", "127.0.0.1")); + assertEquals("ni.hao/127.0.0.1", hosts.get("ni.hao").toString()); + assertEquals(true, hosts.put("ni.hao", "127.0.0.2")); + assertEquals("ni.hao/127.0.0.2", hosts.get("ni.hao").toString()); + + assertEquals(false, hosts.put(".wo.hao", "127.0.0.1")); + assertEquals(null, hosts.get(".wo.hao")); + + assertEquals(false, hosts.put("wo.hao", ".127.0.0.1")); + assertEquals(null, hosts.get("wo.hao")); + + assertEquals(false, hosts.put(null, "127.0.0.1")); + assertEquals(false, hosts.put("wo.hao", null)); + assertEquals(false, hosts.put(null, null)); + assertEquals(null, hosts.get("wo.hao")); + } + + @Test + public void testDelete() { + Hosts hosts = new Hosts(RuntimeEnvironment.application, "hosts.db"); + + hosts.put("ni.hao", "127.0.0.1"); + assertEquals("ni.hao/127.0.0.1", hosts.get("ni.hao").toString()); + hosts.put("ni.hao", "127.0.0.2"); + hosts.delete("ni.hao"); + assertEquals(null, hosts.get("ni.hao")); + + hosts.delete(null); + } + + @Test + public void testGetAll() { + Hosts hosts = new Hosts(RuntimeEnvironment.application, "hosts.db"); + + List> all = hosts.getAll(); + assertEquals(0, all.size()); + + hosts.put("ni.hao", "127.0.0.1"); + hosts.put("wo.hao", "127.0.0.2"); + + all = hosts.getAll(); + assertEquals(2, all.size()); + + assertEquals("ni.hao", all.get(0).first); + assertEquals("127.0.0.1", all.get(0).second); + assertEquals("wo.hao", all.get(1).first); + assertEquals("127.0.0.2", all.get(1).second); + } +} From e823834889d8fbbde5ee17e2a7e08c090300d5c6 Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 23 Mar 2018 12:48:06 +0800 Subject: [PATCH 057/630] Fix UConfigActivity registered name --- app/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 75b9a314f..d6f062d7e 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -133,7 +133,7 @@ android:label="@string/set_pattern_protection"/> From 5f77728a7bf11a32d4803663c47964967d103b80 Mon Sep 17 00:00:00 2001 From: onlymash Date: Tue, 20 Mar 2018 19:53:19 +0800 Subject: [PATCH 058/630] use another package name for debug --- app/build.gradle | 13 +++++++++++++ app/src/main/AndroidManifest.xml | 2 +- .../java/com/hippo/ehviewer/ui/GalleryActivity.java | 3 ++- app/src/main/res/values-es/strings.xml | 2 -- app/src/main/res/values-ja/strings.xml | 2 -- app/src/main/res/values-zh-rCN/strings.xml | 2 -- app/src/main/res/values-zh-rHK/strings.xml | 2 -- app/src/main/res/values-zh-rTW/strings.xml | 2 -- app/src/main/res/values/strings.xml | 2 -- 9 files changed, 16 insertions(+), 14 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3eb10fa19..387601654 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,6 +28,19 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + flavorDimensions "debugFlavor" + productFlavors { + releaseFlavor { + resValue "string", "app_name", "EhViewer" + applicationId "com.hippo.ehviewer" + buildConfigField 'String', 'AUTHORITY', '"com.hippo.ehviewer.fileprovider"' + } + debugFlavor { + resValue "string", "app_name", "EhViewerDebug" + applicationId "com.hippo.ehviewer.debug" + buildConfigField 'String', 'AUTHORITY', '"com.hippo.ehviewer.debug.fileprovider"' + } + } sourceSets { main { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d6f062d7e..14e20d468 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -144,7 +144,7 @@ diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 2910c148f..9c0162570 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -49,6 +49,7 @@ import android.widget.Toast; import com.hippo.ehviewer.AppConfig; +import com.hippo.ehviewer.BuildConfig; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.client.data.GalleryInfo; @@ -860,7 +861,7 @@ private void shareImage(int page) { Uri uri = new Uri.Builder() .scheme(ContentResolver.SCHEME_CONTENT) - .authority("com.hippo.ehviewer.fileprovider") + .authority(BuildConfig.AUTHORITY) .appendPath("image") .appendPath(filename) .build(); diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 43fb20963..74ba97869 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -17,8 +17,6 @@ - EhViewer - Página de inicio diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 6e844163b..4614e0e80 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -17,8 +17,6 @@ - EhViewer - ホームページ 人気 気に入り diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index b22fc099f..5aef8003f 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -17,8 +17,6 @@ - EhViewer - 主页 热门 收藏 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 24d4454e0..bdb8399cc 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -17,8 +17,6 @@ - EhViewer - 主頁 熱門 收藏 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 66cbc724b..0b4d7a34f 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -17,8 +17,6 @@ - EhViewer - 首頁 熱門 收藏 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a85315737..55e09e3eb 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,8 +17,6 @@ - EhViewer - e-hentai exhentai From bf3ebc5ff87d435c827ee534d71e8b0dfba3f995 Mon Sep 17 00:00:00 2001 From: onlymash Date: Tue, 20 Mar 2018 20:29:48 +0800 Subject: [PATCH 059/630] remove unused applicationId --- app/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 387601654..73789278a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,7 +7,6 @@ android { compileSdkVersion 27 defaultConfig { - applicationId "com.hippo.ehviewer" minSdkVersion 14 targetSdkVersion 27 versionCode 80 From 6180ea33027d043f2fc4332e001f1ff4b182df5b Mon Sep 17 00:00:00 2001 From: onlymash Date: Tue, 20 Mar 2018 23:16:49 +0800 Subject: [PATCH 060/630] remove productFlavors --- app/build.gradle | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 73789278a..3ca0f51a8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,6 +7,7 @@ android { compileSdkVersion 27 defaultConfig { + applicationId "com.hippo.ehviewer" minSdkVersion 14 targetSdkVersion 27 versionCode 80 @@ -25,18 +26,12 @@ android { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - flavorDimensions "debugFlavor" - productFlavors { - releaseFlavor { resValue "string", "app_name", "EhViewer" - applicationId "com.hippo.ehviewer" buildConfigField 'String', 'AUTHORITY', '"com.hippo.ehviewer.fileprovider"' } - debugFlavor { + debug { + applicationIdSuffix ".debug" resValue "string", "app_name", "EhViewerDebug" - applicationId "com.hippo.ehviewer.debug" buildConfigField 'String', 'AUTHORITY', '"com.hippo.ehviewer.debug.fileprovider"' } } From 2eef9b8fb083f26e901916b8412cabb14833cf03 Mon Sep 17 00:00:00 2001 From: onlymash Date: Fri, 23 Mar 2018 17:44:42 +0800 Subject: [PATCH 061/630] rename FILE_PROVIDER_AUTHORITY --- app/build.gradle | 4 ++-- app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3ca0f51a8..a133061d0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,12 +27,12 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' resValue "string", "app_name", "EhViewer" - buildConfigField 'String', 'AUTHORITY', '"com.hippo.ehviewer.fileprovider"' + buildConfigField 'String', 'FILE_PROVIDER_AUTHORITY', '"com.hippo.ehviewer.fileprovider"' } debug { applicationIdSuffix ".debug" resValue "string", "app_name", "EhViewerDebug" - buildConfigField 'String', 'AUTHORITY', '"com.hippo.ehviewer.debug.fileprovider"' + buildConfigField 'String', 'FILE_PROVIDER_AUTHORITY', '"com.hippo.ehviewer.debug.fileprovider"' } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 9c0162570..5398c9c5f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -861,7 +861,7 @@ private void shareImage(int page) { Uri uri = new Uri.Builder() .scheme(ContentResolver.SCHEME_CONTENT) - .authority(BuildConfig.AUTHORITY) + .authority(BuildConfig.FILE_PROVIDER_AUTHORITY) .appendPath("image") .appendPath(filename) .build(); From 95114502c94898a8c2679b10715813cb44729605 Mon Sep 17 00:00:00 2001 From: onlymash Date: Fri, 23 Mar 2018 17:48:56 +0800 Subject: [PATCH 062/630] add strings.xml to debug --- app/build.gradle | 2 -- app/src/debug/res/values-es/strings.xml | 22 +++++++++++++++++++++ app/src/debug/res/values-ja/strings.xml | 22 +++++++++++++++++++++ app/src/debug/res/values-ko/strings.xml | 22 +++++++++++++++++++++ app/src/debug/res/values-zh-rCN/strings.xml | 22 +++++++++++++++++++++ app/src/debug/res/values-zh-rHK/strings.xml | 22 +++++++++++++++++++++ app/src/debug/res/values-zh-rTW/strings.xml | 22 +++++++++++++++++++++ app/src/debug/res/values/strings.xml | 22 +++++++++++++++++++++ 8 files changed, 154 insertions(+), 2 deletions(-) create mode 100755 app/src/debug/res/values-es/strings.xml create mode 100755 app/src/debug/res/values-ja/strings.xml create mode 100755 app/src/debug/res/values-ko/strings.xml create mode 100755 app/src/debug/res/values-zh-rCN/strings.xml create mode 100755 app/src/debug/res/values-zh-rHK/strings.xml create mode 100755 app/src/debug/res/values-zh-rTW/strings.xml create mode 100755 app/src/debug/res/values/strings.xml diff --git a/app/build.gradle b/app/build.gradle index a133061d0..d772a10c4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,12 +26,10 @@ android { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - resValue "string", "app_name", "EhViewer" buildConfigField 'String', 'FILE_PROVIDER_AUTHORITY', '"com.hippo.ehviewer.fileprovider"' } debug { applicationIdSuffix ".debug" - resValue "string", "app_name", "EhViewerDebug" buildConfigField 'String', 'FILE_PROVIDER_AUTHORITY', '"com.hippo.ehviewer.debug.fileprovider"' } } diff --git a/app/src/debug/res/values-es/strings.xml b/app/src/debug/res/values-es/strings.xml new file mode 100755 index 000000000..82d363589 --- /dev/null +++ b/app/src/debug/res/values-es/strings.xml @@ -0,0 +1,22 @@ + + + + + + EhViewer Debug + + diff --git a/app/src/debug/res/values-ja/strings.xml b/app/src/debug/res/values-ja/strings.xml new file mode 100755 index 000000000..82d363589 --- /dev/null +++ b/app/src/debug/res/values-ja/strings.xml @@ -0,0 +1,22 @@ + + + + + + EhViewer Debug + + diff --git a/app/src/debug/res/values-ko/strings.xml b/app/src/debug/res/values-ko/strings.xml new file mode 100755 index 000000000..82d363589 --- /dev/null +++ b/app/src/debug/res/values-ko/strings.xml @@ -0,0 +1,22 @@ + + + + + + EhViewer Debug + + diff --git a/app/src/debug/res/values-zh-rCN/strings.xml b/app/src/debug/res/values-zh-rCN/strings.xml new file mode 100755 index 000000000..82d363589 --- /dev/null +++ b/app/src/debug/res/values-zh-rCN/strings.xml @@ -0,0 +1,22 @@ + + + + + + EhViewer Debug + + diff --git a/app/src/debug/res/values-zh-rHK/strings.xml b/app/src/debug/res/values-zh-rHK/strings.xml new file mode 100755 index 000000000..82d363589 --- /dev/null +++ b/app/src/debug/res/values-zh-rHK/strings.xml @@ -0,0 +1,22 @@ + + + + + + EhViewer Debug + + diff --git a/app/src/debug/res/values-zh-rTW/strings.xml b/app/src/debug/res/values-zh-rTW/strings.xml new file mode 100755 index 000000000..82d363589 --- /dev/null +++ b/app/src/debug/res/values-zh-rTW/strings.xml @@ -0,0 +1,22 @@ + + + + + + EhViewer Debug + + diff --git a/app/src/debug/res/values/strings.xml b/app/src/debug/res/values/strings.xml new file mode 100755 index 000000000..82d363589 --- /dev/null +++ b/app/src/debug/res/values/strings.xml @@ -0,0 +1,22 @@ + + + + + + EhViewer Debug + + From 2f319afd407c37158d32d60e8577fb4188ddb4b7 Mon Sep 17 00:00:00 2001 From: onlymash Date: Fri, 23 Mar 2018 17:56:02 +0800 Subject: [PATCH 063/630] restore app_name --- app/src/main/res/values-es/strings.xml | 2 ++ app/src/main/res/values-ja/strings.xml | 2 ++ app/src/main/res/values-ko/strings.xml | 2 ++ app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values-zh-rHK/strings.xml | 2 ++ app/src/main/res/values-zh-rTW/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 7 files changed, 14 insertions(+) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 74ba97869..43fb20963 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -17,6 +17,8 @@ + EhViewer + Página de inicio diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 4614e0e80..6e844163b 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -17,6 +17,8 @@ + EhViewer + ホームページ 人気 気に入り diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 7c9933275..a9340eca8 100755 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -17,6 +17,8 @@ + EhViewer + 인기 갤러리 즐겨찾기 diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5aef8003f..b22fc099f 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -17,6 +17,8 @@ + EhViewer + 主页 热门 收藏 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index bdb8399cc..24d4454e0 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -17,6 +17,8 @@ + EhViewer + 主頁 熱門 收藏 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0b4d7a34f..66cbc724b 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -17,6 +17,8 @@ + EhViewer + 首頁 熱門 收藏 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 55e09e3eb..a85315737 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,6 +17,8 @@ + EhViewer + e-hentai exhentai From facb931cb6f04c9808d262159c2f83bcedd33812 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 24 Mar 2018 01:16:32 +0800 Subject: [PATCH 064/630] Use Java 8 language features --- app/build.gradle | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index d772a10c4..76cb0219b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,6 +17,11 @@ android { "es", "ja", "ko" } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + lintOptions { abortOnError false checkReleaseBuilds false From 029bca22ed88f23b980ea0c3aa0f61937fa84489 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 24 Mar 2018 02:17:58 +0800 Subject: [PATCH 065/630] Add hosts UI --- app/src/main/AndroidManifest.xml | 6 + .../com/hippo/ehviewer/EhApplication.java | 12 + .../java/com/hippo/ehviewer/client/EhDns.java | 59 ++++ .../com/hippo/ehviewer/ui/HostsActivity.java | 272 ++++++++++++++++++ app/src/main/res/layout/activity_hosts.xml | 56 ++++ app/src/main/res/layout/dialog_hosts.xml | 54 ++++ app/src/main/res/layout/item_hosts.xml | 40 +++ app/src/main/res/values-zh-rCN/strings.xml | 15 + app/src/main/res/values-zh-rHK/strings.xml | 15 + app/src/main/res/values-zh-rTW/strings.xml | 15 + app/src/main/res/values/strings.xml | 15 + app/src/main/res/xml/advanced_settings.xml | 7 + .../com/hippo/ehviewer/ExampleUnitTest.java | 15 - 13 files changed, 566 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/com/hippo/ehviewer/client/EhDns.java create mode 100644 app/src/main/java/com/hippo/ehviewer/ui/HostsActivity.java create mode 100644 app/src/main/res/layout/activity_hosts.xml create mode 100644 app/src/main/res/layout/dialog_hosts.xml create mode 100644 app/src/main/res/layout/item_hosts.xml delete mode 100644 app/src/test/java/com/hippo/ehviewer/ExampleUnitTest.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 14e20d468..d7067dbd3 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -138,6 +138,12 @@ android:theme="@style/AppTheme.NoActionBar" android:label="@string/u_config"/> + + diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index 4eb273b9f..c783188f5 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -31,6 +31,7 @@ import com.hippo.conaco.Conaco; import com.hippo.ehviewer.client.EhClient; import com.hippo.ehviewer.client.EhCookieStore; +import com.hippo.ehviewer.client.EhDns; import com.hippo.ehviewer.client.EhEngine; import com.hippo.ehviewer.client.data.GalleryDetail; import com.hippo.ehviewer.download.DownloadManager; @@ -81,6 +82,7 @@ public class EhApplication extends SceneApplication implements Thread.UncaughtEx private LruCache mGalleryDetailCache; private SimpleDiskCache mSpiderInfoCache; private DownloadManager mDownloadManager; + private Hosts mHosts; private final List mActivityList = new ArrayList<>(); @@ -238,6 +240,7 @@ public static OkHttpClient getOkHttpClient(@NonNull Context context) { .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .cookieJar(getEhCookieStore(application)) + .dns(new EhDns(application)) .build(); } return application.mOkHttpClient; @@ -303,6 +306,15 @@ public static DownloadManager getDownloadManager(@NonNull Context context) { return application.mDownloadManager; } + @NonNull + public static Hosts getHosts(@NonNull Context context) { + EhApplication application = ((EhApplication) context.getApplicationContext()); + if (application.mHosts == null) { + application.mHosts = new Hosts(application, "hosts.db"); + } + return application.mHosts; + } + private boolean handleException(Throwable ex) { if (ex == null) { return false; diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhDns.java b/app/src/main/java/com/hippo/ehviewer/client/EhDns.java new file mode 100644 index 000000000..2472d95d4 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/client/EhDns.java @@ -0,0 +1,59 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.ehviewer.client; + +/* + * Created by Hippo on 2018/3/23. + */ + +import android.content.Context; +import com.hippo.ehviewer.EhApplication; +import com.hippo.ehviewer.Hosts; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import okhttp3.Dns; + +public class EhDns implements Dns { + + private final Hosts hosts; + + public EhDns(Context context) { + hosts = EhApplication.getHosts(context); + } + + @Override + public List lookup(String hostname) throws UnknownHostException { + if (hostname == null) throw new UnknownHostException("hostname == null"); + + InetAddress inetAddress = hosts.get(hostname); + if (inetAddress != null) { + return Collections.singletonList(inetAddress); + } + + try { + return Arrays.asList(InetAddress.getAllByName(hostname)); + } catch (NullPointerException e) { + UnknownHostException unknownHostException = + new UnknownHostException("Broken system behaviour for dns lookup of " + hostname); + unknownHostException.initCause(e); + throw unknownHostException; + } + } +} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/HostsActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/HostsActivity.java new file mode 100644 index 000000000..4c382bec1 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/ui/HostsActivity.java @@ -0,0 +1,272 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.ehviewer.ui; + +/* + * Created by Hippo on 2018/3/23. + */ + +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.TextInputLayout; +import android.support.v4.app.DialogFragment; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.Pair; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import com.hippo.easyrecyclerview.EasyRecyclerView; +import com.hippo.easyrecyclerview.LinearDividerItemDecoration; +import com.hippo.ehviewer.EhApplication; +import com.hippo.ehviewer.Hosts; +import com.hippo.ehviewer.R; +import com.hippo.ripple.Ripple; +import com.hippo.yorozuya.LayoutUtils; +import java.util.List; +import java.util.Locale; + +public class HostsActivity extends ToolbarActivity + implements EasyRecyclerView.OnItemClickListener, View.OnClickListener { + + private static final String DIALOG_TAG_ADD_HOST = AddHostDialogFragment.class.getName(); + private static final String DIALOG_TAG_EDIT_HOST = EditHostDialogFragment.class.getName(); + + private static final String KEY_HOST = "com.hippo.ehviewer.ui.HostsActivity.HOST"; + private static final String KEY_IP = "com.hippo.ehviewer.ui.HostsActivity.IP"; + + private Hosts hosts; + private List> data; + + private EasyRecyclerView recyclerView; + private View tip; + private HostsAdapter adapter; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + hosts = EhApplication.getHosts(this); + data = hosts.getAll(); + + setContentView(R.layout.activity_hosts); + setNavigationIcon(R.drawable.v_arrow_left_dark_x24); + recyclerView = findViewById(R.id.recycler_view); + tip = findViewById(R.id.tip); + FloatingActionButton fab = findViewById(R.id.fab); + + adapter = new HostsAdapter(); + recyclerView.setAdapter(adapter); + recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); + LinearDividerItemDecoration decoration = new LinearDividerItemDecoration( + LinearDividerItemDecoration.VERTICAL, + getResources().getColor(R.color.divider), + LayoutUtils.dp2pix(this, 1)); + decoration.setShowLastDivider(true); + recyclerView.addItemDecoration(decoration); + recyclerView.setSelector(Ripple.generateRippleDrawable(this, false)); + recyclerView.setHasFixedSize(true); + recyclerView.setOnItemClickListener(this); + recyclerView.setPadding( + recyclerView.getPaddingLeft(), + recyclerView.getPaddingTop(), + recyclerView.getPaddingRight(), + recyclerView.getPaddingBottom() + getResources().getDimensionPixelOffset(R.dimen.gallery_padding_bottom_fab)); + + fab.setOnClickListener(this); + + recyclerView.setVisibility(data.isEmpty() ? View.GONE : View.VISIBLE); + tip.setVisibility(data.isEmpty() ? View.VISIBLE : View.GONE); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + @Override + public boolean onItemClick(EasyRecyclerView easyRecyclerView, View view, int position, long id) { + Pair pair = data.get(position); + Bundle args = new Bundle(); + args.putString(KEY_HOST, pair.first); + args.putString(KEY_IP, pair.second); + + DialogFragment fragment = new EditHostDialogFragment(); + fragment.setArguments(args); + fragment.show(getSupportFragmentManager(), DIALOG_TAG_EDIT_HOST); + + return true; + } + + @Override + public void onClick(View v) { + new AddHostDialogFragment().show(getSupportFragmentManager(), DIALOG_TAG_ADD_HOST); + } + + private void notifyHostsChanges() { + data = hosts.getAll(); + recyclerView.setVisibility(data.isEmpty() ? View.GONE : View.VISIBLE); + tip.setVisibility(data.isEmpty() ? View.VISIBLE : View.GONE); + adapter.notifyDataSetChanged(); + } + + private class HostsHolder extends RecyclerView.ViewHolder { + + public final TextView host; + public final TextView ip; + + public HostsHolder(View itemView) { + super(itemView); + host = itemView.findViewById(R.id.host); + ip = itemView.findViewById(R.id.ip); + } + } + + private class HostsAdapter extends RecyclerView.Adapter { + + private final LayoutInflater inflater = getLayoutInflater(); + + @NonNull + @Override + public HostsHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new HostsHolder(inflater.inflate(R.layout.item_hosts, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull HostsHolder holder, int position) { + Pair pair = data.get(position); + holder.host.setText(pair.first); + holder.ip.setText(pair.second); + } + + @Override + public int getItemCount() { + return data.size(); + } + } + + public abstract static class HostDialogFragment extends DialogFragment { + + private TextView host; + private TextView ip; + + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_hosts, null, false); + host = view.findViewById(R.id.host); + ip = view.findViewById(R.id.ip); + + Bundle arguments = getArguments(); + if (savedInstanceState == null && arguments != null) { + host.setText(arguments.getString(KEY_HOST)); + ip.setText(arguments.getString(KEY_IP)); + } + + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()).setView(view); + onCreateDialogBuilder(builder); + AlertDialog dialog = builder.create(); + dialog.setOnShowListener(d -> onCreateDialog((AlertDialog) d)); + + return dialog; + } + + protected abstract void onCreateDialogBuilder(AlertDialog.Builder builder); + + protected abstract void onCreateDialog(AlertDialog dialog); + + protected void put(AlertDialog dialog) { + TextView host = dialog.findViewById(R.id.host); + TextView ip = dialog.findViewById(R.id.ip); + String hostString = host.getText().toString().trim().toLowerCase(Locale.US); + String ipString = ip.getText().toString().trim(); + + if (!Hosts.isValidHost(hostString)) { + TextInputLayout hostInputLayout = dialog.findViewById(R.id.host_input_layout); + hostInputLayout.setError(getContext().getString(R.string.invalid_host)); + return; + } + + if (!Hosts.isValidIp(ipString)) { + TextInputLayout ipInputLayout = dialog.findViewById(R.id.ip_input_layout); + ipInputLayout.setError(getContext().getString(R.string.invalid_ip)); + return; + } + + HostsActivity activity = (HostsActivity) dialog.getOwnerActivity(); + activity.hosts.put(hostString, ipString); + activity.notifyHostsChanges(); + + dialog.dismiss(); + } + + protected void delete(AlertDialog dialog) { + TextView host = dialog.findViewById(R.id.host); + String hostString = host.getText().toString().trim().toLowerCase(Locale.US); + + HostsActivity activity = (HostsActivity) dialog.getOwnerActivity(); + activity.hosts.delete(hostString); + activity.notifyHostsChanges(); + + dialog.dismiss(); + } + } + + public static class AddHostDialogFragment extends HostDialogFragment { + + @Override + protected void onCreateDialogBuilder(AlertDialog.Builder builder) { + builder.setTitle(R.string.add_host); + builder.setPositiveButton(R.string.add_host_add, null); + } + + @Override + protected void onCreateDialog(AlertDialog dialog) { + dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(v -> put(dialog)); + } + } + + public static class EditHostDialogFragment extends HostDialogFragment { + + @Override + protected void onCreateDialogBuilder(AlertDialog.Builder builder) { + builder.setTitle(R.string.edit_host); + builder.setPositiveButton(R.string.edit_host_confirm, null); + builder.setNegativeButton(R.string.edit_host_delete, null); + } + + @Override + protected void onCreateDialog(AlertDialog dialog) { + dialog.findViewById(R.id.host_input_layout).setEnabled(false); + dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(v -> put(dialog)); + dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setOnClickListener(v -> delete(dialog)); + } + } +} diff --git a/app/src/main/res/layout/activity_hosts.xml b/app/src/main/res/layout/activity_hosts.xml new file mode 100644 index 000000000..85deede4e --- /dev/null +++ b/app/src/main/res/layout/activity_hosts.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_hosts.xml b/app/src/main/res/layout/dialog_hosts.xml new file mode 100644 index 000000000..6e1a18a78 --- /dev/null +++ b/app/src/main/res/layout/dialog_hosts.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_hosts.xml b/app/src/main/res/layout/item_hosts.xml new file mode 100644 index 000000000..98047bdff --- /dev/null +++ b/app/src/main/res/layout/item_hosts.xml @@ -0,0 +1,40 @@ + + + + + + + + + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index b22fc099f..34160ccc1 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -355,6 +355,19 @@ 应用 点击右上角的对勾来保存设置 + + Hosts + hosts.txt + Host + IP + 添加 host + 添加 + 编辑 host + 确认 + 删除 + 无效的 host + 无效的 IP + 第 %d 页 @string/refresh @@ -480,6 +493,8 @@ 清理内存缓存 清理缩略图、画廊信息的内存缓存 阅读缓存大小 + Hosts + 将主机名称映射到相应的IP地址 图案保护 未设置图案保护 已设置图案保护 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 24d4454e0..9d1b59ed7 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -355,6 +355,19 @@ 應用 點擊右上角的對勾來保存設置 + + Hosts + hosts.txt + Host + IP + 添加 host + 添加 + 編輯 host + 確認 + 刪除 + 無效的 host + 無效的 IP + 第 %d 頁 @string/refresh @@ -480,6 +493,8 @@ 清理內存緩存 清理縮略圖、畫廊信息的內存緩存 閲讀緩存大小 + Hosts + 將主機名稱對映到相應的IP位址 圖案保護 未設置圖案保護 已設置圖案保護 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 66cbc724b..c0551d44d 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -355,6 +355,19 @@ 應用 點選右上角的對勾來儲存設定 + + Hosts + hosts.txt + Host + IP + 添加 host + 添加 + 編輯 host + 確認 + 刪除 + 無效的 host + 無效的 IP + 第 %d 頁 @string/refresh @@ -480,6 +493,8 @@ 清除記憶體快取 清除縮圖、圖庫詳細資料的記憶體快取 閱讀快取大小 + Hosts + 將主機名稱對映到相應的IP位址 繪圖解鎖 尚未設定繪圖解鎖 已設定繪圖解鎖 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a85315737..b60a22280 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -399,6 +399,19 @@ Apply Click the check mark to save the settings + + Hosts + hosts.txt + Host + IP + Add a host + Add + Edit the host + Confirm + Delete + Invalid host + Invalid IP + Page %d @string/refresh @@ -523,6 +536,8 @@ Clear memory cache Clear thumb, gallery info memory cache Read cache size + Hosts + Map hostnames to IP addresses Pattern protection Pattern protection has not been set Pattern protection has been set diff --git a/app/src/main/res/xml/advanced_settings.xml b/app/src/main/res/xml/advanced_settings.xml index 3d57ca03c..945271f55 100644 --- a/app/src/main/res/xml/advanced_settings.xml +++ b/app/src/main/res/xml/advanced_settings.xml @@ -48,6 +48,13 @@ app:entryValues="@array/read_cache_size_entry_values" android:defaultValue="160"/> + + Date: Sun, 25 Mar 2018 20:23:16 +0800 Subject: [PATCH 066/630] Close #363, select download pipe if download dir exists --- app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.java index fce40aa0e..fb4835753 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.java @@ -323,7 +323,12 @@ private OutputStreamPipe openDownloadOutputStreamPipe(int index, @Nullable Strin @Nullable public OutputStreamPipe openOutputStreamPipe(int index, @Nullable String extension) { if (mMode == SpiderQueen.MODE_READ) { - return openCacheOutputStreamPipe(index); + // Return the download pipe is the gallery has been downloaded + OutputStreamPipe pipe = openDownloadOutputStreamPipe(index, extension); + if (pipe == null) { + pipe = openCacheOutputStreamPipe(index); + } + return pipe; } else if (mMode == SpiderQueen.MODE_DOWNLOAD) { return openDownloadOutputStreamPipe(index, extension); } else { From e1eea40fd77cec1d41f7bc7c810f63115cb96fa5 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 26 Mar 2018 10:16:51 +0800 Subject: [PATCH 067/630] Use "hosts.txt" instead of "Hosts" Users might be more familiar with the former --- app/src/main/res/values-zh-rCN/strings.xml | 4 ++-- app/src/main/res/values-zh-rHK/strings.xml | 4 ++-- app/src/main/res/values-zh-rTW/strings.xml | 4 ++-- app/src/main/res/values/strings.xml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 34160ccc1..f42159617 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -356,7 +356,7 @@ 点击右上角的对勾来保存设置 - Hosts + hosts.txt hosts.txt Host IP @@ -493,7 +493,7 @@ 清理内存缓存 清理缩略图、画廊信息的内存缓存 阅读缓存大小 - Hosts + hosts.txt 将主机名称映射到相应的IP地址 图案保护 未设置图案保护 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 9d1b59ed7..565329db1 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -356,7 +356,7 @@ 點擊右上角的對勾來保存設置 - Hosts + hosts.txt hosts.txt Host IP @@ -493,7 +493,7 @@ 清理內存緩存 清理縮略圖、畫廊信息的內存緩存 閲讀緩存大小 - Hosts + hosts.txt 將主機名稱對映到相應的IP位址 圖案保護 未設置圖案保護 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index c0551d44d..09b4a9e01 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -356,7 +356,7 @@ 點選右上角的對勾來儲存設定 - Hosts + hosts.txt hosts.txt Host IP @@ -493,7 +493,7 @@ 清除記憶體快取 清除縮圖、圖庫詳細資料的記憶體快取 閱讀快取大小 - Hosts + hosts.txt 將主機名稱對映到相應的IP位址 繪圖解鎖 尚未設定繪圖解鎖 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b60a22280..14161afec 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -400,7 +400,7 @@ Click the check mark to save the settings - Hosts + hosts.txt hosts.txt Host IP @@ -536,7 +536,7 @@ Clear memory cache Clear thumb, gallery info memory cache Read cache size - Hosts + hosts.txt Map hostnames to IP addresses Pattern protection Pattern protection has not been set From b95892d3b66afcf93ed45052da114969fbd5157f Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 26 Mar 2018 11:07:13 +0800 Subject: [PATCH 068/630] Use "Custom hosts.txt" to distinguish "built-in" and "custom" --- app/src/main/res/values-zh-rCN/strings.xml | 6 +++--- app/src/main/res/values-zh-rHK/strings.xml | 6 +++--- app/src/main/res/values-zh-rTW/strings.xml | 6 +++--- app/src/main/res/values/strings.xml | 6 +++--- app/src/main/res/xml/advanced_settings.xml | 10 +++++----- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f42159617..b64a39b27 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -356,7 +356,7 @@ 点击右上角的对勾来保存设置 - hosts.txt + 自定义 hosts.txt hosts.txt Host IP @@ -493,8 +493,8 @@ 清理内存缓存 清理缩略图、画廊信息的内存缓存 阅读缓存大小 - hosts.txt - 将主机名称映射到相应的IP地址 + 自定义 hosts.txt + 将主机名称映射到相应的IP地址 图案保护 未设置图案保护 已设置图案保护 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 565329db1..8e53ef61c 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -356,7 +356,7 @@ 點擊右上角的對勾來保存設置 - hosts.txt + 自定義 hosts.txt hosts.txt Host IP @@ -493,8 +493,8 @@ 清理內存緩存 清理縮略圖、畫廊信息的內存緩存 閲讀緩存大小 - hosts.txt - 將主機名稱對映到相應的IP位址 + 自定義 hosts.txt + 將主機名稱對映到相應的IP位址 圖案保護 未設置圖案保護 已設置圖案保護 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 09b4a9e01..481f21160 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -356,7 +356,7 @@ 點選右上角的對勾來儲存設定 - hosts.txt + 自定義 hosts.txt hosts.txt Host IP @@ -493,8 +493,8 @@ 清除記憶體快取 清除縮圖、圖庫詳細資料的記憶體快取 閱讀快取大小 - hosts.txt - 將主機名稱對映到相應的IP位址 + 自定義 hosts.txt + 將主機名稱對映到相應的IP位址 繪圖解鎖 尚未設定繪圖解鎖 已設定繪圖解鎖 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 14161afec..645b461fe 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -400,7 +400,7 @@ Click the check mark to save the settings - hosts.txt + Custom hosts.txt hosts.txt Host IP @@ -536,8 +536,8 @@ Clear memory cache Clear thumb, gallery info memory cache Read cache size - hosts.txt - Map hostnames to IP addresses + Custom hosts.txt + Map hostnames to IP addresses Pattern protection Pattern protection has not been set Pattern protection has been set diff --git a/app/src/main/res/xml/advanced_settings.xml b/app/src/main/res/xml/advanced_settings.xml index 945271f55..5a3774322 100644 --- a/app/src/main/res/xml/advanced_settings.xml +++ b/app/src/main/res/xml/advanced_settings.xml @@ -49,11 +49,11 @@ android:defaultValue="160"/> + xmlns:app="http://schemas.android.com/apk/res-auto" + android:key="custom_hosts" + android:title="@string/settings_advanced_custom_hosts_title" + android:summary="@string/settings_advanced_custom_hosts_summary" + app:activity="com.hippo.ehviewer.ui.HostsActivity" /> Date: Mon, 26 Mar 2018 12:02:44 +0800 Subject: [PATCH 069/630] Add built-in hosts --- .../main/java/com/hippo/ehviewer/Hosts.java | 2 +- .../java/com/hippo/ehviewer/Settings.java | 11 ++++++++ .../java/com/hippo/ehviewer/client/EhDns.java | 26 +++++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 4 ++- app/src/main/res/values-zh-rHK/strings.xml | 4 ++- app/src/main/res/values-zh-rTW/strings.xml | 4 ++- app/src/main/res/values/strings.xml | 4 ++- app/src/main/res/xml/advanced_settings.xml | 8 +++++- 8 files changed, 57 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Hosts.java b/app/src/main/java/com/hippo/ehviewer/Hosts.java index 39b8f29b0..fc820f97a 100644 --- a/app/src/main/java/com/hippo/ehviewer/Hosts.java +++ b/app/src/main/java/com/hippo/ehviewer/Hosts.java @@ -142,7 +142,7 @@ public List> getAll() { } @Nullable - private static InetAddress toInetAddress(String host, String ip) { + public static InetAddress toInetAddress(String host, String ip) { if (!isValidHost(host)) { return null; } diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 3ac143126..226fda5c7 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -952,6 +952,17 @@ public static int getReadCacheSize() { return getIntFromStr(KEY_READ_CACHE_SIZE, DEFAULT_READ_CACHE_SIZE); } + public static final String KEY_BUILT_IN_HOSTS = "built_in_hosts"; + private static final boolean DEFAULT_BUILT_IN_HOSTS = false; + + public static boolean getBuiltInHosts() { + return getBoolean(KEY_BUILT_IN_HOSTS, DEFAULT_BUILT_IN_HOSTS); + } + + public static void putBuiltInHosts(boolean value) { + putBoolean(KEY_BUILT_IN_HOSTS, value); + } + /******************** ****** Guide ********************/ diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhDns.java b/app/src/main/java/com/hippo/ehviewer/client/EhDns.java index 2472d95d4..0d3e44f10 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhDns.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhDns.java @@ -23,15 +23,34 @@ import android.content.Context; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.Hosts; +import com.hippo.ehviewer.Settings; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import okhttp3.Dns; public class EhDns implements Dns { + private static final Map builtInHosts; + + static { + Map map = new HashMap<>(); + put(map, "e-hentai.org", "104.24.255.11"); + put(map, "forums.e-hentai.org", "94.100.18.243"); + builtInHosts = map; + } + + private static void put(Map map, String host, String ip) { + InetAddress address = Hosts.toInetAddress(host, ip); + if (address != null) { + map.put(host, address); + } + } + private final Hosts hosts; public EhDns(Context context) { @@ -47,6 +66,13 @@ public List lookup(String hostname) throws UnknownHostException { return Collections.singletonList(inetAddress); } + if (Settings.getBuiltInHosts()) { + inetAddress = builtInHosts.get(hostname); + if (inetAddress != null) { + return Collections.singletonList(inetAddress); + } + } + try { return Arrays.asList(InetAddress.getAllByName(hostname)); } catch (NullPointerException e) { diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index b64a39b27..70d674ca3 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -493,8 +493,10 @@ 清理内存缓存 清理缩略图、画廊信息的内存缓存 阅读缓存大小 + 内置 hosts.txt + 应用提供的主机到IP的映射\n可被自定义 hosts.txt 覆盖 自定义 hosts.txt - 将主机名称映射到相应的IP地址 + 将主机名称映射到相应的IP地址\n可覆盖内置 hosts.txt 图案保护 未设置图案保护 已设置图案保护 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 8e53ef61c..8520ccee0 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -493,8 +493,10 @@ 清理內存緩存 清理縮略圖、畫廊信息的內存緩存 閲讀緩存大小 + 內置 hosts.txt + 應用提供的主機到IP的映射\n可被自定義 hosts.txt 覆蓋 自定義 hosts.txt - 將主機名稱對映到相應的IP位址 + 將主機名稱映射到相應的IP地址\n可覆蓋內置 hosts.txt 圖案保護 未設置圖案保護 已設置圖案保護 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 481f21160..c7d018f49 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -493,8 +493,10 @@ 清除記憶體快取 清除縮圖、圖庫詳細資料的記憶體快取 閱讀快取大小 + 內建 hosts.txt + 應用提供的主機到IP的對映\n可被自定義 hosts.txt 覆蓋 自定義 hosts.txt - 將主機名稱對映到相應的IP位址 + 將主機名稱對映到相應的IP位址\n可覆蓋內建 hosts.txt 繪圖解鎖 尚未設定繪圖解鎖 已設定繪圖解鎖 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 645b461fe..c98da26dc 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -536,8 +536,10 @@ Clear memory cache Clear thumb, gallery info memory cache Read cache size + Built-in hosts.txt + The host-to-IP mapping provided by the app\nIt can be overrode by custom hosts.txt Custom hosts.txt - Map hostnames to IP addresses + Map hostnames to IP addresses\nIt can override built-in hosts.txt Pattern protection Pattern protection has not been set Pattern protection has been set diff --git a/app/src/main/res/xml/advanced_settings.xml b/app/src/main/res/xml/advanced_settings.xml index 5a3774322..731f59ebd 100644 --- a/app/src/main/res/xml/advanced_settings.xml +++ b/app/src/main/res/xml/advanced_settings.xml @@ -48,12 +48,18 @@ app:entryValues="@array/read_cache_size_entry_values" android:defaultValue="160"/> + + + app:activity="com.hippo.ehviewer.ui.HostsActivity"/> Date: Mon, 26 Mar 2018 17:56:25 +0800 Subject: [PATCH 070/630] Update adaptive icon --- .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 2 +- .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 644 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 2074 -> 539 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 484 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 1530 -> 358 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 747 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 2459 -> 732 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 1115 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 3850 -> 1058 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 1499 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 4624 -> 1578 bytes app/src/main/res/values/colors.xml | 2 -- 13 files changed, 2 insertions(+), 4 deletions(-) create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index f4091292b..c2c380792 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index f4091292b..c2c380792 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ - + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/app/src/main/res/mipmap-hdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..9ed85d873493f06f0cb6c1fe6cbe4efb5eaa3698 GIT binary patch literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz2}t@*X!HS6k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nAAL7978H@y}4uW%~U9JAhGvFl+r;Dfv#=S*xG0DXjL(u z_1)VR=h&B*`_A|5-i8wkmx;AcGZWA>p%W9JLTu~(@BrR zKz;hp7tgGA)kfUeV{O^{uI<=I_jVCG?Hau_XK9exGEKf4Keylhps}}p_szEne(Ama z(do#kxaU`{rg;%_w$! z@MY0L-7{_9>Q~-;8)IwFn`eLf-p#1U)>(4TPCfqn;9K(}Hn4@KZ_QcYwrAD#?O;zn z705Ys^nB{sx2mcy)BEP1o^{*XizgQteA%C8T)*-oUi8cKi17X;EkCcX-mCOgvH#SC zV>-^&zkDC9zjf<={O6N%&R$t%_oi(dnZXK;3}d925KDta-kSYil@BnmWcgJ#ZF{i> Qn5-B)UHx3vIVCg!0IU`-=>Px# literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png index f849542d18aa056365e383e23dcab459f3df0c54..81fcf5ccbc5ed82a3f918b46097634e077d59ef0 100644 GIT binary patch delta 413 zcmbOwFq>t9hYRCgPZ!6Kid%1PH|91uFgOHeS}`c!;FVa|cY)WcNqI-3@(jNVf+@|r z9Pcj3adcy#`akSnH!O~PRhG^rpu{1lcrN6c zz`VRO9Rh+NUK4^^Ql8J1=Nx;z|KUOo<@`N0T#L_aT4Ut=$70RG*Mf&XmrAr7*s-lk z?z#OWZR!%mV=E5bxPE!hSxdLOT`XUYNzEnAGbL s;&)?Per&j^72m{zs!|1q?N}uk!YWSex7v324FeE(y85}Sb4q9e0O_2&jQ{`u delta 1946 zcmV;L2W9x11ey?#NPh>sNklO^R2W#v`T{ngd#-)1+Dm2O+%$BUQ$G&OE$^ove`_} zS!deGx-*&Cna%Fbd>@>gncbP$&CIv|f6mOAQ4|0G000000F&qe8I$k<5tHx%5s{z< ze+UN=c7Z==nzqC0y-X(apsTCvE_(^qLPSgM-Mja#Sfq`;WR1!$Sc9|^iD;sF1sM^s zUg$=~@JP>7B&h+>9|17HYq9mrLf2XrnzYmj)3Nn(K{U9OA2Gc&2LOv2@UXOsK z0%|2Pz9dR3yActqCF4Xa7F#Mw0|Nse z^z`)XG2YMRa(|7CjGU5E7^3LCTSZk>%`A|7eb=sC$5N?OUzs!;*HiK%UBu;he>|SI zNz3ITqhuBl1IW5{>+Xo^A5mTxrD=S8{B0rPfA0%Hrw<-Hc*91J6}9MyWNqYwv2Z~yRG0* z5Y0v$M=}-)1=Xd5p_ef%ot3$be;YSWR#`%$j?K@{Cv28q?ejWBNzq0OA5J9H+S=Ma zaw@LT=_%7jbSi&`DVh@zgG|ZQ4$Wl>^%O-%M@P42GMTUP`TR9a(;n$%Ld^d@H8u71 znKNf(FT6cWk&*L=YapQ>A+_`8&%c?=<$l_}efznNj*k7&XmtIG^c0P5e@Lg(2aX&$ z^6S{x*r0eRElLs*kFMbkBKjOIC(y*i#4+(+anM3Gn;q}%?fue?gtN1=KQ=cvZ#A~Jyu6&1a+$x+ z;^N|%=+unO&CNY*ZEfAuf6~%2So)nOCnryLcXyvMzOpFubXLL<5sTAOLLtYyB^{57 zBcfSCA>Xx2mo6ROyLa!Hd7X(3povSaDRfh=`T++T(g%AT^c?^ zvC{7)Wo$x3B((Z0$DN!CPaT=-Sfj|utpYA2lq0K+DE0K|)2z*9JJ%8_7MJ*JBBIkD zMO3es5itM~f67{ptTtYh!?{E?kGuZd_L?hc zCTMz!RuQrOPTy4fiiv9(9rT(jmC&f=@s1#3V?;!!aydRB?sU+@D!pc}64tehfxTx% z)3lF8b=dUMYkDan2dj#9-k)WpQLIkEB$LT)rZ(c$e^e^C@)^yJ}K7OBBX0?YHHeI{#>!%AL4(R(w95i+1Yv4M=7;>IbK2T ztVrp0Sf&D1O`C6U@)}KrVDDKiB;?v4iHjAZ)^R&A z$RgUwh=hn(a~Y8k5o;=API-QBhl+%V7!(2^{lD zMkGYUn#+iUi0BK89%Mv9M69`tNQj74lQHU0MkGYUs*-mgBN8Iwn#veKLPV@b8IceX zV{5{azTYB9h=@UzF_aP_qBja9`ws~bvEgM5wSj% g8~^~+5&sG>01?suV^WECH2?qr07*qoM6N<$g5ndQA^-pY diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/app/src/main/res/mipmap-mdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..06bf8b5fbfa5e0808ce874feabb4eba3706af92d GIT binary patch literal 484 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1SA<)4$K0Qk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+7~4Eu978H@y}4uP#q21-cEKg*sNKP%=Z;+pVLQXSX6+i= z#-$rCb7#z+Eupw_%jS(!I$j=SesSQ0$f5^*Qbw8Y!|JT))cd&DYaTA?Y3eSDo8xv}?b#{n`7@}k#ehwh1CsX`q=MkmF-+(7^8M1Pc+>AVNQh1BCF{(o$b-L6VoTf<*i%myk_o# zFq1h}=BYyVcb;+me!69?S?9NNL0_y4Lw0w}zM&?#$m)7t`TF@;e1^uEJ0D-Sd+zeH z>{jui(_xVWEbHpY+D(_2ZhhbE++w$+zN>4oAOi|G@O_D5e$2U@UHz4(7u9;bRI9H%*thfUqV=~; zrfrQ^W4^!7`HW_oSn$ca^MfBB(iA)>;A2qF;%soRt!k%z|IK4D($oJwpRshmyW{sn z!__ma%5UGOPGzw+-*^4|^S)fh<=-B>Z{902+uv5sJv4dlDLEbG8>^E4?z(dM(f+uS zHNjrH`<{x2cc$+A^0j?8zc3HTc#!D=JO^2t&%dtNzVB=6rSj|LEs7EdXDdLMAL`#R Z@i06QO8@iJWn&LW%+uA+Wt~$(69612edquH delta 1476 zcmV;#1v~oY0{RP(NPh*KNklyl6tWnCQu)iCNKjQZGb35ED&+i;x(T75QTbF(Dfuk;94*U@eVMpcLBi z_wYUTF`a3L|MO=*q6&?%mjGRLC> z0|Rf0W9f8yoPXYHqG+Uut2ol!m=f6>)xfW9y|uOVALDm|2ODWuRFmeolsGdp^Wo&= z}JCV5uL8j&(FWx)YSAIZ+~}9I+mfi>{>V+{+Yd?DsjBL zy!^J|Jd7O00~Mq>H6^Z5{AD)98D&ZPa+`yZHZn3&UF1BPlpd=nE+HizpOjr$y}i9Z z(p)vcQ{JItxm?a)LY6$IJw}mKB|SQ^Vw9`D=P91!@hrtNJXi|6O7S$0r+6i}Ukwfo z4c!*!*niyI9Al}rr>Ez7DwX=4Wd19TvHfH+`Bhg}*Hwpqk(Cj4WLd1lA08flUAogT zwz#i<@KS*aA8ynwHd^$h@RU^P0FlwLU#P z-QCjC@{`<-r2P;Ig>JC@_V#wRz0VfjY%NEz2VqBqmF`@CR-!UIBu^e;OxEDw;AAQd7}E-eRPM?kEz3Ko(Ng_u^6e!u@fE=z-Evbb2?u)vnT z2!Bl4h7+VIBP^Xx|1NhXje?gt2E0FhFM{G5q~31*|I(!kAGHd#E92abZ8|;quE?n?4G6A zvY&Bw&Rd$wDN(mEV$4QZ$#$jEtn|7}JLg|KR85Hmow>BM#O`3QpIXKeiNvVI99BxW z)f`srbL#sa**E*Idf@#1%+wa5r2LY zvzzK{v@4Y&1Lu(*o%qz$TiX8*(j0=S!Y;Wp`C|eFx1YrR#Kgq)#>U1Q;c&P?918>j z@nkajKBdo*=H})R_FjK~e?wba+Z&Ncct-@q! zemBW-voNDHSIBa^FnNLPb3KDBuLu)ze5%XxB4_^GAOHXW00000000000000000000 ez$x&b00RJpuipdMng{y;0000{( zJaZG%Q-e|yQz{EjrrIztF!g%6IEGZ*dUJQ9-ysKvhQzFn9TJ{0J~BQ14;D=3`^9p` zrfKoy#eF}RcI>kJ&A=vBE~IXL*kRE{mbph-E zr9%NoeGKJw^g8G||Kac1hJs0ayPEeo8kj0WJosqM&L>vA&#q5*H^07jx%*+IBR86E zAA8m9eeB4U9-x~n+;n!FeL8i<>kopDt_UQrJA51}{D-}5ap3!(iO1NRxNmWM^zYH0 zv-iL~rz)_^K%p?@+nS&5lh1EEEC&x2r@okdKU*Kvb)2aWXt0F`bITX5(w}M-i|*XG z_UhIX>&f!Y9iOM9F~;o;+w6D#3J=g10gIB4oT%q}dh=HCl#pAxiyKx-VuToK_~GJR hq<#daeAhg{kka6~YpeNh4q)nK@O1TaS?83{1OV%*1C0Ox literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png index 23afa87655d8f074617fc5e946c8555bef2c022a..b0998eac66ad8a5d6ffb14339530abf95b55beab 100644 GIT binary patch delta 557 zcmbO&e1~;{hdWc9r;B4q#jQ7YANn40kYIZ-@8kZy0~~n?cN=)G2;MlrE8#eoVeSE| z#ykbT1%3hV5B&{TFjdTOrH%h36R&E;_=?NBy{p1SCSEj|_<*yXS$s;uj90ttI+tg* zN2@8eq)+`F-R@-&ar~o(b=-M*>i{MJ0|A2r5^wfb^t*3On^U^TWCL?)?DW#jL9Hc% zjt3YRnL&_+2LwS%1q>VxH~@v4?|!zEcxgI4aAU;%$6F%y_;35;7b)6bY4gsRqg?CQ zKDMQoe<%E`{}p-ntasc+E|#3w1DAwXyKk5lyJCl-#A-#E5*Bt zx?+~-{>^SlS&ySaeTyc{w{ZR4WO2UI=&|zu+9~RGx88ZiUJB$$T({@VZ;70_+rNZl zzkan;FLmF#lT%MAC#=3C@v7o**>T;sHY;qHzWrSp`Yq%4(v`OLQ_W8vbc$N@MW=7( zD!K1rx|3x&W)wUv_1pk}+ zG8TL?TX%VB{dV2txn|Wrc9}iO<#@Pk>EG@OtNTmL-?s58sEJvLZcy~L|FP-t*VDgi zZ2uMfUE%yY_3-!0t|9Q?_YfAlD)#-n`HwxfKK*6{#~z>5h0Dtsm>C40h;)4vc5q|> N0#8>zmvv4FO#rgP^vM7K delta 2326 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 literal 3850 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png new file mode 100644 index 0000000000000000000000000000000000000000..c47a20a0adedcc8b8bcdb4e4c65b76908630f88e GIT binary patch literal 1499 zcmeAS@N?(olHy`uVBq!ia0y~yVB7%0985qFcb(<6KuWU2HKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|RTVr;B4q#jQ7Y75$kKWez+%Y?*#hQ0Cx*i%;ARv@kwr zSGc^!ZBpPOwb^NtZ}K0oF!z|oEjIh`Nwvcd{xDR{o_(<3ILk+ydFdwcvj6gb_nPm~ zZ+-Abg+YNstcSrtfRROzCIo{ci+~HQ2%5MUW+?5P4Kx{NXfI2<$gycBR=0!i( zzm1J=ZQkeJBRiZ zZ?_&VSst9fL~r+={n>ZR(!ZU%&);ujmopQ0bc4P9<6N$}&&_*ZLq9dWczSb+fXg!{ zix<*N+s;ti?%Xu1>MD~$$Ia5PyYs`2@@?Dpc>2U9?1mi3FAh>&JZo>+zWqBb zsw%%t5p+5B`e;T5N5W|y%(%uD|HxuET!_=@BuS9&91?Vpt5q6US~GaM`njxgN@xNA0~>RS literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png index a9fb19ae126170ba48de75735b900ca341c0251e..f1d0adc704deebffb3241273f7d9b574c815bd13 100644 GIT binary patch literal 1578 zcmeAS@N?(olHy`uVBq!ia0y~yVB7%09Be?56MhC-KuWU2HKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|V<(y3_m?trQX>VjxtVryt%gdD;%>jk>0LM1 z&SbSXARCaAfA5p=vCKJ3KMI`Qky%!B!TNsV!Ng;QcaFSM?EP%A%1M6ex91B_NwlUI8VzkF%(DcE#c|G&82U%%yYC7pg`EPZ)u zvc-eim!Cv>r^@X6!_xaFVufp$_g|-o&+jsC)m+P&92;>@bJ_Wwn{pW5=dg>N{yq79 zK+Zn>*F}AypSSd`tBcHJV9b_YR~c^}wB&J2nJvFIuR_9Wts?dZY}OlBUR}mru6XF- zipxKQoGg5kBOm-&E_>g6qY2PQlWK~OJ)iV{uV?Y)o(Z{1?O~&OwVsEi}k-- zTH&AC`QlLSmk;~q^3}|)nl3x9fpL$z?VTfrw=Y$0Puu$PkgCgu&#!JD`l6h0VBb;g z=qM%@o{ZOr7S9wgNRa<)%E}?(V6LaAlyD&KS1y-;0Rs@R@IVnGGced8$l(A31VNM_ zs{$&=tqNHohANT^cC5IpOU;em!{h!}PEgNop__I8J zu5)AZx+^dLWbb!nxXpRPChxp2|MUI6#rqxC>}cV@m2|)8&0vxU>vs2?YH(!n60c7h knj@~T!QmdKI;Vst07g=sLI3~& literal 4624 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 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 66fd45a1c..5bb42c6ac 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -114,6 +114,4 @@ @color/colorPrimary @color/red_500 - @color/colorPrimary - From 3e387b183354fbb5d13f76938a3f8e800f0f2783 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 26 Mar 2018 18:24:03 +0800 Subject: [PATCH 071/630] 1.0.28 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 76cb0219b..913dd2c8a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.hippo.ehviewer" minSdkVersion 14 targetSdkVersion 27 - versionCode 80 - versionName "1.0.27" + versionCode 81 + versionName "1.0.28" vectorDrawables.useSupportLibrary = true resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", "es", "ja", "ko" From 44629bb405f15df52de063d1291b4433e93de07b Mon Sep 17 00:00:00 2001 From: onlymash Date: Sun, 25 Mar 2018 14:40:21 +0800 Subject: [PATCH 072/630] support image custom save --- .../hippo/ehviewer/ui/GalleryActivity.java | 72 ++++++++++++++++++- app/src/main/res/values-zh-rCN/strings.xml | 2 + app/src/main/res/values/arrays.xml | 1 + app/src/main/res/values/strings.xml | 2 + 4 files changed, 76 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 5398c9c5f..7dd9a7afa 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -20,6 +20,7 @@ import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.SuppressLint; +import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; @@ -69,6 +70,7 @@ import com.hippo.widget.ColorView; import com.hippo.yorozuya.AnimationUtils; import com.hippo.yorozuya.ConcurrentPool; +import com.hippo.yorozuya.IOUtils; import com.hippo.yorozuya.MathUtils; import com.hippo.yorozuya.ResourcesUtils; import com.hippo.yorozuya.SimpleAnimatorListener; @@ -76,6 +78,11 @@ import com.hippo.yorozuya.ViewUtils; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChangeListener, GalleryView.Listener { @@ -94,11 +101,14 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan private static final long SLIDER_ANIMATION_DURING = 150; private static final long HIDE_SLIDER_DELAY = 3000; + private static final int WRITE_REQUEST_CODE = 43; + private String mAction; private String mFilename; private Uri mUri; private GalleryInfo mGalleryInfo; private int mPage; + private String mCacheFileName; @Nullable private GLRootView mGLRootView; @@ -897,6 +907,65 @@ private void saveImage(int page) { sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, file.getUri())); } + private void saveImageTo(int page) { + if (null == mGalleryProvider) { + return; + } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT){ + Toast.makeText(this, getString(R.string.os_not_support), Toast.LENGTH_SHORT).show(); + }else { + File dir = getCacheDir(); + UniFile file; + if (null == (file = mGalleryProvider.save(page, UniFile.fromFile(dir), mGalleryProvider.getImageFilename(page)))) { + Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); + return; + } + String filename = file.getName(); + if (filename == null) { + Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); + return; + } + mCacheFileName = filename; + Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.setType("image/*"); + intent.putExtra(Intent.EXTRA_TITLE, filename); + startActivityForResult(intent, WRITE_REQUEST_CODE); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent resultData) { + if (requestCode == WRITE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { + if (resultData != null){ + Uri uri = resultData.getData(); + String filepath = getCacheDir() + "/" + mCacheFileName; + File cachefile = new File(filepath); + + InputStream is = null; + OutputStream os = null; + ContentResolver resolver = getContentResolver(); + + try { + is = new FileInputStream(cachefile); + os = resolver.openOutputStream(uri); + IOUtils.copy(is, os); + } catch (IOException e) { + e.printStackTrace(); + } finally { + IOUtils.closeQuietly(is); + IOUtils.closeQuietly(os); + } + + cachefile.delete(); + + Toast.makeText(this, getString(R.string.image_saved, uri.getPath()), Toast.LENGTH_SHORT).show(); + // Sync media store + sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); + } + } + } + private void showPageDialog(final int page) { Resources resources = GalleryActivity.this.getResources(); new AlertDialog.Builder(GalleryActivity.this) @@ -918,7 +987,8 @@ public void onClick(DialogInterface dialog, int which) { case 2: // Save saveImage(page); break; - case 3: // Add a bookmark + case 3: // Save to + saveImageTo(page); break; } } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 70d674ca3..f346f657a 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -373,10 +373,12 @@ @string/refresh @string/share 保存 + 保存到... 添加书签 菜单 分享图片 图片已保存至 %s + 当前系统不支持 EH diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 0676fc3ef..c81a23588 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -204,6 +204,7 @@ @string/page_menu_refresh @string/page_menu_share @string/page_menu_save + @string/page_menu_save_to diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c98da26dc..c1c389d6c 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -417,10 +417,12 @@ @string/refresh @string/share Save + Save to... Add a bookmark Menu Share image Image saved to %s + Current Android version does not support EH Sign out From c31048e829c3f8fc2dabbf0392dceb083c6886a9 Mon Sep 17 00:00:00 2001 From: onlymash Date: Sun, 25 Mar 2018 14:42:34 +0800 Subject: [PATCH 073/630] clean import --- app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 7dd9a7afa..a7c715e7c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -79,7 +79,6 @@ import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; From 5188fe7170b7cf2ea06b26d48483b8c8e8f918cb Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 26 Mar 2018 11:01:19 +0800 Subject: [PATCH 074/630] only show 'Save to...' at KiKat or higher --- .../hippo/ehviewer/ui/GalleryActivity.java | 108 +++++++++++------- app/src/main/res/values/arrays.xml | 6 + 2 files changed, 70 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index a7c715e7c..56da41ee9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -910,27 +910,23 @@ private void saveImageTo(int page) { if (null == mGalleryProvider) { return; } - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT){ - Toast.makeText(this, getString(R.string.os_not_support), Toast.LENGTH_SHORT).show(); - }else { - File dir = getCacheDir(); - UniFile file; - if (null == (file = mGalleryProvider.save(page, UniFile.fromFile(dir), mGalleryProvider.getImageFilename(page)))) { - Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); - return; - } - String filename = file.getName(); - if (filename == null) { - Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); - return; - } - mCacheFileName = filename; - Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); - intent.addCategory(Intent.CATEGORY_OPENABLE); - intent.setType("image/*"); - intent.putExtra(Intent.EXTRA_TITLE, filename); - startActivityForResult(intent, WRITE_REQUEST_CODE); + File dir = getCacheDir(); + UniFile file; + if (null == (file = mGalleryProvider.save(page, UniFile.fromFile(dir), mGalleryProvider.getImageFilename(page)))) { + Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); + return; + } + String filename = file.getName(); + if (filename == null) { + Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); + return; } + mCacheFileName = filename; + Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.setType("image/*"); + intent.putExtra(Intent.EXTRA_TITLE, filename); + startActivityForResult(intent, WRITE_REQUEST_CODE); } @Override @@ -967,31 +963,55 @@ public void onActivityResult(int requestCode, int resultCode, Intent resultData) private void showPageDialog(final int page) { Resources resources = GalleryActivity.this.getResources(); - new AlertDialog.Builder(GalleryActivity.this) - .setTitle(resources.getString(R.string.page_menu_title, page + 1)) - .setItems(R.array.page_menu_entries, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (mGalleryProvider == null) { - return; - } - - switch (which) { - case 0: // Refresh - mGalleryProvider.forceRequest(page); - break; - case 1: // Share - shareImage(page); - break; - case 2: // Save - saveImage(page); - break; - case 3: // Save to - saveImageTo(page); - break; - } + AlertDialog.Builder builder = new AlertDialog.Builder(GalleryActivity.this); + builder.setTitle(resources.getString(R.string.page_menu_title, page + 1)); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ + builder.setItems(R.array.page_menu_entries_new, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (mGalleryProvider == null) { + return; } - }).show(); + + switch (which) { + case 0: // Refresh + mGalleryProvider.forceRequest(page); + break; + case 1: // Share + shareImage(page); + break; + case 2: // Save + saveImage(page); + break; + case 3: // Save to + saveImageTo(page); + break; + } + } + }).show(); + }else { + builder.setItems(R.array.page_menu_entries, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (mGalleryProvider == null) { + return; + } + + switch (which) { + case 0: // Refresh + mGalleryProvider.forceRequest(page); + break; + case 1: // Share + shareImage(page); + break; + case 2: // Save + saveImage(page); + break; + } + } + }).show(); + } } private class NotifyTask implements Runnable { diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index c81a23588..9b0717a42 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -204,6 +204,12 @@ @string/page_menu_refresh @string/page_menu_share @string/page_menu_save + + + + @string/page_menu_refresh + @string/page_menu_share + @string/page_menu_save @string/page_menu_save_to From 7612dde6d4f460fe20a5ffa1432362b508b8b7d4 Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 26 Mar 2018 11:18:13 +0800 Subject: [PATCH 075/630] clean string.xml --- app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values/strings.xml | 1 - 2 files changed, 2 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f346f657a..fc5c69749 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -378,7 +378,6 @@ 菜单 分享图片 图片已保存至 %s - 当前系统不支持 EH diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c1c389d6c..64309c391 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -422,7 +422,6 @@ Menu Share image Image saved to %s - Current Android version does not support EH Sign out From 8cc2bfbcedb7d2f9d103ce778cab3a61dadc3c1f Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 26 Mar 2018 13:21:41 +0800 Subject: [PATCH 076/630] dynamically add dialog items --- .../hippo/ehviewer/ui/GalleryActivity.java | 82 +++++++++---------- app/src/main/res/values/arrays.xml | 13 --- 2 files changed, 39 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 56da41ee9..cd0c3a915 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -967,53 +967,49 @@ private void showPageDialog(final int page) { builder.setTitle(resources.getString(R.string.page_menu_title, page + 1)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ - builder.setItems(R.array.page_menu_entries_new, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (mGalleryProvider == null) { - return; - } - - switch (which) { - case 0: // Refresh - mGalleryProvider.forceRequest(page); - break; - case 1: // Share - shareImage(page); - break; - case 2: // Save - saveImage(page); - break; - case 3: // Save to - saveImageTo(page); - break; - } - } - }).show(); + final CharSequence[] items = { + getString(R.string.page_menu_refresh), + getString(R.string.page_menu_share), + getString(R.string.page_menu_save), + getString(R.string.page_menu_save_to)}; + pageDialogListener(builder, items, page); + builder.show(); }else { - builder.setItems(R.array.page_menu_entries, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (mGalleryProvider == null) { - return; - } - - switch (which) { - case 0: // Refresh - mGalleryProvider.forceRequest(page); - break; - case 1: // Share - shareImage(page); - break; - case 2: // Save - saveImage(page); - break; - } - } - }).show(); + final CharSequence[] items = { + getString(R.string.page_menu_refresh), + getString(R.string.page_menu_share), + getString(R.string.page_menu_save)}; + pageDialogListener(builder, items, page); + builder.show(); } } + private void pageDialogListener(AlertDialog.Builder builder, CharSequence[] items, int page){ + builder.setItems(items, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (mGalleryProvider == null) { + return; + } + + switch (which) { + case 0: // Refresh + mGalleryProvider.forceRequest(page); + break; + case 1: // Share + shareImage(page); + break; + case 2: // Save + saveImage(page); + break; + case 3: // Save to + saveImageTo(page); + break; + } + } + }); + } + private class NotifyTask implements Runnable { public static final int KEY_LAYOUT_MODE = 0; diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 9b0717a42..fe370a59a 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -200,19 +200,6 @@ 640 - - @string/page_menu_refresh - @string/page_menu_share - @string/page_menu_save - - - - @string/page_menu_refresh - @string/page_menu_share - @string/page_menu_save - @string/page_menu_save_to - - @string/download @string/add_to_favourites From 28ab59176971901f34a96c000475c51586d8e514 Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 26 Mar 2018 14:24:53 +0800 Subject: [PATCH 077/630] update showPageDialog --- .../java/com/hippo/ehviewer/ui/GalleryActivity.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index cd0c3a915..6633c49c6 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -966,22 +966,21 @@ private void showPageDialog(final int page) { AlertDialog.Builder builder = new AlertDialog.Builder(GalleryActivity.this); builder.setTitle(resources.getString(R.string.page_menu_title, page + 1)); + final CharSequence[] items; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ - final CharSequence[] items = { + items = new CharSequence[]{ getString(R.string.page_menu_refresh), getString(R.string.page_menu_share), getString(R.string.page_menu_save), getString(R.string.page_menu_save_to)}; - pageDialogListener(builder, items, page); - builder.show(); }else { - final CharSequence[] items = { + items = new CharSequence[]{ getString(R.string.page_menu_refresh), getString(R.string.page_menu_share), getString(R.string.page_menu_save)}; - pageDialogListener(builder, items, page); - builder.show(); } + pageDialogListener(builder, items, page); + builder.show(); } private void pageDialogListener(AlertDialog.Builder builder, CharSequence[] items, int page){ From 8703102c97e26b6dbfd68d5d58abdc2ce9ef791e Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 26 Mar 2018 22:45:45 +0800 Subject: [PATCH 078/630] Update UniFile --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 913dd2c8a..31f1ddffb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,7 +81,7 @@ dependencies { implementation 'com.github.seven332:ripple:0.1.2' implementation 'com.github.seven332:streampipe:0.1.0' implementation 'com.github.seven332:tuxiang:0.1.2' - implementation 'com.github.seven332:unifile:0.2.0' + implementation 'com.github.seven332:unifile:b59c14e47b' implementation 'com.github.seven332:yorozuya:0.1.2' implementation 'com.github.seven332:yorozuya-thread:0.1.1' implementation 'com.github.seven332:yorozuya-collect:0.1.4' From 1c62fe96152e2359a9115d8336ce13bc275c21c0 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 26 Mar 2018 22:46:55 +0800 Subject: [PATCH 079/630] 1.0.29 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 31f1ddffb..8f449e0b6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.hippo.ehviewer" minSdkVersion 14 targetSdkVersion 27 - versionCode 81 - versionName "1.0.28" + versionCode 82 + versionName "1.0.29" vectorDrawables.useSupportLibrary = true resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", "es", "ja", "ko" From 3f9e3f620dcb919b904b6de1e22c57c44c2e0a3c Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 27 Mar 2018 10:29:50 +0800 Subject: [PATCH 080/630] Android Studio 3.1.0 --- app/build.gradle | 4 +--- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8f449e0b6..439bd630e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,3 @@ -import com.android.build.gradle.internal.tasks.DefaultAndroidTask - apply plugin: 'com.android.application' apply plugin: 'android-chinese-string' @@ -52,7 +50,7 @@ task copyNotice(type: Copy) { finalizedBy ":daogenerator:executeDaoGenerator" } -tasks.withType(DefaultAndroidTask) { +tasks.withType(JavaCompile) { task -> task.dependsOn copyNotice } diff --git a/build.gradle b/build.gradle index 784f87a22..18c62da35 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "https://jitpack.io" } } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.1.0' classpath 'com.github.seven332:android-chinese-string-gradle-plugin:0.1.0' // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 12517833f..4b321dabc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Feb 25 19:25:50 CST 2018 +#Tue Mar 27 10:11:31 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip From 5ddd6520765f37b6ae74d36d1ffd2f79529874f6 Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 27 Mar 2018 10:53:45 +0800 Subject: [PATCH 081/630] Ignore past error while reading --- .../java/com/hippo/ehviewer/spider/SpiderQueen.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java index 91ece4302..d8f500174 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -430,11 +430,11 @@ public String getError() { } public Object forceRequest(int index) { - return request(index, true, false); + return request(index, true, true, false); } public Object request(int index) { - return request(index, false, true); + return request(index, true, false, true); } private int getPageState(int index) { @@ -483,7 +483,7 @@ public void cancelRequest(int index) { * Float for download percent
* null for wait */ - private Object request(int index, boolean force, boolean addNeighbor) { + private Object request(int index, boolean ignoreError, boolean force, boolean addNeighbor) { if (mQueenThread == null) { return null; } @@ -492,7 +492,8 @@ private Object request(int index, boolean force, boolean addNeighbor) { int state = getPageState(index); // Fix state for force - if (force && (state == STATE_FINISHED || state == STATE_FAILED)) { + if ((force && (state == STATE_FINISHED || state == STATE_FAILED)) || + (ignoreError && state == STATE_FAILED)) { // Update state to none at once updatePageState(index, STATE_NONE); state = STATE_NONE; @@ -1400,7 +1401,7 @@ public void run() { // Can't find the file, it might be removed from cache, // Reset it state and request it updatePageState(index, STATE_NONE, null); - request(index, false, false); + request(index, false, false, false); continue; } From c23a502e9e500c60879f3d9e1a925a4f3680148e Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 27 Mar 2018 13:40:58 +0800 Subject: [PATCH 082/630] Add app language option --- .../hippo/content/ContextLocalWrapper.java | 61 +++++++++++++++++++ .../java/com/hippo/ehviewer/Settings.java | 11 ++++ .../com/hippo/ehviewer/ui/EhActivity.java | 27 +++++++- .../ehviewer/ui/EhPreferenceActivity.java | 29 ++++++++- app/src/main/res/values-zh-rCN/strings.xml | 3 + app/src/main/res/values-zh-rHK/strings.xml | 3 + app/src/main/res/values-zh-rTW/strings.xml | 3 + app/src/main/res/values/arrays.xml | 22 +++++++ app/src/main/res/values/strings.xml | 10 +++ app/src/main/res/xml/advanced_settings.xml | 9 +++ 10 files changed, 174 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/hippo/content/ContextLocalWrapper.java diff --git a/app/src/main/java/com/hippo/content/ContextLocalWrapper.java b/app/src/main/java/com/hippo/content/ContextLocalWrapper.java new file mode 100644 index 000000000..87e2d5087 --- /dev/null +++ b/app/src/main/java/com/hippo/content/ContextLocalWrapper.java @@ -0,0 +1,61 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.content; + +/* + * Created by Hippo on 2018/3/27. + */ + +import android.content.Context; +import android.content.ContextWrapper; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Build; +import android.os.LocaleList; +import java.util.Locale; + +public class ContextLocalWrapper extends ContextWrapper { + + public ContextLocalWrapper(Context base) { + super(base); + } + + public static ContextLocalWrapper wrap(Context context, Locale newLocale) { + Resources res = context.getResources(); + Configuration configuration = res.getConfiguration(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + configuration.setLocale(newLocale); + + LocaleList localeList = new LocaleList(newLocale); + LocaleList.setDefault(localeList); + configuration.setLocales(localeList); + + context = context.createConfigurationContext(configuration); + + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + configuration.setLocale(newLocale); + context = context.createConfigurationContext(configuration); + + } else { + configuration.locale = newLocale; + res.updateConfiguration(configuration, res.getDisplayMetrics()); + } + + return new ContextLocalWrapper(context); + } +} diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 226fda5c7..d642ec8f0 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -963,6 +963,17 @@ public static void putBuiltInHosts(boolean value) { putBoolean(KEY_BUILT_IN_HOSTS, value); } + public static final String KEY_APP_LANGUAGE = "app_language"; + private static final String DEFAULT_APP_LANGUAGE = "system"; + + public static String getAppLanguage() { + return getString(KEY_APP_LANGUAGE, DEFAULT_APP_LANGUAGE); + } + + public static void putAppLanguage(String value) { + putString(KEY_APP_LANGUAGE, value); + } + /******************** ****** Guide ********************/ diff --git a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java index f379ffdb7..ade0dee23 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java @@ -16,15 +16,16 @@ package com.hippo.ehviewer.ui; +import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; -import android.util.Log; import android.view.WindowManager; - import com.google.analytics.tracking.android.EasyTracker; +import com.hippo.content.ContextLocalWrapper; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.Settings; +import java.util.Locale; public abstract class EhActivity extends AppCompatActivity { @@ -74,4 +75,26 @@ protected void onResume() { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); } } + + @Override + protected void attachBaseContext(Context newBase) { + Locale locale = null; + String language = Settings.getAppLanguage(); + if (language != null && !language.equals("system")) { + String[] split = language.split("-"); + if (split.length == 1) { + locale = new Locale(split[0]); + } else if (split.length == 2) { + locale = new Locale(split[0], split[0]); + } else if (split.length == 3) { + locale = new Locale(split[0], split[0], split[0]); + } + } + + if (locale != null) { + newBase = ContextLocalWrapper.wrap(newBase, locale); + } + + super.attachBaseContext(newBase); + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java index 6863eebd4..9fd6f61f9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java @@ -16,15 +16,17 @@ package com.hippo.ehviewer.ui; +import android.content.Context; +import android.content.res.Resources; import android.os.Bundle; import android.support.annotation.Nullable; -import android.util.Log; import android.view.WindowManager; - import com.google.analytics.tracking.android.EasyTracker; import com.hippo.app.AppCompatPreferenceActivity; +import com.hippo.content.ContextLocalWrapper; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.Settings; +import java.util.Locale; public abstract class EhPreferenceActivity extends AppCompatPreferenceActivity { @@ -74,4 +76,27 @@ protected void onResume() { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); } } + + @Override + protected void attachBaseContext(Context newBase) { + Locale locale = null; + String language = Settings.getAppLanguage(); + if (language != null && !language.equals("system")) { + String[] split = language.split("-"); + if (split.length == 1) { + locale = new Locale(split[0]); + } else if (split.length == 2) { + locale = new Locale(split[0], split[0]); + } else if (split.length == 3) { + locale = new Locale(split[0], split[0], split[0]); + } + } + + if (locale == null) { + locale = Resources.getSystem().getConfiguration().locale; + } + + newBase = ContextLocalWrapper.wrap(newBase, locale); + super.attachBaseContext(newBase); + } } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index fc5c69749..3831f32a3 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -494,6 +494,7 @@ 清理内存缓存 清理缩略图、画廊信息的内存缓存 阅读缓存大小 + App 界面语言 内置 hosts.txt 应用提供的主机到IP的映射\n可被自定义 hosts.txt 覆盖 自定义 hosts.txt @@ -571,6 +572,8 @@ 找不到任何数据 无法读取文件 + 系统语言(默认) + 开源许可 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 8520ccee0..25eb931f4 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -493,6 +493,7 @@ 清理內存緩存 清理縮略圖、畫廊信息的內存緩存 閲讀緩存大小 + App 界面語言 內置 hosts.txt 應用提供的主機到IP的映射\n可被自定義 hosts.txt 覆蓋 自定義 hosts.txt @@ -570,6 +571,8 @@ 找不到任何數據 無法讀取文件 + 系統語言(默認) + 開源許可 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index c7d018f49..7ab48001d 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -493,6 +493,7 @@ 清除記憶體快取 清除縮圖、圖庫詳細資料的記憶體快取 閱讀快取大小 + App 介面語言 內建 hosts.txt 應用提供的主機到IP的對映\n可被自定義 hosts.txt 覆蓋 自定義 hosts.txt @@ -570,6 +571,8 @@ 找不到任何資料 無法讀取檔案 + 系統語言(預設) + 授權 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index fe370a59a..4faa1986f 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -217,4 +217,26 @@ @string/add_filter
+ + @string/app_language_system + @string/app_language_en + @string/app_language_es + @string/app_language_ja + @string/app_language_ko + @string/app_language_zh_cn + @string/app_language_zh_hk + @string/app_language_zh_tw + + + + system + en + es + ja + ko + zh-CN + zh-HK + zh-TW + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 64309c391..fca8cb7ff 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -537,6 +537,7 @@ Clear memory cache Clear thumb, gallery info memory cache Read cache size + App language Built-in hosts.txt The host-to-IP mapping provided by the app\nIt can be overrode by custom hosts.txt Custom hosts.txt @@ -587,6 +588,15 @@ Can\'t find any data Can\'t read the file + System Language (Default) + English + Español + 日本語 + 한국어 + 中文(中国) + 中文(香港) + 國文(臺灣) + Excluded languages All diff --git a/app/src/main/res/xml/advanced_settings.xml b/app/src/main/res/xml/advanced_settings.xml index 731f59ebd..76b357441 100644 --- a/app/src/main/res/xml/advanced_settings.xml +++ b/app/src/main/res/xml/advanced_settings.xml @@ -48,6 +48,15 @@ app:entryValues="@array/read_cache_size_entry_values" android:defaultValue="160"/> + + Date: Tue, 27 Mar 2018 13:59:35 +0800 Subject: [PATCH 083/630] Add RecordingApplication --- .../hippo/content/RecordingApplication.java | 90 +++++++++++++++++++ .../com/hippo/ehviewer/EhApplication.java | 7 +- 2 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/hippo/content/RecordingApplication.java diff --git a/app/src/main/java/com/hippo/content/RecordingApplication.java b/app/src/main/java/com/hippo/content/RecordingApplication.java new file mode 100644 index 000000000..76ff3a4ad --- /dev/null +++ b/app/src/main/java/com/hippo/content/RecordingApplication.java @@ -0,0 +1,90 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.content; + +/* + * Created by Hippo on 2018/3/27. + */ + +import android.app.Activity; +import android.os.Bundle; +import com.hippo.scene.SceneApplication; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +public abstract class RecordingApplication extends SceneApplication { + + private List> list = new LinkedList<>(); + + @Override + public void onCreate() { + super.onCreate(); + + registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + list.add(new java.lang.ref.WeakReference<>(activity)); + } + + @Override + public void onActivityDestroyed(Activity activity) { + Iterator> iterator = list.iterator(); + while (iterator.hasNext()) { + WeakReference reference = iterator.next(); + Activity a = reference.get(); + // Remove current activity and null + if (a == null || a == activity) { + iterator.remove(); + } + } + } + + @Override + public void onActivityStarted(Activity activity) {} + + @Override + public void onActivityResumed(Activity activity) {} + + @Override + public void onActivityPaused(Activity activity) {} + + @Override + public void onActivityStopped(Activity activity) {} + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} + }); + } + + public void recreate() { + // Copy list + ArrayList listCopy = new ArrayList<>(list.size()); + for (WeakReference reference: list) { + Activity activity = reference.get(); + if (activity == null) continue; + listCopy.add(activity); + } + + // Finish all activities + for (int i = listCopy.size() - 1; i >= 0; --i) { + listCopy.get(i).recreate(); + } + } +} diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index c783188f5..d56872679 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -26,9 +26,9 @@ import android.support.annotation.Nullable; import android.support.v4.util.LruCache; import android.util.Log; - import com.hippo.beerbelly.SimpleDiskCache; import com.hippo.conaco.Conaco; +import com.hippo.content.RecordingApplication; import com.hippo.ehviewer.client.EhClient; import com.hippo.ehviewer.client.EhCookieStore; import com.hippo.ehviewer.client.EhDns; @@ -40,7 +40,6 @@ import com.hippo.image.Image; import com.hippo.image.ImageBitmap; import com.hippo.network.StatusCodeException; -import com.hippo.scene.SceneApplication; import com.hippo.text.Html; import com.hippo.unifile.UniFile; import com.hippo.util.BitmapUtils; @@ -49,17 +48,15 @@ import com.hippo.yorozuya.IntIdGenerator; import com.hippo.yorozuya.OSUtils; import com.hippo.yorozuya.SimpleHandler; - import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; - import okhttp3.OkHttpClient; -public class EhApplication extends SceneApplication implements Thread.UncaughtExceptionHandler { +public class EhApplication extends RecordingApplication implements Thread.UncaughtExceptionHandler { private static final String TAG = EhApplication.class.getSimpleName(); From 095334d3382e54a84f054b893adc3288e0267b18 Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 27 Mar 2018 14:01:05 +0800 Subject: [PATCH 084/630] Recreate all activities after changing app language --- .../ui/fragment/AdvancedFragment.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java index 23aa503cd..655e398b5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java @@ -24,24 +24,24 @@ import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; -import android.text.TextUtils; import android.widget.Toast; import com.hippo.ehviewer.AppConfig; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.EhDB; import com.hippo.ehviewer.R; -import com.hippo.ehviewer.Settings; import com.hippo.util.LogCat; import com.hippo.util.ReadableTime; import java.io.File; import java.util.Arrays; -public class AdvancedFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener { +public class AdvancedFragment extends PreferenceFragment + implements Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener { private static final String KEY_DUMP_LOGCAT = "dump_logcat"; private static final String KEY_CLEAR_MEMORY_CACHE = "clear_memory_cache"; + private static final String KEY_APP_LANGUAGE = "app_language"; private static final String KEY_EXPORT_DATA = "export_data"; private static final String KEY_IMPORT_DATA = "import_data"; @@ -52,6 +52,7 @@ public void onCreate(Bundle savedInstanceState) { Preference dumpLogcat = findPreference(KEY_DUMP_LOGCAT); Preference clearMemoryCache = findPreference(KEY_CLEAR_MEMORY_CACHE); + Preference appLanguage = findPreference(KEY_APP_LANGUAGE); Preference exportData = findPreference(KEY_EXPORT_DATA); Preference importData = findPreference(KEY_IMPORT_DATA); @@ -59,6 +60,8 @@ public void onCreate(Bundle savedInstanceState) { clearMemoryCache.setOnPreferenceClickListener(this); exportData.setOnPreferenceClickListener(this); importData.setOnPreferenceClickListener(this); + + appLanguage.setOnPreferenceChangeListener(this); } @Override @@ -131,4 +134,14 @@ public void onClick(DialogInterface dialog, int which) { } }).show(); } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + String key = preference.getKey(); + if (KEY_APP_LANGUAGE.equals(key)) { + ((EhApplication) getActivity().getApplication()).recreate(); + return true; + } + return false; + } } From f6b05ed42bef8ac9aceab4a9323bb734db04f1af Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 27 Mar 2018 16:51:01 +0800 Subject: [PATCH 085/630] Fix strings --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fca8cb7ff..ce83a732d 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -593,7 +593,7 @@ Español 日本語 한국어 - 中文(中国) + 中文(大陆) 中文(香港) 國文(臺灣) From d1afcc2f544e4852396bb34c2aa2d8457273634a Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 27 Mar 2018 17:09:09 +0800 Subject: [PATCH 086/630] Fix the parsing, language to Local --- app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java | 4 ++-- .../main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java index ade0dee23..4e6bb0950 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java @@ -85,9 +85,9 @@ protected void attachBaseContext(Context newBase) { if (split.length == 1) { locale = new Locale(split[0]); } else if (split.length == 2) { - locale = new Locale(split[0], split[0]); + locale = new Locale(split[0], split[1]); } else if (split.length == 3) { - locale = new Locale(split[0], split[0], split[0]); + locale = new Locale(split[0], split[1], split[2]); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java index 9fd6f61f9..09a17d681 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java @@ -86,9 +86,9 @@ protected void attachBaseContext(Context newBase) { if (split.length == 1) { locale = new Locale(split[0]); } else if (split.length == 2) { - locale = new Locale(split[0], split[0]); + locale = new Locale(split[0], split[1]); } else if (split.length == 3) { - locale = new Locale(split[0], split[0], split[0]); + locale = new Locale(split[0], split[1], split[2]); } } From 56b42c67d5a270b43aad73e3d1bed20a467497a2 Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 27 Mar 2018 18:06:05 +0800 Subject: [PATCH 087/630] Fix gallery favorite block --- .../hippo/ehviewer/ui/CommonOperations.java | 6 ++++++ .../ehviewer/ui/scene/GalleryDetailScene.java | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java index 217515f92..797834e6c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java @@ -206,6 +206,12 @@ public void onItemClick(ListCheckBoxDialogBuilder builder, AlertDialog dialog, i } }, activity.getString(R.string.remember_favorite_collection), false) .setTitle(R.string.add_favorites_dialog_title) + .setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + listener.onCancel(); + } + }) .show(); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index dd0a68fa8..48ccdee5d 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -1538,6 +1538,14 @@ private void onModifyFavoritesSuccess(boolean addOrRemove) { } } + private void onModifyFavoritesFailure(boolean addOrRemove) { + mModifingFavorites = false; + } + + private void onModifyFavoritesCancel(boolean addOrRemove) { + mModifingFavorites = false; + } + private class ModifyFavoritesListener extends EhCallback { private final boolean mAddOrRemove; @@ -1564,10 +1572,19 @@ public void onSuccess(Void result) { public void onFailure(Exception e) { showTip(mAddOrRemove ? R.string.remove_from_favorite_failure : R.string.add_to_favorite_failure, LENGTH_SHORT); + GalleryDetailScene scene = getScene(); + if (scene != null) { + scene.onModifyFavoritesFailure(mAddOrRemove); + } } @Override - public void onCancel() {} + public void onCancel() { + GalleryDetailScene scene = getScene(); + if (scene != null) { + scene.onModifyFavoritesCancel(mAddOrRemove); + } + } @Override public boolean isInstance(SceneFragment scene) { From 7df7defa92e08919486d862328bbf611a222f024 Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 28 Mar 2018 09:35:17 +0800 Subject: [PATCH 088/630] Save the images, which will be shared, to temp dir --- app/src/main/java/com/hippo/ehviewer/EhApplication.java | 3 +++ .../main/java/com/hippo/ehviewer/ui/GalleryActivity.java | 8 +++----- app/src/main/res/xml/filepaths.xml | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index d56872679..e5d182263 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -146,6 +146,9 @@ private void clearTempDir() { if (null != dir) { FileUtils.deleteContent(dir); } + + // Add .nomedia to external temp dir + CommonOperations.ensureNoMediaFile(UniFile.fromFile(AppConfig.getExternalTempDir())); } private void update() { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 6633c49c6..19432379f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -846,7 +846,7 @@ private void shareImage(int page) { return; } - File dir = AppConfig.getExternalImageDir(); + File dir = AppConfig.getExternalTempDir(); if (null == dir) { Toast.makeText(this, R.string.error_cant_create_temp_file, Toast.LENGTH_SHORT).show(); return; @@ -871,17 +871,15 @@ private void shareImage(int page) { Uri uri = new Uri.Builder() .scheme(ContentResolver.SCHEME_CONTENT) .authority(BuildConfig.FILE_PROVIDER_AUTHORITY) - .appendPath("image") + .appendPath("temp") .appendPath(filename) .build(); + Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_STREAM, uri); intent.setType(mimeType); startActivity(Intent.createChooser(intent, getString(R.string.share_image))); - - // Sync media store - sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, file.getUri())); } private void saveImage(int page) { diff --git a/app/src/main/res/xml/filepaths.xml b/app/src/main/res/xml/filepaths.xml index 75c866696..d6e6bc0a4 100644 --- a/app/src/main/res/xml/filepaths.xml +++ b/app/src/main/res/xml/filepaths.xml @@ -17,6 +17,6 @@ - + From 62cd2e4809c46bccc023f03c9dfc5305a80bae08 Mon Sep 17 00:00:00 2001 From: onlymash Date: Sun, 25 Mar 2018 23:34:32 +0800 Subject: [PATCH 089/630] add app shortcuts --- app/src/debug/res/xml-v25/shortcuts.xml | 30 ++++++++++++++ app/src/main/AndroidManifest.xml | 26 ++++++++++++ .../shortcuts/StartAllDownloadActivity.java | 38 ++++++++++++++++++ .../shortcuts/StopAllDownloadActivity.java | 36 +++++++++++++++++ .../mipmap-anydpi-v26/ic_shortcut_start.xml | 5 +++ .../mipmap-anydpi-v26/ic_shortcut_stop.xml | 5 +++ .../ic_shortcut_start_foreground.png | Bin 0 -> 572 bytes .../ic_shortcut_stop_foreground.png | Bin 0 -> 358 bytes .../ic_shortcut_start_foreground.png | Bin 0 -> 356 bytes .../ic_shortcut_stop_foreground.png | Bin 0 -> 218 bytes .../ic_shortcut_start_foreground.png | Bin 0 -> 741 bytes .../ic_shortcut_stop_foreground.png | Bin 0 -> 489 bytes .../ic_shortcut_start_foreground.png | Bin 0 -> 1422 bytes .../ic_shortcut_stop_foreground.png | Bin 0 -> 868 bytes .../ic_shortcut_start_foreground.png | Bin 0 -> 2225 bytes .../ic_shortcut_stop_foreground.png | Bin 0 -> 1410 bytes .../res/values/ic_shortcut_background.xml | 4 ++ app/src/main/res/xml-v25/shortcuts.xml | 30 ++++++++++++++ 18 files changed, 174 insertions(+) create mode 100644 app/src/debug/res/xml-v25/shortcuts.xml create mode 100644 app/src/main/java/com/hippo/ehviewer/shortcuts/StartAllDownloadActivity.java create mode 100644 app/src/main/java/com/hippo/ehviewer/shortcuts/StopAllDownloadActivity.java create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_shortcut_start_foreground.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_shortcut_stop_foreground.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_shortcut_start_foreground.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_shortcut_stop_foreground.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_shortcut_start_foreground.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_shortcut_stop_foreground.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_shortcut_start_foreground.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_shortcut_stop_foreground.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_shortcut_start_foreground.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_shortcut_stop_foreground.png create mode 100644 app/src/main/res/values/ic_shortcut_background.xml create mode 100644 app/src/main/res/xml-v25/shortcuts.xml diff --git a/app/src/debug/res/xml-v25/shortcuts.xml b/app/src/debug/res/xml-v25/shortcuts.xml new file mode 100644 index 000000000..557a49084 --- /dev/null +++ b/app/src/debug/res/xml-v25/shortcuts.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d7067dbd3..50ecb9fbc 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,6 +48,9 @@ + + @@ -144,6 +147,29 @@ android:theme="@style/AppTheme.NoActionBar" android:label="@string/hosts"/> + + + + + + + + + + + + diff --git a/app/src/main/java/com/hippo/ehviewer/shortcuts/StartAllDownloadActivity.java b/app/src/main/java/com/hippo/ehviewer/shortcuts/StartAllDownloadActivity.java new file mode 100644 index 000000000..6cec580a9 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/shortcuts/StartAllDownloadActivity.java @@ -0,0 +1,38 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.ehviewer.shortcuts; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +import com.hippo.ehviewer.download.DownloadService; + +/** + * Created by onlymash on 3/25/18. + */ + +public class StartAllDownloadActivity extends Activity{ + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent intent = new Intent(this, DownloadService.class); + intent.setAction(DownloadService.ACTION_START_ALL); + startService(intent); + finish(); + } +} diff --git a/app/src/main/java/com/hippo/ehviewer/shortcuts/StopAllDownloadActivity.java b/app/src/main/java/com/hippo/ehviewer/shortcuts/StopAllDownloadActivity.java new file mode 100644 index 000000000..befb5c16e --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/shortcuts/StopAllDownloadActivity.java @@ -0,0 +1,36 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.ehviewer.shortcuts; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +import com.hippo.ehviewer.download.DownloadService; + +/** + * Created by onlymash on 3/25/18. + */ + +public class StopAllDownloadActivity extends Activity { + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + stopService(new Intent(this, DownloadService.class)); + finish(); + } +} diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml new file mode 100644 index 000000000..84f2dbd1b --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml new file mode 100644 index 000000000..fcbed2bb6 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_shortcut_start_foreground.png b/app/src/main/res/mipmap-hdpi/ic_shortcut_start_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..cad62f37db0649f37ab3574e916a79f17ef9938f GIT binary patch literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz4M-mPBqq(kz{Kq7;uunK>+M~8Bj-SgV-JnF ztg62BZ%JE%1yN_e`_xsh8eaN^Da6 z_Bm$R+f2!Ra~Xk?0{fTm)t{VpUr~_nV|LuB5);kG2bUdIl6-XjeqaC7O_n7IDb6u$ zmAO})?T*yVTT`_{@yOFv>1KCIJ5rqg?0vOUYK^teB*lMcnnU?bTYgxsk6%46a`V#! z&$f)K&aOb4(ylu5D(>5T)!A1u>T5t?M;?ec9c_F0VdG(SnMdoRZNqF^oVUDMxJY37 zV@5s2Fu_Hk{Q|2wFEYnCt;t(c)e>>JqQSf4>zUU{dbS5tkJNO`QxQq3ko&`>eB{ma zsp~91r@D4rGhdU_@!7RSUF??A7h!pAsYlP3wy(4O? zA8JklG6i@)p7moUHx3vIVCg!0D>0Y AhX4Qo literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_shortcut_stop_foreground.png b/app/src/main/res/mipmap-hdpi/ic_shortcut_stop_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6aab6925a4d0568c4e3790124f707f026fe6ca GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz4M-mPBqq(kz^Lo#;uunK>+Pk5ybTUK4j0cI zkjj{r#3hpuAk!7AD9doU_{rWSn=+5~1GV4>4U@L{UHrDw=DXpP{O5V+-~O3bAhLm3c>{xPY|BQ`$dE5Jk1Cf$Kd2YoQ7j5H2pQ~` zzU5qc_n7k%i*1)}-haMR)iWpIbj{h%G0x>r1C5&2eh#eNygqZ+2MfuA*D6`W7PjA(jK7{8 zOMb=z;uJHr05Ob)u&w?7SG>RY_Ylix`!mx{%-?_bSNmG_Z%dsG?hE~o-mtLt>sCAE x8KJfsK&%4AFt!?y55h2hTc|9u#~2tU)iPT@m~}FssdFkw!qe5yWt~$(696+WhPeO$ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_shortcut_stop_foreground.png b/app/src/main/res/mipmap-mdpi/ic_shortcut_stop_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..92b3e5f3b857e5352023b13c249da5036b654b2d GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{P!g`O^sAr-gY-rmUBU?9+Tv0le} zd$732vEnHzO=~CUDZD>edR+A9D;1zpWT5i&R?xZXykqZH&EE5BV}E;g@aH${c6BB+ zajHoG@r(oxAZ}6wV$L>@Ac%pBK&XFVdQ&MBb@ E0OTe{4FCWD literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_shortcut_start_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_shortcut_start_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..275363af4d9f120e56598a1f015dae8ad457b20f GIT binary patch literal 741 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$!4M=t>=)PrOU|Qqp;uunK>+M}bJ(fU;10U5z zrpPo17qIQx%i#BrFM5Kc;_VH_g0o+2e=HEw$Q|%nBf@&One^Y9$$NhMowPpG=BInj zZyQZUpn>E9hj(qR`k_xfUwywW!?tCu7T@wl-%B6<7>0^h^RXx~%|7qGs{68uM2>|- zhW&=4HvaXCWG!SmIM>WvA2Rp;vWp3)6&-&!>OM2Q`ZREsPne9@7Wo@Va+iE}zCECz zwju3ay7u3X6;}^})o8{}-Ob0J#FYK)vX}fLrp=ey`9Q>j18cr4Y(6mS=e)YJze{R& zJ}y}J_rSk(U+!LVPf%?1y>qGk1yF@xL`A~ssdce$tV>wL%s)@93(c{r0kZNpPqpLF zDY*kweDLu!J0@;7Au)O>xH8qbpUmCq7L^d0z9Z*W3=gZb)mkkCz*Z*Q(y zGi|PF_hI^+pC~wkJzZh?0UHZu$HvM6HYTRe4|rHupIx(N0V#HD-1(J{5kx>)U?s(` zWt%_-G#prSPf^8S`#r@28(sj_kef(=`u_Z4v^wzO$JexzyFsRSy85}Sb4q9e0LXS4 A9{>OV literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_shortcut_stop_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_shortcut_stop_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..12b6ad78939c611593ef69b92547b60bb4d59ea5 GIT binary patch literal 489 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$!4M=t>=)PrOVBFy8;uunK>+NMjt`-LY*MpWV z)lXdyo^be}(iV5>&fLDU)AS`m9G5$rpULJ0>LMH5%bNRbTVHy~w#tro5$~6lui5?Z z=YeC3&x_7|`nwY<;+VkXoWR7~$jJjiENTW2BrxLu1UZ0JAQZ8%F$qfm5r`1*KXi zQU!tyQXycOKr0n!(IHS654He)y!;X~Eb% zab;y~JB|t%-h(TkIh7xk*njUT)WqO7c6mqR%WgMPCJIpO9oF;BaO{WI7d{%iW6MHL zAyyqV1DoxA6k58ML$g!;!%kh~HJZRe-M@IUH;A7fBf%EuTJK&cS)EH{&;h>5;(730 zd3l*2Ayg`0rn;qIY)6+Ny0rb-H741(Be&m#8Kz7Dhl`;paT@E_&gLA17%z?bGc7KV zfe^d454v`aCnuH8-jo`oBMF6`gWcvfgdI^9nDIC;m@G*Z?!9(vl?I5q{ATAur8$bU zoh>ZKH58hD*45X^SAzA#Ynlfq;|n3_$ndYll~H%bbA7;qwZpVEs`QBf?o@!8-9Ddp8X{84mZ(5V<{nF#LFsh3D*{7{R})USYjZbl zgqtWB>8Tp)*%miTgs67*y{)f0KnGawzS?Rh-ws#bhU)bsPvGcw#ZXpd6*(Ly6-;vK zbe3Gwi=mA8o=$Q*W2-@IFhdBtE-Fo5#Hq{Xa1r9W`i9NZ3E?~hgf+<|GGGZFbECRA z4Mm!{Kgr=H7Gmf<_l^byOx3(A7|qe>Mt+*@qe?R^Idyrz z=x0DgJIWNyBnZLKmoyZK+!o__Ys}zAJJF&QUo@jBGD6;Z)1-%Xzuh`78#uj& zBJi*SZiAs!73)e5@J0MYo!TZX^bC%b(V2&d$69C_UhWwWYY2mB7V5tE>S$afc`hBn zMfUw%D;CXM{j7Y|dBwublCUMKsj9N6P|#{eT=u+dtluxrZq&Ifbzx{eYBw4N3oHaA z<4}voS4ozL4-#GT#jOdUSMovRB=Rs@Cj6S8>yQ17?TqZy$s1j|r}HIEQt#|NSt>Yh zO6q`?qUAY40|-jcf10(B23ECbv$DqWH$dB1Y$HX%(5oJi+tij!nIc3{-hGl)eO@LE zm(jtQx+JP?^Nt5{7^__rBoc}Zg`N2LIa}&-v^{!`5!KM^B({J literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_shortcut_stop_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_shortcut_stop_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..8af287e5a508230123c6c5eba7cc58d3312714ab GIT binary patch literal 868 zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4mO}j{44ik3=GWLo-U3d6}R4AxyX4yLBPdv z_vWT6Q&ua4rP->5Z4^v(1XGhn2hdCppnlZo0GdZtg3`d7!1Ji* p?h3ivd++<@u@8cz2XunpXC@!*${6p4^;sYXdAjq9NYrB;>}TA3C$qp}Yw-sxOpeOQ!~;RkH(xYg_n zBaO^DrfqW)b(FrmR{% zk?c!G5M*Lf;!-w(5ES@#+Hx=+*?rHwsUD(> zL{5yMbdkmI^}c)G5dweFN}pI?XY>C0E7lJ=N#1cvm>X6!IHD-dj(1Bw*rsI6%`+H?pj2x126fM2fZ?G7Ieb&w4hHvs1JNK54l{|fu2B$Q-R5{wxNoR^P zDtC^qQ_756=Rn+p%QKu15^b6YTxc7xa}>$2AgAq!XA1VCs@W1>(m-8^fI}vKadqaI zHd2tHsn`9}t9Si=utAKZU>BSrbJHOj^%;sv&EL+ap4YN#=CN$stTX*40pn$qM@{H z*cWUkoFQ)N9V6i^TW%pCC>+l|W6aL6U2*4;2s>Qo6 ze}b#Ebu3SQ3iOFXfgnC&&rLcg=Xo-{9v2Xm3Joqkf3eJU_ZdnnW+y)AgW>YWnBt`F z&blgD|HjwrJwHmpP8Q#o;S>=iP0-5jOiJW=?KJCz->M%D5=pe;>jE-UtPgn8T&lSe z??Ee$zc*x@wI!+R?Le*$h}mVE_3Hu{&f)I z@5raF?*Z3RWxzeBS5#~Kfk=?z_{aj5d7Gn(;sp>TI+L&4TFlGgNZ%GJDT7MJHsVmuh$&tx3PySI

9NoU^*M=i+IUnIQhd@j0Y|&2}p? z@9Hb{6c6SKaXW}r-Z+)vDLO_kQ(?^}$O|TDEGbJRbY@KftLcdjJ3c literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_shortcut_stop_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_shortcut_stop_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5ce20c0819e5ec9eb1bcd69cd888c6d1831c33 GIT binary patch literal 1410 zcmeAS@N?(olHy`uVBq!ia0y~yVB7%09Be?56MhC-3=FKEo-U3d6}R4AJ;>W)z{B8Z z?!v#tS#^dv*UFY(4JCs2&wBiGFI&1rDJR^w)_zlbM|MON7Y+8`n2t5wnf#+Ij}PQ=Pgg&ebxsLQ06u}&pa1{> literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/ic_shortcut_background.xml b/app/src/main/res/values/ic_shortcut_background.xml new file mode 100644 index 000000000..d533a7125 --- /dev/null +++ b/app/src/main/res/values/ic_shortcut_background.xml @@ -0,0 +1,4 @@ + + + #F5F5F5 + \ No newline at end of file diff --git a/app/src/main/res/xml-v25/shortcuts.xml b/app/src/main/res/xml-v25/shortcuts.xml new file mode 100644 index 000000000..35ebc94df --- /dev/null +++ b/app/src/main/res/xml-v25/shortcuts.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + From a367373c87eefd6ce0a61322ac378b735c5b984e Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 26 Mar 2018 00:34:56 +0800 Subject: [PATCH 090/630] add shortcut icon for android 7.1 --- .../res/mipmap-nodpi-v25/ic_shortcut_start.png | Bin 0 -> 5717 bytes .../res/mipmap-nodpi-v25/ic_shortcut_stop.png | Bin 0 -> 4689 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/main/res/mipmap-nodpi-v25/ic_shortcut_start.png create mode 100644 app/src/main/res/mipmap-nodpi-v25/ic_shortcut_stop.png diff --git a/app/src/main/res/mipmap-nodpi-v25/ic_shortcut_start.png b/app/src/main/res/mipmap-nodpi-v25/ic_shortcut_start.png new file mode 100644 index 0000000000000000000000000000000000000000..6707b335f2b5e768d746422f37d3a19eb0b605de GIT binary patch literal 5717 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-nodpi-v25/ic_shortcut_stop.png b/app/src/main/res/mipmap-nodpi-v25/ic_shortcut_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..603ef88456df16bd6f3baeec5e3d15258cb80500 GIT binary patch literal 4689 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 literal 0 HcmV?d00001 From 49359953428208a7588052ef7abd5a2831c9faef Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 26 Mar 2018 14:51:13 +0800 Subject: [PATCH 091/630] update manifest --- app/src/main/AndroidManifest.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 50ecb9fbc..b87814782 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -154,9 +154,6 @@ android:taskAffinity="" android:process=":bg" android:launchMode="singleTask"> - - - - - - Date: Mon, 26 Mar 2018 22:33:34 +0800 Subject: [PATCH 092/630] update app shortcuts --- app/src/debug/res/xml-v25/shortcuts.xml | 14 ++++---- app/src/main/AndroidManifest.xml | 10 +----- ...adActivity.java => ShortcutsActivity.java} | 20 ++++++++--- .../shortcuts/StopAllDownloadActivity.java | 36 ------------------- app/src/main/res/xml-v25/shortcuts.xml | 16 +++++---- 5 files changed, 34 insertions(+), 62 deletions(-) rename app/src/main/java/com/hippo/ehviewer/shortcuts/{StartAllDownloadActivity.java => ShortcutsActivity.java} (59%) delete mode 100644 app/src/main/java/com/hippo/ehviewer/shortcuts/StopAllDownloadActivity.java diff --git a/app/src/debug/res/xml-v25/shortcuts.xml b/app/src/debug/res/xml-v25/shortcuts.xml index 557a49084..94fab2904 100644 --- a/app/src/debug/res/xml-v25/shortcuts.xml +++ b/app/src/debug/res/xml-v25/shortcuts.xml @@ -1,5 +1,6 @@ + - + android:targetClass="com.hippo.ehviewer.shortcuts.ShortcutsActivity"/> + + - + android:targetClass="com.hippo.ehviewer.shortcuts.ShortcutsActivity" /> + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b87814782..bda00cc8a 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -148,15 +148,7 @@ android:label="@string/hosts"/> - - - + - + android:targetClass="com.hippo.ehviewer.shortcuts.ShortcutsActivity"/> + + - + android:targetClass="com.hippo.ehviewer.shortcuts.ShortcutsActivity" /> + - + \ No newline at end of file From e44473f26b1435816fe2f4e6c02169f7ba1621ee Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 26 Mar 2018 22:34:19 +0800 Subject: [PATCH 093/630] clean import --- .../java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java b/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java index 453f7077e..c5bada172 100644 --- a/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java @@ -19,8 +19,6 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.util.Log; -import android.widget.Toast; import com.hippo.ehviewer.download.DownloadService; From 537380eeb786fefb7c3fee9bd78781f4e01cc3f0 Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 26 Mar 2018 22:55:19 +0800 Subject: [PATCH 094/630] update shortcut categories --- app/src/debug/res/xml-v25/shortcuts.xml | 4 ++-- app/src/main/res/xml-v25/shortcuts.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/debug/res/xml-v25/shortcuts.xml b/app/src/debug/res/xml-v25/shortcuts.xml index 94fab2904..e970cd541 100644 --- a/app/src/debug/res/xml-v25/shortcuts.xml +++ b/app/src/debug/res/xml-v25/shortcuts.xml @@ -12,7 +12,7 @@ android:action="start_all" android:targetPackage="com.hippo.ehviewer.debug" android:targetClass="com.hippo.ehviewer.shortcuts.ShortcutsActivity"/> - + - + diff --git a/app/src/main/res/xml-v25/shortcuts.xml b/app/src/main/res/xml-v25/shortcuts.xml index 998ac355c..cd1801d09 100644 --- a/app/src/main/res/xml-v25/shortcuts.xml +++ b/app/src/main/res/xml-v25/shortcuts.xml @@ -12,7 +12,7 @@ android:action="start_all" android:targetPackage="com.hippo.ehviewer" android:targetClass="com.hippo.ehviewer.shortcuts.ShortcutsActivity"/> - + - + \ No newline at end of file From 733ddb5964f0fdc02cc77a5bbaab1f63c397308b Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 26 Mar 2018 23:17:02 +0800 Subject: [PATCH 095/630] remove process --- app/src/main/AndroidManifest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bda00cc8a..eef628bbd 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -152,7 +152,6 @@ android:theme="@android:style/Theme.Translucent.NoTitleBar" android:excludeFromRecents="true" android:taskAffinity="" - android:process=":bg" android:launchMode="singleTask"> From f5409c7b8adc1c18b20088c08ddcf59dd4a27143 Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 26 Mar 2018 23:18:04 +0800 Subject: [PATCH 096/630] update shortcut --- .../java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java b/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java index c5bada172..796629592 100644 --- a/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java @@ -37,8 +37,7 @@ public void onCreate(Bundle savedInstanceState) { if (action.equals(DownloadService.ACTION_START_ALL)){ intent.setAction(DownloadService.ACTION_START_ALL); startService(intent); - } - if (action.equals(DownloadService.ACTION_STOP_ALL)){ + } else if (action.equals(DownloadService.ACTION_STOP_ALL)){ intent.setAction(DownloadService.ACTION_STOP_ALL); startService(intent); } From 89addaf2119e86ec49975b5fce4245903d99e3c6 Mon Sep 17 00:00:00 2001 From: onlymash Date: Tue, 27 Mar 2018 22:26:44 +0800 Subject: [PATCH 097/630] update unifile --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 439bd630e..a1575e7fb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -79,7 +79,7 @@ dependencies { implementation 'com.github.seven332:ripple:0.1.2' implementation 'com.github.seven332:streampipe:0.1.0' implementation 'com.github.seven332:tuxiang:0.1.2' - implementation 'com.github.seven332:unifile:b59c14e47b' + implementation 'com.github.seven332:unifile:0.2.0' implementation 'com.github.seven332:yorozuya:0.1.2' implementation 'com.github.seven332:yorozuya-thread:0.1.1' implementation 'com.github.seven332:yorozuya-collect:0.1.4' From 2cf5589369e4488304e231baa6ef3126aa34a8ce Mon Sep 17 00:00:00 2001 From: onlymash Date: Tue, 27 Mar 2018 23:42:18 +0800 Subject: [PATCH 098/630] shortcuts: update icons --- app/src/main/res/drawable/ic_pause_44dp.xml | 11 +++++++++++ app/src/main/res/drawable/ic_play_arrow_44dp.xml | 11 +++++++++++ .../res/mipmap-anydpi-v26/ic_shortcut_start.xml | 7 ++++++- .../res/mipmap-anydpi-v26/ic_shortcut_stop.xml | 7 ++++++- .../mipmap-hdpi/ic_shortcut_start_foreground.png | Bin 572 -> 0 bytes .../mipmap-hdpi/ic_shortcut_stop_foreground.png | Bin 358 -> 0 bytes .../mipmap-mdpi/ic_shortcut_start_foreground.png | Bin 356 -> 0 bytes .../mipmap-mdpi/ic_shortcut_stop_foreground.png | Bin 218 -> 0 bytes .../ic_shortcut_start_foreground.png | Bin 741 -> 0 bytes .../mipmap-xhdpi/ic_shortcut_stop_foreground.png | Bin 489 -> 0 bytes .../ic_shortcut_start_foreground.png | Bin 1422 -> 0 bytes .../ic_shortcut_stop_foreground.png | Bin 868 -> 0 bytes .../ic_shortcut_start_foreground.png | Bin 2225 -> 0 bytes .../ic_shortcut_stop_foreground.png | Bin 1410 -> 0 bytes 14 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/ic_pause_44dp.xml create mode 100644 app/src/main/res/drawable/ic_play_arrow_44dp.xml delete mode 100644 app/src/main/res/mipmap-hdpi/ic_shortcut_start_foreground.png delete mode 100644 app/src/main/res/mipmap-hdpi/ic_shortcut_stop_foreground.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_shortcut_start_foreground.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_shortcut_stop_foreground.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_shortcut_start_foreground.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_shortcut_stop_foreground.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_shortcut_start_foreground.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_shortcut_stop_foreground.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_shortcut_start_foreground.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_shortcut_stop_foreground.png diff --git a/app/src/main/res/drawable/ic_pause_44dp.xml b/app/src/main/res/drawable/ic_pause_44dp.xml new file mode 100644 index 000000000..1c6f69d3d --- /dev/null +++ b/app/src/main/res/drawable/ic_pause_44dp.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/ic_play_arrow_44dp.xml b/app/src/main/res/drawable/ic_play_arrow_44dp.xml new file mode 100644 index 000000000..991e41aab --- /dev/null +++ b/app/src/main/res/drawable/ic_play_arrow_44dp.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml index 84f2dbd1b..a2ed5652e 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml @@ -1,5 +1,10 @@ + - + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml index fcbed2bb6..8ed558ae5 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml @@ -1,5 +1,10 @@ + - + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_shortcut_start_foreground.png b/app/src/main/res/mipmap-hdpi/ic_shortcut_start_foreground.png deleted file mode 100644 index cad62f37db0649f37ab3574e916a79f17ef9938f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz4M-mPBqq(kz{Kq7;uunK>+M~8Bj-SgV-JnF ztg62BZ%JE%1yN_e`_xsh8eaN^Da6 z_Bm$R+f2!Ra~Xk?0{fTm)t{VpUr~_nV|LuB5);kG2bUdIl6-XjeqaC7O_n7IDb6u$ zmAO})?T*yVTT`_{@yOFv>1KCIJ5rqg?0vOUYK^teB*lMcnnU?bTYgxsk6%46a`V#! z&$f)K&aOb4(ylu5D(>5T)!A1u>T5t?M;?ec9c_F0VdG(SnMdoRZNqF^oVUDMxJY37 zV@5s2Fu_Hk{Q|2wFEYnCt;t(c)e>>JqQSf4>zUU{dbS5tkJNO`QxQq3ko&`>eB{ma zsp~91r@D4rGhdU_@!7RSUF??A7h!pAsYlP3wy(4O? zA8JklG6i@)p7moUHx3vIVCg!0D>0Y AhX4Qo diff --git a/app/src/main/res/mipmap-hdpi/ic_shortcut_stop_foreground.png b/app/src/main/res/mipmap-hdpi/ic_shortcut_stop_foreground.png deleted file mode 100644 index 0b6aab6925a4d0568c4e3790124f707f026fe6ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz4M-mPBqq(kz^Lo#;uunK>+Pk5ybTUK4j0cI zkjj{r#3hpuAk!7AD9doU_{rWSn=+5~1GV4>4U@L{UHrDw=DXpP{O5V+-~O3bAhLm3c>{xPY|BQ`$dE5Jk1Cf$Kd2YoQ7j5H2pQ~` zzU5qc_n7k%i*1)}-haMR)iWpIbj{h%G0x>r1C5&2eh#eNygqZ+2MfuA*D6`W7PjA(jK7{8 zOMb=z;uJHr05Ob)u&w?7SG>RY_Ylix`!mx{%-?_bSNmG_Z%dsG?hE~o-mtLt>sCAE x8KJfsK&%4AFt!?y55h2hTc|9u#~2tU)iPT@m~}FssdFkw!qe5yWt~$(696+WhPeO$ diff --git a/app/src/main/res/mipmap-mdpi/ic_shortcut_stop_foreground.png b/app/src/main/res/mipmap-mdpi/ic_shortcut_stop_foreground.png deleted file mode 100644 index 92b3e5f3b857e5352023b13c249da5036b654b2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{P!g`O^sAr-gY-rmUBU?9+Tv0le} zd$732vEnHzO=~CUDZD>edR+A9D;1zpWT5i&R?xZXykqZH&EE5BV}E;g@aH${c6BB+ zajHoG@r(oxAZ}6wV$L>@Ac%pBK&XFVdQ&MBb@ E0OTe{4FCWD diff --git a/app/src/main/res/mipmap-xhdpi/ic_shortcut_start_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_shortcut_start_foreground.png deleted file mode 100644 index 275363af4d9f120e56598a1f015dae8ad457b20f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 741 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$!4M=t>=)PrOU|Qqp;uunK>+M}bJ(fU;10U5z zrpPo17qIQx%i#BrFM5Kc;_VH_g0o+2e=HEw$Q|%nBf@&One^Y9$$NhMowPpG=BInj zZyQZUpn>E9hj(qR`k_xfUwywW!?tCu7T@wl-%B6<7>0^h^RXx~%|7qGs{68uM2>|- zhW&=4HvaXCWG!SmIM>WvA2Rp;vWp3)6&-&!>OM2Q`ZREsPne9@7Wo@Va+iE}zCECz zwju3ay7u3X6;}^})o8{}-Ob0J#FYK)vX}fLrp=ey`9Q>j18cr4Y(6mS=e)YJze{R& zJ}y}J_rSk(U+!LVPf%?1y>qGk1yF@xL`A~ssdce$tV>wL%s)@93(c{r0kZNpPqpLF zDY*kweDLu!J0@;7Au)O>xH8qbpUmCq7L^d0z9Z*W3=gZb)mkkCz*Z*Q(y zGi|PF_hI^+pC~wkJzZh?0UHZu$HvM6HYTRe4|rHupIx(N0V#HD-1(J{5kx>)U?s(` zWt%_-G#prSPf^8S`#r@28(sj_kef(=`u_Z4v^wzO$JexzyFsRSy85}Sb4q9e0LXS4 A9{>OV diff --git a/app/src/main/res/mipmap-xhdpi/ic_shortcut_stop_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_shortcut_stop_foreground.png deleted file mode 100644 index 12b6ad78939c611593ef69b92547b60bb4d59ea5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$!4M=t>=)PrOVBFy8;uunK>+NMjt`-LY*MpWV z)lXdyo^be}(iV5>&fLDU)AS`m9G5$rpULJ0>LMH5%bNRbTVHy~w#tro5$~6lui5?Z z=YeC3&x_7|`nwY<;+VkXoWR7~$jJjiENTW2BrxLu1UZ0JAQZ8%F$qfm5r`1*KXi zQU!tyQXycOKr0n!(IHS654He)y!;X~Eb% zab;y~JB|t%-h(TkIh7xk*njUT)WqO7c6mqR%WgMPCJIpO9oF;BaO{WI7d{%iW6MHL zAyyqV1DoxA6k58ML$g!;!%kh~HJZRe-M@IUH;A7fBf%EuTJK&cS)EH{&;h>5;(730 zd3l*2Ayg`0rn;qIY)6+Ny0rb-H741(Be&m#8Kz7Dhl`;paT@E_&gLA17%z?bGc7KV zfe^d454v`aCnuH8-jo`oBMF6`gWcvfgdI^9nDIC;m@G*Z?!9(vl?I5q{ATAur8$bU zoh>ZKH58hD*45X^SAzA#Ynlfq;|n3_$ndYll~H%bbA7;qwZpVEs`QBf?o@!8-9Ddp8X{84mZ(5V<{nF#LFsh3D*{7{R})USYjZbl zgqtWB>8Tp)*%miTgs67*y{)f0KnGawzS?Rh-ws#bhU)bsPvGcw#ZXpd6*(Ly6-;vK zbe3Gwi=mA8o=$Q*W2-@IFhdBtE-Fo5#Hq{Xa1r9W`i9NZ3E?~hgf+<|GGGZFbECRA z4Mm!{Kgr=H7Gmf<_l^byOx3(A7|qe>Mt+*@qe?R^Idyrz z=x0DgJIWNyBnZLKmoyZK+!o__Ys}zAJJF&QUo@jBGD6;Z)1-%Xzuh`78#uj& zBJi*SZiAs!73)e5@J0MYo!TZX^bC%b(V2&d$69C_UhWwWYY2mB7V5tE>S$afc`hBn zMfUw%D;CXM{j7Y|dBwublCUMKsj9N6P|#{eT=u+dtluxrZq&Ifbzx{eYBw4N3oHaA z<4}voS4ozL4-#GT#jOdUSMovRB=Rs@Cj6S8>yQ17?TqZy$s1j|r}HIEQt#|NSt>Yh zO6q`?qUAY40|-jcf10(B23ECbv$DqWH$dB1Y$HX%(5oJi+tij!nIc3{-hGl)eO@LE zm(jtQx+JP?^Nt5{7^__rBoc}Zg`N2LIa}&-v^{!`5!KM^B({J diff --git a/app/src/main/res/mipmap-xxhdpi/ic_shortcut_stop_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_shortcut_stop_foreground.png deleted file mode 100644 index 8af287e5a508230123c6c5eba7cc58d3312714ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868 zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4mO}j{44ik3=GWLo-U3d6}R4AxyX4yLBPdv z_vWT6Q&ua4rP->5Z4^v(1XGhn2hdCppnlZo0GdZtg3`d7!1Ji* p?h3ivd++<@u@8cz2XunpXC@!*${6p4^;sYXdAjq9NYrB;>}TA3C$qp}Yw-sxOpeOQ!~;RkH(xYg_n zBaO^DrfqW)b(FrmR{% zk?c!G5M*Lf;!-w(5ES@#+Hx=+*?rHwsUD(> zL{5yMbdkmI^}c)G5dweFN}pI?XY>C0E7lJ=N#1cvm>X6!IHD-dj(1Bw*rsI6%`+H?pj2x126fM2fZ?G7Ieb&w4hHvs1JNK54l{|fu2B$Q-R5{wxNoR^P zDtC^qQ_756=Rn+p%QKu15^b6YTxc7xa}>$2AgAq!XA1VCs@W1>(m-8^fI}vKadqaI zHd2tHsn`9}t9Si=utAKZU>BSrbJHOj^%;sv&EL+ap4YN#=CN$stTX*40pn$qM@{H z*cWUkoFQ)N9V6i^TW%pCC>+l|W6aL6U2*4;2s>Qo6 ze}b#Ebu3SQ3iOFXfgnC&&rLcg=Xo-{9v2Xm3Joqkf3eJU_ZdnnW+y)AgW>YWnBt`F z&blgD|HjwrJwHmpP8Q#o;S>=iP0-5jOiJW=?KJCz->M%D5=pe;>jE-UtPgn8T&lSe z??Ee$zc*x@wI!+R?Le*$h}mVE_3Hu{&f)I z@5raF?*Z3RWxzeBS5#~Kfk=?z_{aj5d7Gn(;sp>TI+L&4TFlGgNZ%GJDT7MJHsVmuh$&tx3PySI

9NoU^*M=i+IUnIQhd@j0Y|&2}p? z@9Hb{6c6SKaXW}r-Z+)vDLO_kQ(?^}$O|TDEGbJRbY@KftLcdjJ3c diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_shortcut_stop_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_shortcut_stop_foreground.png deleted file mode 100644 index 1a5ce20c0819e5ec9eb1bcd69cd888c6d1831c33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1410 zcmeAS@N?(olHy`uVBq!ia0y~yVB7%09Be?56MhC-3=FKEo-U3d6}R4AJ;>W)z{B8Z z?!v#tS#^dv*UFY(4JCs2&wBiGFI&1rDJR^w)_zlbM|MON7Y+8`n2t5wnf#+Ij}PQ=Pgg&ebxsLQ06u}&pa1{> From 8cf935accc171232161f22faa08b63c471355187 Mon Sep 17 00:00:00 2001 From: onlymash Date: Wed, 28 Mar 2018 13:14:58 +0800 Subject: [PATCH 099/630] fix shortcuts --- .../ehviewer/shortcuts/ShortcutsActivity.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java b/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java index 796629592..c3b11c8f8 100644 --- a/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java @@ -30,17 +30,14 @@ public class ShortcutsActivity extends Activity{ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - String action = null; - action = getIntent().getAction(); - if (!action.isEmpty()){ - Intent intent = new Intent(this, DownloadService.class); - if (action.equals(DownloadService.ACTION_START_ALL)){ - intent.setAction(DownloadService.ACTION_START_ALL); - startService(intent); - } else if (action.equals(DownloadService.ACTION_STOP_ALL)){ - intent.setAction(DownloadService.ACTION_STOP_ALL); - startService(intent); - } + String action = getIntent().getAction(); + Intent intent = new Intent(this, DownloadService.class); + if (action.equals(DownloadService.ACTION_START_ALL)){ + intent.setAction(DownloadService.ACTION_START_ALL); + startService(intent); + } else if (action.equals(DownloadService.ACTION_STOP_ALL)){ + intent.setAction(DownloadService.ACTION_STOP_ALL); + startService(intent); } finish(); } From b8c3229d9f09d9c146ff4bff793de2836cea6b50 Mon Sep 17 00:00:00 2001 From: onlymash Date: Wed, 28 Mar 2018 13:30:03 +0800 Subject: [PATCH 100/630] add license to shortcut icon --- app/src/main/res/drawable/ic_pause_44dp.xml | 16 ++++++++++++++++ app/src/main/res/drawable/ic_play_arrow_44dp.xml | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/app/src/main/res/drawable/ic_pause_44dp.xml b/app/src/main/res/drawable/ic_pause_44dp.xml index 1c6f69d3d..3bdae11c8 100644 --- a/app/src/main/res/drawable/ic_pause_44dp.xml +++ b/app/src/main/res/drawable/ic_pause_44dp.xml @@ -1,3 +1,19 @@ + + + Date: Wed, 28 Mar 2018 13:31:24 +0800 Subject: [PATCH 101/630] update shortcut icon --- app/src/main/res/drawable/ic_pause_44dp.xml | 3 +-- app/src/main/res/drawable/ic_play_arrow_44dp.xml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/drawable/ic_pause_44dp.xml b/app/src/main/res/drawable/ic_pause_44dp.xml index 3bdae11c8..abb9a7ae2 100644 --- a/app/src/main/res/drawable/ic_pause_44dp.xml +++ b/app/src/main/res/drawable/ic_pause_44dp.xml @@ -16,12 +16,11 @@ --> diff --git a/app/src/main/res/drawable/ic_play_arrow_44dp.xml b/app/src/main/res/drawable/ic_play_arrow_44dp.xml index fa249ea18..96ec6254f 100644 --- a/app/src/main/res/drawable/ic_play_arrow_44dp.xml +++ b/app/src/main/res/drawable/ic_play_arrow_44dp.xml @@ -16,12 +16,11 @@ --> From 00485efd0efa65313fe235807e8c5e5d03f8c384 Mon Sep 17 00:00:00 2001 From: onlymash Date: Wed, 28 Mar 2018 14:30:10 +0800 Subject: [PATCH 102/630] update shortcut --- .../ehviewer/shortcuts/ShortcutsActivity.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java b/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java index c3b11c8f8..9c45b1b63 100644 --- a/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java @@ -30,14 +30,13 @@ public class ShortcutsActivity extends Activity{ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - String action = getIntent().getAction(); - Intent intent = new Intent(this, DownloadService.class); - if (action.equals(DownloadService.ACTION_START_ALL)){ - intent.setAction(DownloadService.ACTION_START_ALL); - startService(intent); - } else if (action.equals(DownloadService.ACTION_STOP_ALL)){ - intent.setAction(DownloadService.ACTION_STOP_ALL); - startService(intent); + String action = null; + Intent intent = getIntent(); + if (intent != null){ + action = intent.getAction(); + if (action != null){ + startService(new Intent(this, DownloadService.class).setAction(action)); + } } finish(); } From 91e9975a244a10dedd582b9b56d4c876760148c9 Mon Sep 17 00:00:00 2001 From: onlymash Date: Wed, 28 Mar 2018 14:45:34 +0800 Subject: [PATCH 103/630] update shortcut --- .../java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java b/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java index 9c45b1b63..2987bde1e 100644 --- a/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/shortcuts/ShortcutsActivity.java @@ -34,7 +34,8 @@ public void onCreate(Bundle savedInstanceState) { Intent intent = getIntent(); if (intent != null){ action = intent.getAction(); - if (action != null){ + if (action != null && (action.equals(DownloadService.ACTION_START_ALL) || + action.equals(DownloadService.ACTION_STOP_ALL))){ startService(new Intent(this, DownloadService.class).setAction(action)); } } From 3f2b62c119b8dbbd19d923c0714cb7e6237ec39e Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 29 Mar 2018 12:24:56 +0800 Subject: [PATCH 104/630] restore unifile --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index a1575e7fb..439bd630e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -79,7 +79,7 @@ dependencies { implementation 'com.github.seven332:ripple:0.1.2' implementation 'com.github.seven332:streampipe:0.1.0' implementation 'com.github.seven332:tuxiang:0.1.2' - implementation 'com.github.seven332:unifile:0.2.0' + implementation 'com.github.seven332:unifile:b59c14e47b' implementation 'com.github.seven332:yorozuya:0.1.2' implementation 'com.github.seven332:yorozuya-thread:0.1.1' implementation 'com.github.seven332:yorozuya-collect:0.1.4' From bb99570cd43a0c47462a4daac31f652bf420ee19 Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 29 Mar 2018 12:38:38 +0800 Subject: [PATCH 105/630] update shortcut foreground icon inset --- app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml | 2 +- app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml index a2ed5652e..cfc002703 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml @@ -5,6 +5,6 @@ + android:inset="23%"/> \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml index 8ed558ae5..0ffc5be17 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml @@ -5,6 +5,6 @@ + android:inset="23%"/> \ No newline at end of file From 459b27253a59410698047a10375b11664aa212bb Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 29 Mar 2018 14:49:06 +0800 Subject: [PATCH 106/630] redraw shortcut icon --- app/src/debug/res/xml-v25/shortcuts.xml | 4 +-- .../res/drawable-v25/ic_shortcut_start.xml | 15 ++++++++++ .../res/drawable-v25/ic_shortcut_stop.xml | 15 ++++++++++ .../ic_shortcut_start.xml | 7 +---- .../ic_shortcut_stop.xml | 7 +---- app/src/main/res/drawable/ic_pause_108dp.xml | 10 +++++++ app/src/main/res/drawable/ic_pause_44dp.xml | 26 ------------------ .../main/res/drawable/ic_play_arrow_108dp.xml | 10 +++++++ .../main/res/drawable/ic_play_arrow_44dp.xml | 26 ------------------ .../mipmap-nodpi-v25/ic_shortcut_start.png | Bin 5717 -> 0 bytes .../res/mipmap-nodpi-v25/ic_shortcut_stop.png | Bin 4689 -> 0 bytes app/src/main/res/xml-v25/shortcuts.xml | 4 +-- 12 files changed, 56 insertions(+), 68 deletions(-) create mode 100644 app/src/main/res/drawable-v25/ic_shortcut_start.xml create mode 100644 app/src/main/res/drawable-v25/ic_shortcut_stop.xml rename app/src/main/res/{mipmap-anydpi-v26 => drawable-v26}/ic_shortcut_start.xml (57%) rename app/src/main/res/{mipmap-anydpi-v26 => drawable-v26}/ic_shortcut_stop.xml (58%) create mode 100644 app/src/main/res/drawable/ic_pause_108dp.xml delete mode 100644 app/src/main/res/drawable/ic_pause_44dp.xml create mode 100644 app/src/main/res/drawable/ic_play_arrow_108dp.xml delete mode 100644 app/src/main/res/drawable/ic_play_arrow_44dp.xml delete mode 100644 app/src/main/res/mipmap-nodpi-v25/ic_shortcut_start.png delete mode 100644 app/src/main/res/mipmap-nodpi-v25/ic_shortcut_stop.png diff --git a/app/src/debug/res/xml-v25/shortcuts.xml b/app/src/debug/res/xml-v25/shortcuts.xml index e970cd541..b84b778dd 100644 --- a/app/src/debug/res/xml-v25/shortcuts.xml +++ b/app/src/debug/res/xml-v25/shortcuts.xml @@ -4,7 +4,7 @@ @@ -18,7 +18,7 @@ diff --git a/app/src/main/res/drawable-v25/ic_shortcut_start.xml b/app/src/main/res/drawable-v25/ic_shortcut_start.xml new file mode 100644 index 000000000..5a513025e --- /dev/null +++ b/app/src/main/res/drawable-v25/ic_shortcut_start.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable-v25/ic_shortcut_stop.xml b/app/src/main/res/drawable-v25/ic_shortcut_stop.xml new file mode 100644 index 000000000..4ae8e3bba --- /dev/null +++ b/app/src/main/res/drawable-v25/ic_shortcut_stop.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml b/app/src/main/res/drawable-v26/ic_shortcut_start.xml similarity index 57% rename from app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml rename to app/src/main/res/drawable-v26/ic_shortcut_start.xml index cfc002703..90c78f83e 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_start.xml +++ b/app/src/main/res/drawable-v26/ic_shortcut_start.xml @@ -1,10 +1,5 @@ - - - - + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml b/app/src/main/res/drawable-v26/ic_shortcut_stop.xml similarity index 58% rename from app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml rename to app/src/main/res/drawable-v26/ic_shortcut_stop.xml index 0ffc5be17..cbe5c08bc 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_shortcut_stop.xml +++ b/app/src/main/res/drawable-v26/ic_shortcut_stop.xml @@ -1,10 +1,5 @@ - - - - + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_pause_108dp.xml b/app/src/main/res/drawable/ic_pause_108dp.xml new file mode 100644 index 000000000..aff1b7b4c --- /dev/null +++ b/app/src/main/res/drawable/ic_pause_108dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_pause_44dp.xml b/app/src/main/res/drawable/ic_pause_44dp.xml deleted file mode 100644 index abb9a7ae2..000000000 --- a/app/src/main/res/drawable/ic_pause_44dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/ic_play_arrow_108dp.xml b/app/src/main/res/drawable/ic_play_arrow_108dp.xml new file mode 100644 index 000000000..2a04d42f5 --- /dev/null +++ b/app/src/main/res/drawable/ic_play_arrow_108dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_play_arrow_44dp.xml b/app/src/main/res/drawable/ic_play_arrow_44dp.xml deleted file mode 100644 index 96ec6254f..000000000 --- a/app/src/main/res/drawable/ic_play_arrow_44dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - diff --git a/app/src/main/res/mipmap-nodpi-v25/ic_shortcut_start.png b/app/src/main/res/mipmap-nodpi-v25/ic_shortcut_start.png deleted file mode 100644 index 6707b335f2b5e768d746422f37d3a19eb0b605de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5717 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 diff --git a/app/src/main/res/mipmap-nodpi-v25/ic_shortcut_stop.png b/app/src/main/res/mipmap-nodpi-v25/ic_shortcut_stop.png deleted file mode 100644 index 603ef88456df16bd6f3baeec5e3d15258cb80500..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4689 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 diff --git a/app/src/main/res/xml-v25/shortcuts.xml b/app/src/main/res/xml-v25/shortcuts.xml index cd1801d09..e0ebdcc2f 100644 --- a/app/src/main/res/xml-v25/shortcuts.xml +++ b/app/src/main/res/xml-v25/shortcuts.xml @@ -4,7 +4,7 @@ @@ -18,7 +18,7 @@ From 27e4bd4e0b29d937e8bc4393a8fdf504bde7449a Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 29 Mar 2018 15:14:33 +0800 Subject: [PATCH 107/630] merge background color to color.xml --- app/src/main/res/values/colors.xml | 2 ++ app/src/main/res/values/ic_shortcut_background.xml | 4 ---- 2 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 app/src/main/res/values/ic_shortcut_background.xml diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 5bb42c6ac..cc17bdf75 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -114,4 +114,6 @@ @color/colorPrimary @color/red_500 + + #F5F5F5 diff --git a/app/src/main/res/values/ic_shortcut_background.xml b/app/src/main/res/values/ic_shortcut_background.xml deleted file mode 100644 index d533a7125..000000000 --- a/app/src/main/res/values/ic_shortcut_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #F5F5F5 - \ No newline at end of file From af93a6730ec087a69513e79f560375da01770918 Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 29 Mar 2018 15:24:59 +0800 Subject: [PATCH 108/630] update shortcut background --- app/src/main/res/drawable-v25/ic_shortcut_start.xml | 2 +- app/src/main/res/drawable-v25/ic_shortcut_stop.xml | 2 +- app/src/main/res/drawable-v26/ic_shortcut_start.xml | 2 +- app/src/main/res/drawable-v26/ic_shortcut_stop.xml | 2 +- app/src/main/res/values/colors.xml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/drawable-v25/ic_shortcut_start.xml b/app/src/main/res/drawable-v25/ic_shortcut_start.xml index 5a513025e..364be6f25 100644 --- a/app/src/main/res/drawable-v25/ic_shortcut_start.xml +++ b/app/src/main/res/drawable-v25/ic_shortcut_start.xml @@ -6,7 +6,7 @@ android:viewportHeight="48"> - + \ No newline at end of file diff --git a/app/src/main/res/drawable-v26/ic_shortcut_stop.xml b/app/src/main/res/drawable-v26/ic_shortcut_stop.xml index cbe5c08bc..fe1717b42 100644 --- a/app/src/main/res/drawable-v26/ic_shortcut_stop.xml +++ b/app/src/main/res/drawable-v26/ic_shortcut_stop.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index cc17bdf75..137058601 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -114,6 +114,6 @@ @color/colorPrimary @color/red_500 - - #F5F5F5 + + #F5F5F5 From 6bd3bd5e804a276d5c528803647aa99b91ade217 Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 2 Apr 2018 02:03:18 +0800 Subject: [PATCH 109/630] fix judgment issue --- .../main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java index 4b070e4c1..daf6e78f6 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java @@ -1092,7 +1092,7 @@ public void onClick(View v) { } int size = list.size(); int index = recyclerView.getChildAdapterPosition(itemView); - if (index < 0 && index >= size) { + if (index < 0 || index >= size) { return; } From 0b547147b1c7397c97c9ba3447e03acb29dcedcd Mon Sep 17 00:00:00 2001 From: onlymash Date: Mon, 2 Apr 2018 02:20:18 +0800 Subject: [PATCH 110/630] fix judgment issue --- .../main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java index daf6e78f6..38265a0d8 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java @@ -635,7 +635,7 @@ public boolean onItemClick(EasyRecyclerView parent, View view, int position, lon if (list == null) { return false; } - if (position < 0 && position >= list.size()) { + if (position < 0 || position >= list.size()) { return false; } From 9a5743dd67c7f0a6997ea8560a9eeecd19b8d77e Mon Sep 17 00:00:00 2001 From: PYC Date: Wed, 28 Mar 2018 16:53:36 +0900 Subject: [PATCH 111/630] Correct the japanese sentence. --- app/src/main/res/values-ja/strings.xml | 162 ++++++++++++------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 6e844163b..27506b89f 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -21,7 +21,7 @@ ホームページ 人気 - 気に入り + お気に入り 閲覧履歴 ダウンロード 設定 @@ -41,56 +41,56 @@ ニックネームを入力 ニックネーム ニックネームが空 - ログインください + ログインしてください Little Hippo Cookieは、ブラウザに格納された小さなデータです。Cookie及びその入手方法がかわからない場合は、Webで検索してください。\n\n特定のCookieを入力することでログインしてください。 テキストが空 警告 - あなたが入力したCookieは間違ったようです。チェックしてください。 - よい - 間違ってない + あなたが入力したCookieは間違っているようです。チェックしてください。 + 正しいです + 間違っています 古いCookieを探す ダウンロードパスは利用できません。ダウンロードパスをリセットしてください。 - モバイルネットワークを使っている + モバイルネットワークを使用中です。 間違ったステータスコード:%d タイムアウト 未知ホスト - リダイレクトが多すぎ - ネットエラー - おかしいエラー - アクティビティが見つからない - リンクを分析できない - フォルダパスではない - providerがない - デコード失敗 - 見つからない + リダイレクトが多すぎます + ネットワークエラー + 未知なエラー + アクティビティが見つかりません。 + リンクを分析できません。 + フォルダが見つかりません。 + プロバイダが見つかりません。 + デコードに失敗しました。 + 見つかりませんでした。 - 無効のzipファイル - 読み取り失敗 - 範囲外 - 書き込み失敗 - 分析失敗 + 無効なzipファイルです。 + 読み取りに失敗しました。 + 範囲外です。 + 書き込みに失敗しました。 + 分析に失敗しました。 509 - 無効のリンク - pToken取得エラー - 指定ギャラリーのキーワードは「618395 0439fa3666」のようはずです。 - 一時ファイルを作成できない - 画像を保存できない - 無効数字 - - このアプリの内容はインターネットからのもので、内容によっては生理や心理に回復不能な損害を与えることが可能です。このアプリの作成者は、このアプリケによって引き起こされるいかなる結果に対しても責任を負いません。 - ユーザー名が空は不可能 - パスワードが空は不可能 - ログインをスキップ - ログイン失敗 + 無効なリンクです。 + pToken取得に失敗しました。 + 指定ギャラリーのキーワードは、例えば「618395 0439fa3666」のようになるはずです。 + 一時ファイルを作成できません。 + 画像を保存できません。 + 無効な数字です。 + + このアプリの内容はインターネットからのもので、内容によっては生理や心理に回復不能な損害を与える可能性があります。。このアプリの作成者は、このアプリケーションによって引き起こされるいかなる結果に対しても責任を負いません。 + ユーザー名を入力してください。 + パスワードを入力してください。 + ログインをスキップします。 + ログインに失敗しました。 これはウェブサイトのアップデートによって引き起こされることかもしれず、またおかしいことが起こったかもしれません。ログインボタンの下でWebでログインするか、Cookieを入力するか、あるいはログインをスキップします。ログインをスキップするでアプリが正常に使用できなくなることがあります。0.6.xバージョンでログインした場合は、「Cookieでログイン」を選択することが推奨です。 もう一度押して終了 - クリックしてもう一度試し + クリックしてもう一度試す EhViewerはギャラリーをダウンロードするためにデバイスのストレージへのアクセスを要求します。あなたは許可しますか? 痛い あなたは、開発者があなたのデバイスや使用状況に関する情報を収集できるように同意しますか?これは開発にとって大きな助けになります。<br><br>データ統計サービスはGoogleアナリティクスによって提供で、 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> にプライバシーポリシーを閲覧できます。<br><br>データ統計に参加することに同意すると、Android APIのバージョン、デバイスモデル、言語の場所、アプリのバージョン番号、セッションの長さ、使用するアプリの数など、デバイス情報とアプリの使用状況が記録されます。開発者は、電話番号、電子メールアドレス、IMEIの情報は記録しないことを約束します。<br><br>統計に参加することに同意するまで、あなたの情報は記録されません。<br><br>記録されたデータはGoogleアナリティクスで分析され、分析レポートはアプリ開発者のみがアクセスできます。 @@ -112,12 +112,12 @@ 更新 バージョン:%1$s\nサイズ:%2$s\n\n%3$s - EhViewerはもう最新バージョン + EhViewerは既に最新バージョンです。 ExHentaiを検索 E-Hentaiを検索 - 何も見つからない + 何も見つかりませんでした。 検索 @@ -133,7 +133,7 @@ 指定ギャラリー 詳細オプションを有効にする - 一般検索:搜索です。\n\n指定アップローダー:このアップローダーによってアップロードされたギャラリーを一覧表示します。他のオプションは無視されます。\n\n指定タグ:このタッグを含むギャラリーを一覧表示します。他のオプションは無視されます。\n\n指定画廊:このギャラリーにジャンプします。キーワードは「gid token」のはずです。 + 一般検索:検索です。\n\n指定アップローダー:このアップローダーによってアップロードされたギャラリーを一覧表示します。他のオプションは無視されます。\n\n指定タグ:このタッグを含むギャラリーを一覧表示します。他のオプションは無視されます。\n\n指定画廊:このギャラリーにジャンプします。キーワードは「gid token」のはずです。 ギャラリーを検索 ギャラリータグを検索 @@ -151,21 +151,21 @@ 削除されたギャラリーを表示 まずは画像を選択してください - 気に入り + お気に入り クイック検索 「+」をクリックしてクイック検索を追加 クイック検索を追加 - ネームが空 + タイトルが空 削除 クイック検索を削除 「%s」を削除? ここがクイック検索 ギャラリーリストのステータスはクイック検索として保存されます。検索パネルのステータスを保存する場合は、まず検索を実行してください。 - 私を読んで - 画像検索をクイック検索として追加できません + README + 画像検索をクイック検索として追加できませんでした。 同じクイック検索がすでに名前が「%s」として存在しています。 - 同じ名前が既に存在 + 同じ名前が既に存在します。 ページ%1$d、合計%2$dページ @@ -176,44 +176,44 @@ 星5 - ギャラリーを見つけない + ギャラリーを見つけることが出来ませんでした。 ダウンロード 閲覧 - 詳しい情報を見る + 詳細情報を見る %dページ \u2665 %d %1$s (%2$.2f, %3$d) - 気に入り + お気に入り トレント (%d) シェア - 採点 + 評価 類似のギャラリー カバーを検索 タグなし コメントなし - すべてのコメントが表示された + すべてのコメントが表示されました。 他のコメントを見る プレビューなし - すべてのプレビューが表示された + すべてのプレビューが表示されました。 他のプレビューを見る リフレッシュ 他のアプリケーションで開く - 採点成功 - 採点失敗 + 評価成功 + 評価失敗 トレントなし トレント - 気に入った - 気に入りに追加してない - 気に入りに追加 - 気に入りを覚える - 気に入りに追加した - 気に入りから削除 - 気に入りに追加失敗 - 気に入りから削除失敗 + 追加済み + 未追加 + お気に入りに追加しました。 + お気に入りを記憶します。 + お気に入りに追加しました。 + お気に入りから削除しました。 + お気に入りに追加失敗しました。 + お気に入りからの削除に失敗しました。 アップローダフィルター「%s」を追加? - フィルターが追加された + フィルターが追加されました。 良すぎてたまらない @@ -230,7 +230,7 @@ ギャラリー詳細 - クリップボードにコピーされた + クリップボードにコピーされました。 キー Gid @@ -241,33 +241,33 @@ サムネイル カテゴリー アップローダー - アップロード時間 + アップロード日時 親ギャラリー 可視性 言語 ページ数 サイズ - 気に入り回数 - 気に入った - 採点回数 - 採点 + お気に入り回数 + お気に入り追加済み + 評価回数 + 評価 トレント数 トレント ギャラリーコメント - コメントはまだない - コメント成功 - コメント失敗 - コメントテキストをコピー + コメントはまだありません。 + コメントに成功しました。 + コメントに失敗しました。 + コメントをコピーしました。 賛成 - もう賛成しない - ゴミコメント - ゴミコメントではない - もう賛成した - もう賛成しなかった - ゴミコメントと指定した - もうゴミコメントと指定しない + 賛成を取り消す + 反対 + 反対を取り消す + 賛成しました。 + 賛成を取り消しました。 + 反対しました。 + 反対を取り消しました。 投票失敗 投票状況を見る @@ -325,7 +325,7 @@ ここが閲覧履歴 全部クリア - すべて閲覧履歴をクリア? + すべての閲覧履歴をクリアしますか? フィルター @@ -360,7 +360,7 @@ @string/refresh @string/share 保存 - ブックマークを追加 + ブックマークに追加 メニュー 画像をシェア 画像は%sに保存された @@ -368,10 +368,10 @@ EH ログアウト - ログアウト後はアプリを再起動して、再度ログインします。 - おう、マイディア、君は本当にログアウトしたい?本当にログアウトしますか? - イエス、オレはログアウトします - ログアウトした。アプリを再起動することで再度ログインします。 + ログアウト後にアプリを再起動して、再度ログインします。 + 本当にログアウトしますか? + ログアウトします + ログアウトしました。アプリを再起動することで再度ログインします。 EHentai設定 EHentaiサイト上の設定 ギャラリーサイト From 26eff55e6d282eed05d91d6cd304c3266309bbb6 Mon Sep 17 00:00:00 2001 From: onlymash Date: Tue, 3 Apr 2018 20:14:09 +0800 Subject: [PATCH 112/630] update favorites right drawer layout --- .../ehviewer/ui/scene/FavoritesScene.java | 223 ++++++++---------- .../ui/scene/GalleryCommentsScene.java | 2 +- .../main/res/layout-v21/drawer_list_fav.xml | 51 ++++ app/src/main/res/layout/drawer_list_fav.xml | 55 +++++ .../res/layout/item_favorite_info_header.xml | 42 ---- ...e_info_data.xml => item_favorite_list.xml} | 15 +- app/src/main/res/menu/drawer_favorites.xml | 6 - 7 files changed, 217 insertions(+), 177 deletions(-) create mode 100644 app/src/main/res/layout-v21/drawer_list_fav.xml create mode 100644 app/src/main/res/layout/drawer_list_fav.xml delete mode 100644 app/src/main/res/layout/item_favorite_info_header.xml rename app/src/main/res/layout/{item_favorite_info_data.xml => item_favorite_list.xml} (65%) 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 dd20f0094..9e9f4d8d4 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 @@ -29,6 +29,7 @@ import android.support.design.widget.FloatingActionButton; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AlertDialog; +import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; @@ -43,9 +44,6 @@ import android.view.MenuItem; import android.view.View; 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; @@ -55,7 +53,6 @@ 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; @@ -70,6 +67,7 @@ import com.hippo.ehviewer.ui.annotation.DrawerLifeCircle; import com.hippo.ehviewer.ui.annotation.ViewLifeCircle; import com.hippo.ehviewer.ui.annotation.WholeLifeCircle; +import com.hippo.ehviewer.widget.EhDrawerLayout; import com.hippo.ehviewer.widget.SearchBar; import com.hippo.refreshlayout.RefreshLayout; import com.hippo.ripple.Ripple; @@ -80,9 +78,7 @@ import com.hippo.widget.ContentLayout; import com.hippo.widget.FabLayout; import com.hippo.widget.SearchBarMover; -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; @@ -96,7 +92,7 @@ public class FavoritesScene extends BaseScene implements EasyRecyclerView.OnItemClickListener, EasyRecyclerView.OnItemLongClickListener, FastScroller.OnDragHandlerListener, SearchBarMover.Helper, SearchBar.Helper, - FabLayout.OnClickFabListener, EasyRecyclerView.CustomChoiceListener, AdapterView.OnItemClickListener { + FabLayout.OnClickFabListener, EasyRecyclerView.CustomChoiceListener { private static final long ANIMATE_TIME = 300L; @@ -129,12 +125,11 @@ public class FavoritesScene extends BaseScene implements private DrawerArrowDrawable mLeftDrawable; @Nullable - @DrawerLifeCircle - private ArrayAdapter mDrawerAdapter; + private EhDrawerLayout mDrawerLayout; + @Nullable @DrawerLifeCircle - private List mDrawerList; - + private FavDrawerAdapter mDrawerAdapter; @Nullable @WholeLifeCircle private EhClient mClient; @@ -143,13 +138,16 @@ public class FavoritesScene extends BaseScene implements private String[] mFavCatArray; @Nullable @WholeLifeCircle + private int[] mFavCountArray; + @Nullable + @WholeLifeCircle private FavListUrlBuilder mUrlBuilder; public int current; // -1 for error public int limit; // -1 for error - @Nullable - private int[] mFavCountArray; + private int mLocalSize = 0; + private int mCloudSize = 0; private boolean mHasFirstRefresh; private boolean mSearchMode; @@ -206,7 +204,7 @@ private void onRestore(Bundle savedInstanceState) { } @Override - public void onSaveInstanceState(Bundle outState) { + public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); boolean hasFirstRefresh; @@ -236,6 +234,7 @@ public View onCreateView2(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.scene_favorites, container, false); ContentLayout contentLayout = (ContentLayout) view.findViewById(R.id.content_layout); + mDrawerLayout = (EhDrawerLayout) ViewUtils.$$(getActivity2(), R.id.draw_view); mRecyclerView = contentLayout.getRecyclerView(); FastScroller fastScroller = contentLayout.getFastScroller(); RefreshLayout refreshLayout = contentLayout.getRefreshLayout(); @@ -410,95 +409,73 @@ public void onDestroyView() { mOldKeyword = null; } - private class InfoHolder extends RecyclerView.ViewHolder { + private class FavDrawerHolder extends RecyclerView.ViewHolder { private final TextView key; private final TextView value; - public InfoHolder(View itemView) { + private FavDrawerHolder(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 class FavDrawerAdapter extends RecyclerView.Adapter { private final LayoutInflater mInflater; - public InfoAdapter(LayoutInflater inflater) { + private FavDrawerAdapter(LayoutInflater inflater) { mInflater = inflater; } @Override public int getItemViewType(int position) { - return 0 == position ? TYPE_HEADER : TYPE_DATA; + return position; } + @NonNull @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)); + public FavDrawerHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new FavDrawerHolder(mInflater.inflate(R.layout.item_favorite_list, parent, false)); } @Override @SuppressLint("SetTextI18n") - public void onBindViewHolder(InfoHolder holder, int position) { + public void onBindViewHolder(@NonNull FavDrawerHolder holder, int position) { if (0 == position) { - holder.key.setText(R.string.collections); - holder.value.setText(R.string.count); - holder.itemView.setEnabled(false); + holder.key.setText(R.string.local_favorites); + holder.value.setText(Integer.toString(mLocalSize)); + holder.itemView.setEnabled(true); + } else if (1 == position){ + holder.key.setText(R.string.cloud_favorites); + holder.value.setText(Integer.toString(mCloudSize)); + holder.itemView.setEnabled(true); } else { if (null == mFavCatArray || null == mFavCountArray || - mFavCatArray.length < position || mFavCountArray.length < position) { + mFavCatArray.length < (position - 1) || + mFavCountArray.length < (position - 1)) { return; } - holder.key.setText(mFavCatArray[position - 1]); - holder.value.setText(Integer.toString(mFavCountArray[position - 1])); + holder.key.setText(mFavCatArray[position - 2]); + holder.value.setText(Integer.toString(mFavCountArray[position - 2])); holder.itemView.setEnabled(true); } } @Override public int getItemCount() { - return 11; + return 12; } } - @SuppressLint("InflateParams") - private void showFavoritesInfoDialog() { - Context context = getContext2(); - if (null == context || null == mFavCatArray || null == mFavCountArray) { - return; - } - - AlertDialog.Builder builder = new AlertDialog.Builder(context); - context = builder.getContext(); - final LayoutInflater inflater = LayoutInflater.from(context); - EasyRecyclerView rv = (EasyRecyclerView) inflater.inflate(R.layout.dialog_recycler_view, 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(Ripple.generateRippleDrawable(context, false)); - rv.setClipToPadding(false); - builder.setView(rv).show(); - } - @Override public View onCreateDrawerView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.drawer_list, container, false); + View view = inflater.inflate(R.layout.drawer_list_fav, container, false); + final Context context = getContext2(); Toolbar toolbar = (Toolbar) ViewUtils.$$(view, R.id.toolbar); - ListView listView = (ListView) view.findViewById(R.id.list_view); - final Context context = getContext2(); Assert.assertNotNull(context); toolbar.setTitle(R.string.collections); @@ -508,9 +485,6 @@ public View onCreateDrawerView(LayoutInflater inflater, public boolean onMenuItemClick(MenuItem item) { int id = item.getItemId(); switch (id) { - case R.id.action_info: - showFavoritesInfoDialog(); - return true; case R.id.action_default_favorites_slot: String[] items = new String[12]; items[0] = getString(R.string.let_me_select); @@ -531,15 +505,13 @@ public void onClick(DialogInterface dialog, int which) { } }); - mDrawerList = new ArrayList<>(12); - mDrawerList.add(getString(R.string.local_favorites)); - mDrawerList.add(getString(R.string.cloud_favorites)); - if (mFavCatArray != null) { - Collections.addAll(mDrawerList, mFavCatArray); - } - mDrawerAdapter = new ArrayAdapter<>(context, R.layout.item_simple_list, mDrawerList); - listView.setAdapter(mDrawerAdapter); - listView.setOnItemClickListener(this); + EasyRecyclerView recyclerView = (EasyRecyclerView) view.findViewById(R.id.recycler_view_drawer); + recyclerView.setLayoutManager(new LinearLayoutManager(context)); + recyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); + + mDrawerAdapter = new FavDrawerAdapter(inflater); + recyclerView.setAdapter(mDrawerAdapter); + recyclerView.setOnItemClickListener(this); return view; } @@ -549,7 +521,6 @@ public void onDestroyDrawerView() { super.onDestroyDrawerView(); mDrawerAdapter = null; - mDrawerList = null; } @Override @@ -590,19 +561,53 @@ public void onEndDragHandler() { @Override @Implemented(EasyRecyclerView.OnItemClickListener.class) public boolean onItemClick(EasyRecyclerView parent, View view, int position, long id) { - if (mRecyclerView != null && mRecyclerView.isInCustomChoice()) { - mRecyclerView.toggleItemChecked(position); - } else if (mHelper != null) { - GalleryInfo gi = mHelper.getDataAt(position); - Bundle args = new Bundle(); - args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GALLERY_INFO); - args.putParcelable(GalleryDetailScene.KEY_GALLERY_INFO, gi); - Announcer announcer = new Announcer(GalleryDetailScene.class).setArgs(args); - View thumb; - if (ApiHelper.SUPPORT_TRANSITION && null != (thumb = view.findViewById(R.id.thumb))) { - announcer.setTranHelper(new EnterGalleryDetailTransaction(thumb)); + if (mDrawerLayout != null && mDrawerLayout.isDrawerOpen(Gravity.RIGHT)){ + // Skip if in search mode + if (mRecyclerView != null && mRecyclerView.isInCustomChoice()) { + return true; + } + + if (mUrlBuilder == null || mHelper == null) { + return true; + } + + // Local favorite position is 0, All favorite position is 1, so position - 2 is OK + int newFavCat = position - 2; + + // Check is the same + if (mUrlBuilder.getFavCat() == newFavCat) { + return true; + } + + // Ensure outOfCustomChoiceMode to avoid error + if (mRecyclerView != null) { + mRecyclerView.isInCustomChoice(); + } + + exitSearchMode(true); + + mUrlBuilder.setKeyword(null); + mUrlBuilder.setFavCat(newFavCat); + updateSearchBar(); + mHelper.refresh(); + + closeDrawer(Gravity.RIGHT); + + } else { + if (mRecyclerView != null && mRecyclerView.isInCustomChoice()) { + mRecyclerView.toggleItemChecked(position); + } else if (mHelper != null) { + GalleryInfo gi = mHelper.getDataAt(position); + Bundle args = new Bundle(); + args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GALLERY_INFO); + args.putParcelable(GalleryDetailScene.KEY_GALLERY_INFO, gi); + Announcer announcer = new Announcer(GalleryDetailScene.class).setArgs(args); + View thumb; + if (ApiHelper.SUPPORT_TRANSITION && null != (thumb = view.findViewById(R.id.thumb))) { + announcer.setTranHelper(new EnterGalleryDetailTransaction(thumb)); + } + startScene(announcer); } - startScene(announcer); } return true; } @@ -805,41 +810,6 @@ public void onItemCheckedStateChanged(EasyRecyclerView view, int position, long } } - @Override - @Implemented(AdapterView.OnItemClickListener.class) - public void onItemClick(AdapterView parent, View view, int position, long id) { - // Skip if in search mode - if (mRecyclerView != null && mRecyclerView.isInCustomChoice()) { - return; - } - - if (mUrlBuilder == null || mHelper == null) { - return; - } - - // Local favorite position is 0, All favorite position is 1, so position - 2 is OK - int newFavCat = position - 2; - - // Check is the same - if (mUrlBuilder.getFavCat() == newFavCat) { - return; - } - - // Ensure outOfCustomChoiceMode to avoid error - if (mRecyclerView != null) { - mRecyclerView.isInCustomChoice(); - } - - exitSearchMode(true); - - mUrlBuilder.setKeyword(null); - mUrlBuilder.setFavCat(newFavCat); - updateSearchBar(); - mHelper.refresh(); - - closeDrawer(Gravity.RIGHT); - } - private void enterSearchMode(boolean animation) { if (mSearchMode ||mSearchBar == null || mSearchBarMover == null || mLeftDrawable == null) { return; @@ -864,11 +834,9 @@ private void onGetFavoritesSuccess(FavoritesParser.Result result, int taskId) { if (mHelper != null && mSearchBarMover != null && mHelper.isCurrentTask(taskId)) { - if (mFavCatArray != null && mDrawerList != null) { - for (int i = 0; i < 10; i++) { - mFavCatArray[i] = result.catArray[i]; - mDrawerList.set(i + 2, result.catArray[i]); - } + if (mFavCatArray != null) { + + System.arraycopy(result.catArray, 0, mFavCatArray, 0,10); if (mDrawerAdapter != null) { mDrawerAdapter.notifyDataSetChanged(); @@ -876,6 +844,12 @@ private void onGetFavoritesSuccess(FavoritesParser.Result result, int taskId) { } mFavCountArray = result.countArray; + if (mFavCountArray != null){ + mCloudSize = 0; + for (int i = 0; i < 10; i++ ){ + mCloudSize = mCloudSize + mFavCountArray[i]; + } + } updateSearchBar(); mHelper.setPages(taskId, result.pages); @@ -903,6 +877,7 @@ private void onGetFavoritesLocal(String keyword, int taskId) { mHelper.setPages(taskId, 0); mHelper.onGetPageData(taskId, Collections.EMPTY_LIST); } else { + mLocalSize = list.size(); mHelper.setPages(taskId, 1); mHelper.onGetPageData(taskId, list); } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java index cea1072bb..a784a2ae9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java @@ -322,7 +322,7 @@ public void showVoteStatusDialog(Context context, String voteStatus) { rv.setAdapter(new RecyclerView.Adapter() { @Override public InfoHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new InfoHolder(inflater.inflate(R.layout.item_favorite_info_data, parent, false)); + return new InfoHolder(inflater.inflate(R.layout.item_favorite_list, parent, false)); } @Override diff --git a/app/src/main/res/layout-v21/drawer_list_fav.xml b/app/src/main/res/layout-v21/drawer_list_fav.xml new file mode 100644 index 000000000..7e01e8b42 --- /dev/null +++ b/app/src/main/res/layout-v21/drawer_list_fav.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/drawer_list_fav.xml b/app/src/main/res/layout/drawer_list_fav.xml new file mode 100644 index 000000000..d80938d60 --- /dev/null +++ b/app/src/main/res/layout/drawer_list_fav.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_favorite_info_header.xml b/app/src/main/res/layout/item_favorite_info_header.xml deleted file mode 100644 index 76a34584f..000000000 --- a/app/src/main/res/layout/item_favorite_info_header.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - diff --git a/app/src/main/res/layout/item_favorite_info_data.xml b/app/src/main/res/layout/item_favorite_list.xml similarity index 65% rename from app/src/main/res/layout/item_favorite_info_data.xml rename to app/src/main/res/layout/item_favorite_list.xml index 54db768c8..ed6aec6a9 100644 --- a/app/src/main/res/layout/item_favorite_info_data.xml +++ b/app/src/main/res/layout/item_favorite_list.xml @@ -20,8 +20,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:paddingLeft="?attr/dialogPreferredPadding" - android:paddingRight="?attr/dialogPreferredPadding"> + android:background="?android:attr/selectableItemBackground"> + android:textAppearance="?attr/textAppearanceListItemSmall" + android:gravity="center_vertical" + android:paddingLeft="?attr/listPreferredItemPaddingLeft" + android:paddingRight="?attr/listPreferredItemPaddingRight" + android:minHeight="?attr/listPreferredItemHeightSmall" /> + android:textAppearance="?attr/textAppearanceListItemSmall" + android:gravity="center_vertical" + android:paddingLeft="?attr/listPreferredItemPaddingLeft" + android:paddingRight="?attr/listPreferredItemPaddingRight" + android:minHeight="?attr/listPreferredItemHeightSmall" /> diff --git a/app/src/main/res/menu/drawer_favorites.xml b/app/src/main/res/menu/drawer_favorites.xml index 2bd33d534..aca03a3bb 100644 --- a/app/src/main/res/menu/drawer_favorites.xml +++ b/app/src/main/res/menu/drawer_favorites.xml @@ -25,10 +25,4 @@ android:title="@string/default_favorites_collection" app:showAsAction="always"/> - - From 6cc607469b890e97656418d52163f535bc76744c Mon Sep 17 00:00:00 2001 From: onlymash Date: Tue, 3 Apr 2018 22:55:32 +0800 Subject: [PATCH 113/630] update favorites list layout --- .../main/res/layout/item_favorite_list.xml | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/app/src/main/res/layout/item_favorite_list.xml b/app/src/main/res/layout/item_favorite_list.xml index ed6aec6a9..57430da26 100644 --- a/app/src/main/res/layout/item_favorite_list.xml +++ b/app/src/main/res/layout/item_favorite_list.xml @@ -1,6 +1,6 @@ 갤러리 정보 - 클립보드에 복사되었습니다. + 클립보드에 복사했습니다. GID @@ -340,13 +340,27 @@ 적용 설정을 저장하려면 체크 표시를 누르세요. + + 사용자 지정 hosts.txt + hosts.txt + 호스트 + IP + 호스트 추가 + 추가 + 호스트 편집 + 확인 + 삭제 + 잘못된 호스트 + 잘못된 IP + 페이지 %d 저장 + 다른 이름으로 저장 북마크에 추가 메뉴 이미지 공유 - 이미지가 %s 경로에 저장됨 + 이미지를 %s 경로에 저장함 EH 로그아웃 @@ -354,7 +368,7 @@ E-Hentai 설정 E-Hentai 사이트의 설정 페이지를 엽니다. 정말 로그아웃하시겠습니까? - 로그아웃되었습니다. 로그인하려면 앱을 다시 시작하세요. + 로그아웃했습니다. 로그인하려면 앱을 다시 시작하세요. 갤러리 사이트 목록 모드 자세히 @@ -454,13 +468,18 @@ 로그캣 덤프 외부 저장소에 로그캣 저장 로그캣을 덤프하지 못했습니다. - %s 경로에 로그캣이 저장되었습니다. + %s 경로에 로그캣을 저장했습니다. 다운로드 경로 캐시 삭제 - 갤러리 다운로드 경로가 잘못되었을 때 다운로드 경로 캐시를 삭제하면 문제가 해결될 수 있습니다. + 갤러리 다운로드 경로가 잘못되었을 때 다운로드 경로 캐시를 삭제하면 문제를 해결할 수 있습니다. 다운로드 경로 캐시를 지우시겠습니까? 메모리 캐시 삭제 섬네일, 갤러리 정보 메모리 캐시 삭제 읽기 캐시 크기 + 앱 언어 (Language) + 앱 내장 hosts.txt + 앱에 내장된 호스트-IP 지정 규칙을 사용합니다.\n대신 사용자 지정 hosts.txt 파일을 사용할 수도 있습니다. + 사용자 지정 hosts.txt + 호스트 이름을 IP 주소에 지정합니다.\n앱에 내장된 규칙은 무시됩니다. 패턴 보호 패턴 보호가 설정되어 있지 않음 패턴 보호가 설정됨 @@ -487,6 +506,7 @@ 데이터 분석 정보 빌드 버전 업데이트 확인 + 업데이트 자동 확인 베타 업데이트 채널 베타 버전은 사용자의 기기에서 정상적으로 작동하지 않을 수 있습니다. @@ -503,6 +523,8 @@ 데이터를 가져올 수 없습니다. 파일을 읽을 수 없습니다. + 시스템 언어 (기본값) + 제외할 언어 모두 선택 @@ -609,4 +631,5 @@ 화면 캡처 허용 안 함 이 옵션을 켜면 이 앱에서 스크린샷을 찍을 수 없고, 멀티태스킹 화면에서 앱의 내용을 볼 수 없습니다.\n\n이 옵션을 변경하면 앱을 다시 시작해야 합니다. + 다운로드 서비스 From 2262779ba0c85945760a973fbaabf56e128c96d1 Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 10 May 2018 20:32:16 +0800 Subject: [PATCH 126/630] Close #396, fix preload pages calculation --- app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java index d8f500174..d53e00a25 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -519,7 +519,7 @@ private Object request(int index, boolean ignoreError, boolean force, boolean ad } else { size = Integer.MAX_VALUE; } - for (int i = index + 1, n = index + i + mPreloadNumber; i < n && i < size; i++) { + for (int i = index + 1, n = index + 1 + mPreloadNumber; i < n && i < size; i++) { if (STATE_NONE == getPageState(i)) { mRequestPageQueue2.add(i); } @@ -1049,6 +1049,8 @@ private boolean downloadImage(long gid, int index, String pToken, boolean force) boolean interrupt = false; boolean leakSkipHathKey = false; + Log.d("TAG", "index = " + index); + // Try twice for (int i = 0; i < 5; i++) { if (leakSkipHathKey) { From e4fc925b042e359759eb0647c54b11ee8cbc2507 Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 24 May 2018 20:11:05 +0800 Subject: [PATCH 127/630] Fix preview page estimation --- .../com/hippo/ehviewer/spider/SpiderQueen.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java index d53e00a25..ae49b7869 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -714,10 +714,13 @@ private void readPreviews(String body, int index, SpiderInfo spiderInfo) throws spiderInfo.pages = GalleryDetailParser.parsePages(body); spiderInfo.previewPages = GalleryDetailParser.parsePreviewPages(body); PreviewSet previewSet = GalleryDetailParser.parsePreviewSet(body); - if ((index >= 0 && index < spiderInfo.pages - 1) || (index == 0 && spiderInfo.pages == 1)) { - spiderInfo.previewPerPage = previewSet.size(); - } else { - spiderInfo.previewPerPage = Math.max(spiderInfo.previewPerPage, previewSet.size()); + + if (previewSet.size() > 0) { + if (index == 0) { + spiderInfo.previewPerPage = previewSet.size(); + } else { + spiderInfo.previewPerPage = previewSet.getPosition(0) / index; + } } for (int i = 0, n = previewSet.size(); i < n; i++) { @@ -763,6 +766,9 @@ private String getPTokenFromInternet(int index, EhConfig config) { } else { previewIndex = 0; } + if (spiderInfo.previewPages > 0) { + previewIndex = Math.min(previewIndex, spiderInfo.previewPages - 1); + } try { String url = EhUrl.getGalleryDetailUrl( From 6af75a9758e39c108394f38d88180efcd260d9b0 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 4 Jun 2018 11:07:40 +0800 Subject: [PATCH 128/630] 1.0.30 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 439bd630e..fbec8a5fb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.hippo.ehviewer" minSdkVersion 14 targetSdkVersion 27 - versionCode 82 - versionName "1.0.29" + versionCode 83 + versionName "1.0.30" vectorDrawables.useSupportLibrary = true resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", "es", "ja", "ko" From f870674bd22de3afa8d1ba639d211dad186e19c1 Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 5 Jun 2018 21:03:59 +0800 Subject: [PATCH 129/630] Use intent chooser when sharing --- app/src/main/java/com/hippo/util/AppHelper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/util/AppHelper.java b/app/src/main/java/com/hippo/util/AppHelper.java index 490327ca6..7c04a3109 100644 --- a/app/src/main/java/com/hippo/util/AppHelper.java +++ b/app/src/main/java/com/hippo/util/AppHelper.java @@ -58,9 +58,10 @@ public static boolean share(@NonNull Activity from, String text) { sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, text); sendIntent.setType("text/plain"); + Intent chooser = Intent.createChooser(sendIntent, from.getString(R.string.share)); try { - from.startActivity(sendIntent); + from.startActivity(chooser); return true; } catch (ActivityNotFoundException e) { Toast.makeText(from, R.string.error_cant_find_activity, Toast.LENGTH_SHORT).show(); From 6b6a60ae02eec383c957476509f2c7f136fb48d1 Mon Sep 17 00:00:00 2001 From: scese250 Date: Wed, 6 Jun 2018 21:22:49 -0400 Subject: [PATCH 130/630] Updated spanish translation Translated new options and updated some texts. Thanks for keep working in this great app!! --- app/src/main/res/values-es/strings.xml | 46 +++++++++++++++----------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 43fb20963..efcbab77e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -42,7 +42,7 @@ Little Hippo - Una cookie es una pequeña pieza de datos almacenados en el navegador web. Búsquelo si no sabe lo que es o cómo obtenerlo.\n\nIngrese cookies especiales para iniciar sesión. + Una cookie es una pequeña pieza de datos almacenados en el navegador web. Búsquelo en Google si no sabe lo qué es o cómo obtenerlo.\n\nIngrese cookies especiales para iniciar sesión. El texto está vacío Advertencia Parece que las cookies que ingresaste son incorrectas. Debe revisarlos. @@ -167,7 +167,7 @@ No se encuentra la galería - Descargas + Descargar Leer Más información @@ -196,7 +196,7 @@ Sin torrents Torrents Favorito - Sin favoritos + No en favoritos Añadir a favoritos Recordar favoritos Eliminado de favoritos @@ -265,7 +265,7 @@ Descargas - %s - Las descargas de galerías se muestran acá + Las galerías descargadas se mostrarán acá Esperando Descargando Descargado @@ -346,15 +346,17 @@ EH Cerrar sesión - Reinicie la aplicación para iniciar sesiónn + Deberás reiniciar la aplicación ¿Estás seguro de cerrar sesión? @android:string/ok - Sesión cerrada. Reinicie la aplicación para iniciar sesión + Sesión cerrada. Reinicie la aplicación para volver iniciar sesión + Configuración de EHentai + Configurar en la página de EHentai Seleccionar galería Modo lista - Detallado - Vista previa - Detalles de tamaño + Con detalles + Solo portada + Tamañp del detalle Largo Corto Tamaño de vista previa @@ -406,13 +408,13 @@ Mostrar hora Mostrar progreso Mostrar batería - Pasar páginas con tecla de volumen + Pasar páginas con tecla del volumen Pantalla completa Brillo de pantalla personalizado Brillo de la pantalla Descargas - Localización de descargas + Ruta de descargas Ruta de descarga invalida No se puede obtener ruta de descargas No puedes escribir ningún tipo de datos en tu memoria SD externa en Android 4.4+ a no ser que la hayas hakeado. Pero <SD card>/Android/data/com.hippo.ehviewer es especial, puedes escribir en ello. @@ -420,11 +422,11 @@ Document Continuar Permitir escaneo de medios - Mantenga las aplicaciones de galería fuera del alcanze de otra personas (podrán ver las galerías almacenadas) - Las aplicaciones de galería de imágenes ignoraran la ruta de descargas de galerías + Las galerías de imágenes mostrarán los doujinshis/mangas descargados. ¡Cuidado con prestar tu móvil o tablet! + Las de galería de imágenes no mostrarán los doujinshis/mangas descargados Multi-hilos al descargar Máximo de %s imágenes - Precargar Imagen + Precargar imagen Precargar las siguientes %s imágenes Resolución de la imagen %s, resoluciones mayores a 1280x podrían dar error @@ -432,15 +434,15 @@ Descargar imagen original ¡Cuidado! Podrías recibir error 509 Restaurar los elementos de descarga - Restaurar todos los elementos de descarga en la ubicación de descarga + Restaurar todos los elementos de descarga en la ruta de descarga Restaurando... No se han encontrado elementos para restaurar Restauración fallida Restauración de %d elementos completados - Borrar descargas innecesarias - Eliminar las imágenes de la galería que no se encuentran en la lista de descarga pero sí la ubicación de descarga - Sin elementos innecesarios - Borrado de redundancia completado, un total de %d elementos borrados + Borrar imágenes sobrantes + Elimina las imágenes almacenadas en la ruta de descarga que no se encuentran en la lista de descarga + Sin imágenes para borrar + Borrado de imágenes completada, un total de %d elementos borrados Avanzado Guardar contenido en HTML al analizar el error @@ -455,6 +457,7 @@ Borrar caché de memoria Borrar vistas previas, galerías, información y caché de memoria Tamaño del caché (archivos temporales) + Lenguaje de la aplicación Protección por patrón No se ha configurado la protección por patrón La protección por patrón ha sido configurado @@ -483,6 +486,7 @@ Acerca de analytics Versión de compilación Verificar actualizaciones + Verificar automáticamente actualizaciones Canal de versiones de prueba Las versiones de prueba podrían tener errores @@ -497,6 +501,7 @@ No se puede obtener el directorio de datos No se pueden encuentran datos No se puede leer el archivo + Lenguaje del sistema (Defecto) Excluir idiomas @@ -618,5 +623,8 @@ Ocurrió algo malo H@H Downloader Privacidad + Impedir capturas de pantalla + Si habilitas esta opción no podrás hacer captura de pantalla y el sistema no mostrará una previsualización en el multitareas.\n\nDeberás reiniciar la aplicación para activar esta función. + From ec2782ddad4aa38478be088ace7c99a3a1533c90 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 11 Jun 2018 21:52:40 +0800 Subject: [PATCH 131/630] Android Studio 3.1.3 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bf3dca946..4651013de 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "https://jitpack.io" } } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + classpath 'com.android.tools.build:gradle:3.1.3' classpath 'com.github.seven332:android-chinese-string-gradle-plugin:0.1.0' // NOTE: Do not place your application dependencies here; they belong From c397bd0211970b8e0d7ac29ded8d8f8e213feeb2 Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 13 Jun 2018 15:18:48 +0800 Subject: [PATCH 132/630] Close #276, save drawer view state --- .../com/hippo/ehviewer/ui/MainActivity.java | 7 ++- .../hippo/ehviewer/ui/scene/BaseScene.java | 51 ++++++++++++++++++- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index 17dc8f9bc..cd247facb 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -33,6 +33,7 @@ import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; import android.text.TextUtils; +import android.util.Log; import android.view.Gravity; import android.view.MenuItem; import android.view.View; @@ -412,10 +413,12 @@ public void onRequestPermissionsResult(int requestCode, public void onSceneViewCreated(SceneFragment scene, Bundle savedInstanceState) { super.onSceneViewCreated(scene, savedInstanceState); + Log.d("TAG", "onSceneViewCreated"); + if (scene instanceof BaseScene && mRightDrawer != null && mDrawerLayout != null) { BaseScene baseScene = (BaseScene) scene; mRightDrawer.removeAllViews(); - View drawerView = baseScene.onCreateDrawerView( + View drawerView = baseScene.createDrawerView( baseScene.getLayoutInflater2(), mRightDrawer, savedInstanceState); if (drawerView != null) { mRightDrawer.addView(drawerView); @@ -432,7 +435,7 @@ public void onSceneViewDestroyed(SceneFragment scene) { if (scene instanceof BaseScene) { BaseScene baseScene = (BaseScene) scene; - baseScene.onDestroyDrawerView(); + baseScene.destroyDrawerView(); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java index 4734f80ba..c5db36ea5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/BaseScene.java @@ -19,18 +19,20 @@ import android.content.Context; import android.content.res.Resources; import android.os.Bundle; +import android.os.Parcelable; import android.support.annotation.IdRes; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.annotation.StyleRes; import android.support.v4.app.FragmentActivity; import android.support.v4.widget.DrawerLayout; +import android.util.SparseArray; import android.view.ContextThemeWrapper; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; - import com.hippo.ehviewer.ui.MainActivity; import com.hippo.scene.SceneFragment; import com.hippo.util.AppHelper; @@ -40,8 +42,16 @@ public abstract class BaseScene extends SceneFragment { public static final int LENGTH_SHORT = 0; public static final int LENGTH_LONG = 1; + public static final String KEY_DRAWER_VIEW_STATE = + "com.hippo.ehviewer.ui.scene.BaseScene:DRAWER_VIEW_STATE"; + private Context mThemeContext; + @Nullable + private View drawerView; + @Nullable + private SparseArray drawerViewState; + public void updateAvatar() { FragmentActivity activity = getActivity(); if (activity instanceof MainActivity) { @@ -132,11 +142,39 @@ public int getNavCheckedItem() { return 0; } + public final View createDrawerView(LayoutInflater inflater, + @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + drawerView = onCreateDrawerView(inflater, container, savedInstanceState); + + if (drawerView != null) { + SparseArray saved = drawerViewState; + if (saved == null && savedInstanceState != null) { + saved = savedInstanceState.getSparseParcelableArray(KEY_DRAWER_VIEW_STATE); + } + if (saved != null) { + drawerView.restoreHierarchyState(saved); + } + } + + return drawerView; + } + public View onCreateDrawerView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return null; } + public final void destroyDrawerView() { + if (drawerView != null) { + drawerViewState = new SparseArray<>(); + drawerView.saveHierarchyState(drawerViewState); + } + + onDestroyDrawerView(); + + drawerView = null; + } + public void onDestroyDrawerView() { } @@ -222,4 +260,15 @@ public void showSoftInput(@Nullable View view) { AppHelper.showSoftInput(activity, view); } } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + + if (drawerView != null) { + drawerViewState = new SparseArray<>(); + drawerView.saveHierarchyState(drawerViewState); + outState.putSparseParcelableArray(KEY_DRAWER_VIEW_STATE, drawerViewState); + } + } } From d121e839c98705724637bcd91a686e3d0e9dc434 Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 14 Jun 2018 20:28:31 +0800 Subject: [PATCH 133/630] Close #312, read gallery link from clipboard --- .../java/com/hippo/ehviewer/Settings.java | 11 ++++ .../java/com/hippo/ehviewer/client/EhUrl.java | 17 +++++- .../com/hippo/ehviewer/ui/MainActivity.java | 57 +++++++++++++++++-- app/src/main/res/values-zh-rCN/strings.xml | 3 + app/src/main/res/values-zh-rHK/strings.xml | 3 + app/src/main/res/values-zh-rTW/strings.xml | 3 + app/src/main/res/values/strings.xml | 3 + 7 files changed, 89 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 27e9bfc33..40e9e683f 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -1100,4 +1100,15 @@ public static boolean getGuideGallery() { public static void putGuideGallery(boolean value) { putBoolean(KEY_GUIDE_GALLERY, value); } + + private static final String KEY_CLIPBOARD_TEXT = "clipboard_text"; + private static final String DEFAULT_CLIPBOARD_TEXT = ""; + + public static String getClipboardText() { + return getString(KEY_CLIPBOARD_TEXT, DEFAULT_CLIPBOARD_TEXT); + } + + public static void putClipboardText(String value) { + putString(KEY_CLIPBOARD_TEXT, value); + } } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java index 1ee8516aa..d6f2dc7cb 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java @@ -17,13 +17,13 @@ package com.hippo.ehviewer.client; import android.support.annotation.NonNull; - +import android.util.Pair; import com.hippo.ehviewer.Settings; import com.hippo.network.UrlBuilder; - import java.util.List; import java.util.ListIterator; - +import java.util.regex.Matcher; +import java.util.regex.Pattern; import okhttp3.HttpUrl; public class EhUrl { @@ -58,6 +58,8 @@ public class EhUrl { private static final String URL_PREFIX_THUMB_E = "https://ehgt.org/t/"; private static final String URL_PREFIX_THUMB_EX = "https://exhentai.org/t/"; + public static final Pattern PATTERN_DETAIL_URL = Pattern.compile("g/(\\d+)/([0-9a-f]{10})"); + public static String getGalleryDetailUrl(long gid, String token) { return getGalleryDetailUrl(gid, token, 0, false); } @@ -179,4 +181,13 @@ public static String getFixedPreviewThumbUrl(String originUrl) { return originUrl; } } + + public static Pair parseGalleryDetailUrl(String url) { + Matcher matcher = PATTERN_DETAIL_URL.matcher(url); + if (matcher.find()) { + return new Pair<>(Long.parseLong(matcher.group(1)), matcher.group(2)); + } else { + return null; + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index cd247facb..bb708a0c5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -17,6 +17,9 @@ package com.hippo.ehviewer.ui; import android.Manifest; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; @@ -33,19 +36,19 @@ import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; import android.text.TextUtils; -import android.util.Log; +import android.util.Pair; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; import android.widget.Toast; - import com.hippo.drawerlayout.DrawerLayout; import com.hippo.ehviewer.AppConfig; import com.hippo.ehviewer.Crash; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; +import com.hippo.ehviewer.client.EhUrl; import com.hippo.ehviewer.client.EhUrlOpener; import com.hippo.ehviewer.client.EhUtils; import com.hippo.ehviewer.client.data.ListUrlBuilder; @@ -83,7 +86,6 @@ import com.hippo.yorozuya.IOUtils; import com.hippo.yorozuya.ResourcesUtils; import com.hippo.yorozuya.ViewUtils; - import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -97,6 +99,7 @@ public final class MainActivity extends StageActivity private static final int REQUEST_CODE_SETTINGS = 0; private static final String KEY_NAV_CHECKED_ITEM = "nav_checked_item"; + private static final String KEY_CLIP_TEXT = "clip_text"; /*--------------- Whole life cycle @@ -114,6 +117,8 @@ public final class MainActivity extends StageActivity private int mNavCheckedItem = 0; + private String mClipText = null; + static { registerLaunchMode(SecurityScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK); registerLaunchMode(WarningScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK); @@ -367,16 +372,20 @@ private void onInit() { // Check permission PermissionRequester.request(this, Manifest.permission.WRITE_EXTERNAL_STORAGE, getString(R.string.write_rationale), PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); + + mClipText = Settings.getClipboardText(); } private void onRestore(Bundle savedInstanceState) { mNavCheckedItem = savedInstanceState.getInt(KEY_NAV_CHECKED_ITEM); + mClipText = savedInstanceState.getString(KEY_CLIP_TEXT); } @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); outState.putInt(KEY_NAV_CHECKED_ITEM, mNavCheckedItem); + outState.putString(KEY_CLIP_TEXT, mClipText); } @Override @@ -395,6 +404,46 @@ protected void onResume() { super.onResume(); setNavCheckedItem(mNavCheckedItem); + + checkClipboardUrl(); + } + + private String getTextFromClipboard() { + ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); + if (clipboard != null) { + ClipData clip = clipboard.getPrimaryClip(); + if (clip.getItemCount() > 0) { + return clip.getItemAt(0).getText().toString(); + } + } + return null; + } + + private void checkClipboardUrl() { + String text = getTextFromClipboard(); + + if (text != null && !text.equals(mClipText)) { + Pair pair = EhUrl.parseGalleryDetailUrl(text); + if (pair != null) { + long gid = pair.first; + String token = pair.second; + new AlertDialog.Builder(this) + .setTitle(R.string.clipboard_gallery_url_dialog_title) + .setMessage(R.string.clipboard_gallery_url_dialog_message) + .setNegativeButton(android.R.string.cancel, null) + .setPositiveButton(android.R.string.ok, (dialog, which) -> { + Bundle args = new Bundle(); + args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN); + args.putLong(GalleryDetailScene.KEY_GID, gid); + args.putString(GalleryDetailScene.KEY_TOKEN, token); + startScene(new Announcer(GalleryDetailScene.class).setArgs(args)); + }) + .show(); + } + } + + mClipText = text; + Settings.putClipboardText(text); } @Override @@ -413,8 +462,6 @@ public void onRequestPermissionsResult(int requestCode, public void onSceneViewCreated(SceneFragment scene, Bundle savedInstanceState) { super.onSceneViewCreated(scene, savedInstanceState); - Log.d("TAG", "onSceneViewCreated"); - if (scene instanceof BaseScene && mRightDrawer != null && mDrawerLayout != null) { BaseScene baseScene = (BaseScene) scene; mRightDrawer.removeAllViews(); diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 06f7e640d..69f8ce339 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -57,6 +57,9 @@ 正在使用移动网络 + 发现画廊 + 剪切板里有画廊链接,要不要看看? + 错误的状态码:%d 超时 未知主机 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 25eb931f4..87f818133 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -57,6 +57,9 @@ 正在使用移動網絡 + 發現畫廊 + 剪切板裏有畫廊鏈接,要不要看看? + 錯誤的狀態碼:%d 超時 未知主機 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7ab48001d..3595873de 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -57,6 +57,9 @@ 正在使用行動數據 + 發現圖庫 + 剪貼簿裡有圖庫連結,要不要看看? + 錯誤狀態碼:%d 逾時 未知的主機 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 88a2f0b63..6c7a25035 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -73,6 +73,9 @@ Connected to cellular networks + Gallery Detected + A gallery url was found in your clipboard. Check it now? + Bad Request Unauthorized Payment Required From d411623da63a167e870d702834b10216ca3f6f3a Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 21 Jun 2018 13:42:53 +0800 Subject: [PATCH 134/630] Only save the hash code of the text in the clipboard --- .../java/com/hippo/ehviewer/Settings.java | 12 ++++++------ .../com/hippo/ehviewer/ui/MainActivity.java | 19 +++++++++++-------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 40e9e683f..097d5aaff 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -1101,14 +1101,14 @@ public static void putGuideGallery(boolean value) { putBoolean(KEY_GUIDE_GALLERY, value); } - private static final String KEY_CLIPBOARD_TEXT = "clipboard_text"; - private static final String DEFAULT_CLIPBOARD_TEXT = ""; + private static final String KEY_CLIPBOARD_TEXT_HASH_CODE = "clipboard_text_hash_code"; + private static final int DEFAULT_CLIPBOARD_TEXT_HASH_CODE = 0; - public static String getClipboardText() { - return getString(KEY_CLIPBOARD_TEXT, DEFAULT_CLIPBOARD_TEXT); + public static int getClipboardTextHashCode() { + return getInt(KEY_CLIPBOARD_TEXT_HASH_CODE, DEFAULT_CLIPBOARD_TEXT_HASH_CODE); } - public static void putClipboardText(String value) { - putString(KEY_CLIPBOARD_TEXT, value); + public static void putClipboardTextHashCode(int value) { + putInt(KEY_CLIPBOARD_TEXT_HASH_CODE, value); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index bb708a0c5..4ece9b1ac 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -99,7 +99,7 @@ public final class MainActivity extends StageActivity private static final int REQUEST_CODE_SETTINGS = 0; private static final String KEY_NAV_CHECKED_ITEM = "nav_checked_item"; - private static final String KEY_CLIP_TEXT = "clip_text"; + private static final String KEY_CLIP_TEXT_HASH_CODE = "clip_text_hash_code"; /*--------------- Whole life cycle @@ -117,7 +117,7 @@ public final class MainActivity extends StageActivity private int mNavCheckedItem = 0; - private String mClipText = null; + private int mClipTextHashCode = 0; static { registerLaunchMode(SecurityScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK); @@ -373,19 +373,19 @@ private void onInit() { PermissionRequester.request(this, Manifest.permission.WRITE_EXTERNAL_STORAGE, getString(R.string.write_rationale), PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); - mClipText = Settings.getClipboardText(); + mClipTextHashCode = Settings.getClipboardTextHashCode(); } private void onRestore(Bundle savedInstanceState) { mNavCheckedItem = savedInstanceState.getInt(KEY_NAV_CHECKED_ITEM); - mClipText = savedInstanceState.getString(KEY_CLIP_TEXT); + mClipTextHashCode = savedInstanceState.getInt(KEY_CLIP_TEXT_HASH_CODE); } @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); outState.putInt(KEY_NAV_CHECKED_ITEM, mNavCheckedItem); - outState.putString(KEY_CLIP_TEXT, mClipText); + outState.putInt(KEY_CLIP_TEXT_HASH_CODE, mClipTextHashCode); } @Override @@ -421,8 +421,9 @@ private String getTextFromClipboard() { private void checkClipboardUrl() { String text = getTextFromClipboard(); + int hashCode = text != null ? text.hashCode() : 0; - if (text != null && !text.equals(mClipText)) { + if (text != null && hashCode != 0 && mClipTextHashCode != hashCode) { Pair pair = EhUrl.parseGalleryDetailUrl(text); if (pair != null) { long gid = pair.first; @@ -442,8 +443,10 @@ private void checkClipboardUrl() { } } - mClipText = text; - Settings.putClipboardText(text); + if (mClipTextHashCode != hashCode) { + mClipTextHashCode = hashCode; + Settings.putClipboardTextHashCode(hashCode); + } } @Override From 4f431bb7ead8e0a4742c5043d0adb7b45dd1501c Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 22 Jun 2018 15:37:24 +0800 Subject: [PATCH 135/630] Check ClipData null --- app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index 4ece9b1ac..d1505471b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -412,7 +412,7 @@ private String getTextFromClipboard() { ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); if (clipboard != null) { ClipData clip = clipboard.getPrimaryClip(); - if (clip.getItemCount() > 0) { + if (clip != null && clip.getItemCount() > 0) { return clip.getItemAt(0).getText().toString(); } } From 66cab7b41e42e36e99f48c68ea3db57e7a84678f Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 25 Jun 2018 13:55:49 +0800 Subject: [PATCH 136/630] Close #417, click error text to refresh --- app/build.gradle | 2 +- .../hippo/ehviewer/ui/GalleryActivity.java | 22 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fbec8a5fb..845c40f1e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -95,7 +95,7 @@ dependencies { configurations.all { resolutionStrategy { - force 'com.github.seven332:glgallery:0f276c0' + force 'com.github.seven332:glgallery:f03e2be' force 'com.github.seven332:glview-image:4c744db' force 'com.github.seven332:image:bab9b11' diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 19432379f..3cd92c3a9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -622,6 +622,16 @@ public void onTapMenuArea() { SimpleHandler.getInstance().post(task); } + @Override + public void onTapErrorText(int index) { + NotifyTask task = mNotifyTaskPool.pop(); + if (task == null) { + task = new NotifyTask(); + } + task.setData(NotifyTask.KEY_TAP_ERROR_TEXT, index); + SimpleHandler.getInstance().post(task); + } + @Override public void onLongPressPage(int index) { NotifyTask task = mNotifyTaskPool.pop(); @@ -1014,7 +1024,8 @@ private class NotifyTask implements Runnable { public static final int KEY_CURRENT_INDEX = 2; public static final int KEY_TAP_SLIDER_AREA = 3; public static final int KEY_TAP_MENU_AREA = 4; - public static final int KEY_LONG_PRESS_PAGE = 5; + public static final int KEY_TAP_ERROR_TEXT = 5; + public static final int KEY_LONG_PRESS_PAGE = 6; private int mKey; private int mValue; @@ -1047,6 +1058,12 @@ private void onTapSliderArea() { } } + private void onTapErrorText(int index) { + if (mGalleryProvider != null) { + mGalleryProvider.forceRequest(index); + } + } + private void onLongPressPage(final int index) { showPageDialog(index); } @@ -1074,6 +1091,9 @@ public void run() { case KEY_TAP_SLIDER_AREA: onTapSliderArea(); break; + case KEY_TAP_ERROR_TEXT: + onTapErrorText(mValue); + break; case KEY_LONG_PRESS_PAGE: onLongPressPage(mValue); break; From e558be2b89cc2358c74ee9b20d54bb18677e3db2 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 25 Jun 2018 14:53:33 +0800 Subject: [PATCH 137/630] Disable clipboard check if the top scene is solid --- .../com/hippo/ehviewer/ui/MainActivity.java | 33 +++++++++++++++---- .../java/com/hippo/scene/StageActivity.java | 8 +++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index d1505471b..a63f9e4c5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -85,6 +85,7 @@ import com.hippo.widget.LoadImageView; import com.hippo.yorozuya.IOUtils; import com.hippo.yorozuya.ResourcesUtils; +import com.hippo.yorozuya.SimpleHandler; import com.hippo.yorozuya.ViewUtils; import java.io.File; import java.io.FileOutputStream; @@ -408,18 +409,38 @@ protected void onResume() { checkClipboardUrl(); } + @Override + protected void onTransactScene() { + super.onTransactScene(); + + checkClipboardUrl(); + } + + private void checkClipboardUrl() { + SimpleHandler.getInstance().postDelayed(() -> { + if (!isSolid()) { + checkClipboardUrlInternal(); + } + }, 300); + } + + private boolean isSolid() { + Class topClass = getTopSceneClass(); + return topClass == null || SolidScene.class.isAssignableFrom(topClass); + } + private String getTextFromClipboard() { ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); - if (clipboard != null) { - ClipData clip = clipboard.getPrimaryClip(); - if (clip != null && clip.getItemCount() > 0) { - return clip.getItemAt(0).getText().toString(); - } + if (clipboard != null) { + ClipData clip = clipboard.getPrimaryClip(); + if (clip != null && clip.getItemCount() > 0) { + return clip.getItemAt(0).getText().toString(); } + } return null; } - private void checkClipboardUrl() { + private void checkClipboardUrlInternal() { String text = getTextFromClipboard(); int hashCode = text != null ? text.hashCode() : 0; diff --git a/app/src/main/java/com/hippo/scene/StageActivity.java b/app/src/main/java/com/hippo/scene/StageActivity.java index ff4f6b889..d673b6989 100644 --- a/app/src/main/java/com/hippo/scene/StageActivity.java +++ b/app/src/main/java/com/hippo/scene/StageActivity.java @@ -231,6 +231,9 @@ protected void onRegister(int id) { protected void onUnregister() { } + protected void onTransactScene() { + } + public int getStageId() { return mStageId; } @@ -311,6 +314,7 @@ public void startScene(Announcer announcer) { // Commit transaction.commitAllowingStateLoss(); + onTransactScene(); // New arguments if (args != null && fragment instanceof SceneFragment) { @@ -384,6 +388,7 @@ public void startScene(Announcer announcer) { // Commit transaction.commitAllowingStateLoss(); + onTransactScene(); // Check request if (announcer.requestFrom != null) { @@ -460,6 +465,7 @@ public void startSceneFirstly(Announcer announcer) { // Commit transaction.commitAllowingStateLoss(); + onTransactScene(); if (!createNewScene && args != null) { // TODO Call onNewArguments when view created ? @@ -538,6 +544,7 @@ private void finishScene(String tag, TransitionHelper transitionHelper) { } transaction.remove(scene); transaction.commitAllowingStateLoss(); + onTransactScene(); // Remove tag mSceneTagList.remove(index); @@ -562,6 +569,7 @@ public void refreshTopScene() { transaction.detach(fragment); transaction.attach(fragment); transaction.commitAllowingStateLoss(); + onTransactScene(); } @Override From d56f86b47ef1f75a59b4bec682707e393b082463 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 2 Jul 2018 19:25:25 +0800 Subject: [PATCH 138/630] Show password toggle --- app/src/main/res/layout/scene_login.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/layout/scene_login.xml b/app/src/main/res/layout/scene_login.xml index 619a186ac..bbfe7447d 100644 --- a/app/src/main/res/layout/scene_login.xml +++ b/app/src/main/res/layout/scene_login.xml @@ -17,6 +17,7 @@ @@ -64,7 +65,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" - android:minWidth="@dimen/single_max_width"> + android:minWidth="@dimen/single_max_width" + app:passwordToggleEnabled="true"> Date: Wed, 11 Jul 2018 11:07:46 +0800 Subject: [PATCH 139/630] Correct errors and update Japanese translation --- app/src/main/res/values-ja/strings.xml | 394 +++++++++++++------------ 1 file changed, 210 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 27506b89f..3880708b8 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -28,9 +28,9 @@ ユーザー名 パスワード - 検証コード(必要ではない) + 認証コード(オプショナル) - こちらにクリック + ここをクリック ロード中… 失敗 @@ -40,31 +40,31 @@ Cookieでログイン ニックネームを入力 ニックネーム - ニックネームが空 + ニックネームを入力してください ログインしてください Little Hippo - Cookieは、ブラウザに格納された小さなデータです。Cookie及びその入手方法がかわからない場合は、Webで検索してください。\n\n特定のCookieを入力することでログインしてください。 - テキストが空 + Cookiesはブラウザに保存した特殊なデータです。よくわからない場合はGoogleで検索してください。\n\nCookiesを入力してログインしてください。 + テキストを入力してください 警告 - あなたが入力したCookieは間違っているようです。チェックしてください。 - 正しいです - 間違っています - 古いCookieを探す + 入力したCookieは正しくないようです。確認してください。 + はい + 再試行 + Cookieが見つかりました - ダウンロードパスは利用できません。ダウンロードパスをリセットしてください。 + ダウンロードパスは現在利用できません。ダウンロードパスを設定してください。 - モバイルネットワークを使用中です。 + モバイルネットワークに接続しています - 間違ったステータスコード:%d + 無効なステータスコード:%d タイムアウト - 未知ホスト + 不明なホスト リダイレクトが多すぎます ネットワークエラー - 未知なエラー + 不明なエラー アクティビティが見つかりません。 - リンクを分析できません。 + リンクを解析できません。 フォルダが見つかりません。 プロバイダが見つかりません。 デコードに失敗しました。 @@ -77,36 +77,36 @@ 分析に失敗しました。 509 無効なリンクです。 - pToken取得に失敗しました。 - 指定ギャラリーのキーワードは、例えば「618395 0439fa3666」のようになるはずです。 - 一時ファイルを作成できません。 - 画像を保存できません。 - 無効な数字です。 + pTokenの取得に失敗しました。 + ギャラリーのキーワードのフォーマット:「618395 0439fa3666」 + 臨時ファイルを作成できませんでした + 画像を保存できませんでした + 無効な数字です - このアプリの内容はインターネットからのもので、内容によっては生理や心理に回復不能な損害を与える可能性があります。。このアプリの作成者は、このアプリケーションによって引き起こされるいかなる結果に対しても責任を負いません。 + このアプリの内容はインターネットから取得したものです。その内容の一部は使用者のお体や心理に傷つける恐れがあります。それでも続行しますか? ユーザー名を入力してください。 パスワードを入力してください。 - ログインをスキップします。 + ログインをスキップ ログインに失敗しました。 これはウェブサイトのアップデートによって引き起こされることかもしれず、またおかしいことが起こったかもしれません。ログインボタンの下でWebでログインするか、Cookieを入力するか、あるいはログインをスキップします。ログインをスキップするでアプリが正常に使用できなくなることがあります。0.6.xバージョンでログインした場合は、「Cookieでログイン」を選択することが推奨です。 - もう一度押して終了 + もう一度押して終了します クリックしてもう一度試す - EhViewerはギャラリーをダウンロードするためにデバイスのストレージへのアクセスを要求します。あなたは許可しますか? + EhViewerはギャラリーをダウンロードするためのWRITE_EXTERNAL_STORAGE権限を請求します。許可してもらえないでしょうか? 痛い - あなたは、開発者があなたのデバイスや使用状況に関する情報を収集できるように同意しますか?これは開発にとって大きな助けになります。<br><br>データ統計サービスはGoogleアナリティクスによって提供で、 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a> にプライバシーポリシーを閲覧できます。<br><br>データ統計に参加することに同意すると、Android APIのバージョン、デバイスモデル、言語の場所、アプリのバージョン番号、セッションの長さ、使用するアプリの数など、デバイス情報とアプリの使用状況が記録されます。開発者は、電話番号、電子メールアドレス、IMEIの情報は記録しないことを約束します。<br><br>統計に参加することに同意するまで、あなたの情報は記録されません。<br><br>記録されたデータはGoogleアナリティクスで分析され、分析レポートはアプリ開発者のみがアクセスできます。 + ご使用のデバイスの情報やこのアプリの利用情報を収集するように同意しますか?収集情報はアプリ向上のために使用されます。<br><br>データ分析サービスはGoogleアナリティクスによって提供されます。 <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a>にプライバシーポリシーをご覧ください。<br><br>アプリ利用情報収集に参加すると、Android APIバージョン、デバイスモデル、言語、地域、アプリバージョンや、セッション時間などの情報は収集されます。開発者は、電話番号、電子メールアドレス、IMEI情報などを記録しないことを保証します。<br><br>同意しない限り、データは収集されません。<br><br>送信されたデータはGoogleアナリティクスで分析され、分析レポートにはこのアプリ開発者しかアクセスできません。 了解 - 認める - 断る + 同意 + 拒否 - 設定->アプリについて->ヘルプ + 設定->このアプリについて->ヘルプ 送信 - 前回のアプリがクラッシュしました。エラーログを開発者に送信して、今後のユーザーエクスペリエンスを向上させますか?(Eメール送信) + アプリはクラッシュしました。エラーログを開発者に送信して、今後のユーザー体験を向上させるようお手伝いしてもらえますか?(Eメール送信) - どのギャラリーサイトを選択しますか? - e-hentai:誰にでも開ける\nexhentai:ログインしたユーザーにのみ開ける + ギャラリーサイトを選択してください + e-hentai:誰にも公開です\nexhentai:ログインしないとアクセスできません サイトを選択してください @@ -143,7 +143,7 @@ 低希望タグを検索 低評価タグを検索 削除されたギャラリーを表示 - 最低採点: + 評価の下限: 画像を選択 類似検索を使用 @@ -170,13 +170,14 @@ ページ%1$d、合計%2$dページ - 星2 - 星3 - 星4 - 星5 + + 2つ星 + 3つ星 + 4つ星 + 5つ星 - ギャラリーを見つけることが出来ませんでした。 + ギャラリーが見つかりませんでした ダウンロード 閲覧 詳細情報を見る @@ -187,7 +188,7 @@ %1$s (%2$.2f, %3$d) お気に入り トレント (%d) - シェア + 共有 評価 類似のギャラリー カバーを検索 @@ -200,8 +201,8 @@ 他のプレビューを見る リフレッシュ 他のアプリケーションで開く - 評価成功 - 評価失敗 + 評価しました + 評価できませんでした トレントなし トレント 追加済み @@ -257,19 +258,19 @@ ギャラリーコメント コメントはまだありません。 - コメントに成功しました。 + コメントを送信しました。 コメントに失敗しました。 コメントをコピーしました。 賛成 賛成を取り消す 反対 反対を取り消す - 賛成しました。 - 賛成を取り消しました。 + いいね!しました。 + いいね!を取り消しました。 反対しました。 - 反対を取り消しました。 - 投票失敗 - 投票状況を見る + 反対を消しました。 + 評価に失敗しました + 評価詳細を表示 ギャラリープレビュー @@ -277,70 +278,68 @@ ダウンロード - %s - ここがダウンロード情報 - 起動してない - 待っている + ダウンロードタスクはここに表示されます + 一時停止中 + 待機中 ダウンロード中 - ダウンロードした - ダウンロード失敗 + ダウンロード済み + ダウンロードエラー %d 未完成 - 完成した - 509警告 - 画像クオータが使い果たされました。ダウンロードをやめて休んでください。 - ダウンロード終了 - %dつダウンロード成功 - %dつダウンロード失敗 - %1$dつダウンロード成功,%2$dつダウンロード失敗 - ダウンロード成功:%s + 完成済み + 509エラー + ダウンロード制限に達しました。しばらくしてからもう一度やり直してください。 + ダウンロード完了 + %d件のダウンロード完了済み + %d件のダウンロードにし失敗しました + %1$d件のダウンロード完了済み、%2$d件に失敗 + ダウンロード完了:%s ダウンロード失敗:%s ダウンロードを削除 - ダウンロードリストから%sを削除? - ダウンロードリストから%dつを削除? + ダウンロードリストから%sを削除しますか? + ダウンロードリストから%d件のタスクを削除しますか? 画像ファイルを削除 - 全部停止 + すべて停止 ラベル - デフォルト 移動 ダウンロードラベル - 全部开始 - 全部停止 + すべて開始 + すべて停止 EhViewerダウンロードサービス %s - %1$s,残り%2$s - ダウンロードラベルを覚える - デフォルトダウンロードラベル - ダウンロードリストに追加した + %1$s、残り%2$s + ダウンロードラベルを記憶 + 既定ダウンロードラベル + ダウンロードリストに追加しました ここがダウンロードラベル 追加 新ラベル - ラベルテキストが空 - 「デフォルト」は無効ラベル - ラベルは既に存在 + ラベルテキストを入力してください + 「デフォルト」は無効なラベルです + ラベルは既に存在しています ラベルの名前を変更 ラベルを削除 - 「%s」を削除? + 「%s」を削除しますか? - ここが閲覧履歴 - 全部クリア - すべての閲覧履歴をクリアしますか? + 閲覧履歴はここに表示されます + すべてクリア + 閲覧履歴をすべて削除しますか? フィルター - ここがフィルターリスト タイトル - アップローダー + アップローダ タグ - タグセット - タイトルフィルター「%s」を削除? - アップローダーフィルター「%s」を削除? - タグフィルター「%s」を削除? - フィルター「%s」を削除? - 提示 + タグの名前空間 + タイトルフィルター「%s」を削除しますか? + アップローダ フィルター「%s」を削除しますか? + タグ フィルター「%s」を削除しますか? + フィルター「%s」を削除しますか? + ヒント フィルターを追加 - 定義を確認 + ヘルプを表示 フィルターテキスト タイトルフィルター:このキーワードがタイトルに含むギャラリーを除外します。\n\nアップローダー:このアップローダーがアップロードしたギャラリーを除外します。\n\nタグフィルター:このタグを含むギャラリーを除外します。ギャラリーリストを取得する時間が長くなります。\n\nタグセットフィルター:このタグセットを含むギャラリーを除外します。ギャラリーリストを取得する時間が長くなります。 @@ -348,11 +347,11 @@ パターン保護を設定 パターンを描いてパターン保護を設定する\n空白のままパターン保護を解除する 設定 - 指紋でのロック解除を許可する + 指紋でロックを解除 EHentaiの設定 - 応用 + 適用 右上隅のチェックマークをクリックして設定を保存します。 @@ -362,17 +361,17 @@ 保存 ブックマークに追加 メニュー - 画像をシェア + 画像を共有 画像は%sに保存された EH ログアウト - ログアウト後にアプリを再起動して、再度ログインします。 + ログアウト後にアプリを再起動して、もう一度ログインしてください。 本当にログアウトしますか? ログアウトします ログアウトしました。アプリを再起動することで再度ログインします。 - EHentai設定 + EHentaiの設定 EHentaiサイト上の設定 ギャラリーサイト リストモード @@ -386,7 +385,7 @@ サムネイル解像度 - %s。解像度を指定すると、サムネイルを取得できない場合があります + %s。解像度を正しく設定しないと、サムネイルを取得できない場合があります 自動 サムネイルリンクを修正 ホームページをカテゴリ表示 @@ -395,12 +394,12 @@ 指定したタグセットをデフォルト検索から除外 言語を除外 指定した言語のギャラリーをホームページと検索から隠す - H@H + H@H プロキシ %1$s %2$s:%3$d 未設定 日本語タイトルを表示 - 日本語タイトルを表示してみます。これにより、ギャラリーリストを取得する時間が長くなります - デフォルトのタイトルを表示します。通常は英語 + 日本語タイトルを表示しようとします。有効にすると、ギャラリーリストを取得するのにもっと時間がかかることがあります + デフォルトのタイトルを表示します。多くの場合は英語のタイトルです。 フィルター タイトル、アップローダ、タグ、タグセットをフィルター モバイルネットワーク警告 @@ -416,108 +415,103 @@ 上から下へ ページのズーム 元のサイズ - 幅に合わせ - 長さに合わせ - スクリーンに合わせ - 固定ズーム + 幅に合わせる + 長さに合わせる + スクリーンに合わせる + 固定したスケール ページを開く位置 左上隅 右上隅 左下隅 右下隅 中心 - 画面を常に明るい + 画面を常にオン 時計を表示 進捗を表示 - 電量を表示 - ページ間隔を表示 + バッテリー残量を表示 + ページ間の余白を表示 ボリュームキーでページをめくる フルスクリーン - スクリーンの明るさをカスタムに - スクリーンの明るさ + 画面の明るさを設定 + 画面の明るさ ダウンロード ダウンロードパス 無効なダウンロードパス ダウンロードパスを取得できない - おかしいことをしない限り、KitKatの外部SDカードにデータを書き込むことはできません。ただし、<SD card>/Android/data/com.hippo.ehviewerこのパスは特殊なものであり、書き込むことができます。 - Lollipopは外部SDカードに書き込むために新しいAPIを提供しました。ダウンロードパスを外部SDカードに設定したい場合は、「ドキュメント」ボタンをクリックしてください + Lollipopは外部SDカードに書き込むための新しいAPIを提供しました。ダウンロードパスを外部SDカードに設定するには、「ドキュメント」をタップしてください ドキュメント - 続く + 続行 ダウンロードスレッド数 同時に最大%s枚の画像をダウンロードできる - 画像をプリロード - %s枚の画像を後ろへプリロード + 画像を事前にロード + %s枚の画像を事前にロードします 画像解像度 - %s。1280xを超える解像度は良くない場合があります + 現在は%sです。1280xを超える解像度は不安定です 自動 - 元の画像をダウンロード - これは危険です!これを確認すると、ダウンロードクォータが急激に失われます + オリジナル画像をダウンロード メディアスキャンを許可 - あなたのギャラリーアプリを他の人から避けてください - ほとんどのギャラリーアプリはダウンロードディレクトリの写真を表示しません - ダウンロードを復元 - ダウンロードディレクトリのすべてを復元 + この場合はギャラリーアプリは他人に見せないほうがいいでしょう + ダウンロードタスクを復元 + ダウンロードディレクトリのダウンロードタスクを復元 復元中 - 復元可能なダウンロードが見つからない - 復元失敗 - %sつ復元成功 - ダウンロードリダンダンシーを整理 - ダウンロードリストにない画像ファイルをダウンロードディレクトリから整理 - リダンダンシーが見つからない - ダンダンシー整理完成、%dつ - - 詳細 - 解析失敗したときにページ内容を保存 - ページ内容にプライバシーに関する機密情報が含まれるかもしれない + 復元可能なダウンロードが見つかりません + 復元できませんでした + %s件のタスクが復元されました + ダウンロードフォルダの不要なファイルを整理 + ダウンロードディレクトリからダウンロードタスクにない画像ファイルを削除します + 不要なファイルが見つかりませんでした + %d件のファイルを削除しました + + その他の設定 + 解析に失敗時、HTMLファイルを保存 + HTMLファイルに個人情報がある可能性はあります ログをエクスポート - ログを外部メモリーにエクスポート - ログをエクスポート失敗 - ログを%sにエクスポートした + ログを外部ストレージに保存 + ログをエクスポートできませんでした + ログを%sにエクスポートしました ギャラリーのダウンロードパスキャッシュをクリア - ギャラリーのダウンロードパスが間違っているかもしれず、再ダウンロードにつながりました。ギャラリーのダウンロードパスキャッシュをクリアすると、この問題が解決できるかもしれません。 ギャラリーのダウンロードパスキャッシュをクリア? - メモリキャッシュを整理 - サムネイル、ギャラリー情報のメモリキャッシュを整理 - 閲覧キャッシュサイズ - パターン保護 - パターン保護は未設定 - パターン保護は設定した + メモリキャッシュをクリア + サムネイルとギャラリー情報のメモリキャッシュをクリア + 閲覧キャッシュのサイズ + パターンロック + パターンロックは設定されていません + パターン保護は設定済みです データをエクスポート - データを外部メモリーにエクスポートする、例えダウンロードリスト、クイック検索リストなど + ダウンロードリストやクイック検索などのデータを外部ストレージにエクスポートします データを%sにエクスポート - データをエクスポート失敗 + データをエクスポートできませんでした データをインポート - 外部メモリーからインポート - データをインポート成功 + 外部ストレージからインポート + データをインポートしました - アプリについて - 作成者 + このアプリについて + 開発者 Google+コミュニティ サイト ソース - 更新ログ ヘルプ オープンソースライセンス - EhViewerの誕生は、多くのオープンソースプロジェクトから切り離すことができません + いろんなオープンソースプロジェクトなしで、EhViewerが生まれることはありません。 寄付 - Alipay: seven332$163.com - あなたの寄付はより多くのより良いアプリの開発に役立ちます。\n\nAlipay: seven332$163.com - メールアドレスがクリップボードにコピーされた - データ統計を起用 + Alipay:seven332$163.com + ご寄付ありがとうございます。これからもいろんなアプリの開発を進めさせていただきます。\n\nAlipay:seven332$163.com + メールアドレスがクリップボードにコピーされました + データ統計を有効化 データ統計について バージョン番号 アップデートを確認 - ベータ版をアップデート - ベータ版ではデバイスに予期しないエラーが発生することがあります + ベータ版にアップデート + ベータ版では予期せぬエラーが発生することがあります 言語を除外 すべて選択 すべてキャンセル - 选択范囲を反転 + 選択を反転 言語 - 原作 + オリジナル 翻訳 書き換え 日本語 @@ -536,67 +530,66 @@ タイ語 ベトナム語 N/A - + その他 - 待ってください + お待ちください - 起用 - 起用した - 未起用 + 有効化 + 有効化済み + 無効 IP ポート パスキー ドメイン名はサポートしない 無効なポート - データフォルダを取得できない - データが見つからない - ファイルを読み取れない + データフォルダを取得できませんでした + データが見つかりません + ファイルを読み取れませんでした オープンソースライセンス フォルダを選択 - このフォルダは書き込めない + このフォルダは書き込められません - クラウドの気に入り - ローカルの気に入り + Cloudのお気に入り + ローカルのお気に入り %sを検索 %s %1$s - %2$s - 気に入りを削除 - %dつの気に入りを削除? - 気に入りを移動 - デフォルト気に入り - 私で選ぶ - 気に入り情報 - 気に入りコレクション + お気に入りから削除 + %d件の項目をお気に入りリストから削除します? + お気に入りを移動 + 既定お気に入り + 手動で選択 + お気に入り情報 + お気に入りコレクション 数量 ログインが必要 - 激しいプレイで壊れた + エラーが発生しました クイック検索 - 右からスワイプしてクイック検索パネルを開く - 気に入りコレクション - 右からスワイプして気に入りコレクションを選ぶ + 右からスワイプすると、クイック検索パネルが開きます + お気に入りリスト + 右からスワイプすると、お気に入りリストを選べます ダウンロードラベル - 右からスワイプしてダウンロードラベルパネルを開く + 右からスワイプすると、ダウンロードラベルパネルが開きます ギャラリーの詳細 - サムネイルをクリックしてギャラリーの詳細を表示 + サムネイルをクリックすると、ギャラリー詳細を表示します ページをめくる ページをめくる メニュー プログレスバー - 長く押すとページメニューが開く 未来から - ちょうど今 + ただ今 %d分前 @@ -622,13 +615,46 @@ H@Hからダウンロード - 圧縮パッケージはない - 圧縮パッケージのダウンロードを開始する - 圧縮パッケージをダウンロードできない + 圧縮パッケージなし + 圧縮パッケージのダウンロードを開始しました + 圧縮パッケージをダウンロードできませんでした 圧縮パッケージ - 圧縮パッケージのダウンロードはH@Hのクライアントが必要 + 圧縮パッケージのダウンロードにはH@Hのクライアントが必要です プライバシー - スクリーンキャプチャは許可しない - 有効にすると、アプリのスクリーンショットはキャプチャされず、アプリのコンテンツプレビューはシステムタスクスイッチャーに表示されません\n\nこの変更を適用するにはアプリを再起動することが必要 + スクリーンキャプチャを防ぐ + 有効にすると、アプリの画面をキャプチャーできなくなり、アプリの内容も最近のアプリリストに表示されません。\n\n変更を適用するには、アプリを再起動してください。 + デフォルト + フィルターはここに表示されます + デバイスをroot化してパッチを適用しないと、Android 4.4以降では外部SDカードへ書き込めません。が、SDカード/Android/data/com.hippo.ehviewerは例外で書き込めます。 + ほとんどのギャラリーアプリはダウンロードパスの内容を表示しません + 有効にすると、ダウンロード制限にもっとはやく達する恐れがあります + ギャラリー ダウンロード パスは無効なようで、もう一度ダウンロードする必要があります。ダウンロードパスのキャッシュをクリアしてみてください。 + ギャラリーリンクが発見されました + クリップボードにあるギャラリーにアクセスしますか? + 名前を付けて保存 + アプリ言語(Language) + カスタムhosts.txt + hosts.txt + ホスト + IP + ホストを追加 + 追加 + ホストを編集 + 適用 + 削除 + 無効なホストです + 無効なIPです + 既定hosts.txt + メニューを呼び出すには、長押ししてください + 2つ星 + 4つ星 + 変更履歴 + システム言語(既定) + Telegram + アップデートを自動で確認 + ダウンロードサービス + ホストをアプリ既定のIPにマッピング\nカスタムhosts.txtに上書きされます + カスタムhosts.txt + ホスト名をIPにマッピング\n既定のhosts.txtを上書きできます From b57abfdc57b65913d9c2edcf7de59aa57683b9fb Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 11:08:40 +0800 Subject: [PATCH 140/630] Add French and German translations --- app/src/main/res/values-de/strings.xml | 511 +++++++++++++++++++ app/src/main/res/values-fr/strings.xml | 663 +++++++++++++++++++++++++ 2 files changed, 1174 insertions(+) create mode 100644 app/src/main/res/values-de/strings.xml create mode 100644 app/src/main/res/values-fr/strings.xml diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml new file mode 100644 index 000000000..e56adf938 --- /dev/null +++ b/app/src/main/res/values-de/strings.xml @@ -0,0 +1,511 @@ + + + EhViewer + Startseite + Beliebt + Lesezeichen + Verlauf + Downloads + Einstellungen + Benutzername + Kennwort + Recaptcha (nicht erforderlich) + Tippe hier + Lädt … + Gescheitert + Anmelden + Konto erstellen + Mit WebView anmelden + Mit die Cookies anmelden + Spitzname eingeben + Spitzname + Spitzname wird nicht eingegeben + Melde dich zunächst an + Kleines Nilpferd + Die Cookies speichern in Browser deine Informationen. Falls du nicht wisst, was die Cookie sind, suche im Internet darüber. + Der Text wird nicht eingegeben + Achtung + Die eingegebene Cookies sehen korrekt nicht aus. Überprüfe sie. + In Ordnung! + Sie sind absolut korrekt! + Cookies werden gefunden + Der Downloadspfad ist nicht verfügbar. Geh zu die Einstellungen und stelle einen neue Pfad fest, + Verbunden zu die mobile Daten. + Inkorrekter Statuscode: %d + Timeout + Unbekannter Hostcomputer + Zu viele Umleitungen + Netwerkfehler + Unbekannter Fehler + Die Application wurde nicht gefunden + Die URL konnte analysiert nicht werden + Der Ordnerpfad ist ungültig + Keiner Anbieter + Dekodierung fehlgeschlagen + Nicht gefunden + Leer + Die ZIP Datei wurde nicht gefunden + Lesefehler + Außer Reichweite + Schreibfehler + Analyzierungfehler + 509 + URL ungültig + Fehler beim Erhalten pTokens + Das Schlüsselwort müsste wie 618395 0439fa3666 aussehen, um eine Galerie zu specifieren + Die Temporäre Datei konnte erstellt nicht werden + Das Bild konnte gespeichert nicht werden + Nummer ungültig + Darf der Entwickler die Informationen deines Geräts und deiner Nutzung einsammeln? Diese Informationen sind für die Entwicklung sehr nützlich.<br><br>Daten-Analyse ist von Google Analytics zur Verfügung gestellt, dessen Datenschutz-Bestimmungen auf <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a>verfügbar sind.<br><br>Wenn du die Daten-Analyse teilnimmst, werden Informationen deines Geräts und deiner Nutzung, z. B. die Android API-Version, das Gerätsmodell, die Sprache, die App-Version, die Sessionszeit, eingesammelt. Der Entwickler verspricht, dass private Informationen wie deine Telefonnummer, deine E-Mail-Adresse, die IMEI usw., eingesammelt nicht werden.<br><br>Falls du die Daten-Analyse nicht teilnimmst, wird keine Information eingesammelt.<br><br>Die eingesammelten Informationen werden von Google Analytics analysiert. Nur der Entwickler kann auf den Analyse-Bericht zugreifen. + Verstanden + Akzeptieren + Ablehnen + Einstellungen->Über die App->Hilfe + Senden + Die App ist abgestürzt letztes Mal. Möchtest du das Fehlerprotokoll an den Entwickler per E-Mail senden, um ihm dabei zu helfen, die App zu verbessern? + Wähle eine Galerie-Webseite aus. + e-hentai: für jeden verfügbar\nexhentai: nur für diejenigen verfügbar, die sich angemeldet haben + Wähle eine Webseite aus. + Update + Version: %1$s\nGröße: %2$s\n\n%3$s + EhViewer ist auf dem neusten Stand. + ExHentai durchsuchen + E-Hentai durchsuchen + Die Welt ist so groß und der Panda sitzt ganz allein + Suchen + "Suche nach das Schlüsselwort " + Suche nach ein Bild + Normale Suche + Erweiterte Optionen + Suche nach ein Bild + Normale Suche + Einen Uploader spezifizieren + Ein Etikett spezifizieren + Eine Galerie spezifizieren + Erweitere Optionen aktivieren + Nach Galerie suchen + Nach Galerie-Etikett suchen + Nach Galeriebeschreibungen suchen + Nach Torrentdateien suchen + Nur die Galerien mit Torrentdateien anzeigen + Nach unwichtige Etiketten suchen + Nach unerwünschte Etiketten suchen + Gelöschte Galerien anzeigen + Mindestpunktzahl: + Bild wählen + Ähnlichkeitscan aktivieren + Nur nach Umschläge suchen + Die gelöschte Galerien anzeigen + Wähle ein Bild + Zu den Favoriten hinzufügen + Sofortsuche + Tippe an +, um eine Sofortsuche hinzuzufügen + Sofortsuche hinzufügen + Gib den Name ein + Löschen + Sofortsuche löschen + %s löschen? + Deine Sofortsuchen werden hier angezeigt + Das Suchergebnis wird als eine Sofortsuche gespeichert. Suche etwas zuerst, um das Ergebnis zu speichern. + README + Die Bildsuchen können als Sofortsuchen gespeichert nicht werden. + Eine Sofortsuche, deren Name ist %s, bereits besteht. + Dieser Name ist bereits besetzt. + Seite %1$d, insgesamt %2$d Seiten + 2 Sterne + 3 Sterne + 4 Sterne + 5 Sterne + Die Galerie konnte gefunden nicht werden + Herunterladen + Lesen + Weitere Informationen + Favoriten + Teilen + Bewerten + Ähnlich + Nach den Umschlag suchen + Kein Etikett + Kein Kommentar + Keine weitere Kommentare + Weitere Kommentare + Keine Vorschau + Keine weitere Vorschauen + Weitere Vorschauen + Aktualisieren + Öffnen mit … + Bewertung erfolgreich + Bewertung fehlgeschlagen + Keine Torrentdatei + Torrentdateien + Zu Favoriten hinzugefügt + Nicht zu Favoriten hinzugefügt + Zu Favoriten hinzufügen + Favoritenansammlung merken + Zu Favoriten hinzugefügt + Aus Favoriten entfernt + Fehler beim Hinzufügen zu Favoriten + Fehler beim Entfernen aus Favoriten + Den Uploader zu die Filterliste hinzufügen? + Der Filter wurde hinzugefügt + EIN MEISTERSTÜCK + WUNDERVOLL + SEHR GUT + GUT + NICHT SCHLECHT + MÄßIG + SCHLECHT + SCHRECKLICH + PEINLICH + UNERTRÄGLICH + KATASTROPHE + Galeriesinfomationen + Text in Zwischenablage kopiert + Schlüssel + Wert + Gid + Token + URL + Titel + Japanischer Titel + Vorschau + Kategorie + Uploader + Hochladungsdatum + Elternteil + Sichtbar? + Sprache + Seiten + Größe + Zahl der Hzfg zu Fav. + Zu Fav. hinzugefügt + Zahl der Bewertungen + Bewertung + Zahl der Torrents + URL des Torrentdateis + ♥ %d + %1$s (%2$.2f, %3$d) + Kommentare der Galerie + Keine Kommentare + Kommentar erfolgreich gesendet + Kommentar nicht gesendet + Inhant des Kommentars kopieren + Für den Kommentar stimmen + Positive Stimmung abbrechen + Gegen den Kommentar stimmen + Negative Stimmung abbrechen + Positive Stimmung erfolgreich gesendet + Die negative Stimmung wurde abgebrochen + Negative Stimmung erfolgreich gesendet + Die negative Stimmung wurde abgebrochen + Stimmung gescheitert + Details der Stimmungen anzeigen + Vorschauen der Galerie + Gehen zu + Download - %s + Downloads werden hier angezeigt + Pausiert + In der Warteschlange + Download läuft + Abgeschlossen + Gescheitert + %d wurde noch nicht abgeschlossen + Abgeschlossen + 509 Fehler + Die Genze der Downloads wurde erreichet. Versuche noch einmals später, + Download abgeschlossen + %d Download(s) wurde(n) abgeschlossen + %d Download(s) gescheitert + %1$d erfolgreich abgeschlossen, %2$d gescheitert + Abgeschlossen: %s + Gescheitert: %s + Download entfernen + %s von der Downloadliste entfernen? + %d Downloads von der Downloadliste entfernen? + Bilddateien löschen + Alle stopppen + Etikette + Standard + "Verschieben " + Download-Etikette + Alle starten + Alle stoppen + EhViewer-Download-Dienst + %s + %1$s, noch %2$s übrig + Download-Etikette merken + Standard-Download-Etikette + Zu Download-Liste hinzugefügt + Download-Etikette werden hier angezeigt + Hinzufügen + Neue Etikette + Inhalt der Etikette erforderlich + \"Standard\" ist keine valide Etikett + Sie bereits besteht + Etikett umbenennen + Etikett löschen + %s löschen? + Deiner Lesungsverlauf wird hier angezeigt. + Verlaufdaten löschen + Verlaufdaten löschen? + Filter + Filter werden hier angezeigt + Titel + Uploader + Etikett + Namensraum der Etikett + Titelfilter %s löschen? + Uploaderfilter %s löschen? + Etikettfilter %s löschen? + Filter %s löschen? + Hinweis + Filter erstellen + Definition anzeigen + Filtertext + Link der Galerie erkennt + Ein Link der Galerie wird von deiner Zwischenablage erkennt. Möchtest du es zugreifen? + Normale Suche: Nur durchsuchen.\n\nUploader spezifizieren: Die Galerie, die vom Uploader hochgeladen ist, auflisten. Andere Optionen werden ignoriert.\n\nEtikett spezifizieren: Die Galerie, die das Etikett hat, auflisten. Nur ein Etikett kann eingegeben werden. Andere Optionen werden ignoriert.\n\nGalerie spezifizieren: Zur Galerie gehen. Andere Optionen werden ignoriert. + Titelfilter: die Galerie, deren Titel das Wort enthalten, ausschließen.\n\nUploaderfilter: Die vom Uploader hochgeladen Galerie ausschließen.\n\nEtikettfilter: Die Galerie, die die Etikett haben, ausschließen. Es wird länger dauern, Galerieliste zu laden.\n\nEtikettnamensraumfilter: Die Galerie, die den Etikettnamensraum haben, ausschließen. Es wird länger dauern, Galerieliste zu laden. + Sperrmuster festlegen + Zeichne ein Muster, um es als Sperrmuster festzulegen.\nLasse frei, um das Sperrmuster zu entfernen. + Festlegen + Mit Fingerabdrücke entsperren + EHentai-Einstellungen + Übernehmen + Zum Speichern der Einstellungen an das Häkchen tippen + Angepasstes hosts.txt + hosts.txt + Host + IP + Host hinzufügen + Hinzufügen + Host bearbeiten + Übernehmen + Entfernen + Ungültiger Host + Ungültige IP + Seite %d + @string/refresh + @string/share + Speichern + Speichern unter … + Zu Lesezeichen hinzufügen + Menü + Das Bild teilen + Das Bild wurde zu %s gespeichert + EH + Abmelden + Starte die App neu, um dich weiter anzumelden + Möchtest du dich abmelden? + @android:string/ok + Du wurdest abgemeldet. Starte die App neu, um weiter anzumelden + EHentai-Einstellungen + Einstellung auf der Webseite EHentais + Galerie-Seite + Liste-Ansicht + Details + Miniaturbild + Größe der Details + Lange + Kurz + Größe des Miniaturbilds + Groß + Mittelteil + Klein + Auslösung der Miniaturbilder + Nun %s. Mit abnormale Auslösung kann die Miniaturbilder nicht normalerweise geladen werden. + Automatisch + Link der Miniaturbilder reparieren + Auf Startseite angezeigte Kategorie + Auf Startseite angezeigte Standard-Kategorie + Ausgeschlossene Sprachen + Sprache der App (Language) + Torrent (%d) + Galerie von die ausgeschlossenen Sprachen werden in der Galerieliste und der Suchen versteckt + Ausgeschlossene Namensraum-Etiketten + Galerie in der ausgeschlossenen Namensraum werden von die Standard-Etikett-Suchen versteckt + H@H Proxy + %1$s %2$s:%3$d + Nicht festgelegt + Japanische Titel anzeigen + Versuchen, japanische Titel anzuzeigen. Es wird länger dauern, Galerieliste zu laden. + Standard-Titel anzeigen. Sie sind oft in Englisch. + Filter + Nach Titel, Hochlader, Etikett und Etikett-Namensraum filtern + Achtung auf mobile Daten anzeigen + Lesen + Richtung des Bildschirms + Standard + Querformat + Hochformat + Richtung des Lesens + Von links nach rechts + Von rechts nach links + Von oben nach unter + Seitenskalierung + Originale Größe + Nach die Länge anpassen + Nach die Höhe anpassen + Nach den Bildschirm anpassen + Festgesetzte Größe + Seiten umblättern von + Oben links + Oben rechts + Unter links + Unter rechts + Die Mitte + Bildschirm wach bleiben lassen + Uhr anzeigen + Fortschritt anzeigen + Akku-Niveau anzeigen + Seitensabstand anzeigen + Seiten mit Lautstärketaste umblättern + Vollbild + Helligkeit manuell festlegen + Helligkeit + Download + Ziel des Downloads + Ungültiges Downloadsziel + Downloadsziel konnte nicht geladen werden + Android 5.0+ stellt eine neue API breit, die erlaubt, Daten auf SD-Karte zu schreiben. Auf DOKUMENT antippen, um SD-Karte als Downloadsziel festzulegen + Dokument + Weiter + Medienscan erlauben + Du solltest deine Galerie von anderen verstecken + Meisten Galerie-Apps ignorieren die Bilder im Downloadspfad + Multi-Thread-Download + Bis zu %s Bild(er) + Bilder vorabladen + Die nächste %s Bilder vorabladen + Auslösung der Bilder + %s. Auslösung über 1280x funktioniert möglicherweise nicht + Automatisch + Originale Bilder herunterladen + Wenn es aktiviert wird, wird der 509-Fehler dir schneller widerfahren + Download-Items wiederherstellen + Alle Download-Elemente im Downloadspfad wiederherstellen + Elemente werden wiederhergestellt + Keine zu wiederhestellenden Elemente + Wiederherstellung gescheitert + %d Element(e) wiederhergestellt + Unnötige Dateien löschen + Bilddateien, die sich im Downloadpfad befinden, aber nicht in Downloadsliste, löschen + Keine zu löschend Dateien gefunden + Reinigung abgeschlossen. %d Datei(en) wurde(n) gelöscht. + Erweiterte Optionen + HTML-Datei beim Parsing-Fehler speichern + Die Datei könnte etwas privat enthalten + Logcat-Protokoll speichern + Logcat-Protokoll-Datei auf externe Speicher speichern + Speichern gescheitert + Protokoll-Datei wurde auf %s gespeichert. + Downloadspfadzwischenspeicher löschen + Open Source-Lizenz + Verzeichnis auswählen + Das Verzeichnis ist nicht beschreibbar + Cloud-Favoriten + Lokale Favoriten + %s durchsuchen + %s + %1$s - %2$s + Von Favoriten löschen + %d Elemente von Favoriten löschen? + Favoriten verschieben + Standard-Favoriten + Manuell auswählen + Favoriten-Info + Kollektionen + Zahl + Du musst dich zuerst anmelden + Ein Fehler ist aufgetreten + Sofortsuche + Nach rechts wischen, um Sofortsuche-Panel zu öffnen. + Kollektion + Nach rechts wischen, um Kollektion auszuwählen. + Download-Etiketten + Nach rechts wischen, um Download-Etiketten-Panel zu öffnen + Galerie-Details + Auf das Miniaturbild antippen, um Galerie-Details zu sehen + Seiten umblättern + Seiten umblättern + Menü + Fortschitt + Drücken und halten, um Seite-Menü zu öffnen + Von der Zukunft + Gerade + Gestern + Vor %d Tagen + H@H Downloader + Keine Archivdatei + Archivdatei wird heruntergeladen + Fehler beim Herunterladen der Archivdatei + Archivdateien + H@H-Klient ist für das Herunterladen der Archivdateien erforderlich + Datenschutzoptionen + Screenshot verhindern + Screenshots werden verhindert. Inhalt der App wird in Aktuelle Apps-Liste nicht angezeigt. + Erneue + Inhalt dieser App kommt aus dem Internet, von dem einige dir körperlichen oder emotionalen Schaden zufügen kann. Du hast es wirklich erfahrt und möchtest immer noch fortsetzen. + Gibt den Nutzername ein + Gibt das Passwort ein + Anmeldung überspringen + Anmeldung fehlgeschlagen + Der Fehler könnte wegen des Updates der Webseite aufgetretet werden. Versuche, dich anzumelden, indem du WebView benutzt oder Cookie eingeben, oder überspringe die Anmeldung mit die Taste unter ANMELDEN-Taste. Du könntest aber den Sad Panda sehen, wenn du dich nicht anmelden. Falls du dich mit Version unter 0.6.x anmeldetest, versuche, dich mit Cookie anzumelden. + Zum Wiederholen antippen + EhViewer fordert jetzt die Genehmigung WRITE_EXTERNAL_STORAGE an, um die Galerie herunterzuladen. Die Genehmigung gewähren? + Mir ist weh ums Herz + Wenn etwas ist dem Downloadspfad schiefgelaufen, den Downloadspfad reinigen, könnte das Problem lösen. + Downloadspfadzwischenspeicher löschen? + Zwischenspeicher löschen + Zwischenspeicher der Miniaturbilder und der Galerie-Info löschen + Größe des Lesezwischenspeichers + Standard-hosts.txt + Die App kann keine Daten auf Android 4.4 zu externen Speicher beschreiben, wenn du das System nicht hackst. Sie aber kann zu /Android/data/com.hippo.ehviewer beschreiben. + Google+ Community + Webseite + Quellcode + Änderungsprotokoll + Hilfe + Lizenz + EhViewer wurde dank viele Open Source-Projekte entwicklt. + Spenden + Alipay: seven332$163.com + Deine Spende hilft mir dabei, mehr gute Apps zu entwickln + E-Mail-Addresse wurde zur Zwischenablage kopiert + Analyse aktivieren + Über die Analyse + Versionnummer + Auf Update überprüfen + Auf Updates automatisch überprüfen + Beta-Version testen + Beta-Version könnte nicht funktionieren + Aktivieren + Aktiviert + Nicht aktiviert + IP + Port + Schlüssel + Die Domain ist nicht unterstützt. + Ungültiger Port + Datenverzeichnis konnte geladen werden + Keine Daten gefunden + Datei kann nicht gelesen werden + Sprache des Systems (Standard) + Bitte warte + Sperrmuster + Kein Sperrmuster festgelegt + Sperrmuster festgelegt + Daten exportieren + Daten, z. B. Downloadsliste, Sofortsucheliste, zur externe Speicher speichern + Daten wurden zu %s exportiert + Datenexport gescheitert + Daten importieren + Gespeichert Daten wiederherstellen + Daten wurden erfolgreich importiert + Über die App + Entwickler + Telegram + Host auf die IP, die nach die App festgelegt werden, umstellen\nKann von angepasstem hosts.txt überschrieben werden + Angepasstes hosts.txt + Hostname auf die angepassten IP umstellen\nDie Regeln können die von der App festgelegt überschreiben + \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml new file mode 100644 index 000000000..61354bc82 --- /dev/null +++ b/app/src/main/res/values-fr/strings.xml @@ -0,0 +1,663 @@ + + + + + + EhViewer + + + + Page d\'acceuil + Plus vus + Favoris + Historique + Téléchargement + Paramétres + + Nom d\'utilisateur + Mot de passe + Recaptcha (Optionale) + + Appuyez ici + Chargement… + Échec + + Se connecter + Créer un compte + Se connecter via WebView + Se connecter à l\'aide de cookies + Entrer un nickname + Nickname + Veuillez entrer un nickname + Connectez-vous pour continuer + + Pétit Hippo + + Les cookies gardent des informations dans un navigateur Web. Cherchez-en les informations si vous ignorez ce qui c\'est ou où vous pouvez les obtenir.\n\nEntrez le cookie spéciale pour vous connecter. + Entrez le texte. + Attention + Les cookies entrés n\'ont pas l\'air corrects. Vérifiez-les. + Je les vérifie tout le suite. + Ils sont corrects ! + Cookies trouvés + + La location de téléchargement actuelle n\'est pas disponible. Choissez-en une à nouveau dans les Paramétres. + + Vous utilisez les données mobiles + + Code d\'état inconnu : %d + Time-out + Hôte inconnu + Trop de redirections + Erreur de network + Erreur inconnue + Impossible de trouver l\'application + Impossible de parser le lien URL + Chemin de dossier invalide + Aucun fournisseur + Échec de décodage + Introuvable + Vide + Fiche ZIP invalide + Échec de lecture + Hors de portée + Échec d\'écriture + Échec d\'analyse syntaxique + 509 + URL invalide + Échec d\'obtention de pToken + Le mot-clé doit réssembler à \"618395 0439fa3666\" pour spécifier une galerie + Impossible de créer un fiche temporaire + Impossible de sauvegarder l\'image + Nombre invalide + + Le contenu de l\'application provient de l\'Internet, dont quelque chose peut vous causer le dommage physique ou mentale. Vous l\'avez bien compris et voulez continuer quand même. + Nom d\'ultilisateur ne doit pas être une chaîne vide + Mot de passe ne doit pas être une chaîne vide + Continuer sans se connecter + Impossible de se connecter + Il se peut que ce soit une erreur causée par la mise à jour du site Web ou d\'autre chose. Vous pouvez essayer de vous connecter via WebView, à l\'aide de cookies, ou continuer sans vous connecter. Mais si vous ne vous connectez pas, vous pouvez devenir un panda triste. Essayez de vous connecter à l\'aide de cookies si vous vous êtes connecté(e) dans la version 0.6.x. + Appuyez encore une fois pour quitter + Appuyez pour réessayer + EhViewer réquêrir la permission WRITE_EXTERNAL_STORAGE pour télécharger les galeries. Voulez-vous l\'accorder ? + C\'est pas sympa T_T + Ça vous derange si le développeur rassemble vos informations de l\'appareil et votre usage de l\'application ? Les informations sont très utiles pour le développeur.<br><br>L\'analyse de données est fournie par Google Analytics. Sa politique de confidencialité se trouve à <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a>.<br><br>Si vous acceptez d\'aider l\'analyse données, vos informations de l\'appareil seront rassemblées, y compris, mais sans s\'y limiter, votre version API Android, modéle de l\'appareil, les durées de sessions et usages.<br><br>Le développeur vous promet à ne rassembler AUCUNE donnée à moins que vous ne l\'acceptiez.<br><br>Les données rassemblées seront analysées à l\'aide de Google Analytics. Le rapport d\'analyse ne peut être lu que par le développeur de l\'application. + Compris + Accepter + Rejéter + + Paramètres->À propos de l\'application->Aide + + + Envoyer + Cette application a cessé de fonctionner de manière inattendue la dernière fois. Voulez-vous envoyer le journal logcat à le développeur via E-mail pour l\'aider à améliorer cette application ? + + + Sélectionnez un site galerie. + e-hentai : disponible pour tout le monde\nexhentai : disponible pour ce qui s\'est connecté(e) + Sélectionnez un site + + + Mettre à jour + Version : %1$s\nTaille : %2$s\n\n%3$s + EhViewer est à jour. + + + Chercher sur ExHentai + Chercher sur E-Hentai + Le monde est grand et le panda s\'assied tout seul. + + Chercher + + Recherche du mot-clé + Recherche d\'une image + + Recherche normale + Options avancées + Recherche d\'une image + Chercher + Spécifier un uploader + Spécifier un tag + Spécifier une galerie + Activer options avancées + + Recherche normale : faire recherche.\n\nSpécifer un uploader : faire la liste des galeries mises en ligne par l\'uploader spécifié. Autres options sont ignorées.\n\nSpécifier un tag : faire la liste des galeries qui contiennent le tag spécifié. Vous ne pouvez spécifier qu\'un tag. Autres options sont ignorées.\n\nSpécifier une galerie : Aller à la galerie. Le mot-clé doit être \"gid token\". + + Chercher une galerie + Chercher tags galerie + Chercher la description galerie + Chercher un nom de fiche torrent + Seulement montrer galeries avec des fiches torrent + Chercher des tags faibles + Chercher des tags peu acceptés + Montrer les galeries supprimées + Minimum note : + + Sélectionner une image + Activer le scannage de similarité + Chercher seulement les couverture + Montrer les galeries supprimées + Sélectionnez une image + + Ajouter à favori + + Recherche rapide + Appuyez sur \"+\" pour ajouter une Recherche rapide + Ajouter la recherche rapide + Entrez un nom + Supprimer + Supprimer les recherches rapides + Supprimer \"%s\" ? + Recherches rapides s\'afficheront ici. + Le resultat de la liste de galerie sera sauvegardé comme une recherche rapide. Cherchez d\'abord pour sauvegarder l\'état du panneau recherche. + README + Impossible d\'ajouter recherche d\'une image comme une recherche rapide. + Une même recherche rapide déjà existe. Son nom est \"%s\". + Ce nom déjà existe + + Page %1$d, avec un totale de %2$d pages + + + 2 étoiles + 3 étoiles + 4 étoiles + 5 étoiles + + + La galerie introuvable + Télécharger + Lire + Plus d\'informations + + %d page + %d pages + + \u2665 %d + %1$s (%2$.2f, %3$d) + Favoris + Torrent (%d) + Partager + Noter + Similaire(s) + Chercher le couverture + Aucun tag + Aucun commentaire + Pas d\'autres commentaires + Plus de commentaires + Aucun aperçu + Pas d\'autres aperçus + Plus aperçus + Rafraîchir + Ouvrir avec une autre appli + Noté avec succès + Échec de notation + Aucun fiche torrent + Fiches torrent + Ajoutée à favoris + Non ajoutée à favoris + Ajouter à favoris + Enrégistrer la collection favoris + Ajouté à favoris + Retirer de favoris + Impossible de l\'ajouter à favoris + Impossible de la retirer de favoris + Ajouter l\'uploader \"%s\" à la liste de filtre ? + Filter added + + + CHEF-D\'ŒUVRE + IRRÉSISTABLE + TRÈS BIEN + AGRÉABLE + PAS MAL + COMME SI COMME ÇA + MAL + TRÈS MAL + PEINE + INSUPPORTABLE + FUYEZ ! + + + Infos de la galerie + Copié à presse-papiers + Clé + Valeur + Gid + Token + URL + Titre + Titre en japonais + Aperçu + Catégorie + Uploader + Mise en ligne + Parent + Visibile ? + Langue + Pages + Taille + Nombre d\'additions à favoris + Ajouté à favoris + Nombre de notations + Notation + Nombre de torrents + URL du fiche torrent + + + Commentaires de la galerie + Personne n\'a commenté sur la galerie + Commentaire posté + Impossible de commenter + Copier le texte du commentaire + Donner \"J\'aime\" + Annuler \"J\'aime\" + Donner \"Je hais\" + Donner \"Je hais\" + \"J\'aime\" donné avec succès + \"J\'aime\" retiré avec succès + \"Je hais\" donné avec succès + \"Je hais\" retiré avec succès + Échec du vote + Voir les détails des votes + + + Aperçus de la galerie + Aller à + + + Téléchargement - %s + Vos téléchargements s\'afficheront ici + En veille + En attente + Téléchargement en cours + Téléchargement completé + Échec + %d non complet + Complet + Erreur 509 + Votre limite d\'obtention d\'images est atteinte. Arrêtez le téléchargement et réessayez plus tard. + Téléchargement completé + %d avec succés + %d échoué(s) + %1$d avec succés, %2$d échoué(s) + Complété(s) : %s + Échoué(s) : %s + Retire téléchargement + Retirer %s de la liste de téléchargement ? + Retirer %d articles de la liste de téléchargement ? + Supprimer fiches d\'image + Arrêter tout + Label + Défaut + Déplacer + Labels de téléchargement + Commencer tout + Arrêter tout + Service du téléchargement EhViewer + %s + %1$s, encore %2$s + Enregistrer le label de téléchargement + Label de téléchargement par défaut + Ajouté à la liste de téléchargement + + + Vos labels de téléchargement s\'affichera ici + Ajouter + Nouveau label + Entrez le texte du label + \"Default\" n\'est pas un label valide + Ce label déjà existe + Renommer le label + Supprimer le label + Supprimer \"%s\" ? + + + Votre historique de les lectures de galerie s\'affichera ici + Tout effacer + Effacer toute l\'historique ? + + + Filtre + Vos filtres s\'afficheront ici + Titre + Uploader + Tag + Espace de nom de tag + Supprimer le filtre de titre \"%s\" ? + Supprimer le filtre d\'uploader \"%s\" ? + Supprimer le filtre de tag \"%s\" ? + Supprimer le filtre \"%s\" ? + Astuce + Ajouter le filtre + Montrer expliques + Texte du filtre + Filtre de titre : exclure les galeries dont le titre contient le mot.\n\nFiltre d\'uploader : exclure les galerie mises en ligne par cet uploader.\n\nFiltre de tag : exclure les galeries qui ont ce tag. Il vas prendre plus de temps pour charger la liste.\n\nFiltre d\'espace de nom de tag : exclure les galeries qui ont cette espace de nom de tag. Il vas prendre plus de temps pour charger la liste. + + + Définir le modéle de déverrouillage + Déssinez un modéle pour définir le modéle de déverrouillage\nContinuer sans rien déssiner pour effacer le modéle + Définir + Permettre le déverrouillage avec l\'empreinte digitale + + + Paramètres EHentai + Appliquer + Appuyez sur la coche pour sauvegarder les changements + + + Page %d + @string/refresh + @string/share + Sauvegarder + Ajouter un signet + Menu + Partager l\'image + Image sauvegardée à %s + + EH + Se déconnecter + Redémarrez l\'appli pour vous connecter à nouveau + Voulez-vous vous déconnecter ? + @android:string/ok + Vous vous êtes déconnecté. Redémarrez l\'application pour vous connecter + Paramètres EHentai + Paramètres sur le site Web EHentai + Site de galerie + Mode de liste + Avec détails + Miniatures uniquement + Taille des détails + Long + Court + Taille des mimniatures + Large + Moyenne + Pétite + Résolution des miniatures + Auctuellement %s. Certaines résolutions spéciales êmpechent de les charger correctement. + Auto + Réparer l\'URL de la miniature + Catégoriques sur la page d\'accueil + Les catégoriques par défaut à afficher sur la page d\'accueil + Langues exclues + Ne pas afficher les galerie des langues spécifiées sur la liste de galerie et le résultat de recherche + Espaces de nom de tag exclues + Exclure espaces de nom spécifiées de une recherche de tag par défaut + H@H proxy + %1$s %2$s:%3$d + Rien + Montrer les titres japonais + Essayer de charger les titres japonais. Il prend plus de temps pour charger la liste des galeries. + Montrer les titres par défaut. Ils sont souvent en anglais. + Filtre + Filtrer par le titre, l\'uploader, le tag et l\'espace de nom + Avertissement de données mobiles + + Lecture + Rotation d\'écran + Par défaut + Portrait + Landscape + Direction de lecture + De gauche à droit + De droit à gauche + De haut à fond + Écaillage de page + Taille actuelle + S\'adapter à la largueur + S\'adapter à la hauteur + S\'adapter à l\'écran + Taille fixée + Position de début + En haut à gauche + En haut à droit + En bas à gauche + En bas à droit + Centre + Maintenir l\'écran allumé + Montrer l\'heure + Montrer le progrès + Montrer le niveau de batterie + Montrer l\'intervalle des pages + Permettre de tourner la page avec les boutons Volume + Plein d\'écran + Utiliser la luminosité d\'écran personalisée + Luminosité d\'écran + + Téléchargement + Destination de téléchargement + Destination de téléchargement invalide + Impossible d\'obtenir la destination de téléchargement + Une application ne peut écrire aucune donnée dans la carte SD à moins que vous ne roote et modifie votre appareil, à l\'exception du chemin /Android/data/com.hippo.ehviewer, dans lequel EhViewer a la permission d\'écriture. + Android 5.0+ a implémenté un nouveau API, qui permet les applications à écrire dans la carte SD. Appuyez sur \"DOCUMENT\" pour définir la carte SD comme la destination de téléchargement + Document + Continuer + Permettre le scannage des fiches multimédias + Ne montre jamais vos applications galerie à personne + La plupart d\'applications galerie ignore les images dans le chemin de téléchargement + Téléchargement multi-thread + Jusqu\'à %s image(s) + Charger les images d\'avance + Charger les prochaine %s images + Resolution d\'image + %s, résolutions mieux que 1280x riquent de ne pas fonctionner + Auto + Download original image + Vous allez obtenir l\'erreur 509 plus facilement + Rétablir les galeries téléchargées + Rétablir tous objets déjà téléchargés dans la destination de téléchargement + Rétablissement en cours + Auncun objets à rétablir trouvé + Échec de rétablissement + %d objets rétablis avec succès + Effacer fiches inutiles de téléchargement + Effacer les fiches des galeries qui ne sont pas dans la liste de téléchargement mais se trouvent dans la destination de téléchargement + Rien à effacer + Nettoyage complété avec succès, %d objets effacés + + Avancé + Sauvegarder le contenu de HTML après l\'erreur d\'analyse syntaxique + Le fiche HTML pouvait contenir les informations personnelles + Sauvegarder le journal logcat + Sauvegarder le journal logcat au stockage externe + Echec de sauvegarde + Fiche sauvegardé à %s + Vider le cache de la destination de téléchargement + Quand il y a une erreur et vous devez télécharger quelque chose à nouveau, vider le cache là-dedans pouvait résoudre le problème. + Vider le cache ? + Vider le cache du stockage + Effacer le cache des miniatures, les informations galeries + Taille du cache pour le lecture + Modéle de déverrouillage + Aucun modéle de déverrouillage + Modéle de déverrouillage défini + Exporter les données + Sauvegarder les données au stockage externe, y compris la liste de téléchargement, la liste de recherche rapide + Données exportées à %s + Échec d\'exportation de données + Importer les données + Charger les données exportées + Importation complète avec succès + + À propos de l\'application + Développeur + Telegram + Communité Google+ + Site + Source + Historique de changements + Aide + Licence + EhViewer ne peut être né qu\'à grâce de beaucoup de projets Open Source. + Faire un don + Alipay : seven332$163.com + Votre donation me motive à développer plus de mieux applications.\n\nAlipay : seven332$163.com + Adress Email copié à presse-papier + Activer analyse + A propos de l\'analyse + Numéro de version + Chercher mise à jour + Chaîne de mises à jour beta + Versions beta riquent de ne pas fonctionner correctement sur votre appareil + + Activer + Activé + Non activé + IP + Port + Clé de passe + Le domaine n\'est pas compatible + Port invalide + + Échec d\'obtention du répertoire données + Aucune donnée trouvée + Impossible de lire le fiche + + + Langues exlues + Toute + Aucune + Inverter + Langue + Originale + Traduction + Rewrite + Japonais + Anglais + Chinois + Néerlandais + Français + Allemand + Hongrois + Italien + Coréen + Polonais + Portugais + Russe + Espanol + Thaï + Vietnamien + N/A + Autres + + Merci de patienter + + + Licence + + + Sélectionner le répertoire + Impossible d\'écrire dans le répertoire + + + Favoris de cloud + Favoris locales + Chercher dans %s + %s + %1$s - %2$s + Effacer de favoris + Effacer %d objets de favoris ? + Déplacer favoris + Collection favoris par défaut + Sélectionner manuellement + Infos de favoris + Collections + Total + Vous devez vous connecter + + + Une erreur s\'est produite + + + Recherche rapide + Faites glisser à droit pour ouvrir le panneau de recherche rapide + Collections + Faites glisser à droit pour sélectionner les collections + Labels de téléchargements + Faites glisser à droit pour ouvrir le panneau de labels de téléchargements + Détails de la galerie + Appuyez sur la miniature pour voir les détails de la galerie + Tourner la page + Tourner la page + Menu + Progrès + Maintenez pour ouvrir le menu de page + + + Du futur + En ce moment + + Il y a %d minute + Il y a %d minutes + + + Il y a %d heure + Il y a %d heures + + Hier + Il y a %d jours + + sec + secs + + + min + mins + + + heure + heures + + + jour + jours + + + an + ans + + H@H Downloader + Aucun fiche archives + Téléchargement du fiche archives a commencé + Téléchargement du fiche archives a échoué + Fiches archives + Client H@H est nécessaire pour le téléchargement de fiches archives + Confidentialité + Empêcher captures d\'ecran + Quand cette option est activée, vous ne pouvez prendre auncun capture d\'écran de l\'application, et le systéme n\'affiche pas le contenu d\'écran dans le sélecteur de tâches.\n\nRedémarrage de l\'application nécessaire pour appliquer le changement + Lien de galerie detecté + Voulez-vous accéder la galerie dans vos presse-papiers ? + Personnalisé hosts.txt + hosts.txt + Hôte + IP + Ajouter hôte + Ajouter + Modifier hôte + Appliquer + Supprimer + Hôte invalide + IP invalide + Sauvegarder dans... + Langue de l\'app (Language) + "hosts.txt integré " + Mapper l\'hôte à l\'adresse IP selon les règles de l\'app\nIls pouvent être redéfinits par hosts.txt personnalisé + hosts.txt personalisé + Mapper l\'hôte à l\'adresse IP\nIls pouvent redéfinir par hosts.txt de l\'app + Langue du système (défaut) + + \ No newline at end of file From 5fa9e8677d4e5d7f2c8dbb545b4c6767da74c671 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 11:10:25 +0800 Subject: [PATCH 141/630] Improve English translation --- app/src/main/res/values/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6c7a25035..42683267a 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -157,7 +157,7 @@ Update Version: %1$s\nSize: %2$s\n\n%3$s - EhViewer is update to date + You are using the latest version of EhViewer Search ExHentai @@ -542,7 +542,7 @@ Read cache size App language Built-in hosts.txt - The host-to-IP mapping provided by the app\nIt can be overrode by custom hosts.txt + The host-to-IP mapping provided by the app\nIt can be overridden by custom hosts.txt Custom hosts.txt Map hostnames to IP addresses\nIt can override built-in hosts.txt Pattern protection @@ -711,8 +711,8 @@ Archive Need H@H client for archive download Privacy - Not Allowed Screen Capture - If enabled, you cannot take screenshots of the app, and the system will not display app contents in the task switcher\n\nNeed to restart the app for this to take effect + Prevent screenshots + If enabled, you cannot take screenshots of the app, and the system will not display app contents in the task switcher\n\nYou need to restart the app for the changes to take effect Download Service From 2c428d3306e8cc24649ad37df35ebbb6abbdaf20 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 11:11:58 +0800 Subject: [PATCH 142/630] Add new languages to language switcher --- app/src/main/res/values/arrays.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 4faa1986f..343d5a681 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -219,8 +219,10 @@ @string/app_language_system + @string/app_language_de @string/app_language_en @string/app_language_es + @string/app_language_fr @string/app_language_ja @string/app_language_ko @string/app_language_zh_cn @@ -230,8 +232,10 @@ system + de en es + fr ja ko zh-CN From 82cb0eb7d6ecd5c77737236c9630adec22ad0a82 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 11:12:56 +0800 Subject: [PATCH 143/630] Add strings for language switcher --- app/src/main/res/values/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 42683267a..49ce650eb 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -593,8 +593,10 @@ Can\'t read the file System Language (Default) + Deutsch English Español + français (France) 日本語 한국어 中文(大陆) From 3ef3510ad359ef18339c9e2b51ca4b895ab10d7d Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 11:14:32 +0800 Subject: [PATCH 144/630] Fix crash when there's an image in clipboard --- app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index a63f9e4c5..e4ea6b877 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -433,7 +433,7 @@ private String getTextFromClipboard() { ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); if (clipboard != null) { ClipData clip = clipboard.getPrimaryClip(); - if (clip != null && clip.getItemCount() > 0) { + if (clip != null && clip.getItemCount() > 0 && clip.getItemAt(0).getText() != null) { return clip.getItemAt(0).getText().toString(); } } From 2d32852d189a7b89451f97a2f52eeed767eee401 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 11:16:59 +0800 Subject: [PATCH 145/630] Update Spanish translations (partly) --- app/src/main/res/values-es/strings.xml | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index efcbab77e..ccd56ef3b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -625,6 +625,27 @@ Privacidad Impedir capturas de pantalla Si habilitas esta opción no podrás hacer captura de pantalla y el sistema no mostrará una previsualización en el multitareas.\n\nDeberás reiniciar la aplicación para activar esta función. + Galería detectada + Se ha detectado un vínculo de galería en el portapapeles. ¿Quieres entrarlo? + Guardar a... + Usar huellas digitales para desbloquear + Ajustes EHentai + Aplicar + Toca la marca de verificación para guardar los cambios + Personalizado hosts.txt + hosts.txt + Anfitrión + IP + Añadir una anfitrión + Añadir + Anfitrión + Aplicar + Borrar + Anfitrión inválida + IP inválida + Toca acá + Cargando... + Fallado + - From a4ea8a6bfcad4bcdb9138e2cf209f61068567391 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 11:17:49 +0800 Subject: [PATCH 146/630] Add support for French and German translations --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 845c40f1e..7b530c4ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ android { versionName "1.0.30" vectorDrawables.useSupportLibrary = true resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", - "es", "ja", "ko" + "es", "ja", "ko", "fr", "de" } compileOptions { From 83ade321bbb75c4fc53e3086d00b89715808715d Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 11:21:58 +0800 Subject: [PATCH 147/630] A little fix --- app/src/main/res/values-ja/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 3880708b8..b9d713587 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -345,7 +345,7 @@ パターン保護を設定 - パターンを描いてパターン保護を設定する\n空白のままパターン保護を解除する + パターンを描いてパターン保護を設定します\n空白のまま続行してパターン保護をクリアします 設定 指紋でロックを解除 @@ -475,8 +475,8 @@ メモリキャッシュをクリア サムネイルとギャラリー情報のメモリキャッシュをクリア 閲覧キャッシュのサイズ - パターンロック - パターンロックは設定されていません + パターン保護 + パターン保護は設定されていません パターン保護は設定済みです データをエクスポート ダウンロードリストやクイック検索などのデータを外部ストレージにエクスポートします From ddb82292f9b510e33652edec8517d94daff89a6a Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 13:17:12 +0800 Subject: [PATCH 148/630] Update strings.xml --- app/src/main/res/values-de/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e56adf938..b7b6dde09 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -444,7 +444,7 @@ Datenschutzoptionen Screenshot verhindern Screenshots werden verhindert. Inhalt der App wird in Aktuelle Apps-Liste nicht angezeigt. - Erneue + Darauf erneut antippen, um die App zu beenden Inhalt dieser App kommt aus dem Internet, von dem einige dir körperlichen oder emotionalen Schaden zufügen kann. Du hast es wirklich erfahrt und möchtest immer noch fortsetzen. Gibt den Nutzername ein Gibt das Passwort ein @@ -508,4 +508,4 @@ Host auf die IP, die nach die App festgelegt werden, umstellen\nKann von angepasstem hosts.txt überschrieben werden Angepasstes hosts.txt Hostname auf die angepassten IP umstellen\nDie Regeln können die von der App festgelegt überschreiben - \ No newline at end of file + From 8ae8842f81db5a85af9031588b151e3a6bce3111 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 13:18:57 +0800 Subject: [PATCH 149/630] A little fix of translation --- app/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b7b6dde09..6520a1d54 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -444,7 +444,7 @@ Datenschutzoptionen Screenshot verhindern Screenshots werden verhindert. Inhalt der App wird in Aktuelle Apps-Liste nicht angezeigt. - Darauf erneut antippen, um die App zu beenden + Daran erneut antippen, um die App zu beenden Inhalt dieser App kommt aus dem Internet, von dem einige dir körperlichen oder emotionalen Schaden zufügen kann. Du hast es wirklich erfahrt und möchtest immer noch fortsetzen. Gibt den Nutzername ein Gibt das Passwort ein From d8dc9ad576000620961bac62f81bf4bbe7107731 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 11 Jul 2018 22:03:09 +0800 Subject: [PATCH 150/630] Fix of translation --- app/src/main/res/values-fr/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 61354bc82..c3f8b659f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -657,7 +657,7 @@ "hosts.txt integré " Mapper l\'hôte à l\'adresse IP selon les règles de l\'app\nIls pouvent être redéfinits par hosts.txt personnalisé hosts.txt personalisé - Mapper l\'hôte à l\'adresse IP\nIls pouvent redéfinir par hosts.txt de l\'app + Mapper l\'hôte à l\'adresse IP\nIls pouvent redéfinir l'hosts.txt de l\'app Langue du système (défaut) - \ No newline at end of file + From 7ee1777e7ba5ce52e41f7c4aa90b546493af38b9 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Thu, 12 Jul 2018 10:26:35 +0800 Subject: [PATCH 151/630] More fixes of errors --- app/src/main/res/values-ja/strings.xml | 146 ++++++++++++------------- 1 file changed, 72 insertions(+), 74 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index b9d713587..eac620366 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -88,7 +88,7 @@ パスワードを入力してください。 ログインをスキップ ログインに失敗しました。 - これはウェブサイトのアップデートによって引き起こされることかもしれず、またおかしいことが起こったかもしれません。ログインボタンの下でWebでログインするか、Cookieを入力するか、あるいはログインをスキップします。ログインをスキップするでアプリが正常に使用できなくなることがあります。0.6.xバージョンでログインした場合は、「Cookieでログイン」を選択することが推奨です。 + このエラーの原因は、ウェブサイトがメンテ中であることか、または不明なエラーが発生したことである可能性があります。ログインボタンの下でWebでログインするか、Cookieを入力してログインするか、またはログインをスキップしてみてください。ログインをスキップすると「Sad Panda」エラーが発生することがあります。0.6.xバージョンでログインした場合、Cookieでログインすることをおすすめします。 もう一度押して終了します クリックしてもう一度試す EhViewerはギャラリーをダウンロードするためのWRITE_EXTERNAL_STORAGE権限を請求します。許可してもらえないでしょうか? @@ -121,56 +121,56 @@ 検索 - キーワード検索 - 画像検索 + キーワードで検索 + 画像で検索 - 普通検索 - 詳細オプション + 検索 + その他のオプション 画像検索 一般検索 - 指定アップローダー - 指定タグ - 指定ギャラリー - 詳細オプションを有効にする + アップローダを検索 + タグを検索 + ギャラリーにアクセス + その他のオプションを有効化 - 一般検索:検索です。\n\n指定アップローダー:このアップローダーによってアップロードされたギャラリーを一覧表示します。他のオプションは無視されます。\n\n指定タグ:このタッグを含むギャラリーを一覧表示します。他のオプションは無視されます。\n\n指定画廊:このギャラリーにジャンプします。キーワードは「gid token」のはずです。 + 普通検索:検索します。\n\nアップローダを検索:このアップローダーがアップロードしたギャラリーをリストします。他のオプションは無視されます。\n\nタグを検索:指定したタグを含むギャラリーをリストします。他のオプションは無視されます。\n\nギャラリーにアクセス:指定したギャラリーに行きます。キーワードは「gid token」です。 ギャラリーを検索 ギャラリータグを検索 ギャラリー説明を検索 - トレントファイル名を検索 - トレントのあるギャラリーだけを表示 + Torrentファイル名を検索 + Torrentのあるギャラリーのみを表示 低希望タグを検索 低評価タグを検索 - 削除されたギャラリーを表示 + 削除済みのギャラリーを表示 評価の下限: 画像を選択 - 類似検索を使用 + 類似検索を有効化 カバーのみを検索 - 削除されたギャラリーを表示 - まずは画像を選択してください + 削除済みのギャラリーを表示 + 画像を選択してください - お気に入り + お気に入りに追加 クイック検索 - 「+」をクリックしてクイック検索を追加 + 「+」をタップしてクイック検索を追加します クイック検索を追加 タイトルが空 削除 クイック検索を削除 - 「%s」を削除? - ここがクイック検索 - ギャラリーリストのステータスはクイック検索として保存されます。検索パネルのステータスを保存する場合は、まず検索を実行してください。 - README + 「%s」を削除しますか? + クイック検索はここに表示されます + ギャラリー検索結果の設定などはクイック検索として保存されます。検索の設定などを保存するには、まず検索を実行してください。 + 説明 画像検索をクイック検索として追加できませんでした。 - 同じクイック検索がすでに名前が「%s」として存在しています。 - 同じ名前が既に存在します。 + 「%s」というクイック検索は既に存在しています。 + この名前は既に使用されています。 ページ%1$d、合計%2$dページ - + 2つ星 3つ星 4つ星 @@ -194,13 +194,13 @@ カバーを検索 タグなし コメントなし - すべてのコメントが表示されました。 + コメントはこれ以上ありません 他のコメントを見る プレビューなし - すべてのプレビューが表示されました。 + プレビューはこれ以上ありません 他のプレビューを見る - リフレッシュ - 他のアプリケーションで開く + 再ロード + 他のアプリで開く 評価しました 評価できませんでした トレントなし @@ -213,7 +213,7 @@ お気に入りから削除しました。 お気に入りに追加失敗しました。 お気に入りからの削除に失敗しました。 - アップローダフィルター「%s」を追加? + アップローダフィルター「%s」を追加しますか? フィルターが追加されました。 @@ -222,7 +222,7 @@ とてもいい いい まあまあ - 普通だな + 普通 悪い とても悪い 目の障害になる @@ -252,19 +252,19 @@ お気に入り追加済み 評価回数 評価 - トレント数 - トレント + Torrent数 + Torrent ギャラリーコメント コメントはまだありません。 コメントを送信しました。 コメントに失敗しました。 - コメントをコピーしました。 - 賛成 - 賛成を取り消す + コメントをコピー + いいね! + いいね!を消す 反対 - 反対を取り消す + 反対を消す いいね!しました。 いいね!を取り消しました。 反対しました。 @@ -285,7 +285,7 @@ ダウンロード済み ダウンロードエラー %d 未完成 - 完成済み + ダウンロード完了 509エラー ダウンロード制限に達しました。しばらくしてからもう一度やり直してください。 ダウンロード完了 @@ -312,9 +312,9 @@ ダウンロードリストに追加しました - ここがダウンロードラベル + ダウンロードラベルはここに表示されます 追加 - 新ラベル + ラベルを作成 ラベルテキストを入力してください 「デフォルト」は無効なラベルです ラベルは既に存在しています @@ -324,7 +324,7 @@ 閲覧履歴はここに表示されます - すべてクリア + すべて削除 閲覧履歴をすべて削除しますか? @@ -333,7 +333,7 @@ アップローダ タグ タグの名前空間 - タイトルフィルター「%s」を削除しますか? + タイトル フィルター「%s」を削除しますか? アップローダ フィルター「%s」を削除しますか? タグ フィルター「%s」を削除しますか? フィルター「%s」を削除しますか? @@ -341,7 +341,7 @@ フィルターを追加 ヘルプを表示 フィルターテキスト - タイトルフィルター:このキーワードがタイトルに含むギャラリーを除外します。\n\nアップローダー:このアップローダーがアップロードしたギャラリーを除外します。\n\nタグフィルター:このタグを含むギャラリーを除外します。ギャラリーリストを取得する時間が長くなります。\n\nタグセットフィルター:このタグセットを含むギャラリーを除外します。ギャラリーリストを取得する時間が長くなります。 + タイトルフィルター:タイトルにキーワードがあるギャラリーを除外します。\n\nアップローダ:このアップローダがアップロードしたギャラリーを除外します。\n\nタグフィルター:このタグを含むギャラリーを除外します。ギャラリーリストを取得するのにもっと時間がかかります。\n\nタグセットフィルター:このタグセットを含むギャラリーを除外します。ギャラリーリストを取得するのにもっと時間がかかります。 パターン保護を設定 @@ -352,7 +352,7 @@ EHentaiの設定 適用 - 右上隅のチェックマークをクリックして設定を保存します。 + 右上隅のチェックマークをタップして設定を保存します。 ページ%d @@ -374,12 +374,12 @@ EHentaiの設定 EHentaiサイト上の設定 ギャラリーサイト - リストモード - 詳細 + リスト表示モード + 詳細情報 サムネイル - 詳細サイズ - - + 詳細情報のサイズ + 長い + 短い サムネイルサイズ @@ -388,7 +388,7 @@ %s。解像度を正しく設定しないと、サムネイルを取得できない場合があります 自動 サムネイルリンクを修正 - ホームページをカテゴリ表示 + ホームページに表示されるカテゴリ ホームページに表示されるデフォルトカテゴリ タグセットを除外 指定したタグセットをデフォルト検索から除外 @@ -401,11 +401,11 @@ 日本語タイトルを表示しようとします。有効にすると、ギャラリーリストを取得するのにもっと時間がかかることがあります デフォルトのタイトルを表示します。多くの場合は英語のタイトルです。 フィルター - タイトル、アップローダ、タグ、タグセットをフィルター + タイトル、アップローダ、タグとタグセットをフィルター モバイルネットワーク警告 閲覧 - スクリーン方向 + 画面の向き システムデフォルト 縦画面 横画面 @@ -417,7 +417,7 @@ 元のサイズ 幅に合わせる 長さに合わせる - スクリーンに合わせる + 画面に合わせる 固定したスケール ページを開く位置 左上隅 @@ -444,14 +444,14 @@ 続行 ダウンロードスレッド数 同時に最大%s枚の画像をダウンロードできる - 画像を事前にロード - %s枚の画像を事前にロードします + 画像をプリロード + %s枚の画像をプリロードします 画像解像度 現在は%sです。1280xを超える解像度は不安定です 自動 オリジナル画像をダウンロード メディアスキャンを許可 - この場合はギャラリーアプリは他人に見せないほうがいいでしょう + ギャラリーアプリを他人に見せないでください ダウンロードタスクを復元 ダウンロードディレクトリのダウンロードタスクを復元 復元中 @@ -459,7 +459,7 @@ 復元できませんでした %s件のタスクが復元されました ダウンロードフォルダの不要なファイルを整理 - ダウンロードディレクトリからダウンロードタスクにない画像ファイルを削除します + ダウンロードディレクトリからダウンロードタスクにない画像ファイルを削除 不要なファイルが見つかりませんでした %d件のファイルを削除しました @@ -470,14 +470,14 @@ ログを外部ストレージに保存 ログをエクスポートできませんでした ログを%sにエクスポートしました - ギャラリーのダウンロードパスキャッシュをクリア - ギャラリーのダウンロードパスキャッシュをクリア? + ギャラリーのダウンロード パス キャッシュをクリア + ギャラリーのダウンロード パス キャッシュをクリアしますか? メモリキャッシュをクリア サムネイルとギャラリー情報のメモリキャッシュをクリア 閲覧キャッシュのサイズ パターン保護 パターン保護は設定されていません - パターン保護は設定済みです + パターン保護は設定されています データをエクスポート ダウンロードリストやクイック検索などのデータを外部ストレージにエクスポートします データを%sにエクスポート @@ -498,11 +498,11 @@ Alipay:seven332$163.com ご寄付ありがとうございます。これからもいろんなアプリの開発を進めさせていただきます。\n\nAlipay:seven332$163.com メールアドレスがクリップボードにコピーされました - データ統計を有効化 + データ統計に参加 データ統計について バージョン番号 - アップデートを確認 - ベータ版にアップデート + 更新を確認 + ベータ版を使用 ベータ版では予期せぬエラーが発生することがあります @@ -540,7 +540,7 @@ IP ポート パスキー - ドメイン名はサポートしない + ドメイン名には対応していません 無効なポート データフォルダを取得できませんでした @@ -563,7 +563,7 @@ お気に入りから削除 %d件の項目をお気に入りリストから削除します? お気に入りを移動 - 既定お気に入り + 既定のお気に入りリスト 手動で選択 お気に入り情報 お気に入りコレクション @@ -581,7 +581,7 @@ ダウンロードラベル 右からスワイプすると、ダウンロードラベルパネルが開きます ギャラリーの詳細 - サムネイルをクリックすると、ギャラリー詳細を表示します + サムネイルをタップすると、ギャラリー詳細を表示します ページをめくる ページをめくる メニュー @@ -619,16 +619,16 @@ 圧縮パッケージのダウンロードを開始しました 圧縮パッケージをダウンロードできませんでした 圧縮パッケージ - 圧縮パッケージのダウンロードにはH@Hのクライアントが必要です + 圧縮パッケージのダウンロードにはH@Hクライアントが必要です プライバシー スクリーンキャプチャを防ぐ - 有効にすると、アプリの画面をキャプチャーできなくなり、アプリの内容も最近のアプリリストに表示されません。\n\n変更を適用するには、アプリを再起動してください。 + 有効にすると、アプリの画面をキャプチャーできなくなり、アプリの内容も「最近のアプリ」リストに表示されません。\n\n変更を適用するには、アプリを再起動してください。 デフォルト フィルターはここに表示されます デバイスをroot化してパッチを適用しないと、Android 4.4以降では外部SDカードへ書き込めません。が、SDカード/Android/data/com.hippo.ehviewerは例外で書き込めます。 ほとんどのギャラリーアプリはダウンロードパスの内容を表示しません 有効にすると、ダウンロード制限にもっとはやく達する恐れがあります - ギャラリー ダウンロード パスは無効なようで、もう一度ダウンロードする必要があります。ダウンロードパスのキャッシュをクリアしてみてください。 + ギャラリー ダウンロード パスは無効なようで、もう一度ダウンロードする必要があると表示されている場合は、ダウンロードパスのキャッシュをクリアしてみてください。 ギャラリーリンクが発見されました クリップボードにあるギャラリーにアクセスしますか? 名前を付けて保存 @@ -646,15 +646,13 @@ 無効なIPです 既定hosts.txt メニューを呼び出すには、長押ししてください - 2つ星 - 4つ星 変更履歴 システム言語(既定) Telegram - アップデートを自動で確認 + 更新を自動で確認 ダウンロードサービス - ホストをアプリ既定のIPにマッピング\nカスタムhosts.txtに上書きされます + ホストをアプリ既定のIPにマッピング\nカスタムhosts.txtに上書きされます。 カスタムhosts.txt - ホスト名をIPにマッピング\n既定のhosts.txtを上書きできます + ホスト名をIPにマッピング\n既定のhosts.txtを上書きできます。 From 36e66a8714aa3c5a0eaa5f98a815635fe12035a0 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Thu, 12 Jul 2018 10:29:05 +0800 Subject: [PATCH 152/630] Grammar fix --- app/src/main/res/values-de/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 6520a1d54..64f2e792e 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -25,7 +25,7 @@ Die Cookies speichern in Browser deine Informationen. Falls du nicht wisst, was die Cookie sind, suche im Internet darüber. Der Text wird nicht eingegeben Achtung - Die eingegebene Cookies sehen korrekt nicht aus. Überprüfe sie. + Die eingegebenen Cookies sehen korrekt nicht aus. Überprüfe sie. In Ordnung! Sie sind absolut korrekt! Cookies werden gefunden @@ -127,10 +127,10 @@ Nach den Umschlag suchen Kein Etikett Kein Kommentar - Keine weitere Kommentare + Keine weiteren Kommentare Weitere Kommentare Keine Vorschau - Keine weitere Vorschauen + Keine weiteren Vorschauen Weitere Vorschauen Aktualisieren Öffnen mit … @@ -382,7 +382,7 @@ Automatisch Originale Bilder herunterladen Wenn es aktiviert wird, wird der 509-Fehler dir schneller widerfahren - Download-Items wiederherstellen + Download-Elemente wiederherstellen Alle Download-Elemente im Downloadspfad wiederherstellen Elemente werden wiederhergestellt Keine zu wiederhestellenden Elemente @@ -390,7 +390,7 @@ %d Element(e) wiederhergestellt Unnötige Dateien löschen Bilddateien, die sich im Downloadpfad befinden, aber nicht in Downloadsliste, löschen - Keine zu löschend Dateien gefunden + Keine zu löschenden Dateien gefunden Reinigung abgeschlossen. %d Datei(en) wurde(n) gelöscht. Erweiterte Optionen HTML-Datei beim Parsing-Fehler speichern From 32f420524058d1b6d746df5e74b1ea9f7be8e574 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Thu, 12 Jul 2018 10:32:28 +0800 Subject: [PATCH 153/630] Improved --- app/src/main/res/values-fr/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c3f8b659f..f06453bef 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -181,7 +181,7 @@ La galerie introuvable Télécharger Lire - Plus d\'informations + Voir plus d\'informations %d page %d pages @@ -197,10 +197,10 @@ Aucun tag Aucun commentaire Pas d\'autres commentaires - Plus de commentaires + Voir plus de commentaires Aucun aperçu Pas d\'autres aperçus - Plus aperçus + Voir plus d\'aperçus Rafraîchir Ouvrir avec une autre appli Noté avec succès From 72971341b206a2edc3a8e68b1ba73cb44aaf7c59 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Thu, 12 Jul 2018 11:22:43 +0800 Subject: [PATCH 154/630] Corrections --- app/src/main/res/values-ja/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index eac620366..236f9ad15 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -71,15 +71,15 @@ 見つかりませんでした。 無効なzipファイルです。 - 読み取りに失敗しました。 + 読み込めませんでした。 範囲外です。 - 書き込みに失敗しました。 - 分析に失敗しました。 - 509 + 書き込めませんでした + ファイル解析に失敗しました。 + 509エラー 無効なリンクです。 pTokenの取得に失敗しました。 ギャラリーのキーワードのフォーマット:「618395 0439fa3666」 - 臨時ファイルを作成できませんでした + 一時ファイルを作成できませんでした 画像を保存できませんでした 無効な数字です From 252dcb617528436d78f899307f0041048be87020 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Thu, 12 Jul 2018 11:24:13 +0800 Subject: [PATCH 155/630] Corrections --- app/src/main/res/values-fr/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f06453bef..e58e5d98b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -157,16 +157,16 @@ Recherche rapide Appuyez sur \"+\" pour ajouter une Recherche rapide - Ajouter la recherche rapide + Ajouter la Recherche rapide Entrez un nom Supprimer - Supprimer les recherches rapides + Supprimer les Recherches rapides Supprimer \"%s\" ? Recherches rapides s\'afficheront ici. - Le resultat de la liste de galerie sera sauvegardé comme une recherche rapide. Cherchez d\'abord pour sauvegarder l\'état du panneau recherche. + Le resultat de la liste de galerie sera sauvegardé comme une Recherche rapide. Cherchez d\'abord pour sauvegarder l\'état du panneau recherche. README - Impossible d\'ajouter recherche d\'une image comme une recherche rapide. - Une même recherche rapide déjà existe. Son nom est \"%s\". + Impossible d\'ajouter recherche d\'une image comme une Recherche rapide. + Une Recherche rapide avec le nom \"%s\" déjà existe. Ce nom déjà existe Page %1$d, avec un totale de %2$d pages From 6f99f5a226ce61648cbfdc6750a441ad73a09979 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Thu, 12 Jul 2018 13:55:35 +0800 Subject: [PATCH 156/630] Fix translations --- app/src/main/res/values-fr/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e58e5d98b..81d598866 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -448,7 +448,7 @@ Continuer Permettre le scannage des fiches multimédias Ne montre jamais vos applications galerie à personne - La plupart d\'applications galerie ignore les images dans le chemin de téléchargement + La plupart d\'applications galerie ignorent les images dans le chemin de téléchargement Téléchargement multi-thread Jusqu\'à %s image(s) Charger les images d\'avance @@ -456,7 +456,7 @@ Resolution d\'image %s, résolutions mieux que 1280x riquent de ne pas fonctionner Auto - Download original image + Télécharger l'images originales Vous allez obtenir l\'erreur 509 plus facilement Rétablir les galeries téléchargées Rétablir tous objets déjà téléchargés dans la destination de téléchargement From 3cbf5d0a8fdf5b129d4017ceab1bce603fd1b760 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 16 Jul 2018 13:56:07 +0800 Subject: [PATCH 157/630] Disable no media file checker at during startup --- .../java/com/hippo/ehviewer/EhApplication.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index 5f5e57926..7f6bff68d 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -111,13 +111,14 @@ public void onCreate() { Analytics.start(this); } - // Check no media file - UniFile downloadLocation = Settings.getDownloadLocation(); - if (Settings.getMediaScan()) { - CommonOperations.removeNoMediaFile(downloadLocation); - } else { - CommonOperations.ensureNoMediaFile(downloadLocation); - } + // Disable no media file checker for now. Some devices stuck here. +// // Check no media file +// UniFile downloadLocation = Settings.getDownloadLocation(); +// if (Settings.getMediaScan()) { +// CommonOperations.removeNoMediaFile(downloadLocation); +// } else { +// CommonOperations.ensureNoMediaFile(downloadLocation); +// } // Clear temp dir clearTempDir(); From c71729c560f8e58015e3137e5795b15de942ed8a Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 15:45:12 +0800 Subject: [PATCH 158/630] Correcting sentences --- app/src/main/res/values-de/strings.xml | 40 +++++++++++++------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 64f2e792e..2659e91f5 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -29,8 +29,8 @@ In Ordnung! Sie sind absolut korrekt! Cookies werden gefunden - Der Downloadspfad ist nicht verfügbar. Geh zu die Einstellungen und stelle einen neue Pfad fest, - Verbunden zu die mobile Daten. + Der Downloadpfad ist nicht verfügbar. Geh zu die Einstellungen und stelle einen neue Pfad fest, + Zu den mobilen Daten verbunden. Inkorrekter Statuscode: %d Timeout Unbekannter Hostcomputer @@ -54,7 +54,7 @@ Fehler beim Erhalten pTokens Das Schlüsselwort müsste wie 618395 0439fa3666 aussehen, um eine Galerie zu specifieren Die Temporäre Datei konnte erstellt nicht werden - Das Bild konnte gespeichert nicht werden + Das Bild konnte nicht gespeichert werden Nummer ungültig Darf der Entwickler die Informationen deines Geräts und deiner Nutzung einsammeln? Diese Informationen sind für die Entwicklung sehr nützlich.<br><br>Daten-Analyse ist von Google Analytics zur Verfügung gestellt, dessen Datenschutz-Bestimmungen auf <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a>verfügbar sind.<br><br>Wenn du die Daten-Analyse teilnimmst, werden Informationen deines Geräts und deiner Nutzung, z. B. die Android API-Version, das Gerätsmodell, die Sprache, die App-Version, die Sessionszeit, eingesammelt. Der Entwickler verspricht, dass private Informationen wie deine Telefonnummer, deine E-Mail-Adresse, die IMEI usw., eingesammelt nicht werden.<br><br>Falls du die Daten-Analyse nicht teilnimmst, wird keine Information eingesammelt.<br><br>Die eingesammelten Informationen werden von Google Analytics analysiert. Nur der Entwickler kann auf den Analyse-Bericht zugreifen. Verstanden @@ -132,7 +132,7 @@ Keine Vorschau Keine weiteren Vorschauen Weitere Vorschauen - Aktualisieren + Neu laden Öffnen mit … Bewertung erfolgreich Bewertung fehlgeschlagen @@ -272,7 +272,7 @@ Mit Fingerabdrücke entsperren EHentai-Einstellungen Übernehmen - Zum Speichern der Einstellungen an das Häkchen tippen + Zum Speichern der Einstellungen ans Häkchen tippen Angepasstes hosts.txt hosts.txt Host @@ -364,15 +364,15 @@ Helligkeit manuell festlegen Helligkeit Download - Ziel des Downloads - Ungültiges Downloadsziel - Downloadsziel konnte nicht geladen werden - Android 5.0+ stellt eine neue API breit, die erlaubt, Daten auf SD-Karte zu schreiben. Auf DOKUMENT antippen, um SD-Karte als Downloadsziel festzulegen + Downloadziel + Ungültiges Downloadziel + Downloadziel konnte nicht geladen werden + Android 5.0+ stellt eine neue API breit, die erlaubt, Daten auf SD-Karte zu schreiben. Auf DOKUMENT antippen, um SD-Karte als Downloadziel festzulegen Dokument Weiter Medienscan erlauben Du solltest deine Galerie von anderen verstecken - Meisten Galerie-Apps ignorieren die Bilder im Downloadspfad + Meisten Galerie-Apps ignorieren die Bilder im Downloadpfad Multi-Thread-Download Bis zu %s Bild(er) Bilder vorabladen @@ -383,24 +383,24 @@ Originale Bilder herunterladen Wenn es aktiviert wird, wird der 509-Fehler dir schneller widerfahren Download-Elemente wiederherstellen - Alle Download-Elemente im Downloadspfad wiederherstellen + Alle Download-Elemente im Downloadpfad wiederherstellen Elemente werden wiederhergestellt Keine zu wiederhestellenden Elemente Wiederherstellung gescheitert %d Element(e) wiederhergestellt Unnötige Dateien löschen - Bilddateien, die sich im Downloadpfad befinden, aber nicht in Downloadsliste, löschen + Bilddateien, die sich im Downloadpfad befinden, aber nicht in Downloadliste, löschen Keine zu löschenden Dateien gefunden Reinigung abgeschlossen. %d Datei(en) wurde(n) gelöscht. Erweiterte Optionen HTML-Datei beim Parsing-Fehler speichern Die Datei könnte etwas privat enthalten Logcat-Protokoll speichern - Logcat-Protokoll-Datei auf externe Speicher speichern + Logcat-Protokoll-Datei auf externem Speicher speichern Speichern gescheitert Protokoll-Datei wurde auf %s gespeichert. - Downloadspfadzwischenspeicher löschen - Open Source-Lizenz + Downloadpfadzwischenspeicher löschen + Open Source-Lizenzen Verzeichnis auswählen Das Verzeichnis ist nicht beschreibbar Cloud-Favoriten @@ -454,19 +454,19 @@ Zum Wiederholen antippen EhViewer fordert jetzt die Genehmigung WRITE_EXTERNAL_STORAGE an, um die Galerie herunterzuladen. Die Genehmigung gewähren? Mir ist weh ums Herz - Wenn etwas ist dem Downloadspfad schiefgelaufen, den Downloadspfad reinigen, könnte das Problem lösen. - Downloadspfadzwischenspeicher löschen? + Wenn etwas dem Downloadpfad schiefgelaufen ist, den Downloadpfad reinigen, könnte das Problem lösen. + Downloadpfadszwischenspeicher löschen? Zwischenspeicher löschen Zwischenspeicher der Miniaturbilder und der Galerie-Info löschen Größe des Lesezwischenspeichers Standard-hosts.txt - Die App kann keine Daten auf Android 4.4 zu externen Speicher beschreiben, wenn du das System nicht hackst. Sie aber kann zu /Android/data/com.hippo.ehviewer beschreiben. + Die App kann keine Daten auf Android 4.4 zum externen Speicher beschreiben, wenn du das System nicht hackst. Sie aber kann zu /Android/data/com.hippo.ehviewer beschreiben. Google+ Community Webseite Quellcode Änderungsprotokoll Hilfe - Lizenz + Lizenzen EhViewer wurde dank viele Open Source-Projekte entwicklt. Spenden Alipay: seven332$163.com @@ -496,7 +496,7 @@ Kein Sperrmuster festgelegt Sperrmuster festgelegt Daten exportieren - Daten, z. B. Downloadsliste, Sofortsucheliste, zur externe Speicher speichern + Daten, z. B. Downloadliste, Sofortsucheliste, zum externen Speicher speichern Daten wurden zu %s exportiert Datenexport gescheitert Daten importieren From 3bce3c41f258a176bc20e889acceec1fc5a7a409 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 15:47:02 +0800 Subject: [PATCH 159/630] Some corrections --- app/src/main/res/values-ja/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 236f9ad15..dc9553f01 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -207,8 +207,8 @@ トレント 追加済み 未追加 - お気に入りに追加しました。 - お気に入りを記憶します。 + お気に入りに追加 + お気に入りを記憶 お気に入りに追加しました。 お気に入りから削除しました。 お気に入りに追加失敗しました。 From e9d1ce172070570c2d6449b6d3ccf63170b9e084 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 15:51:31 +0800 Subject: [PATCH 160/630] Some corrections --- app/src/main/res/values-ja/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index dc9553f01..b85ea3fbf 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -470,7 +470,7 @@ ログを外部ストレージに保存 ログをエクスポートできませんでした ログを%sにエクスポートしました - ギャラリーのダウンロード パス キャッシュをクリア + ギャラリーのダウンロードパスをクリア ギャラリーのダウンロード パス キャッシュをクリアしますか? メモリキャッシュをクリア サムネイルとギャラリー情報のメモリキャッシュをクリア From de16081c792865ec391f91842fa4ba4ec5aea0db Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 15:55:00 +0800 Subject: [PATCH 161/630] Some corrections --- app/src/main/res/values-es/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ccd56ef3b..4290fa391 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -234,7 +234,7 @@ Publicado Padre Visible - Lenguaje + Idioma Páginas Tamaño Número de favoritos @@ -457,7 +457,7 @@ Borrar caché de memoria Borrar vistas previas, galerías, información y caché de memoria Tamaño del caché (archivos temporales) - Lenguaje de la aplicación + Idioma de la aplicación Protección por patrón No se ha configurado la protección por patrón La protección por patrón ha sido configurado From e1c88c53f3c1ccbef07f68183abe5647e3c932a9 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 15:57:41 +0800 Subject: [PATCH 162/630] Some more corrections --- app/src/main/res/values-es/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 4290fa391..f0db155ad 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -632,7 +632,7 @@ Ajustes EHentai Aplicar Toca la marca de verificación para guardar los cambios - Personalizado hosts.txt + hosts.txt personalizado hosts.txt Anfitrión IP From 1e31052767cd8ddf4c0e7a278fc9473eaeab5ccc Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 16:16:22 +0800 Subject: [PATCH 163/630] Some fixes --- app/src/main/res/values-ja/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index b85ea3fbf..fc416279f 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -362,7 +362,7 @@ ブックマークに追加 メニュー 画像を共有 - 画像は%sに保存された + 画像は%sに保存されました EH From 511d70838ad112784b637e8a3a3947d54a9c9a59 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 18:06:24 +0800 Subject: [PATCH 164/630] Fix more translations --- app/src/main/res/values-de/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2659e91f5..f3fc6b418 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -16,7 +16,7 @@ Anmelden Konto erstellen Mit WebView anmelden - Mit die Cookies anmelden + Mit den Cookies anmelden Spitzname eingeben Spitzname Spitzname wird nicht eingegeben @@ -310,7 +310,7 @@ Kurz Größe des Miniaturbilds Groß - Mittelteil + Mittel Klein Auslösung der Miniaturbilder Nun %s. Mit abnormale Auslösung kann die Miniaturbilder nicht normalerweise geladen werden. @@ -450,7 +450,7 @@ Gibt das Passwort ein Anmeldung überspringen Anmeldung fehlgeschlagen - Der Fehler könnte wegen des Updates der Webseite aufgetretet werden. Versuche, dich anzumelden, indem du WebView benutzt oder Cookie eingeben, oder überspringe die Anmeldung mit die Taste unter ANMELDEN-Taste. Du könntest aber den Sad Panda sehen, wenn du dich nicht anmelden. Falls du dich mit Version unter 0.6.x anmeldetest, versuche, dich mit Cookie anzumelden. + Der Fehler könnte wegen des Updates der Webseite aufgetretet werden. Versuche, dich anzumelden, indem du WebView benutzt oder Cookie eingeben, oder überspringe die Anmeldung mit der Taste unter ANMELDEN-Taste. Du könntest aber den Sad Panda sehen, wenn du dich nicht anmelden. Falls du dich mit Version unter 0.6.x anmeldetest, versuche, dich mit Cookie anzumelden. Zum Wiederholen antippen EhViewer fordert jetzt die Genehmigung WRITE_EXTERNAL_STORAGE an, um die Galerie herunterzuladen. Die Genehmigung gewähren? Mir ist weh ums Herz @@ -478,7 +478,7 @@ Auf Update überprüfen Auf Updates automatisch überprüfen Beta-Version testen - Beta-Version könnte nicht funktionieren + Beta-Version kann funktionieren möglicherweise nicht Aktivieren Aktiviert Nicht aktiviert From 71396bc63231cc43e111abc5aaade77c486f668c Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 18:10:27 +0800 Subject: [PATCH 165/630] Fix translation --- app/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index f3fc6b418..3cecb8531 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -485,7 +485,7 @@ IP Port Schlüssel - Die Domain ist nicht unterstützt. + Der Domain ist nicht unterstützt. Ungültiger Port Datenverzeichnis konnte geladen werden Keine Daten gefunden From 1d03d356854ac46cfe16420d3521519d514637e5 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 18:13:00 +0800 Subject: [PATCH 166/630] Fix translation --- app/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 3cecb8531..d670e3f15 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -444,7 +444,7 @@ Datenschutzoptionen Screenshot verhindern Screenshots werden verhindert. Inhalt der App wird in Aktuelle Apps-Liste nicht angezeigt. - Daran erneut antippen, um die App zu beenden + Darauf erneut antippen, um die App zu beenden Inhalt dieser App kommt aus dem Internet, von dem einige dir körperlichen oder emotionalen Schaden zufügen kann. Du hast es wirklich erfahrt und möchtest immer noch fortsetzen. Gibt den Nutzername ein Gibt das Passwort ein From 145b6523e940904b3cde329feb0477ff9e372a3a Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 18:17:01 +0800 Subject: [PATCH 167/630] Fixed grammar --- app/src/main/res/values-de/strings.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index d670e3f15..2914a9fac 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -73,11 +73,11 @@ E-Hentai durchsuchen Die Welt ist so groß und der Panda sitzt ganz allein Suchen - "Suche nach das Schlüsselwort " - Suche nach ein Bild + "Suche nach dem Schlüsselwort " + Suche nach einem Bild Normale Suche Erweiterte Optionen - Suche nach ein Bild + Suche nach einem Bild Normale Suche Einen Uploader spezifizieren Ein Etikett spezifizieren @@ -124,7 +124,7 @@ Teilen Bewerten Ähnlich - Nach den Umschlag suchen + Nach dem Umschlag suchen Kein Etikett Kein Kommentar Keine weiteren Kommentare @@ -344,9 +344,9 @@ Von oben nach unter Seitenskalierung Originale Größe - Nach die Länge anpassen - Nach die Höhe anpassen - Nach den Bildschirm anpassen + Nach der Länge anpassen + Nach der Höhe anpassen + Nach dem Bildschirm anpassen Festgesetzte Größe Seiten umblättern von Oben links From 6fdab6f89c4c69e5479dfc3c3ce5a815dde5222e Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Tue, 17 Jul 2018 19:55:16 +0800 Subject: [PATCH 168/630] Fix a typo --- app/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2914a9fac..fd61c757f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -189,7 +189,7 @@ Keine Kommentare Kommentar erfolgreich gesendet Kommentar nicht gesendet - Inhant des Kommentars kopieren + Inhalt des Kommentars kopieren Für den Kommentar stimmen Positive Stimmung abbrechen Gegen den Kommentar stimmen From 4580d781db955d230fb4415c90302007eb35bbf0 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Wed, 18 Jul 2018 11:25:27 +0800 Subject: [PATCH 169/630] Correct a typo --- app/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index fd61c757f..9909f1f7a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -272,7 +272,7 @@ Mit Fingerabdrücke entsperren EHentai-Einstellungen Übernehmen - Zum Speichern der Einstellungen ans Häkchen tippen + Zum Speichern der Einstellungen aufHäkchen tippen Angepasstes hosts.txt hosts.txt Host From 2e899f5fa83d4504c830f96ded38a27763f80e5f Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 20 Jul 2018 14:03:43 +0800 Subject: [PATCH 170/630] SSLException is network error --- app/src/main/java/com/hippo/util/ExceptionUtils.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/hippo/util/ExceptionUtils.java b/app/src/main/java/com/hippo/util/ExceptionUtils.java index e5648e450..a437ff9b3 100644 --- a/app/src/main/java/com/hippo/util/ExceptionUtils.java +++ b/app/src/main/java/com/hippo/util/ExceptionUtils.java @@ -18,19 +18,17 @@ import android.support.annotation.NonNull; - import com.hippo.ehviewer.GetText; import com.hippo.ehviewer.R; import com.hippo.ehviewer.client.exception.EhException; import com.hippo.network.StatusCodeException; - -import org.apache.http.conn.ConnectTimeoutException; - import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.UnknownHostException; +import javax.net.ssl.SSLException; +import org.apache.http.conn.ConnectTimeoutException; public final class ExceptionUtils { @@ -56,7 +54,7 @@ public static String getReadableString(@NonNull Exception e) { return sb.toString(); } else if (e instanceof ProtocolException && e.getMessage().startsWith("Too many follow-up requests:")) { return GetText.getString(R.string.error_redirection); - } else if (e instanceof ProtocolException || e instanceof SocketException) { + } else if (e instanceof ProtocolException || e instanceof SocketException || e instanceof SSLException) { return GetText.getString(R.string.error_socket); } else if (e instanceof EhException) { return e.getMessage(); From fce659c41cb0f06b683ac951d45a7d1f9ee1a8c8 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 23 Jul 2018 19:13:53 +0800 Subject: [PATCH 171/630] Fix error_bad_status_code chinese string --- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rHK/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 69f8ce339..77fc95a58 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -60,7 +60,7 @@ 发现画廊 剪切板里有画廊链接,要不要看看? - 错误的状态码:%d + 错误状态码:%d 超时 未知主机 太多重定向 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 87f818133..10194edd7 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -60,7 +60,7 @@ 發現畫廊 剪切板裏有畫廊鏈接,要不要看看? - 錯誤的狀態碼:%d + 錯誤狀態碼:%d 超時 未知主機 太多重定向 From 7feb5552c16c2426582d1547d5d9c79eb0046502 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 30 Jul 2018 10:03:24 +0800 Subject: [PATCH 172/630] Always print errors in EhEngine --- .../java/com/hippo/ehviewer/client/EhEngine.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java index 0225eb6ec..87db1b1ec 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -92,7 +92,7 @@ public static void initialize() { sEhFilter = EhFilter.getInstance(); } - private static void throwException(Call call, int code, @Nullable Headers headers, + private static void doThrowException(Call call, int code, @Nullable Headers headers, @Nullable String body, Exception e) throws Exception { if (call.isCanceled()) { throw new CancelledException(); @@ -119,6 +119,18 @@ private static void throwException(Call call, int code, @Nullable Headers header if (code >= 400) { throw new StatusCodeException(code); } + + throw e; + } + + private static void throwException(Call call, int code, @Nullable Headers headers, + @Nullable String body, Exception e) throws Exception { + try { + doThrowException(call, code, headers, body, e); + } catch (Throwable error) { + error.printStackTrace(); + throw error; + } } public static String signIn(@Nullable EhClient.Task task, OkHttpClient okHttpClient, From c4934fc89e8bb375980c8f94fd34bcf849979c21 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 30 Jul 2018 10:20:24 +0800 Subject: [PATCH 173/630] Fix translations --- app/src/main/res/values-de/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 9909f1f7a..88f9063c6 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -88,8 +88,8 @@ Nach Galeriebeschreibungen suchen Nach Torrentdateien suchen Nur die Galerien mit Torrentdateien anzeigen - Nach unwichtige Etiketten suchen - Nach unerwünschte Etiketten suchen + Nach unwichtigen Etiketten suchen + Nach unerwünschten Etiketten suchen Gelöschte Galerien anzeigen Mindestpunktzahl: Bild wählen @@ -312,8 +312,8 @@ Groß Mittel Klein - Auslösung der Miniaturbilder - Nun %s. Mit abnormale Auslösung kann die Miniaturbilder nicht normalerweise geladen werden. + Auflösung der Miniaturbilder + Nun %s. Mit abnormale Auflösung kann die Miniaturbilder nicht normalerweise geladen werden. Automatisch Link der Miniaturbilder reparieren Auf Startseite angezeigte Kategorie @@ -377,8 +377,8 @@ Bis zu %s Bild(er) Bilder vorabladen Die nächste %s Bilder vorabladen - Auslösung der Bilder - %s. Auslösung über 1280x funktioniert möglicherweise nicht + Auflösung der Bilder + %s. Auflösung über 1280x funktioniert möglicherweise nicht Automatisch Originale Bilder herunterladen Wenn es aktiviert wird, wird der 509-Fehler dir schneller widerfahren From 2cc140eaf41f2ce72941f2aeb77dd17d1535a519 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 30 Jul 2018 10:29:31 +0800 Subject: [PATCH 174/630] Translations fix --- app/src/main/res/values-de/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 88f9063c6..1d1bf5367 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -329,7 +329,7 @@ Nicht festgelegt Japanische Titel anzeigen Versuchen, japanische Titel anzuzeigen. Es wird länger dauern, Galerieliste zu laden. - Standard-Titel anzeigen. Sie sind oft in Englisch. + Standardtitel anzeigen. Sie sind oft in Englisch. Filter Nach Titel, Hochlader, Etikett und Etikett-Namensraum filtern Achtung auf mobile Daten anzeigen @@ -396,9 +396,9 @@ HTML-Datei beim Parsing-Fehler speichern Die Datei könnte etwas privat enthalten Logcat-Protokoll speichern - Logcat-Protokoll-Datei auf externem Speicher speichern + Logcat-Protokolldatei auf externem Speicher speichern Speichern gescheitert - Protokoll-Datei wurde auf %s gespeichert. + Protokolldatei wurde auf %s gespeichert. Downloadpfadzwischenspeicher löschen Open Source-Lizenzen Verzeichnis auswählen @@ -467,7 +467,7 @@ Änderungsprotokoll Hilfe Lizenzen - EhViewer wurde dank viele Open Source-Projekte entwicklt. + EhViewer wurde dank vieler Open Source-Projekte entwicklt. Spenden Alipay: seven332$163.com Deine Spende hilft mir dabei, mehr gute Apps zu entwickln From 9514d42032490dd3449ee83e4e48c48367595409 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 30 Jul 2018 10:32:18 +0800 Subject: [PATCH 175/630] Fix translations --- app/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 1d1bf5367..2d5cab465 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -430,7 +430,7 @@ Seiten umblättern Menü Fortschitt - Drücken und halten, um Seite-Menü zu öffnen + Drücken und halten, um Seitemenü zu öffnen Von der Zukunft Gerade Gestern From 5290340b971a0c0b28043414973372bedb2a57d8 Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 6 Aug 2018 13:25:12 +0800 Subject: [PATCH 176/630] Show gallery pages --- app/src/main/java/com/hippo/ehviewer/Settings.java | 7 +++++++ .../java/com/hippo/ehviewer/client/EhEngine.java | 4 ++-- .../hippo/ehviewer/client/data/GalleryInfo.java | 1 + .../ehviewer/client/parser/GalleryApiParser.java | 1 + .../hippo/ehviewer/ui/scene/GalleryAdapter.java | 14 ++++++++++++-- .../com/hippo/ehviewer/ui/scene/GalleryHolder.java | 2 ++ app/src/main/res/layout/item_gallery_list.xml | 11 ++++++++++- app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values-zh-rHK/strings.xml | 2 ++ app/src/main/res/values-zh-rTW/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/eh_settings.xml | 6 ++++++ 12 files changed, 49 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 097d5aaff..3d5bd6d9e 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -314,6 +314,13 @@ public static boolean getShowJpnTitle() { return getBoolean(KEY_SHOW_JPN_TITLE, DEFAULT_SHOW_JPN_TITLE); } + private static final String KEY_SHOW_GALLERY_PAGES = "show_gallery_pages"; + private static final boolean DEFAULT_SHOW_GALLERY_PAGES = false; + + public static boolean getShowGalleryPages() { + return getBoolean(KEY_SHOW_GALLERY_PAGES, DEFAULT_SHOW_GALLERY_PAGES); + } + public static final String KEY_DEFAULT_CATEGORIES = "default_categories"; public static final int DEFAULT_DEFAULT_CATEGORIES = EhUtils.ALL_CATEGORY; diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java index 87db1b1ec..4fe690d8f 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -209,7 +209,7 @@ public static GalleryListParser.Result getGalleryList(@Nullable EhClient.Task ta } } - if (list.size() > 0 && (Settings.getShowJpnTitle() || sEhFilter.needCallApi())) { + if (list.size() > 0 && (Settings.getShowJpnTitle() || Settings.getShowGalleryPages() || sEhFilter.needCallApi())) { // Fill by api fillGalleryListByApi(task, okHttpClient, list); @@ -905,7 +905,7 @@ public static GalleryListParser.Result imageSearch(@Nullable EhClient.Task task, } } - if (list.size() > 0 && (Settings.getShowJpnTitle() || sEhFilter.needCallApi())) { + if (list.size() > 0 && (Settings.getShowJpnTitle() || Settings.getShowGalleryPages() || sEhFilter.needCallApi())) { // Fill by api fillGalleryListByApi(task, okHttpClient, list); diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java b/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java index 3f94a14ab..d63f66d06 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java +++ b/app/src/main/java/com/hippo/ehviewer/client/data/GalleryInfo.java @@ -90,6 +90,7 @@ public class GalleryInfo implements Parcelable { public float rating; @Nullable public String[] simpleTags; + public int pages; public int thumbWidth; public int thumbHeight; diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryApiParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryApiParser.java index cd0897233..c319a77da 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryApiParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryApiParser.java @@ -53,6 +53,7 @@ public static void parse(String body, List galleryInfoList) throws tags[j] = tagJa.getString(j); } gi.simpleTags = tags; + gi.pages = Integer.parseInt(g.getString("filecount")); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java index d49ea2d7f..defa0414f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java @@ -27,8 +27,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.RelativeLayout; import android.widget.TextView; - import com.hippo.drawable.TriangleDrawable; import com.hippo.easyrecyclerview.MarginItemDecoration; import com.hippo.ehviewer.R; @@ -38,7 +38,6 @@ import com.hippo.ehviewer.client.data.GalleryInfo; import com.hippo.ehviewer.widget.TileThumb; import com.hippo.widget.recyclerview.AutoStaggeredGridLayoutManager; - import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -179,6 +178,17 @@ public void onBindViewHolder(GalleryHolder holder, int position) { category.setBackgroundColor(EhUtils.getCategoryColor(gi.category)); } holder.posted.setText(gi.posted); + if (gi.pages == 0) { + holder.pages.setText(null); + RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) holder.simpleLanguage.getLayoutParams(); + lp.addRule(RelativeLayout.LEFT_OF, 0); + lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + } else { + holder.pages.setText(Integer.toString(gi.pages) + "P"); + RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) holder.simpleLanguage.getLayoutParams(); + lp.addRule(RelativeLayout.LEFT_OF, R.id.pages); + lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 0); + } holder.simpleLanguage.setText(gi.simpleLanguage); break; } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.java index 8844cf8e3..6a0537dc5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryHolder.java @@ -32,6 +32,7 @@ class GalleryHolder extends RecyclerView.ViewHolder { public final SimpleRatingView rating; public final TextView category; public final TextView posted; + public final TextView pages; public final TextView simpleLanguage; public GalleryHolder(View itemView) { @@ -43,6 +44,7 @@ public GalleryHolder(View itemView) { rating = (SimpleRatingView) itemView.findViewById(R.id.rating); category = (TextView) itemView.findViewById(R.id.category); posted = (TextView) itemView.findViewById(R.id.posted); + pages = (TextView) itemView.findViewById(R.id.pages); simpleLanguage = (TextView) itemView.findViewById(R.id.simple_language); } } diff --git a/app/src/main/res/layout/item_gallery_list.xml b/app/src/main/res/layout/item_gallery_list.xml index 203017040..dff879511 100644 --- a/app/src/main/res/layout/item_gallery_list.xml +++ b/app/src/main/res/layout/item_gallery_list.xml @@ -81,7 +81,7 @@ android:layout_marginBottom="4dp"/> + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 77fc95a58..49eec549d 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -418,6 +418,8 @@ 显示日文标题 尝试显示日文标题。这会使获取画廊列表花费更多时间 显示默认标题。一般是英文标题 + 显示画廊页数 + 在画廊列表中显示页数。这会使获取画廊列表花费更多时间 过滤 过滤标题,上传者,标签和标签组 移动网络警告 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 10194edd7..66f203a21 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -417,6 +417,8 @@ 顯示日文標題 嘗試顯示日文標題。這會使獲取畫廊列表花費更多時間 顯示默認標題。一般是英文標題 + 顯示畫廊頁數 + 在畫廊列表中顯示頁數。這會使獲取畫廊列表花費更多時間 過濾 過濾標題,上傳者,標籤和標籤組 移動網絡警告 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 3595873de..b5665592e 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -417,6 +417,8 @@ 顯示日文標題 嘗試顯示日文標題。這會使取得圖庫列表時間增加 顯示預設的標題。通常是英文的 + 顯示圖庫頁數 + 在圖庫列表中顯示頁數。這會使取得圖庫列表時間增加 篩選 篩選標題,上傳者,標籤和標籤命名空間 行動數據警告 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 49ce650eb..071cc1bcc 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -461,6 +461,8 @@ Show Japanese title Try to show Japanese title. It takes more time to get gallery list Show default title. It is usually English title + Show gallery pages + Display the number of pages in the gallery list. It takes more time to get gallery list Filter Filter by title, uploader, tag and tag namespace Cellular network warning diff --git a/app/src/main/res/xml/eh_settings.xml b/app/src/main/res/xml/eh_settings.xml index 8c1d24a8a..a260b5e76 100644 --- a/app/src/main/res/xml/eh_settings.xml +++ b/app/src/main/res/xml/eh_settings.xml @@ -82,6 +82,12 @@ app:summaryOff="@string/settings_eh_show_jpn_title_summary_off" android:defaultValue="false"/> + + Date: Tue, 7 Aug 2018 14:02:04 +0800 Subject: [PATCH 177/630] Android Studio 3.1.4 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4651013de..710c0217d 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "https://jitpack.io" } } dependencies { - classpath 'com.android.tools.build:gradle:3.1.3' + classpath 'com.android.tools.build:gradle:3.1.4' classpath 'com.github.seven332:android-chinese-string-gradle-plugin:0.1.0' // NOTE: Do not place your application dependencies here; they belong From 18881e549f3e906522e7832a1ef1bad5eb949706 Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 15 Aug 2018 21:54:35 +0800 Subject: [PATCH 178/630] Save gallery toke to saved filename --- .../main/java/com/hippo/ehviewer/gallery/EhGalleryProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/EhGalleryProvider.java b/app/src/main/java/com/hippo/ehviewer/gallery/EhGalleryProvider.java index 19d2f1d43..b9621c460 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/EhGalleryProvider.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/EhGalleryProvider.java @@ -73,7 +73,7 @@ public int getStartPage() { @NonNull @Override public String getImageFilename(int index) { - return String.format(Locale.US, "%d-%08d", mGalleryInfo.gid, index + 1); + return String.format(Locale.US, "%d-%s-%08d", mGalleryInfo.gid, mGalleryInfo.token, index + 1); } @Override From 021fe45c8d976b38f207aec3c34c6d6ad6853e72 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 1 Sep 2018 20:56:43 +0800 Subject: [PATCH 179/630] Fix string format in zh-rTW translation --- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index b5665592e..e891d61de 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -298,7 +298,7 @@ %s 下載失敗 移除下載佇列 將 %s 從下載佇列中移除嗎? - 從下載佇列中移除 %s 項任務嗎? + 從下載佇列中移除 %d 項任務嗎? 刪除圖檔 全部停止 標籤 From d5c788fe80bf4cc7b0c1dfd710ed721f086c7a5d Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 2 Sep 2018 01:25:43 +0800 Subject: [PATCH 180/630] Add resetting reading progress --- .../ehviewer/download/DownloadManager.java | 49 +++++++++++++++++++ .../ehviewer/ui/scene/DownloadsScene.java | 11 +++++ app/src/main/res/menu/scene_download.xml | 5 ++ app/src/main/res/values-zh-rCN/strings.xml | 2 + app/src/main/res/values-zh-rHK/strings.xml | 2 + app/src/main/res/values-zh-rTW/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 7 files changed, 73 insertions(+) diff --git a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java index 55655e689..90c2f8266 100644 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java +++ b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java @@ -16,7 +16,9 @@ package com.hippo.ehviewer.download; +import android.annotation.SuppressLint; import android.content.Context; +import android.os.AsyncTask; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; @@ -25,8 +27,11 @@ import com.hippo.ehviewer.client.data.GalleryInfo; import com.hippo.ehviewer.dao.DownloadInfo; import com.hippo.ehviewer.dao.DownloadLabel; +import com.hippo.ehviewer.spider.SpiderDen; +import com.hippo.ehviewer.spider.SpiderInfo; import com.hippo.ehviewer.spider.SpiderQueen; import com.hippo.image.Image; +import com.hippo.unifile.UniFile; import com.hippo.yorozuya.ConcurrentPool; import com.hippo.yorozuya.MathUtils; import com.hippo.yorozuya.ObjectUtils; @@ -35,6 +40,7 @@ import com.hippo.yorozuya.collect.SparseIJArray; import com.hippo.yorozuya.collect.SparseJLArray; +import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -562,6 +568,49 @@ public void deleteRangeDownload(LongList gidList) { } } + @SuppressLint("StaticFieldLeak") + public void resetAllReadingProgress() { + LinkedList list = new LinkedList<>(mAllInfoList); + + new AsyncTask() { + @Override + protected Void doInBackground(Void... voids) { + GalleryInfo galleryInfo = new GalleryInfo(); + for (DownloadInfo downloadInfo : list) { + galleryInfo.gid = downloadInfo.gid; + galleryInfo.token = downloadInfo.token; + galleryInfo.title = downloadInfo.title; + galleryInfo.thumb = downloadInfo.thumb; + galleryInfo.category = downloadInfo.category; + galleryInfo.posted = downloadInfo.posted; + galleryInfo.uploader = downloadInfo.uploader; + galleryInfo.rating = downloadInfo.rating; + + UniFile downloadDir = SpiderDen.getGalleryDownloadDir(galleryInfo); + if (downloadDir == null) { + continue; + } + UniFile file = downloadDir.findFile(".ehviewer"); + if (file == null) { + continue; + } + SpiderInfo spiderInfo = SpiderInfo.read(file); + if (spiderInfo == null) { + continue; + } + spiderInfo.startPage = 0; + + try { + spiderInfo.write(file.openOutputStream()); + } catch (IOException e) { + Log.e(TAG, "Can't write SpiderInfo", e); + } + } + return null; + } + }.execute(); + } + // Update in DB // Update listener // No ensureDownload diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java index 38265a0d8..145f34db7 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.java @@ -489,6 +489,17 @@ public boolean onMenuItemClick(MenuItem item) { } return true; } + case R.id.action_reset_reading_progress: { + new AlertDialog.Builder(getContext()) + .setMessage(R.string.reset_reading_progress_message) + .setNegativeButton(android.R.string.cancel, null) + .setPositiveButton(android.R.string.ok, (dialog, which) -> { + if (mDownloadManager != null) { + mDownloadManager.resetAllReadingProgress(); + } + }).show(); + return true; + } } return false; } diff --git a/app/src/main/res/menu/scene_download.xml b/app/src/main/res/menu/scene_download.xml index 42edfcb1c..bcab66f8e 100644 --- a/app/src/main/res/menu/scene_download.xml +++ b/app/src/main/res/menu/scene_download.xml @@ -31,4 +31,9 @@ android:title="@string/download_stop_all" app:showAsAction="ifRoom"/> + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 49eec549d..6aa2b0de9 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -307,6 +307,8 @@ 下载标签 全部开始 全部停止 + 重置阅读进度 + 重置所有已下载画廊的阅读进度? EhViewer 下载服务 %s %1$s,剩余 %2$s diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 66f203a21..6db50111e 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -307,6 +307,8 @@ 下載標籤 全部開始 全部停止 + 重置阅读进度 + 重置所有已下载画廊的阅读进度? EhViewer 下載服務 %s %1$s,剩餘 %2$s diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e891d61de..2a3716d51 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -307,6 +307,8 @@ 下載標籤 全部開始 全部停止 + 重置閱讀進度 + 重置所有已下載圖庫的閱讀進度? EhViewer 下載服務 %s %1$s,剩餘 %2$s diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 071cc1bcc..389733204 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -351,6 +351,8 @@ Download labels Start all Stop all + Reset reading progress + Reset the reading progress of all downloaded galleries? EhViewer Download Service %s %1$s, %2$s left From a69f36b6521f91420ea33c969c99e28873bea93e Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 2 Sep 2018 14:53:33 +0800 Subject: [PATCH 181/630] Don't cache gif while reading Update GLGallery --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 7b530c4ec..9a71f137b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -95,7 +95,7 @@ dependencies { configurations.all { resolutionStrategy { - force 'com.github.seven332:glgallery:f03e2be' + force 'com.github.seven332:glgallery:f63b1e3491' force 'com.github.seven332:glview-image:4c744db' force 'com.github.seven332:image:bab9b11' From dc697af0817dbdfe6c61f8977f578865bb7045aa Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 14 Sep 2018 13:32:03 +0800 Subject: [PATCH 182/630] Show identity cookies --- .../preference/IdentityCookiePreference.java | 105 ++++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 5 + app/src/main/res/values-zh-rHK/strings.xml | 5 + app/src/main/res/values-zh-rTW/strings.xml | 5 + app/src/main/res/values/strings.xml | 5 + app/src/main/res/xml/eh_settings.xml | 5 + 6 files changed, 130 insertions(+) create mode 100644 app/src/main/java/com/hippo/ehviewer/preference/IdentityCookiePreference.java diff --git a/app/src/main/java/com/hippo/ehviewer/preference/IdentityCookiePreference.java b/app/src/main/java/com/hippo/ehviewer/preference/IdentityCookiePreference.java new file mode 100644 index 000000000..155c5b976 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/preference/IdentityCookiePreference.java @@ -0,0 +1,105 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.ehviewer.preference; + +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.support.v7.app.AlertDialog; +import android.util.AttributeSet; +import android.widget.Toast; +import com.hippo.ehviewer.EhApplication; +import com.hippo.ehviewer.R; +import com.hippo.ehviewer.client.EhCookieStore; +import com.hippo.ehviewer.client.EhUrl; +import com.hippo.preference.MessagePreference; +import com.hippo.text.Html; +import java.util.LinkedList; +import java.util.List; +import okhttp3.Cookie; +import okhttp3.HttpUrl; + +public class IdentityCookiePreference extends MessagePreference { + + private String message; + + public IdentityCookiePreference(Context context) { + super(context); + init(); + } + + public IdentityCookiePreference(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public IdentityCookiePreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + EhCookieStore store = EhApplication.getEhCookieStore(getContext()); + List eCookies = store.getCookies(HttpUrl.get(EhUrl.HOST_E)); + List exCookies = store.getCookies(HttpUrl.get(EhUrl.HOST_EX)); + List cookies = new LinkedList<>(eCookies); + cookies.addAll(exCookies); + + String ipbMemberId = null; + String ipbPassHash = null; + String igneous = null; + + for (int i = 0, n = cookies.size(); i < n; i++) { + Cookie cookie = cookies.get(i); + switch (cookie.name()) { + case EhCookieStore.KEY_IPD_MEMBER_ID: + ipbMemberId = cookie.value(); + break; + case EhCookieStore.KEY_IPD_PASS_HASH: + ipbPassHash = cookie.value(); + break; + case EhCookieStore.KEY_IGNEOUS: + igneous = cookie.value(); + break; + } + } + + if (ipbMemberId != null || ipbPassHash != null || igneous != null) { + message = EhCookieStore.KEY_IPD_MEMBER_ID + ": " + ipbMemberId + "
" + + EhCookieStore.KEY_IPD_PASS_HASH + ": " + ipbPassHash + "
" + + EhCookieStore.KEY_IGNEOUS + ": " + igneous; + setDialogMessage(Html.fromHtml(getContext().getString(R.string.settings_eh_identity_cookies_signed, message))); + message = message.replace("
", "\n"); + } else { + setDialogMessage(getContext().getString(R.string.settings_eh_identity_cookies_tourist)); + } + } + + @Override + protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { + super.onPrepareDialogBuilder(builder); + if (message != null) { + builder.setPositiveButton(R.string.settings_eh_identity_cookies_copy, (dialog, which) -> { + ClipboardManager cmb = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); + cmb.setPrimaryClip(ClipData.newPlainText(null, message)); + Toast.makeText(getContext(), R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show(); + + IdentityCookiePreference.this.onClick(dialog, which); + }); + } + } +} diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 6aa2b0de9..42e1d00e2 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -391,6 +391,11 @@ 天哪,我的老伙计,你要退出登录吗?我是说,你真的要退出登录吗? 是的,我是说,真的 已退出登录,重启应用以便再次登录 + 身份 Cookie + 可用于登录 + 身份 Cookie 可用于登录该账号。<br><b>注意数据安全</b><br><br>%s + 未登录 + 复制 EHentai 设置 EHentai 网站上的设置 画廊站点 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 6db50111e..8c0667647 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -390,6 +390,11 @@ 天哪,我的老夥計,你要退出登錄嗎?我是説,你真的要退出登錄嗎? 是的,我是説,真的 已退出登錄,重啟應用以便再次登錄 + 身份 Cookie + 可用於登錄 + 身份 Cookie 可用於登錄該賬號。<br><b>注意數據安全</b><br><br>%s + 未登錄 + 複製 EHentai 設置 EHentai 網站上的設置 畫廊站點 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 2a3716d51..bb1a04081 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -390,6 +390,11 @@ 天哪,老兄,你真的要登出嗎?我是說,你真的要登出嗎? 沒錯,我是說,對 已登出,重新啟動程式以再次登入 + 身份 Cookie + 可用於登入 + 身份 Cookie 可用於登入該賬號。<br><b>注意資料安全</b><br><br>%s + 未登入 + 複製 EHentai 設定 EHentai 網站上的設定 圖庫站台 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 389733204..df2b0a330 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -434,6 +434,11 @@ Do you really want to sign out? @android:string/ok Signed out, restart the application to sign in + Identity cookies + It can be used to sign in + Identity cookies can be used to sign in to this account.<br><b>KEEP IT SAFE</b><br><br>%s + Not signed in. + Copy EHentai settings Settings on EHentai website Gallery site diff --git a/app/src/main/res/xml/eh_settings.xml b/app/src/main/res/xml/eh_settings.xml index a260b5e76..030f5f276 100644 --- a/app/src/main/res/xml/eh_settings.xml +++ b/app/src/main/res/xml/eh_settings.xml @@ -24,6 +24,11 @@ android:title="@string/settings_eh_sign_out" android:summary="@string/settings_eh_sign_out_summary"/> + + Date: Fri, 14 Sep 2018 13:33:32 +0800 Subject: [PATCH 183/630] Update libraries --- app/build.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9a71f137b..8890c6dc4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -84,20 +84,20 @@ dependencies { implementation 'com.github.seven332:yorozuya-thread:0.1.1' implementation 'com.github.seven332:yorozuya-collect:0.1.4' implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.9.2' - implementation 'com.squareup.okhttp3:okhttp:3.10.0' + implementation 'com.squareup.okhttp3:okhttp:3.11.0' implementation 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' implementation 'org.greenrobot:greendao:2.2.1' - implementation 'org.jsoup:jsoup:1.11.2' + implementation 'org.jsoup:jsoup:1.11.3' testImplementation 'junit:junit:4.12' - testImplementation 'org.robolectric:robolectric:3.4' + testImplementation 'org.robolectric:robolectric:3.8' testImplementation 'org.jooq:joor:0.9.6' } configurations.all { resolutionStrategy { - force 'com.github.seven332:glgallery:f63b1e3491' + force 'com.github.seven332:glgallery:c56b14c6fa' force 'com.github.seven332:glview-image:4c744db' - force 'com.github.seven332:image:bab9b11' + force 'com.github.seven332:image:bbf0bbb0a0' exclude group: 'com.github.seven332', module: 'okhttp' } From f8c5caf6bc7eefd4b8ef0c5d47da2fd3ecd06b2d Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 14 Sep 2018 19:15:39 +0800 Subject: [PATCH 184/630] Don't throw null exception --- app/src/main/java/com/hippo/ehviewer/client/EhEngine.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java index 4fe690d8f..7631803bd 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -120,7 +120,9 @@ private static void doThrowException(Call call, int code, @Nullable Headers head throw new StatusCodeException(code); } - throw e; + if (e != null) { + throw e; + } } private static void throwException(Call call, int code, @Nullable Headers headers, From 1cd8ef1b475893ae6e7f2e468efd5e527d6aaec1 Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 14 Sep 2018 19:35:02 +0800 Subject: [PATCH 185/630] Back up gallery list moved from local favourites to cloud favourites --- .../com/hippo/ehviewer/ui/scene/FavoritesScene.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 fe01d70e6..e4b353a4b 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 @@ -1023,13 +1023,14 @@ protected void getPageData(final int taskId, int type, int page) { gidArray[i] = gi.gid; tokenArray[i] = gi.token; } + List modifyGiListBackup = new ArrayList<>(mModifyGiList); mModifyGiList.clear(); EhRequest request = new EhRequest(); request.setMethod(EhClient.METHOD_ADD_FAVORITES_RANGE); request.setCallback(new AddFavoritesListener(getContext(), activity.getStageId(), getTag(), - taskId, mUrlBuilder.getKeyword())); + taskId, mUrlBuilder.getKeyword(), modifyGiListBackup)); request.setArgs(gidArray, tokenArray, mModifyFavCat); mClient.execute(request); } else { @@ -1129,12 +1130,14 @@ private static class AddFavoritesListener extends EhCallback mBackup; private AddFavoritesListener(Context context, int stageId, - String sceneTag, int taskId, String keyword) { + String sceneTag, int taskId, String keyword, List backup) { super(context, stageId, sceneTag); mTaskId = taskId; mKeyword = keyword; + mBackup = backup; } @Override @@ -1147,6 +1150,10 @@ public void onSuccess(Void result) { @Override public void onFailure(Exception e) { + // TODO It's a failure, add all of backup back to db. + // But how to known which one is failed? + EhDB.putLocalFavorites(mBackup); + FavoritesScene scene = getScene(); if (scene != null) { scene.onGetFavoritesLocal(mKeyword, mTaskId); From dcc6af3367a59e630407d087a43d6d2ca3bd0dc5 Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 14 Sep 2018 19:48:48 +0800 Subject: [PATCH 186/630] Update local favourites count --- .../com/hippo/ehviewer/ui/scene/FavoritesScene.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 e4b353a4b..adfeb0357 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 @@ -883,15 +883,22 @@ private void onGetFavoritesLocal(String keyword, int taskId) { } else { list = EhDB.searchLocalFavorites(keyword); } + if (list.size() == 0) { mHelper.setPages(taskId, 0); mHelper.onGetPageData(taskId, Collections.EMPTY_LIST); } else { - mFavLocalCount = list.size(); - Settings.putFavLocalCount(mFavLocalCount); mHelper.setPages(taskId, 1); mHelper.onGetPageData(taskId, list); } + + if (TextUtils.isEmpty(keyword)) { + mFavLocalCount = list.size(); + Settings.putFavLocalCount(mFavLocalCount); + if (mDrawerAdapter != null) { + mDrawerAdapter.notifyDataSetChanged(); + } + } } } From d84376e4dca418196b3a71dd45eb1984fa7651ae Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 16 Sep 2018 22:12:26 +0800 Subject: [PATCH 187/630] Google style reorder icon --- app/src/main/res/drawable/v_reorder_x24.xml | 29 +++++++++++++++++++++ app/src/main/res/layout/item_label_list.xml | 8 +++--- app/src/main/res/values/pathdata.xml | 1 + 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable/v_reorder_x24.xml diff --git a/app/src/main/res/drawable/v_reorder_x24.xml b/app/src/main/res/drawable/v_reorder_x24.xml new file mode 100644 index 000000000..ef1624531 --- /dev/null +++ b/app/src/main/res/drawable/v_reorder_x24.xml @@ -0,0 +1,29 @@ + + + + + + + + diff --git a/app/src/main/res/layout/item_label_list.xml b/app/src/main/res/layout/item_label_list.xml index 378222568..2feccfe4d 100644 --- a/app/src/main/res/layout/item_label_list.xml +++ b/app/src/main/res/layout/item_label_list.xml @@ -73,11 +73,13 @@ android:textSize="@dimen/text_little_small" android:textColor="@color/primary_text_light"/> - + android:layout_height="48dp" + android:padding="12dp" + app:srcCompat="@drawable/v_reorder_x24"/> diff --git a/app/src/main/res/values/pathdata.xml b/app/src/main/res/values/pathdata.xml index c85e6adb1..bfc200063 100644 --- a/app/src/main/res/values/pathdata.xml +++ b/app/src/main/res/values/pathdata.xml @@ -61,6 +61,7 @@ M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z M9,13A3,3 0 0,0 12,16A3,3 0 0,0 15,13A3,3 0 0,0 12,10A3,3 0 0,0 9,13M20,19.59V8L14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18C18.45,22 18.85,21.85 19.19,21.6L14.76,17.17C13.96,17.69 13,18 12,18A5,5 0 0,1 7,13A5,5 0 0,1 12,8A5,5 0 0,1 17,13C17,14 16.69,14.96 16.17,15.75L20,19.59Z M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z + M3,15H21V13H3V15M3,19H21V17H3V19M3,11H21V9H3V11M3,5V7H21V5H3Z M12.88,2H4V11L14.97,22.14L24,13.1L12.88,2ZM7.26,5.26C7.96,4.58,9.06,4.58,9.74,5.26C10.42,5.96,10.42,7.06,9.74,7.74S7.94,8.42,7.26,7.74S6.58,5.94,7.26,5.26ZM14.98,19.3L8.76,12.95L14.88,6.83L21.18,13.11L14.98,19.31ZM11.6,21.56L10.23,23L0,12.74V5H2V11.9L11.6,21.56Z M20.46,14.65C21.86,16.15,20.31,18.6,18.32,17.87C19.78,17.57,20.79,16.37,20.46,14.65ZM4.32,17.87C6.32,18.6,7.86,16.17,6.46,14.65C6.79,16.38,5.78,17.55,4.32,17.87ZM16.87,4.3C16.6,3.56,15.87,3,15,3C13.7,3,12.7,4.24,13.1,5.58C14.2,5.18,15.44,4.48,16.87,4.31ZM24,16C24,18.76,21.76,21,19,21C14.96,21,14.84,16.88,12,16.88S9.04,21,5,21C2.24,21,0,18.76,0,16C0,13.87,1.53,11.43,3.94,7.18C5.84,3.81,8.69,5.92,10.76,6.58C11.54,6.85,12.41,6.88,13.24,6.58C15.3,5.92,18.14,3.81,20.06,7.18C22.46,11.43,24,13.88,24,16ZM8,16C8,14.35,6.65,13,5,13S2,14.35,2,16S3.35,19,5,19S8,17.65,8,16ZM13,14C13,13.45,12.55,13,12,13S11,13.45,11,14S11.45,15,12,15S13,14.55,13,14ZM22,16C22,14.35,20.65,13,19,13S16,14.35,16,16S17.35,19,19,19S22,17.65,22,16ZM9,3C8.14,3,7.4,3.55,7.13,4.3C8.56,4.48,9.79,5.2,10.9,5.58C11.3,4.24,10.3,3,9,3Z From 185ae6beb4d0595e8470f0a309ef3466157551bc Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 16 Sep 2018 22:18:06 +0800 Subject: [PATCH 188/630] 1.1.0 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8890c6dc4..4ff9c2ccf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.hippo.ehviewer" minSdkVersion 14 targetSdkVersion 27 - versionCode 83 - versionName "1.0.30" + versionCode 84 + versionName "1.1.0" vectorDrawables.useSupportLibrary = true resConfigs "zh", "zh-rCN", "zh-rHK", "zh-rTW", "es", "ja", "ko", "fr", "de" From d4419601075b5d3d75c77f657a4e25c442df5e98 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 16 Sep 2018 23:35:53 +0800 Subject: [PATCH 189/630] Update strings.xml --- app/src/main/res/values-zh-rCN/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 42e1d00e2..b1738d16e 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -519,7 +519,7 @@ 已导出数据至 %s 导出数据失败 导入数据 - 从置存储器导入数据 + 从外置存储器导入数据 导入数据成功 关于 From 23c34258ff1bf4d6f726bbd56b078baa836d7f59 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sun, 16 Sep 2018 23:36:58 +0800 Subject: [PATCH 190/630] Update strings.xml --- app/src/main/res/values-zh-rHK/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 8c0667647..19c145c4a 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -518,7 +518,7 @@ 已導出數據至 %s 導出數據失敗 導入數據 - 從置存儲器導入數據 + 從外置存儲器導入數據 導入數據成功 關於 From e847338ef4d549b8244e9449c2543dd70fc3bebc Mon Sep 17 00:00:00 2001 From: seven332 Date: Mon, 17 Sep 2018 00:32:17 +0800 Subject: [PATCH 191/630] Light background toolbar popup --- app/src/main/res/layout-v21/drawer_list.xml | 6 ++++-- app/src/main/res/layout-v21/drawer_list_rv.xml | 6 ++++-- app/src/main/res/layout-v21/scene_toolbar.xml | 4 +++- app/src/main/res/layout/drawer_list.xml | 4 +++- app/src/main/res/layout/drawer_list_rv.xml | 4 +++- app/src/main/res/layout/scene_toolbar.xml | 4 +++- 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/layout-v21/drawer_list.xml b/app/src/main/res/layout-v21/drawer_list.xml index 47236053d..6a756d1f5 100644 --- a/app/src/main/res/layout-v21/drawer_list.xml +++ b/app/src/main/res/layout-v21/drawer_list.xml @@ -22,13 +22,15 @@ android:orientation="vertical"> + android:saveEnabled="false" + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" + app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> + android:saveEnabled="false" + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" + app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> + app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> + app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> + app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" + app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> Date: Mon, 17 Sep 2018 11:34:32 +0800 Subject: [PATCH 192/630] Check settings while try showing gallery page count --- .../main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java index defa0414f..5674ec90c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryAdapter.java @@ -178,7 +178,7 @@ public void onBindViewHolder(GalleryHolder holder, int position) { category.setBackgroundColor(EhUtils.getCategoryColor(gi.category)); } holder.posted.setText(gi.posted); - if (gi.pages == 0) { + if (gi.pages == 0 || !Settings.getShowGalleryPages()) { holder.pages.setText(null); RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) holder.simpleLanguage.getLayoutParams(); lp.addRule(RelativeLayout.LEFT_OF, 0); From 59d36d29da26755a10033fd21951c40b48be5ddd Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 17 Sep 2018 20:28:06 +0800 Subject: [PATCH 193/630] Fix some bugs, where quotes break the sentences --- app/src/main/res/values-fr/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 81d598866..92f2e1753 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -456,7 +456,7 @@ Resolution d\'image %s, résolutions mieux que 1280x riquent de ne pas fonctionner Auto - Télécharger l'images originales + Télécharger l\'images originales Vous allez obtenir l\'erreur 509 plus facilement Rétablir les galeries téléchargées Rétablir tous objets déjà téléchargés dans la destination de téléchargement @@ -637,7 +637,7 @@ Fiches archives Client H@H est nécessaire pour le téléchargement de fiches archives Confidentialité - Empêcher captures d\'ecran + Empêcher les captures d\'ecran Quand cette option est activée, vous ne pouvez prendre auncun capture d\'écran de l\'application, et le systéme n\'affiche pas le contenu d\'écran dans le sélecteur de tâches.\n\nRedémarrage de l\'application nécessaire pour appliquer le changement Lien de galerie detecté Voulez-vous accéder la galerie dans vos presse-papiers ? @@ -652,12 +652,12 @@ Supprimer Hôte invalide IP invalide - Sauvegarder dans... + Sauvegarder à... Langue de l\'app (Language) "hosts.txt integré " Mapper l\'hôte à l\'adresse IP selon les règles de l\'app\nIls pouvent être redéfinits par hosts.txt personnalisé hosts.txt personalisé - Mapper l\'hôte à l\'adresse IP\nIls pouvent redéfinir l'hosts.txt de l\'app + Mapper l\'hôte à l\'adresse IP\nIls pouvent redéfinir l\'hosts.txt de l\'app Langue du système (défaut) From 450e05c81937008cdbd6ee64579977797e78caef Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 17 Sep 2018 20:36:04 +0800 Subject: [PATCH 194/630] Make some sentences shorter --- app/src/main/res/values-fr/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 92f2e1753..debadd0a0 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -433,7 +433,7 @@ Montrer le progrès Montrer le niveau de batterie Montrer l\'intervalle des pages - Permettre de tourner la page avec les boutons Volume + Tourner la page avec les Volumes Plein d\'écran Utiliser la luminosité d\'écran personalisée Luminosité d\'écran @@ -446,7 +446,7 @@ Android 5.0+ a implémenté un nouveau API, qui permet les applications à écrire dans la carte SD. Appuyez sur \"DOCUMENT\" pour définir la carte SD comme la destination de téléchargement Document Continuer - Permettre le scannage des fiches multimédias + Permettre le scannage multimédia Ne montre jamais vos applications galerie à personne La plupart d\'applications galerie ignorent les images dans le chemin de téléchargement Téléchargement multi-thread @@ -470,7 +470,7 @@ Nettoyage complété avec succès, %d objets effacés Avancé - Sauvegarder le contenu de HTML après l\'erreur d\'analyse syntaxique + Sauv. les HTMLs avec erreurs Le fiche HTML pouvait contenir les informations personnelles Sauvegarder le journal logcat Sauvegarder le journal logcat au stockage externe From 0a9a1976cd6779c1eeda536de87487d9d17a1325 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 17 Sep 2018 20:36:28 +0800 Subject: [PATCH 195/630] Grammar fix --- app/src/main/res/values-fr/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index debadd0a0..f93609555 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -447,7 +447,7 @@ Document Continuer Permettre le scannage multimédia - Ne montre jamais vos applications galerie à personne + Ne montrez jamais vos applications galerie à personne La plupart d\'applications galerie ignorent les images dans le chemin de téléchargement Téléchargement multi-thread Jusqu\'à %s image(s) From fd93baf583605933aef94d67f28363f885c182d8 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 17 Sep 2018 20:45:01 +0800 Subject: [PATCH 196/630] Add some new translations --- app/src/main/res/values-fr/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f93609555..08ca72fa0 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -307,6 +307,8 @@ Labels de téléchargement Commencer tout Arrêter tout + Réinitialiser les progrès de lecture + Réinitialiser les progrès de lecture de toutes galéries téléchargées ? Service du téléchargement EhViewer %s %1$s, encore %2$s @@ -511,6 +513,7 @@ A propos de l\'analyse Numéro de version Chercher mise à jour + Chercher les MÀJ automatiquement Chaîne de mises à jour beta Versions beta riquent de ne pas fonctionner correctement sur votre appareil From ba4ca96b7705202439ee11a2f5eeff3bf12c2f0d Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 17 Sep 2018 20:51:33 +0800 Subject: [PATCH 197/630] Add some translations --- app/src/main/res/values-de/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2d5cab465..b93c772e4 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -508,4 +508,6 @@ Host auf die IP, die nach die App festgelegt werden, umstellen\nKann von angepasstem hosts.txt überschrieben werden Angepasstes hosts.txt Hostname auf die angepassten IP umstellen\nDie Regeln können die von der App festgelegt überschreiben + Lesefortschritte zurücksetzen + Lesefortschritte von allen heruntergeladene Galerie zurücksetzen? From 9df8d050b264994d722b0cca02ce0d7754e2cf65 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 17 Sep 2018 20:54:40 +0800 Subject: [PATCH 198/630] Add some new translations --- app/src/main/res/values-ja/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index fc416279f..986d41ceb 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -304,6 +304,8 @@ ダウンロードラベル すべて開始 すべて停止 + 閲覧進捗をリセット + すべてのダウンロード済みのギャラリーの閲覧進捗をリセットしますか? EhViewerダウンロードサービス %s %1$s、残り%2$s From b97069a04e2a91ff9cffc520b84605b46fee820f Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 17 Sep 2018 20:56:23 +0800 Subject: [PATCH 199/630] A little fix --- app/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b93c772e4..23da6655b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -509,5 +509,5 @@ Angepasstes hosts.txt Hostname auf die angepassten IP umstellen\nDie Regeln können die von der App festgelegt überschreiben Lesefortschritte zurücksetzen - Lesefortschritte von allen heruntergeladene Galerie zurücksetzen? + Lesefortschritte von allen heruntergeladenen Galerie zurücksetzen? From 3360035402ce1a605107176d8a1de6d73cb51e22 Mon Sep 17 00:00:00 2001 From: hzy980512 Date: Mon, 17 Sep 2018 21:01:29 +0800 Subject: [PATCH 200/630] Fix choices of words --- app/src/main/res/values-fr/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 08ca72fa0..67a7a9014 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -82,7 +82,7 @@ Échec d\'obtention de pToken Le mot-clé doit réssembler à \"618395 0439fa3666\" pour spécifier une galerie Impossible de créer un fiche temporaire - Impossible de sauvegarder l\'image + Impossible d\'enregistrer l\'image Nombre invalide Le contenu de l\'application provient de l\'Internet, dont quelque chose peut vous causer le dommage physique ou mentale. Vous l\'avez bien compris et voulez continuer quand même. @@ -364,7 +364,7 @@ Page %d @string/refresh @string/share - Sauvegarder + Enregistrer Ajouter un signet Menu Partager l\'image @@ -655,7 +655,7 @@ Supprimer Hôte invalide IP invalide - Sauvegarder à... + Enregistrer sous... Langue de l\'app (Language) "hosts.txt integré " Mapper l\'hôte à l\'adresse IP selon les règles de l\'app\nIls pouvent être redéfinits par hosts.txt personnalisé From 73b702aa5608a88cd77ded47d634b388465a01b3 Mon Sep 17 00:00:00 2001 From: Tsukatsuki Kanade Date: Mon, 17 Sep 2018 12:18:21 +0800 Subject: [PATCH 201/630] feat: Add favorite gallery name to scene --- .../com/hippo/ehviewer/client/data/GalleryDetail.java | 3 +++ .../hippo/ehviewer/client/parser/GalleryDetailParser.java | 8 ++++++++ .../com/hippo/ehviewer/ui/scene/GalleryDetailScene.java | 1 + .../com/hippo/ehviewer/ui/scene/GalleryInfoScene.java | 2 ++ 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 + 8 files changed, 18 insertions(+) diff --git a/app/src/main/java/com/hippo/ehviewer/client/data/GalleryDetail.java b/app/src/main/java/com/hippo/ehviewer/client/data/GalleryDetail.java index 5b11dfbf8..a8889aca1 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/data/GalleryDetail.java +++ b/app/src/main/java/com/hippo/ehviewer/client/data/GalleryDetail.java @@ -40,6 +40,7 @@ public class GalleryDetail extends GalleryInfo { public GalleryComment[] comments; public int previewPages; public PreviewSet previewSet; + public String favoriteName; @Override public int describeContents() { @@ -64,6 +65,7 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeParcelableArray(this.comments, 0); dest.writeInt(this.previewPages); dest.writeParcelable(previewSet, flags); + dest.writeString(this.favoriteName); } public GalleryDetail() { @@ -96,6 +98,7 @@ protected GalleryDetail(Parcel in) { } this.previewPages = in.readInt(); this.previewSet = in.readParcelable(PreviewSet.class.getClassLoader()); + this.favoriteName = in.readString(); } public static final Creator CREATOR = new Creator() { diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java index a9f94123e..f79fdce59 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java @@ -227,6 +227,14 @@ private static void parseDetail(GalleryDetail gd, Document d, String body) throw // isFavorited Element gdf = gm.getElementById("gdf"); gd.isFavorited = null != gdf && !StringUtils.trim(gdf.text()).equals("Add to Favorites"); + if (gdf != null) { + final String favoriteName = StringUtils.trim(gdf.text()); + if (favoriteName.equals("Add to Favorites")) { + gd.favoriteName = ""; + } else { + gd.favoriteName = StringUtils.trim(gdf.text()); + } + } } catch (Exception e) { throw new ParseException("Can't parse gallery detail", body); } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index 48ccdee5d..e887dac71 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -766,6 +766,7 @@ private void updateFavoriteDrawable() { if (gd.isFavorited || EhDB.containLocalFavorites(gd.gid)) { mHeart.setVisibility(View.VISIBLE); + mHeart.setText(gd.favoriteName); mHeartOutline.setVisibility(View.GONE); } else { mHeart.setVisibility(View.GONE); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java index 2aca00e92..be1a3534f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryInfoScene.java @@ -128,6 +128,8 @@ private void handlerArgs(Bundle args) { mValues.add(Integer.toString(gd.torrentCount)); mKeys.add(resources.getString(R.string.key_torrent_url)); mValues.add(gd.torrentUrl); + mKeys.add(resources.getString(R.string.favorite_name)); + mValues.add(gd.favoriteName); } protected void onInit() { diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index b1738d16e..305cc0545 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -666,4 +666,5 @@ 启用后,将不能截取该应用的屏幕截图,同时,将不会在系统任务切换器中显示该应用的内容预览\n\n重新启动应用以生效此更改 下载服务 + 收藏画廊 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 19c145c4a..1a3236967 100755 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -662,5 +662,6 @@ 隱私 不允許荧幕抓取 啟用後,將不能截取該應用的螢幕截圖,同時,將不會在系統任務切換器中顯示該應用的內容預覽\n\n重新啟動應用以生效此更改 + 收藏畫廊 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index bb1a04081..be4f041a8 100755 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -662,5 +662,6 @@ 隱私 不允許荧幕抓取 啟用後,將不能截取該應用的螢幕截圖,同時,將不會在系統任務切換器中顯示該應用的內容預覽\n\n重新啟動應用以生效此更改 + 收藏畫廊 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index df2b0a330..0280d9a4d 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -726,4 +726,5 @@ If enabled, you cannot take screenshots of the app, and the system will not display app contents in the task switcher\n\nYou need to restart the app for the changes to take effect Download Service + Favorite From b3d19d752b318efdf2dbf59256144c1517bf2a68 Mon Sep 17 00:00:00 2001 From: Tsukatsuki Kanade Date: Mon, 17 Sep 2018 20:15:26 +0800 Subject: [PATCH 202/630] fix: update favoriteName after added favorite --- .../hippo/ehviewer/ui/CommonOperations.java | 41 ++++++++++--------- .../ehviewer/ui/scene/GalleryDetailScene.java | 6 ++- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java index 797834e6c..480f3cdba 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java @@ -33,6 +33,7 @@ import com.hippo.ehviewer.UrlOpener; import com.hippo.ehviewer.client.EhClient; import com.hippo.ehviewer.client.EhRequest; +import com.hippo.ehviewer.client.data.GalleryDetail; import com.hippo.ehviewer.client.data.GalleryInfo; import com.hippo.ehviewer.dao.DownloadLabel; import com.hippo.ehviewer.download.DownloadManager; @@ -185,37 +186,37 @@ private static void doAddToFavorites(Activity activity, GalleryInfo galleryInfo, public static void addToFavorites(final Activity activity, final GalleryInfo galleryInfo, final EhClient.Callback listener) { int slot = Settings.getDefaultFavSlot(); + String[] items = new String[11]; + items[0] = activity.getString(R.string.local_favorites); + String[] favCat = Settings.getFavCat(); + System.arraycopy(favCat, 0, items, 1, 10); if (slot >= -1 && slot <= 9) { doAddToFavorites(activity, galleryInfo, slot, listener); + updateGalleryDetail(galleryInfo, items[slot+1]); } else { - String[] items = new String[11]; - items[0] = activity.getString(R.string.local_favorites); - String[] favCat = Settings.getFavCat(); - System.arraycopy(favCat, 0, items, 1, 10); new ListCheckBoxDialogBuilder(activity, items, - new ListCheckBoxDialogBuilder.OnItemClickListener() { - @Override - public void onItemClick(ListCheckBoxDialogBuilder builder, AlertDialog dialog, int position) { - int slot = position - 1; - doAddToFavorites(activity, galleryInfo, slot, listener); - if (builder.isChecked()) { - Settings.putDefaultFavSlot(slot); - } else { - Settings.putDefaultFavSlot(Settings.INVALID_DEFAULT_FAV_SLOT); - } + (builder, dialog, position) -> { + int slot1 = position - 1; + doAddToFavorites(activity, galleryInfo, slot1, listener); + updateGalleryDetail(galleryInfo, items[position]); + if (builder.isChecked()) { + Settings.putDefaultFavSlot(slot1); + } else { + Settings.putDefaultFavSlot(Settings.INVALID_DEFAULT_FAV_SLOT); } }, activity.getString(R.string.remember_favorite_collection), false) .setTitle(R.string.add_favorites_dialog_title) - .setOnCancelListener(new DialogInterface.OnCancelListener() { - @Override - public void onCancel(DialogInterface dialog) { - listener.onCancel(); - } - }) + .setOnCancelListener(dialog -> listener.onCancel()) .show(); } } + private static void updateGalleryDetail(GalleryInfo galleryInfo, String favoriteName) { + if (galleryInfo instanceof GalleryDetail) { + ((GalleryDetail) galleryInfo).favoriteName = favoriteName; + } + } + public static void removeFromFavorites(Activity activity, GalleryInfo galleryInfo, final EhClient.Callback listener) { EhClient client = EhApplication.getEhClient(activity); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index e887dac71..d29e3087a 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -766,7 +766,11 @@ private void updateFavoriteDrawable() { if (gd.isFavorited || EhDB.containLocalFavorites(gd.gid)) { mHeart.setVisibility(View.VISIBLE); - mHeart.setText(gd.favoriteName); + if (gd.favoriteName == null || gd.favoriteName.isEmpty()) { + mHeart.setText(R.string.local_favorites); + } else { + mHeart.setText(gd.favoriteName); + } mHeartOutline.setVisibility(View.GONE); } else { mHeart.setVisibility(View.GONE); From 428a5ab20ebbf7321491fa7f727146535b6897d7 Mon Sep 17 00:00:00 2001 From: Tsukatsuki Kanade Date: Mon, 17 Sep 2018 20:29:07 +0800 Subject: [PATCH 203/630] fix: change favoriteName b4 send request --- app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java index 480f3cdba..fa134b4d5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java @@ -197,8 +197,8 @@ public static void addToFavorites(final Activity activity, final GalleryInfo gal new ListCheckBoxDialogBuilder(activity, items, (builder, dialog, position) -> { int slot1 = position - 1; - doAddToFavorites(activity, galleryInfo, slot1, listener); updateGalleryDetail(galleryInfo, items[position]); + doAddToFavorites(activity, galleryInfo, slot1, listener); if (builder.isChecked()) { Settings.putDefaultFavSlot(slot1); } else { From 10a15fc5cf4b76ce6b6b4c791ae16a8d89e382fe Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 19 Sep 2018 15:50:37 +0800 Subject: [PATCH 204/630] fix: only update favoriteName after success --- .../hippo/ehviewer/ui/CommonOperations.java | 50 +++++++++++++++---- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java index fa134b4d5..1fd9a5b80 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java @@ -191,14 +191,16 @@ public static void addToFavorites(final Activity activity, final GalleryInfo gal String[] favCat = Settings.getFavCat(); System.arraycopy(favCat, 0, items, 1, 10); if (slot >= -1 && slot <= 9) { - doAddToFavorites(activity, galleryInfo, slot, listener); - updateGalleryDetail(galleryInfo, items[slot+1]); + doAddToFavorites(activity, galleryInfo, slot, galleryInfo instanceof GalleryDetail + ? new UpdateFavoriteNameCallback(listener, (GalleryDetail) galleryInfo, items[slot+1]) + : listener); } else { new ListCheckBoxDialogBuilder(activity, items, (builder, dialog, position) -> { int slot1 = position - 1; - updateGalleryDetail(galleryInfo, items[position]); - doAddToFavorites(activity, galleryInfo, slot1, listener); + doAddToFavorites(activity, galleryInfo, slot1, galleryInfo instanceof GalleryDetail + ? new UpdateFavoriteNameCallback(listener, (GalleryDetail) galleryInfo, items[position]) + : listener); if (builder.isChecked()) { Settings.putDefaultFavSlot(slot1); } else { @@ -211,22 +213,48 @@ public static void addToFavorites(final Activity activity, final GalleryInfo gal } } - private static void updateGalleryDetail(GalleryInfo galleryInfo, String favoriteName) { - if (galleryInfo instanceof GalleryDetail) { - ((GalleryDetail) galleryInfo).favoriteName = favoriteName; - } - } - public static void removeFromFavorites(Activity activity, GalleryInfo galleryInfo, final EhClient.Callback listener) { EhClient client = EhApplication.getEhClient(activity); EhRequest request = new EhRequest(); request.setMethod(EhClient.METHOD_ADD_FAVORITES); request.setArgs(galleryInfo.gid, galleryInfo.token, -1, ""); - request.setCallback(listener); + request.setCallback(galleryInfo instanceof GalleryDetail + ? new UpdateFavoriteNameCallback(listener, (GalleryDetail) galleryInfo, "") + : listener); client.execute(request); } + private static class UpdateFavoriteNameCallback implements EhClient.Callback { + + private final EhClient.Callback delegate; + private final GalleryDetail detail; + private final String newFavoriteName; + + UpdateFavoriteNameCallback(EhClient.Callback delegate, GalleryDetail detail, + String newFavoriteName) { + this.delegate = delegate; + this.detail = detail; + this.newFavoriteName = newFavoriteName; + } + + @Override + public void onSuccess(Void result) { + detail.favoriteName = newFavoriteName; + delegate.onSuccess(result); + } + + @Override + public void onFailure(Exception e) { + delegate.onFailure(e); + } + + @Override + public void onCancel() { + delegate.onCancel(); + } + } + // TODO Add context if activity and context are different style public static void startDownload(final MainActivity activity, final GalleryInfo galleryInfo, boolean forceDefault) { final DownloadManager dm = EhApplication.getDownloadManager(activity); From b79d991b253d5584a69da1253aae65474f02dc87 Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 19 Sep 2018 16:19:08 +0800 Subject: [PATCH 205/630] Set favoriteName null if isFavorited is false --- .../ehviewer/client/parser/GalleryDetailParser.java | 2 +- .../java/com/hippo/ehviewer/ui/CommonOperations.java | 8 +++++--- .../com/hippo/ehviewer/ui/scene/GalleryDetailScene.java | 9 +++------ 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java index f79fdce59..f7d195e26 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryDetailParser.java @@ -230,7 +230,7 @@ private static void parseDetail(GalleryDetail gd, Document d, String body) throw if (gdf != null) { final String favoriteName = StringUtils.trim(gdf.text()); if (favoriteName.equals("Add to Favorites")) { - gd.favoriteName = ""; + gd.favoriteName = null; } else { gd.favoriteName = StringUtils.trim(gdf.text()); } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java index 1fd9a5b80..880dae0db 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java @@ -191,15 +191,17 @@ public static void addToFavorites(final Activity activity, final GalleryInfo gal String[] favCat = Settings.getFavCat(); System.arraycopy(favCat, 0, items, 1, 10); if (slot >= -1 && slot <= 9) { + String newFavoriteName = slot >= 0 ? items[slot + 1] : null; doAddToFavorites(activity, galleryInfo, slot, galleryInfo instanceof GalleryDetail - ? new UpdateFavoriteNameCallback(listener, (GalleryDetail) galleryInfo, items[slot+1]) + ? new UpdateFavoriteNameCallback(listener, (GalleryDetail) galleryInfo, newFavoriteName) : listener); } else { new ListCheckBoxDialogBuilder(activity, items, (builder, dialog, position) -> { int slot1 = position - 1; + String newFavoriteName = (slot1 >= 0 && slot1 <= 9) ? items[slot1+1] : null; doAddToFavorites(activity, galleryInfo, slot1, galleryInfo instanceof GalleryDetail - ? new UpdateFavoriteNameCallback(listener, (GalleryDetail) galleryInfo, items[position]) + ? new UpdateFavoriteNameCallback(listener, (GalleryDetail) galleryInfo, newFavoriteName) : listener); if (builder.isChecked()) { Settings.putDefaultFavSlot(slot1); @@ -220,7 +222,7 @@ public static void removeFromFavorites(Activity activity, GalleryInfo galleryInf request.setMethod(EhClient.METHOD_ADD_FAVORITES); request.setArgs(galleryInfo.gid, galleryInfo.token, -1, ""); request.setCallback(galleryInfo instanceof GalleryDetail - ? new UpdateFavoriteNameCallback(listener, (GalleryDetail) galleryInfo, "") + ? new UpdateFavoriteNameCallback(listener, (GalleryDetail) galleryInfo, null) : listener); client.execute(request); } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index d29e3087a..e88add884 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -53,7 +53,6 @@ import android.widget.ListView; import android.widget.RatingBar; import android.widget.TextView; - import com.hippo.beerbelly.BeerBelly; import com.hippo.drawable.RoundSideRectDrawable; import com.hippo.ehviewer.AppConfig; @@ -106,9 +105,6 @@ import com.hippo.yorozuya.IntIdGenerator; import com.hippo.yorozuya.SimpleHandler; import com.hippo.yorozuya.ViewUtils; - -import junit.framework.Assert; - import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -116,6 +112,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.List; +import junit.framework.Assert; public class GalleryDetailScene extends BaseScene implements View.OnClickListener, com.hippo.ehviewer.download.DownloadManager.DownloadInfoListener, @@ -766,7 +763,7 @@ private void updateFavoriteDrawable() { if (gd.isFavorited || EhDB.containLocalFavorites(gd.gid)) { mHeart.setVisibility(View.VISIBLE); - if (gd.favoriteName == null || gd.favoriteName.isEmpty()) { + if (gd.favoriteName == null) { mHeart.setText(R.string.local_favorites); } else { mHeart.setText(gd.favoriteName); @@ -1538,7 +1535,7 @@ private void onRateGallerySuccess(RateGalleryParser.Result result) { private void onModifyFavoritesSuccess(boolean addOrRemove) { mModifingFavorites = false; if (mGalleryDetail != null) { - mGalleryDetail.isFavorited = !addOrRemove; + mGalleryDetail.isFavorited = !addOrRemove && mGalleryDetail.favoriteName != null; updateFavoriteDrawable(); } } From a7e1101c87204d052765aeb153ac37f6cc7db061 Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 19 Sep 2018 19:58:40 +0800 Subject: [PATCH 206/630] Statement about about donation --- .../ehviewer/ui/fragment/AboutFragment.java | 60 ++++++++--- app/src/main/res/layout/dialog_donate.xml | 101 ++++++++++++++++++ app/src/main/res/values-de/strings.xml | 3 - app/src/main/res/values-es/strings.xml | 3 - app/src/main/res/values-fr/strings.xml | 3 - app/src/main/res/values-ja/strings.xml | 3 - app/src/main/res/values-ko/strings.xml | 2 - app/src/main/res/values-zh-rCN/strings.xml | 9 +- app/src/main/res/values-zh-rHK/strings.xml | 9 +- app/src/main/res/values-zh-rTW/strings.xml | 9 +- app/src/main/res/values/strings.xml | 9 +- 11 files changed, 172 insertions(+), 39 deletions(-) create mode 100644 app/src/main/res/layout/dialog_donate.xml diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java index c5f689a6f..a0eb28b65 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java @@ -19,18 +19,20 @@ import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; import android.support.v7.app.AlertDialog; +import android.util.Base64; +import android.widget.TextView; import android.widget.Toast; - -import com.hippo.ehviewer.Analytics; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; -import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.ui.CommonOperations; import com.hippo.util.AppHelper; +import java.io.UnsupportedEncodingException; public class AboutFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener { @@ -49,14 +51,12 @@ public void onCreate(Bundle savedInstanceState) { Preference checkForUpdate = findPreference(KEY_CHECK_FOR_UPDATES); author.setSummary(getString(R.string.settings_about_author_summary).replace('$', '@')); - donate.setSummary(getString(R.string.settings_about_donate_summary).replace('$', '@')); author.setOnPreferenceClickListener(this); donate.setOnPreferenceClickListener(this); checkForUpdate.setOnPreferenceClickListener(this); } - @Override public boolean onPreferenceClick(Preference preference) { String key = preference.getKey(); @@ -64,17 +64,51 @@ public boolean onPreferenceClick(Preference preference) { AppHelper.sendEmail(getActivity(), EhApplication.getDeveloperEmail(), "About EhViewer", null); } else if (KEY_DONATE.equals(key)) { - ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); - cmb.setPrimaryClip(ClipData.newPlainText(null, "seven332$163.com".replace('$', '@'))); - Toast.makeText(getActivity(), R.string.settings_about_donate_toast, Toast.LENGTH_SHORT).show(); - - new AlertDialog.Builder(getActivity()) - .setTitle(R.string.settings_about_donate) - .setMessage(getString(R.string.settings_about_donate_message).replace('$', '@')) - .show(); + showDonationDialog(); } else if (KEY_CHECK_FOR_UPDATES.equals(key)) { CommonOperations.checkUpdate(getActivity(), true); } return true; } + + private void showDonationDialog() { + AlertDialog dialog = new AlertDialog.Builder(getActivity()) + .setView(R.layout.dialog_donate) + .show(); + + String alipayStr = base64Decode("c2V2ZW4zMzJAMTYzLmNvbQ=="); + TextView alipayText = dialog.findViewById(R.id.alipay_text); + alipayText.setText(alipayStr); + dialog.findViewById(R.id.alipay_copy).setOnClickListener(v -> copyToClipboard(alipayStr)); + + String paypalStr = base64Decode("aHR0cHM6Ly9wYXlwYWwubWUvc2V2ZW4zMzI="); + TextView paypalText = dialog.findViewById(R.id.paypal_text); + paypalText.setText(paypalStr); + dialog.findViewById(R.id.paypal_open).setOnClickListener(v -> openUrl(paypalStr)); + dialog.findViewById(R.id.paypal_copy).setOnClickListener(v -> copyToClipboard(paypalStr)); + } + + private static String base64Decode(String encoded) { + byte[] bytes = Base64.decode(encoded, Base64.DEFAULT); + try { + return new String(bytes, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new IllegalStateException(e); + } + } + + private void copyToClipboard(String text) { + ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); + if (cmb != null) { + cmb.setPrimaryClip(ClipData.newPlainText(null, text)); + Toast.makeText(getActivity(), R.string.settings_about_donate_copied, Toast.LENGTH_SHORT).show(); + } + } + + private void openUrl(String url) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(url)); + Intent chooser = Intent.createChooser(intent, ""); + startActivity(chooser); + } } diff --git a/app/src/main/res/layout/dialog_donate.xml b/app/src/main/res/layout/dialog_donate.xml new file mode 100644 index 000000000..668390965 --- /dev/null +++ b/app/src/main/res/layout/dialog_donate.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + +