From a585c7cd2008a418aa3170abb03a76d55c41c32c Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 11 Feb 2016 01:22:33 +0800 Subject: [PATCH] Use EhCallback --- .../java/com/hippo/ehviewer/client/EhUrl.java | 1 + .../hippo/ehviewer/ui/scene/EhCallback.java | 4 + .../ui/scene/GalleryCommentsScene.java | 37 ++--- .../ehviewer/ui/scene/GalleryDetailScene.java | 73 +++------ .../ehviewer/ui/scene/GalleryListScene.java | 28 +--- .../ui/scene/GalleryPreviewsScene.java | 32 +--- .../hippo/ehviewer/ui/scene/LoginScene.java | 155 +++++++++++------- .../hippo/ehviewer/ui/scene/WarningScene.java | 8 + 8 files changed, 165 insertions(+), 173 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java index 7c738adb7..8064f0507 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUrl.java @@ -28,6 +28,7 @@ public class EhUrl { public static final String HOST_EX = "http://" + DOMAIN_EX + "/"; public static final String API_SIGN_IN = "http://forums.e-hentai.org/index.php?act=Login&CODE=01"; + public static final String API_REGISTER = "http://forums.e-hentai.org/index.php?act=Reg&CODE=00"; public static final String API_EX = HOST_EX + "api.php"; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/EhCallback.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/EhCallback.java index f0b17fe1f..6a0488c0a 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/EhCallback.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/EhCallback.java @@ -37,6 +37,10 @@ public abstract class EhCallback implements EhClient public abstract boolean isInstance(SceneFragment scene); + public EhApplication getApplication() { + return mApplication; + } + @SuppressWarnings("unchecked") public E getScene() { StageActivity stage = mApplication.findStageActivityById(mStageId); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java index 535c03259..887cb2b07 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java @@ -408,37 +408,23 @@ public final class GalleryCommentsScene extends ToolbarScene Bundle re = new Bundle(); re.putParcelableArray(KEY_COMMENTS, result); setResult(SceneFragment.RESULT_OK, re); + + // Remove text + if (mEditText != null) { + mEditText.setText(""); + } } - private static class CommentGalleryListener implements EhClient.Callback { - - private EhApplication mApplication; - private int mStageId; - private String mSceneTag; + private static class CommentGalleryListener extends EhCallback { public CommentGalleryListener(Context context, int stageId, String sceneTag) { - mApplication = (EhApplication) context.getApplicationContext(); - mStageId = stageId; - mSceneTag = sceneTag; - } - - private GalleryCommentsScene getScene() { - StageActivity stage = mApplication.findStageActivityById(mStageId); - if (stage == null) { - return null; - } - SceneFragment scene = stage.findSceneByTag(mSceneTag); - if (scene instanceof GalleryCommentsScene) { - return (GalleryCommentsScene) scene; - } else { - return null; - } + super(context, stageId, sceneTag); } @Override public void onSuccess(GalleryComment[] result) { // Show toast - Toast.makeText(mApplication, R.string.comment_successfully, Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplication(), R.string.comment_successfully, Toast.LENGTH_SHORT).show(); GalleryCommentsScene scene = getScene(); if (scene != null) { @@ -449,11 +435,16 @@ public final class GalleryCommentsScene extends ToolbarScene @Override public void onFailure(Exception e) { // Show toast - Toast.makeText(mApplication, R.string.comment_failed, Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplication(), R.string.comment_failed, Toast.LENGTH_SHORT).show(); } @Override public void onCancel() { } + + @Override + public boolean isInstance(SceneFragment scene) { + return scene instanceof GalleryCommentsScene; + } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index abd97e335..953cfe5d7 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -1036,40 +1036,21 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene } } - private static class GetGalleryDetailListener implements EhClient.Callback { - - private EhApplication mApplication; - private int mStageId; - private String mSceneTag; + private static class GetGalleryDetailListener extends EhCallback { public GetGalleryDetailListener(Context context, int stageId, String sceneTag) { - mApplication = (EhApplication) context.getApplicationContext(); - mStageId = stageId; - mSceneTag = sceneTag; - } - - private GalleryDetailScene getScene() { - StageActivity stage = mApplication.findStageActivityById(mStageId); - if (stage == null) { - return null; - } - SceneFragment scene = stage.findSceneByTag(mSceneTag); - if (scene instanceof GalleryDetailScene) { - return (GalleryDetailScene) scene; - } else { - return null; - } + super(context, stageId, sceneTag); } @Override public void onSuccess(GalleryDetail result) { - mApplication.removeGlobalStuff(this); + getApplication().removeGlobalStuff(this); // Put gallery detail to cache - EhApplication.getGalleryDetailCache(mApplication).put(result.gid, result); - EhApplication.getLargePreviewSetCache(mApplication).put( + EhApplication.getGalleryDetailCache(getApplication()).put(result.gid, result); + EhApplication.getLargePreviewSetCache(getApplication()).put( EhCacheKeyFactory.getLargePreviewSetKey(result.gid, 0), result.previewSet); - EhApplication.getPreviewPagesCache(mApplication).put(result.gid, result.previewPages); + EhApplication.getPreviewPagesCache(getApplication()).put(result.gid, result.previewPages); // Notify success GalleryDetailScene scene = getScene(); @@ -1080,7 +1061,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene @Override public void onFailure(Exception e) { - mApplication.removeGlobalStuff(this); + getApplication().removeGlobalStuff(this); GalleryDetailScene scene = getScene(); if (scene != null) { scene.onGetGalleryDetailFailure(e); @@ -1089,7 +1070,12 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene @Override public void onCancel() { - mApplication.removeGlobalStuff(this); + getApplication().removeGlobalStuff(this); + } + + @Override + public boolean isInstance(SceneFragment scene) { + return scene instanceof GalleryDetailScene; } } @@ -1130,44 +1116,26 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene } } - private static class RateGalleryListener implements EhClient.Callback { + private static class RateGalleryListener extends EhCallback { - private EhApplication mApplication; - private int mStageId; - private String mSceneTag; private int mGid; public RateGalleryListener(Context context, int stageId, String sceneTag, int gid) { - mApplication = (EhApplication) context.getApplicationContext(); - mStageId = stageId; - mSceneTag = sceneTag; + super(context, stageId, sceneTag); mGid = gid; } - private GalleryDetailScene getScene() { - StageActivity stage = mApplication.findStageActivityById(mStageId); - if (stage == null) { - return null; - } - SceneFragment scene = stage.findSceneByTag(mSceneTag); - if (scene instanceof GalleryDetailScene) { - return (GalleryDetailScene) scene; - } else { - return null; - } - } - @Override public void onSuccess(RateGalleryParser.Result result) { // Show toast - Toast.makeText(mApplication, R.string.rate_successfully, Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplication(), R.string.rate_successfully, Toast.LENGTH_SHORT).show(); GalleryDetailScene scene = getScene(); if (scene != null) { scene.onRateGallerySuccess(result); } else { // Update rating in cache - GalleryDetail gd = EhApplication.getGalleryDetailCache(mApplication).get(mGid); + GalleryDetail gd = EhApplication.getGalleryDetailCache(getApplication()).get(mGid); if (gd != null) { gd.rating = result.rating; gd.ratedTimes = result.ratedTimes; @@ -1179,11 +1147,16 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene public void onFailure(Exception e) { e.printStackTrace(); // Show toast - Toast.makeText(mApplication, R.string.rate_failed, Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplication(), R.string.rate_failed, Toast.LENGTH_SHORT).show(); } @Override public void onCancel() { } + + @Override + public boolean isInstance(SceneFragment scene) { + return scene instanceof GalleryDetailScene; + } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java index bb1d93bdf..d19b33f54 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java @@ -67,7 +67,6 @@ import com.hippo.ehviewer.widget.SearchLayout; import com.hippo.ehviewer.widget.SimpleRatingView; import com.hippo.rippleold.RippleSalon; import com.hippo.scene.Announcer; -import com.hippo.scene.SceneApplication; import com.hippo.scene.SceneFragment; import com.hippo.scene.StageActivity; import com.hippo.scene.TransitionHelper; @@ -1052,33 +1051,15 @@ public final class GalleryListScene extends BaseScene } } - private static class GetGalleryListListener implements EhClient.Callback { + private static class GetGalleryListListener extends EhCallback { - private SceneApplication mApplication; - private int mStageId; - private String mSceneTag; private int mTaskId; public GetGalleryListListener(Context context, int stageId, String sceneTag, int taskId) { - mApplication = (SceneApplication) context.getApplicationContext(); - mStageId = stageId; - mSceneTag = sceneTag; + super(context, stageId, sceneTag); mTaskId = taskId; } - private GalleryListScene getScene() { - StageActivity stage = mApplication.findStageActivityById(mStageId); - if (stage == null) { - return null; - } - SceneFragment scene = stage.findSceneByTag(mSceneTag); - if (scene instanceof GalleryListScene) { - return (GalleryListScene) scene; - } else { - return null; - } - } - @Override public void onSuccess(GalleryListParser.Result result) { GalleryListScene scene = getScene(); @@ -1097,5 +1078,10 @@ public final class GalleryListScene extends BaseScene @Override public void onCancel() {} + + @Override + public boolean isInstance(SceneFragment scene) { + return scene instanceof GalleryListScene; + } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java index cde18373c..ca9000bce 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java @@ -45,7 +45,6 @@ import com.hippo.ehviewer.client.EhUrl; import com.hippo.ehviewer.client.data.GalleryPreview; import com.hippo.ehviewer.client.data.LargePreviewSet; import com.hippo.ehviewer.client.exception.EhException; -import com.hippo.scene.SceneApplication; import com.hippo.scene.SceneFragment; import com.hippo.scene.StageActivity; import com.hippo.util.ActivityHelper; @@ -299,42 +298,24 @@ public class GalleryPreviewsScene extends ToolbarScene { } } - private static class GetLargePreviewSetListener implements EhClient.Callback> { + private static class GetLargePreviewSetListener extends EhCallback> { - private SceneApplication mApplication; - private int mStageId; - private String mSceneTag; private int mTaskId; private int mGid; private int mPage; public GetLargePreviewSetListener(Context context, int stageId, String sceneTag, int taskId, int gid, int page) { - mApplication = (SceneApplication) context.getApplicationContext(); - mStageId = stageId; - mSceneTag = sceneTag; + super(context, stageId, sceneTag); mTaskId = taskId; mGid = gid; mPage = page; } - private GalleryPreviewsScene getScene() { - StageActivity stage = mApplication.findStageActivityById(mStageId); - if (stage == null) { - return null; - } - SceneFragment scene = stage.findSceneByTag(mSceneTag); - if (scene instanceof GalleryPreviewsScene) { - return (GalleryPreviewsScene) scene; - } else { - return null; - } - } - @Override public void onSuccess(Pair result) { - EhApplication.getLargePreviewSetCache(mApplication).put( + EhApplication.getLargePreviewSetCache(getApplication()).put( EhCacheKeyFactory.getLargePreviewSetKey(mGid, mPage), result.first); - EhApplication.getPreviewPagesCache(mApplication).put(mGid, result.second); + EhApplication.getPreviewPagesCache(getApplication()).put(mGid, result.second); GalleryPreviewsScene scene = getScene(); if (scene != null) { @@ -354,6 +335,11 @@ public class GalleryPreviewsScene extends ToolbarScene { public void onCancel() { } + + @Override + public boolean isInstance(SceneFragment scene) { + return scene instanceof GalleryPreviewsScene; + } } private class GoToDialogHelper implements View.OnClickListener, diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/LoginScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/LoginScene.java index 522732471..0ce5050f9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/LoginScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/LoginScene.java @@ -16,6 +16,7 @@ package com.hippo.ehviewer.ui.scene; +import android.content.Context; import android.content.DialogInterface; import android.graphics.Paint; import android.os.Bundle; @@ -35,17 +36,22 @@ import android.widget.Toast; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; +import com.hippo.ehviewer.UrlOpener; import com.hippo.ehviewer.client.EhClient; -import com.hippo.ehviewer.client.EhCookieStore; import com.hippo.ehviewer.client.EhRequest; +import com.hippo.ehviewer.client.EhUrl; import com.hippo.rippleold.RippleSalon; import com.hippo.scene.Announcer; +import com.hippo.scene.SceneFragment; +import com.hippo.scene.StageActivity; import com.hippo.util.ActivityHelper; import com.hippo.util.ExceptionUtils; public final class LoginScene extends BaseScene implements EditText.OnEditorActionListener, View.OnClickListener { + private static final String KEY_REQUEST_ID = "request_id"; + private View mProgress; private TextInputLayout mUsernameLayout; private TextInputLayout mPasswordLayout; @@ -57,9 +63,7 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi private TextView mSignInViaCookies; private TextView mSkipSigningIn; - private EhClient mClient; - private EhCookieStore mCookieStore; - private EhRequest mSignInRequest; + private int mRequestId; @Override public int getSoftInputMode() { @@ -71,10 +75,27 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mClient = EhApplication.getEhClient(getContext()); - mCookieStore = EhApplication.getEhCookieStore(getContext()); + if (savedInstanceState == null) { + onInit(); + } else { + onRestore(savedInstanceState); + } } + private void onInit() { + } + + private void onRestore(Bundle savedInstanceState) { + mRequestId = savedInstanceState.getInt(KEY_REQUEST_ID); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(KEY_REQUEST_ID, mRequestId); + } + + @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @@ -108,6 +129,13 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi RippleSalon.addRipple(mRegister, true); RippleSalon.addRipple(mSignIn, true); + EhApplication application = (EhApplication) getContext().getApplicationContext(); + if (application.containGlobalStuff(mRequestId)) { + // request exist + mProgress.setAlpha(1.0f); + mProgress.setVisibility(View.VISIBLE); + } + return view; } @@ -119,20 +147,10 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi ActivityHelper.showSoftInput(getActivity(), mUsername); } - @Override - public void onDestroy() { - super.onDestroy(); - - if (mSignInRequest != null) { - mSignInRequest.cancel(); - mSignInRequest = null; - } - } - @Override public void onClick(View v) { if (mRegister == v) { - + UrlOpener.openUrl(getActivity(), EhUrl.API_REGISTER, false, true); } else if (mSignIn == v) { signIn(); } else if (mSignInViaWebview == v) { @@ -157,10 +175,6 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi } private void signIn() { - if (mSignInRequest != null) { - return; - } - String username = mUsername.getText().toString(); String password = mPassword.getText().toString(); @@ -185,44 +199,16 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi mProgress.animate().alpha(1.0f).setDuration(500).start(); // Clean up for sign in - mCookieStore.cleanUpForSignIn(); + EhApplication.getEhCookieStore(getContext()).cleanUpForSignIn(); - // TODO Make callback static - mSignInRequest = new EhRequest() + EhCallback callback = new SignInListener(getContext(), + ((StageActivity) getActivity()).getStageId(), getTag()); + mRequestId = ((EhApplication) getContext().getApplicationContext()).putGlobalStuff(callback); + EhRequest request = new EhRequest() .setMethod(EhClient.METHOD_SIGN_IN) .setArgs(username, password) - .setCallback(new EhClient.Callback() { - @Override - public void onSuccess(String result) { - mSignInRequest = null; - Settings.putDisplayName(result); - - if (mCookieStore.hasSignedIn()) { - // Has signed in - redirectTo(); - } else { - mProgress.setVisibility(View.GONE); - whetherToSkip(); - } - } - - @Override - public void onFailure(Exception e) { - e.printStackTrace(); - mSignInRequest = null; - mProgress.setVisibility(View.GONE); - Toast.makeText(getContext(), ExceptionUtils.getReadableString(getContext(), e), - Toast.LENGTH_SHORT).show(); - whetherToSkip(); - } - - @Override - public void onCancel() { - mSignInRequest = null; - // User close this Scene - } - }); - mClient.execute(mSignInRequest); + .setCallback(callback); + EhApplication.getEhClient(getContext()).execute(request); } private void redirectTo() { @@ -248,4 +234,61 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi } }).show(); } + + + public void onSignInSuccess() { + if (EhApplication.getEhCookieStore(getContext()).hasSignedIn()) { + // Has signed in + redirectTo(); + } else { + mProgress.setVisibility(View.GONE); + whetherToSkip(); + } + } + + public void onSignInFailure(Exception e) { + mProgress.setVisibility(View.GONE); + Toast.makeText(getContext(), ExceptionUtils.getReadableString(getContext(), e), + Toast.LENGTH_SHORT).show(); + whetherToSkip(); + } + + private class SignInListener extends EhCallback { + + public SignInListener(Context context, int stageId, String sceneTag) { + super(context, stageId, sceneTag); + } + + @Override + public void onSuccess(String result) { + getApplication().removeGlobalStuff(this); + Settings.putDisplayName(result); + + LoginScene scene = getScene(); + if (scene != null) { + scene.onSignInSuccess(); + } + } + + @Override + public void onFailure(Exception e) { + getApplication().removeGlobalStuff(this); + e.printStackTrace(); + + LoginScene scene = getScene(); + if (scene != null) { + scene.onSignInFailure(e); + } + } + + @Override + public void onCancel() { + getApplication().removeGlobalStuff(this); + } + + @Override + public boolean isInstance(SceneFragment scene) { + return scene instanceof LoginScene; + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/WarningScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/WarningScene.java index df402f9e2..0bf4ceaf9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/WarningScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/WarningScene.java @@ -67,6 +67,14 @@ public final class WarningScene extends BaseScene implements View.OnClickListene ActivityHelper.hideSoftInput(getActivity()); } + @Override + public void onDestroyView() { + super.onDestroyView(); + + mCancel = null; + mOk = null; + } + @Override public void onClick(View v) { if (mCancel == v) {