diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index bc3b5e386..c825af9d7 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -27,11 +27,16 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.AsyncTask; import android.os.Debug; +import android.text.method.LinkMovementMethod; import android.util.Log; +import android.view.View; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.collection.LruCache; +import androidx.core.text.HtmlCompat; import com.hippo.a7zip.A7Zip; import com.hippo.beerbelly.SimpleDiskCache; @@ -45,6 +50,7 @@ import com.hippo.ehviewer.client.EhSSLSocketFactory; import com.hippo.ehviewer.client.EhUrl; import com.hippo.ehviewer.client.EhX509TrustManager; import com.hippo.ehviewer.client.data.GalleryDetail; +import com.hippo.ehviewer.client.parser.EventPaneParser; import com.hippo.ehviewer.download.DownloadManager; import com.hippo.ehviewer.spider.SpiderDen; import com.hippo.ehviewer.ui.CommonOperations; @@ -83,6 +89,8 @@ import okhttp3.Call; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; import rikka.material.app.DayNightDelegate; import rikka.material.app.LocaleDelegate; @@ -392,6 +400,9 @@ public class EhApplication extends SceneApplication { } private void theDawnOfNewDay() { + if (!Settings.getRequestNews()) { + return; + } EhCookieStore store = getEhCookieStore(this); HttpUrl eh = HttpUrl.get(EhUrl.HOST_E); @@ -401,7 +412,16 @@ public class EhApplication extends SceneApplication { Request request = new EhRequestBuilder(EhUrl.HOST_E + "news.php", referer).build(); Call call = getOkHttpClient(this).newCall(request); try { - call.execute(); + Response response = call.execute(); + ResponseBody responseBody = response.body(); + if (responseBody == null) { + return; + } + String body = responseBody.string(); + String html = EventPaneParser.parse(body); + if (html != null) { + showEventPane(html); + } } catch (Throwable e) { e.printStackTrace(); } @@ -409,6 +429,27 @@ public class EhApplication extends SceneApplication { } } + public void showEventPane(String html) { + Activity activity = getTopActivity(); + if (activity != null) { + activity.runOnUiThread(() -> { + AlertDialog dialog = new AlertDialog.Builder(activity) + .setMessage(HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY)) + .setPositiveButton(android.R.string.ok, null) + .create(); + final View messageView = dialog.findViewById(android.R.id.message); + if (messageView instanceof TextView) { + ((TextView) messageView).setMovementMethod(LinkMovementMethod.getInstance()); + } + try { + dialog.show(); + } catch (Throwable t) { + // ignore + } + }); + } + } + private void clearTempDir() { File dir = AppConfig.getTempDir(); if (null != dir) { diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index af5f8e4bb..ba9278df9 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -267,6 +267,8 @@ public class Settings { private static final int DEFAULT_CLIPBOARD_TEXT_HASH_CODE = 0; private static final String KEY_DOWNLOAD_DELAY = "download_delay"; private static final int DEFAULT_DOWNLOAD_DELAY = 0; + private static final String KEY_REQUEST_NEWS = "request_news"; + private static final boolean DEFAULT_REQUEST_NEWS = true; private static Context sContext; private static SharedPreferences sSettingsPre; private static EhConfig sEhConfig; @@ -293,19 +295,6 @@ public class Settings { } } - // Xiaomi (and Huawei?) devices have some kind of "dynamic refresh rate" thing, - // which will report a low refresh rate causing false positive reports - //if (!sSettingsPre.contains(KEY_E_INK_MODE)) { - // WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); - // if (wm != null) { - // Display display = wm.getDefaultDisplay(); - // if (display != null && display.getRefreshRate() > 0 && display.getRefreshRate() < 5.0) { - // // Probably an E-Ink device - // putReadTheme(2); - // putEInkMode(true); - // } - // } - //} } public static Locale getLocale() { @@ -553,6 +542,10 @@ public class Settings { return getBoolean(KEY_FIX_THUMB_URL, DEFAULT_FIX_THUMB_URL); } + public static boolean getRequestNews() { + return getBoolean(KEY_REQUEST_NEWS, DEFAULT_REQUEST_NEWS); + } + public static boolean getShowJpnTitle() { return getBoolean(KEY_SHOW_JPN_TITLE, DEFAULT_SHOW_JPN_TITLE); } 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 9a3ad1280..98d4565cb 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhEngine.java @@ -23,6 +23,7 @@ import android.util.Pair; import androidx.annotation.Nullable; import com.hippo.ehviewer.AppConfig; +import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.GetText; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; @@ -47,6 +48,7 @@ import com.hippo.ehviewer.client.parser.GalleryTokenApiParser; import com.hippo.ehviewer.client.parser.ProfileParser; import com.hippo.ehviewer.client.parser.RateGalleryParser; import com.hippo.ehviewer.client.parser.SignInParser; +import com.hippo.ehviewer.client.parser.EventPaneParser; import com.hippo.ehviewer.client.parser.TorrentParser; import com.hippo.ehviewer.client.parser.VoteCommentParser; import com.hippo.ehviewer.client.parser.VoteTagParser; @@ -363,6 +365,10 @@ public class EhEngine { code = response.code(); headers = response.headers(); body = response.body().string(); + String html = EventPaneParser.parse(body); + if (html != null) { + EhApplication.getInstance().showEventPane(html); + } return GalleryDetailParser.parse(body); } catch (Throwable e) { ExceptionUtils.throwIfFatal(e); diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/EventPaneParser.java b/app/src/main/java/com/hippo/ehviewer/client/parser/EventPaneParser.java new file mode 100644 index 000000000..4282391fe --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/client/parser/EventPaneParser.java @@ -0,0 +1,27 @@ +package com.hippo.ehviewer.client.parser; + +import com.hippo.util.ExceptionUtils; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; + +public class EventPaneParser { + + public static String parse(String body) { + String event = null; + try { + Document d = Jsoup.parse(body); + Element eventpane = d.getElementById("eventpane"); + if (eventpane != null) { + event = eventpane.html(); + } + } catch (Throwable e) { + ExceptionUtils.throwIfFatal(e); + e.printStackTrace(); + } + return event; + } + + +} diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index edebe2744..c9dc4997f 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -750,4 +750,5 @@ 流量计费网络警告 正在使用流量计费网络 从第 %d 页阅读 + 启动时请求新闻页面 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5a1dc7bf5..0f7ad22ba 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -814,4 +814,5 @@ Metered network warning Connected to metered networks Read page %d + Request news page on start diff --git a/app/src/main/res/xml/eh_settings.xml b/app/src/main/res/xml/eh_settings.xml index a08ed28b7..f7ada436e 100644 --- a/app/src/main/res/xml/eh_settings.xml +++ b/app/src/main/res/xml/eh_settings.xml @@ -157,4 +157,10 @@ android:title="@string/settings_eh_metered_network_warning" app:iconSpaceReserved="false" /> + +