From 6864ce5d7ec39d914a94eabb51dbbe892a934f4b Mon Sep 17 00:00:00 2001 From: houxg Date: Mon, 19 Dec 2016 15:19:08 +0800 Subject: [PATCH] =?UTF-8?q?add=20better=20tips=20for=20custom=20host;=20fi?= =?UTF-8?q?x=20issue=20that=20user=20can=E2=80=99t=20sign=20up=20by=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/houxg/leamonax/ui/SignInActivity.java | 88 +++++++++++++++---- app/src/main/res/layout/activity_signin.xml | 31 +++++-- app/src/main/res/values/strings.xml | 1 + 3 files changed, 95 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/org/houxg/leamonax/ui/SignInActivity.java b/app/src/main/java/org/houxg/leamonax/ui/SignInActivity.java index fc0c215..44b597b 100644 --- a/app/src/main/java/org/houxg/leamonax/ui/SignInActivity.java +++ b/app/src/main/java/org/houxg/leamonax/ui/SignInActivity.java @@ -22,11 +22,14 @@ import org.houxg.leamonax.network.LeaFailure; import org.houxg.leamonax.service.AccountService; import org.houxg.leamonax.utils.ToastUtils; +import java.util.Locale; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import rx.Observable; import rx.Observer; +import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action0; import rx.functions.Func1; @@ -62,6 +65,8 @@ public class SignInActivity extends BaseActivity implements TextWatcher { ProgressBar mSignUpProgress; @BindView(R.id.rl_sign_up) View mSignUpPanel; + @BindView(R.id.tv_example) + TextView mEampleTv; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -85,6 +90,22 @@ public class SignInActivity extends BaseActivity implements TextWatcher { mActionPanel.setY(actionPanelOffsetY); mHostEt.setScaleY(isCustomHost ? 1 : 0); mHostEt.setText(host); + mHostEt.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + mEampleTv.setText(String.format(Locale.US, "For example, login api will be:\n%s/api/login", s.toString())); + } + }); } @Override @@ -111,6 +132,7 @@ public class SignInActivity extends BaseActivity implements TextWatcher { void switchHost() { boolean isCustomHost = !(boolean) mCustomHostBtn.getTag(); mCustomHostBtn.setTag(isCustomHost); + mEampleTv.setVisibility(isCustomHost ? View.VISIBLE : View.GONE); if (isCustomHost) { mCustomHostBtn.setText(R.string.use_leanote_host); mHostEt.animate() @@ -156,11 +178,16 @@ public class SignInActivity extends BaseActivity implements TextWatcher { @OnClick(R.id.tv_sign_in) void signIn() { - String email = mEmailEt.getText().toString(); - String password = mPasswordEt.getText().toString(); + final String email = mEmailEt.getText().toString(); + final String password = mPasswordEt.getText().toString(); final String host = getHost(); - ApiProvider.getInstance().init(host); - AccountService.login(email, password) + initHost() + .flatMap(new Func1>() { + @Override + public Observable call(String s) { + return AccountService.login(email, password); + } + }) .doOnSubscribe(new Action0() { @Override public void call() { @@ -183,8 +210,12 @@ public class SignInActivity extends BaseActivity implements TextWatcher { @Override public void onError(Throwable e) { e.printStackTrace(); - ToastUtils.showNetworkError(SignInActivity.this); - animateFinish(mSignInBtn, mSignInProgress); + if (e instanceof IllegalHostException) { + ToastUtils.show(SignInActivity.this, R.string.illegal_host); + } else { + ToastUtils.showNetworkError(SignInActivity.this); + animateFinish(mSignInBtn, mSignInProgress); + } } @Override @@ -203,12 +234,17 @@ public class SignInActivity extends BaseActivity implements TextWatcher { } @OnClick(R.id.tv_sign_up) - void clickedSignup() { + void clickedSignUp() { final String email = mEmailEt.getText().toString(); final String password = mPasswordEt.getText().toString(); final String host = getHost(); - ApiProvider.getInstance().init(host); - AccountService.register(email, password) + initHost() + .flatMap(new Func1>() { + @Override + public Observable call(String s) { + return AccountService.register(email, password); + } + }) .doOnSubscribe(new Action0() { @Override public void call() { @@ -241,8 +277,12 @@ public class SignInActivity extends BaseActivity implements TextWatcher { @Override public void onError(Throwable e) { e.printStackTrace(); - ToastUtils.showNetworkError(SignInActivity.this); - animateFinish(mSignUpBtn, mSignUpProgress); + if (e instanceof IllegalHostException) { + ToastUtils.show(SignInActivity.this, R.string.illegal_host); + } else { + ToastUtils.showNetworkError(SignInActivity.this); + animateFinish(mSignUpBtn, mSignUpProgress); + } } @Override @@ -260,13 +300,25 @@ public class SignInActivity extends BaseActivity implements TextWatcher { }); } - @OnClick(R.id.tv_sign_up) - void clickedSignUp() { - mSignUpPanel.animate() - .scaleX(1) - .setDuration(200) - .setInterpolator(new AccelerateDecelerateInterpolator()) - .start(); + private Observable initHost() { + return Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + if (!subscriber.isUnsubscribed()) { + String host = getHost(); + if (host.matches("^(http|https)://[^\\s]+")) { + ApiProvider.getInstance().init(host); + subscriber.onNext(host); + subscriber.onCompleted(); + } else { + subscriber.onError(new IllegalHostException()); + } + } + } + }); + } + + private static class IllegalHostException extends Exception { } private void animateProgress(View button, final View progressBar) { diff --git a/app/src/main/res/layout/activity_signin.xml b/app/src/main/res/layout/activity_signin.xml index 60e5e07..fce5a37 100644 --- a/app/src/main/res/layout/activity_signin.xml +++ b/app/src/main/res/layout/activity_signin.xml @@ -135,15 +135,32 @@ android:layout_marginBottom="16dp" android:src="@drawable/logo" /> - + android:orientation="vertical"> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 06d4717..d2b1458 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -64,4 +64,5 @@ Change user name successful Search Notebooks + Illegal host, please check again