Improve signing in
This commit is contained in:
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;
|
||||
|
||||
+48
-32
@@ -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();
|
||||
|
||||
Reference in new issue
Block a user