Improve signing in

This commit is contained in:
seven332 committed 2016-03-09 20:05:03 +08:00
1 parent 7ec5cf7ca1
commit 0f9bcf31ed
9 files changed
+84 -49

No files matched your search

@@ -32,8 +32,7 @@ public class EhCookieStore extends CookieDBStore {
private static final String KEY_IPD_PASS_HASH = "ipb_pass_hash";
public void cleanUpForSignIn() {
remove(EhUrl.DOMAIN_E);
remove(EhUrl.DOMAIN_EX);
removeAll();
}
public boolean hasSignedIn() {
@@ -99,14 +98,22 @@ public class EhCookieStore extends CookieDBStore {
List<Cookie> result = new ArrayList<>(cookies.size() + 2);
for (Cookie cookie: cookies) {
result.add(cookie);
if (EhUrl.DOMAIN_E.equals(cookie.domain())) {
// Don't save igneous: mystery. It is for sad panda
if (EhUrl.DOMAIN_E.equals(cookie.domain()) &&
"igneous".equals(cookie.name()) &&
"mystery".equals(cookie.value())) {
continue;
}
// Save id and hash for exhentai
if (EhUrl.DOMAIN_E.equals(cookie.domain()) &&
(KEY_IPD_MEMBER_ID.equals(cookie.name()) ||
KEY_IPD_PASS_HASH.equals(cookie.name()))) {
result.add(newCookie(cookie, EhUrl.DOMAIN_EX));
// Save id and hash for exhentai
if (KEY_IPD_MEMBER_ID.equals(cookie.name()) ||
KEY_IPD_PASS_HASH.equals(cookie.name())) {
result.add(newCookie(cookie, EhUrl.DOMAIN_EX));
}
}
result.add(cookie);
}
super.saveFromResponse(url, Collections.unmodifiableList(result));
@@ -49,7 +49,7 @@ import com.hippo.ehviewer.ui.scene.GalleryDetailScene;
import com.hippo.ehviewer.ui.scene.GalleryInfoScene;
import com.hippo.ehviewer.ui.scene.GalleryListScene;
import com.hippo.ehviewer.ui.scene.GalleryPreviewsScene;
import com.hippo.ehviewer.ui.scene.LoginScene;
import com.hippo.ehviewer.ui.scene.SignInScene;
import com.hippo.ehviewer.ui.scene.ProgressScene;
import com.hippo.ehviewer.ui.scene.QuickSearchScene;
import com.hippo.ehviewer.ui.scene.WarningScene;
@@ -90,7 +90,7 @@ public final class MainActivity extends StageActivity
static {
registerLaunchMode(WarningScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK);
registerLaunchMode(AnalyticsScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK);
registerLaunchMode(LoginScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK);
registerLaunchMode(SignInScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK);
registerLaunchMode(GalleryListScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TOP);
registerLaunchMode(QuickSearchScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK);
registerLaunchMode(GalleryDetailScene.class, SceneFragment.LAUNCH_MODE_STANDARD);
@@ -112,7 +112,7 @@ public final class MainActivity extends StageActivity
}
case CHECK_STEP_ANALYTICS:
if (!EhUtils.hasSignedIn(this)) {
startScene(new Announcer(LoginScene.class).setArgs(args));
startScene(new Announcer(SignInScene.class).setArgs(args));
break;
}
case CHECK_STEP_SIGN_IN:
@@ -156,7 +156,7 @@ public final class MainActivity extends StageActivity
} else if (Settings.getAskAnalytics()) {
return new Announcer(AnalyticsScene.class);
} else if (!EhUtils.hasSignedIn(this)) {
return new Announcer(LoginScene.class);
return new Announcer(SignInScene.class);
} else {
Bundle args = new Bundle();
args.putString(GalleryListScene.KEY_ACTION, GalleryListScene.ACTION_HOMEPAGE);
@@ -181,7 +181,7 @@ public final class MainActivity extends StageActivity
Bundle newArgs = new Bundle();
newArgs.putString(KEY_TARGET_SCENE, announcer.getClazz().getName());
newArgs.putBundle(KEY_TARGET_ARGS, announcer.getArgs());
return new Announcer(LoginScene.class).setArgs(newArgs);
return new Announcer(SignInScene.class).setArgs(newArgs);
}
}
return announcer;
@@ -17,7 +17,6 @@
package com.hippo.ehviewer.ui.scene;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.annotation.Nullable;
@@ -45,23 +44,36 @@ import com.hippo.scene.SceneFragment;
import com.hippo.scene.StageActivity;
import com.hippo.util.ActivityHelper;
import com.hippo.util.ExceptionUtils;
import com.hippo.yorozuya.AssertUtils;
import com.hippo.yorozuya.ViewUtils;
public final class LoginScene extends BaseScene implements EditText.OnEditorActionListener,
public final class SignInScene extends BaseScene implements EditText.OnEditorActionListener,
View.OnClickListener {
private static final String TAG = LoginScene.class.getSimpleName();
private static final String KEY_REQUEST_ID = "request_id";
/*---------------
View life cycle
---------------*/
@Nullable
private View mProgress;
@Nullable
private TextInputLayout mUsernameLayout;
@Nullable
private TextInputLayout mPasswordLayout;
@Nullable
private EditText mUsername;
@Nullable
private EditText mPassword;
@Nullable
private View mRegister;
@Nullable
private View mSignIn;
private TextView mSignInViaWebview;
@Nullable
private TextView mSignInViaWebView;
@Nullable
private TextView mSignInViaCookies;
@Nullable
private TextView mSkipSigningIn;
private int mRequestId;
@@ -102,19 +114,21 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.scene_login, container, false);
View loginForm = view.findViewById(R.id.login_form);
mProgress = view.findViewById(R.id.progress);
mUsernameLayout = (TextInputLayout) loginForm.findViewById(R.id.username_layout);
View loginForm = ViewUtils.$$(view, R.id.login_form);
mProgress = ViewUtils.$$(view, R.id.progress);
mUsernameLayout = (TextInputLayout) ViewUtils.$$(loginForm, R.id.username_layout);
mUsername = mUsernameLayout.getEditText();
mPasswordLayout = (TextInputLayout) loginForm.findViewById(R.id.password_layout);
AssertUtils.assertNotNull(mUsername);
mPasswordLayout = (TextInputLayout) ViewUtils.$$(loginForm, R.id.password_layout);
mPassword = mPasswordLayout.getEditText();
mRegister = loginForm.findViewById(R.id.register);
mSignIn = loginForm.findViewById(R.id.sign_in);
mSignInViaWebview = (TextView) loginForm.findViewById(R.id.sign_in_via_webview);
mSignInViaCookies = (TextView) loginForm.findViewById(R.id.sign_in_via_cookies);
mSkipSigningIn = (TextView) loginForm.findViewById(R.id.skip_signing_in);
AssertUtils.assertNotNull(mPassword);
mRegister = ViewUtils.$$(loginForm, R.id.register);
mSignIn = ViewUtils.$$(loginForm, R.id.sign_in);
mSignInViaWebView = (TextView) ViewUtils.$$(loginForm, R.id.sign_in_via_webview);
mSignInViaCookies = (TextView) ViewUtils.$$(loginForm, R.id.sign_in_via_cookies);
mSkipSigningIn = (TextView) ViewUtils.$$(loginForm, R.id.skip_signing_in);
mSignInViaWebview.setPaintFlags(mSignInViaWebview.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
mSignInViaWebView.setPaintFlags(mSignInViaWebView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
mSignInViaCookies.setPaintFlags(mSignInViaCookies.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
mSkipSigningIn.setPaintFlags(mSignInViaCookies.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
@@ -122,7 +136,7 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
mRegister.setOnClickListener(this);
mSignIn.setOnClickListener(this);
mSignInViaWebview.setOnClickListener(this);
mSignInViaWebView.setOnClickListener(this);
mSignInViaCookies.setOnClickListener(this);
mSkipSigningIn.setOnClickListener(this);
@@ -153,7 +167,7 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
UrlOpener.openUrl(getActivity(), EhUrl.API_REGISTER, false, true);
} else if (mSignIn == v) {
signIn();
} else if (mSignInViaWebview == v) {
} else if (mSignInViaWebView == v) {
} else if (mSignInViaCookies == v) {
@@ -175,6 +189,11 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
}
private void signIn() {
if (null == mUsername || null == mPassword || null == mUsernameLayout ||
null == mPasswordLayout || null == mProgress) {
return;
}
String username = mUsername.getText().toString();
String password = mPassword.getText().toString();
@@ -222,35 +241,32 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
.setTitle(R.string.skip_signing_in)
.setMessage(R.string.skip_signing_in_plain)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == AlertDialog.BUTTON_POSITIVE) {
redirectTo();
}
}
}).show();
.setPositiveButton(R.string.get_it, null)
.show();
}
public void onSignInSuccess() {
if (EhApplication.getEhCookieStore(getContext()).hasSignedIn()) {
// Has signed in
redirectTo();
} else {
mProgress.setVisibility(View.GONE);
if (null != mProgress) {
mProgress.setVisibility(View.GONE);
}
whetherToSkip();
}
}
public void onSignInFailure(Exception e) {
mProgress.setVisibility(View.GONE);
if (null != mProgress) {
mProgress.setVisibility(View.GONE);
}
Toast.makeText(getContext(), ExceptionUtils.getReadableString(getContext(), e),
Toast.LENGTH_SHORT).show();
whetherToSkip();
}
private class SignInListener extends EhCallback<LoginScene, String> {
private class SignInListener extends EhCallback<SignInScene, String> {
public SignInListener(Context context, int stageId, String sceneTag) {
super(context, stageId, sceneTag);
@@ -261,7 +277,7 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
getApplication().removeGlobalStuff(this);
Settings.putDisplayName(result);
LoginScene scene = getScene();
SignInScene scene = getScene();
if (scene != null) {
scene.onSignInSuccess();
}
@@ -272,7 +288,7 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
getApplication().removeGlobalStuff(this);
e.printStackTrace();
LoginScene scene = getScene();
SignInScene scene = getScene();
if (scene != null) {
scene.onSignInFailure(e);
}
@@ -285,7 +301,7 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
@Override
public boolean isInstance(SceneFragment scene) {
return scene instanceof LoginScene;
return scene instanceof SignInScene;
}
}
}
@@ -111,6 +111,10 @@ public class CookieDB {
sDaoSession.getOkHttp3CookieDao().deleteByKey(id);
}
static void removeAllCookies() {
sDaoSession.getOkHttp3CookieDao().deleteAll();
}
static long addCookie(Cookie cookie) {
OkHttp3CookieDao dao = sDaoSession.getOkHttp3CookieDao();
@@ -126,6 +126,10 @@ public class CookieDBStore implements CookieJar {
}
}
public synchronized void removeAll() {
map.clear();
CookieDB.removeAllCookies();
}
public synchronized void add(Cookie cookie) {
String domain = cookie.domain();