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">
+
+