diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f963479de..3ee4bcfe9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -36,7 +36,7 @@ android:name="com.hippo.ehviewer.ui.MainActivity" android:configChanges="screenSize|uiMode" android:theme="@style/AppTheme.Main" - android:launchMode="singleTop"> + android:launchMode="singleTask"> @@ -61,7 +61,8 @@ + android:theme="@style/AppTheme.Gallery" + android:launchMode="singleTask"/> { + + private final Activity mActivity; + private final OkHttpClient mHttpClient; + private final boolean mFeedback; + + public UpdateTask(Activity activity, boolean feedback) { + mActivity = activity; + mHttpClient = EhApplication.getOkHttpClient(activity); + mFeedback = feedback; + } + + @Override + protected JSONObject doInBackground(Void... params) { + try { + String url; + if (Settings.getBetaUpdateChannel()) { + url = "http://www.ehviewer.com/update_beta.json"; + } else { + url = "http://www.ehviewer.com/update.json"; + } + Log.d(TAG, url); + Request request = new Request.Builder().url(url).build(); + Response response = mHttpClient.newCall(request).execute(); + return new JSONObject(response.body().string()); + } catch (IOException e) { + return null; + } catch (JSONException e) { + return null; + } + } + + private void showUpToDateDialog() { + if (!mFeedback) { + return; + } + + new AlertDialog.Builder(mActivity) + .setMessage(R.string.update_to_date) + .setPositiveButton(android.R.string.ok, null) + .show(); + } + + private void showUpdateDialog(String versionName, String size, CharSequence info, final String url) { + new AlertDialog.Builder(mActivity) + .setTitle(R.string.update) + .setMessage(mActivity.getString(R.string.update_plain, versionName, size, info)) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + UrlOpener.openUrl(mActivity, url, false, false); + } + }).show(); + } + + + private void handleResult(JSONObject jo) { + if (null == jo || mActivity.isFinishing()) { + return; + } + + String versionName; + String size; + CharSequence info; + String url; + + try { + PackageManager pm = mActivity.getPackageManager(); + PackageInfo pi = pm.getPackageInfo(mActivity.getPackageName(), PackageManager.GET_ACTIVITIES); + int currentVersionCode = pi.versionCode; + int newVersionCode = jo.getInt("version_code"); + if (currentVersionCode >= newVersionCode) { + // Update to date + showUpToDateDialog(); + return; + } + + versionName = jo.getString("version_name"); + size = FileUtils.humanReadableByteCount(jo.getLong("size"), false); + info = Html.fromHtml(jo.getString("info")); + url = jo.getString("url"); + } catch (PackageManager.NameNotFoundException | JSONException e) { + return; + } + + showUpdateDialog(versionName, size, info, url); + } + + @Override + protected void onPostExecute(JSONObject jsonObject) { + try { + handleResult(jsonObject); + } finally { + UPDATING = false; + } + } + } + private static void doAddToFavorites(Activity activity, GalleryInfo galleryInfo, int slot, EhClient.Callback listener) { if (slot == -1) { 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 d1a3d3eed..612028fdd 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -266,6 +266,7 @@ public final class MainActivity extends StageActivity if (savedInstanceState == null) { onInit(); + CommonOperations.checkUpdate(this, false); } else { onRestore(savedInstanceState); } 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 5fbd755c2..a11adfe5d 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 @@ -27,6 +27,7 @@ import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.UrlOpener; +import com.hippo.ehviewer.ui.CommonOperations; import com.hippo.ehviewer.ui.LicenseActivity; import com.hippo.util.ActivityHelper; @@ -41,6 +42,8 @@ public class AboutFragment extends PreferenceFragment private static final String KEY_CHANGELOG = "changelog"; private static final String KEY_LICENSE = "license"; private static final String KEY_DONATE = "donate"; + private static final String KEY_CHECK_FOR_UPDATES = "check_for_updates"; + private static final String KEY_BETA_UPDATE_CHANNEL = "beta_update_channel"; @Override public void onCreate(Bundle savedInstanceState) { @@ -55,8 +58,11 @@ public class AboutFragment extends PreferenceFragment Preference changelog = findPreference(KEY_CHANGELOG); Preference license = findPreference(KEY_LICENSE); Preference donate = findPreference(KEY_DONATE); + Preference checkForUpdate = findPreference(KEY_CHECK_FOR_UPDATES); + Preference betaUpdateChannel = findPreference(KEY_BETA_UPDATE_CHANNEL); author.setSummary(getString(R.string.settings_about_author_summary).replace('$', '@')); + betaUpdateChannel.setDefaultValue(EhApplication.BETA); author.setOnPreferenceClickListener(this); googlePlus.setOnPreferenceClickListener(this); @@ -65,6 +71,7 @@ public class AboutFragment extends PreferenceFragment changelog.setOnPreferenceClickListener(this); license.setOnPreferenceClickListener(this); donate.setOnPreferenceClickListener(this); + checkForUpdate.setOnPreferenceClickListener(this); enableAnalytics.setOnPreferenceChangeListener(this); } @@ -106,6 +113,8 @@ public class AboutFragment extends PreferenceFragment .setTitle(R.string.settings_about_donate) .setMessage(getString(R.string.settings_about_donate_message).replace('$', '@')) .show(); + } else if (KEY_CHECK_FOR_UPDATES.equals(key)) { + CommonOperations.checkUpdate(getActivity(), true); } 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 25c4669dc..d33bf7cad 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -87,6 +87,11 @@ 发送 上次应用崩溃了。你愿意把错误日志发送给开发者以便以后得到更好的用户体验么?(以电子邮件的形式发送) + + 更新 + 版本:%1$s\n大小:%2$s\n\n%3$s + EhViewer 已是最新版本 + 搜索 ExHentai 什么都没有找到 @@ -321,6 +326,8 @@ 你的捐赠能帮助我开发更多更好的应用。\n\n支付宝:seven332$163.com 启用数据统计 关于数据统计 + 检查更新 + 更新测试版 开源许可 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index edf02839b..d23e0f904 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -87,6 +87,11 @@ 發送 上次應用崩潰了。你願意把錯誤日誌發送給開發者以便以後得到更好的用户體驗麼?(以電子郵件的形式發送) + + 更新 + 版本:%1$s\n大小:%2$s\n\n%3$s + EhViewer 已是最新版本 + 搜索 ExHentai 什麼都沒有找到 @@ -321,6 +326,8 @@ 你的捐贈能幫助我開發更多更好的應用。\n\n支付寶:seven332$163.com 啟用數據統計 關於數據統計 + 檢查更新 + 更新測試版 開源許可 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index b1c835194..b188dacb2 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -87,6 +87,11 @@ 傳送 上次應用崩潰了。你願意把錯誤日誌傳送給開發者以便以後得到更好的使用者體驗麼?(以電子郵件的形式傳送) + + 更新 + 版本:%1$s\n大小:%2$s\n\n%3$s + EhViewer 已是最新版本 + 搜尋 ExHentai 什麼都沒有找到 @@ -321,6 +326,8 @@ 你的捐贈能幫助我開發更多更好的應用。\n\n支付寶:seven332$163.com 啟用資料統計 關於資料統計 + 檢查更新 + 更新測試版 開源許可 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 70b4a3c61..1afea6e8b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -126,6 +126,11 @@ 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) + + Update + Version: %1$s\nSize: %2$s\n\n%3$s + EhViewer is update to date + Search ExHentai The World is Big and Pandas sit alone @@ -361,6 +366,8 @@ Your donation can help me develop more and better applications.\n\nAlipay: seven332$163.com Enable analytics About analytics + Check for updates + Beta update channel License diff --git a/app/src/main/res/xml/about_settings.xml b/app/src/main/res/xml/about_settings.xml index 5788e6177..36d06d8e4 100644 --- a/app/src/main/res/xml/about_settings.xml +++ b/app/src/main/res/xml/about_settings.xml @@ -60,4 +60,15 @@ android:title="@string/settings_about_about_analytics" app:message="@string/analytics_explain"/> + + + +