From 664e830c7b9645fcb19321eba95f4b7524f56d63 Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 15 Mar 2016 18:31:49 +0800 Subject: [PATCH] Add sign out --- .../hippo/ehviewer/client/EhCookieStore.java | 2 +- .../com/hippo/ehviewer/client/EhUtils.java | 6 ++ .../preference/SignOutPreference.java | 68 +++++++++++++++++++ .../com/hippo/ehviewer/ui/MainActivity.java | 6 +- .../hippo/ehviewer/ui/scene/BaseScene.java | 2 +- .../ehviewer/ui/scene/CookieSignInScene.java | 4 +- .../hippo/ehviewer/ui/scene/SignInScene.java | 3 +- .../ehviewer/ui/scene/WebViewSignInScene.java | 7 +- .../hippo/preference/MessagePreference.java | 4 ++ 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 ++ 14 files changed, 117 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/hippo/ehviewer/preference/SignOutPreference.java 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 05e23df1f..211007923 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.java @@ -31,7 +31,7 @@ public class EhCookieStore extends CookieDBStore { public static final String KEY_IPD_MEMBER_ID = "ipb_member_id"; public static final String KEY_IPD_PASS_HASH = "ipb_pass_hash"; - public void cleanUpForSignIn() { + public void signOut() { removeAll(); } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java b/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java index c6cd82dfe..e64b23abf 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java @@ -115,6 +115,12 @@ public class EhUtils { } } + public static void signOut(Context context) { + EhApplication.getEhCookieStore(context).signOut(); + Settings.putAvatar(null); + Settings.putDisplayName(null); + } + public static boolean hasSignedIn(Context context) { return EhApplication.getEhCookieStore(context).hasSignedIn(); } diff --git a/app/src/main/java/com/hippo/ehviewer/preference/SignOutPreference.java b/app/src/main/java/com/hippo/ehviewer/preference/SignOutPreference.java new file mode 100644 index 000000000..8970887f9 --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/preference/SignOutPreference.java @@ -0,0 +1,68 @@ +/* + * Copyright 2016 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.Context; +import android.support.v7.app.AlertDialog; +import android.util.AttributeSet; +import android.widget.Toast; + +import com.hippo.ehviewer.R; +import com.hippo.ehviewer.client.EhUtils; +import com.hippo.preference.MessagePreference; + +public class SignOutPreference extends MessagePreference { + + public SignOutPreference(Context context) { + super(context); + init(); + } + + public SignOutPreference(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public SignOutPreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + public SignOutPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(); + } + + private void init() { + setDialogMessage(getContext().getString(R.string.settings_eh_sign_out_warning)); + } + + @Override + protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { + super.onPrepareDialogBuilder(builder); + builder.setPositiveButton(R.string.settings_eh_sign_out_yes, this); + } + + @Override + protected void onDialogClosed(boolean positiveResult) { + super.onDialogClosed(positiveResult); + if (positiveResult) { + EhUtils.signOut(getContext()); + Toast.makeText(getContext(), R.string.settings_eh_sign_out_tip, Toast.LENGTH_SHORT).show(); + } + } +} 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 3cc260db6..cbf420c80 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -74,6 +74,8 @@ public final class MainActivity extends StageActivity private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0; + private static final int REQUEST_CODE_UPDATE_PROFILE = 0; + private static final String KEY_NAV_CHECKED_ITEM = "nav_checked_item"; public static final int CHECK_STEP_WARNING = 0; @@ -262,7 +264,7 @@ public final class MainActivity extends StageActivity mAvatar = (LoadImageView) ViewUtils.$$(headerLayout, R.id.avatar); mDisplayName = (TextView) ViewUtils.$$(headerLayout, R.id.display_name); - updateAvatar(); + updateProfile(); if (mNavView != null) { mNavView.setNavigationItemSelectedListener(this); @@ -350,7 +352,7 @@ public final class MainActivity extends StageActivity } } - public void updateAvatar() { + public void updateProfile() { if (null == mAvatar || null == mDisplayName) { return; } 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 cb97615c6..57135e43b 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 @@ -41,7 +41,7 @@ public abstract class BaseScene extends SceneFragment { public void updateAvatar() { FragmentActivity activity = getActivity(); if (activity instanceof MainActivity) { - ((MainActivity) activity).updateAvatar(); + ((MainActivity) activity).updateProfile(); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java index 5a753d062..0c0ab708c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java @@ -34,6 +34,7 @@ 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.ehviewer.client.EhUtils; import com.hippo.rippleold.RippleSalon; import com.hippo.util.ActivityHelper; import com.hippo.yorozuya.AssertUtils; @@ -196,8 +197,9 @@ public class CookieSignInScene extends BaseScene implements EditText.OnEditorAct return; } + EhUtils.signOut(getContext()); + EhCookieStore store = EhApplication.getEhCookieStore(context); - store.removeAll(); store.add(newCookie(EhCookieStore.KEY_IPD_MEMBER_ID, id, EhUrl.DOMAIN_E)); store.add(newCookie(EhCookieStore.KEY_IPD_MEMBER_ID, id, EhUrl.DOMAIN_EX)); store.add(newCookie(EhCookieStore.KEY_IPD_PASS_HASH, hash, EhUrl.DOMAIN_E)); 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 9fb43ba3d..0cba5f2f1 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 @@ -38,6 +38,7 @@ import com.hippo.ehviewer.UrlOpener; import com.hippo.ehviewer.client.EhClient; import com.hippo.ehviewer.client.EhRequest; import com.hippo.ehviewer.client.EhUrl; +import com.hippo.ehviewer.client.EhUtils; import com.hippo.ehviewer.client.parser.ProfileParser; import com.hippo.ehviewer.ui.MainActivity; import com.hippo.rippleold.RippleSalon; @@ -266,7 +267,7 @@ public final class SignInScene extends BaseScene implements EditText.OnEditorAct showProgress(true); // Clean up for sign in - EhApplication.getEhCookieStore(getContext()).cleanUpForSignIn(); + EhUtils.signOut(getContext()); EhCallback callback = new SignInListener(getContext(), ((StageActivity) getActivity()).getStageId(), getTag()); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/WebViewSignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/WebViewSignInScene.java index 909693fa3..877db8e3b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/WebViewSignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/WebViewSignInScene.java @@ -30,6 +30,7 @@ import android.webkit.WebViewClient; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.client.EhCookieStore; import com.hippo.ehviewer.client.EhUrl; +import com.hippo.ehviewer.client.EhUtils; import java.util.ArrayList; import java.util.Collections; @@ -40,8 +41,6 @@ import okhttp3.HttpUrl; public class WebViewSignInScene extends BaseScene { - public static final String KEY_DISPLAY_NAME = "display_name"; - /*--------------- View life cycle ---------------*/ @@ -56,10 +55,10 @@ public class WebViewSignInScene extends BaseScene { @Nullable @Override @SuppressWarnings("deprecation") - @SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"}) + @SuppressLint("SetJavaScriptEnabled") public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - EhApplication.getEhCookieStore(getContext()).removeAll(); + EhUtils.signOut(getContext()); CookieManager.getInstance().removeAllCookie(); mWebView = new WebView(getContext()); mWebView.getSettings().setJavaScriptEnabled(true); diff --git a/app/src/main/java/com/hippo/preference/MessagePreference.java b/app/src/main/java/com/hippo/preference/MessagePreference.java index 04801837e..c93207811 100644 --- a/app/src/main/java/com/hippo/preference/MessagePreference.java +++ b/app/src/main/java/com/hippo/preference/MessagePreference.java @@ -68,6 +68,10 @@ public class MessagePreference extends DialogPreference { a.recycle(); } + public void setDialogMessage(CharSequence message) { + mDialogMessage = message; + } + @Override protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { super.onPrepareDialogBuilder(builder); diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index a710142e6..65e7bc219 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -281,6 +281,11 @@ EH + 退出登陆 + 退出登陆后重启应用以便再次登陆 + 天哪,我的老伙计,你要退出登录吗?我是说,你真的要退出登录吗? + 是的,我是说,真的 + 已退出登陆,重启应用以便再次登陆 列表模式 详情 缩略图 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index da49db1a9..6d510a33e 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -281,6 +281,11 @@ EH + 退出登陸 + 退出登陸後重啟應用以便再次登陸 + 天哪,我的老夥計,你要退出登錄嗎?我是説,你真的要退出登錄嗎? + 是的,我是説,真的 + 已退出登陸,重啟應用以便再次登陸 列表模式 詳情 縮略圖 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 5794e694a..c311dba38 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -281,6 +281,11 @@ EH + 退出登陸 + 退出登陸後重啟應用以便再次登陸 + 天哪,我的老夥計,你要退出登入嗎?我是說,你真的要退出登入嗎? + 是的,我是說,真的 + 已退出登陸,重啟應用以便再次登陸 列表模式 詳情 縮圖 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4000d1f09..1e6423008 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -320,6 +320,11 @@ Image saved to %s EH + Sign out + Restart the application to sign in + Do you really want to sign out? + @android:string/ok + Signed out, restart the application to sign in List mode Detail Thumb diff --git a/app/src/main/res/xml/eh_settings.xml b/app/src/main/res/xml/eh_settings.xml index 4fe1e5a0e..0f085761b 100644 --- a/app/src/main/res/xml/eh_settings.xml +++ b/app/src/main/res/xml/eh_settings.xml @@ -19,6 +19,11 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> + +