initial loginfragment with mvp and presenter class
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/commit/bda66e81 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/bda66e81 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/bda66e81 Branch: refs/heads/master Commit: bda66e8170718f2eb72cc8efa72756b4ee9bb837 Parents: adbaaa0 Author: Sagar <[email protected]> Authored: Sat Jul 30 14:52:42 2016 +0530 Committer: Sagar <[email protected]> Committed: Sat Jul 30 14:52:42 2016 +0530 ---------------------------------------------------------------------- .../taverna/mobile/ui/login/LoginFragment.java | 210 +++++++++++++++++++ .../taverna/mobile/ui/login/LoginMvpView.java | 16 ++ .../taverna/mobile/ui/login/LoginPresenter.java | 68 ++++++ 3 files changed, 294 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/bda66e81/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginFragment.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginFragment.java b/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginFragment.java new file mode 100644 index 0000000..df3e96e --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginFragment.java @@ -0,0 +1,210 @@ +package org.apache.taverna.mobile.ui.login; + + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.design.widget.Snackbar; +import android.support.design.widget.TextInputLayout; +import android.support.v4.app.Fragment; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.EditText; + +import org.apache.taverna.mobile.R; +import org.apache.taverna.mobile.data.DataManager; +import org.apache.taverna.mobile.data.model.User; +import org.apache.taverna.mobile.utils.ConnectionInfo; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +public class LoginFragment extends Fragment implements LoginMvpView, View.OnFocusChangeListener { + + @BindView(R.id.etEmail) + EditText mEditTextEmail; + + @BindView(R.id.etPassword) + EditText mEditTextPassword; + + @BindView(R.id.input_layout_email) + TextInputLayout mTextInputEmail; + + @BindView(R.id.input_layout_password) + TextInputLayout mTextInputPassword; + + private DataManager dataManager; + private LoginPresenter mLoginPresenter; + private ConnectionInfo mConnectionInfo; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + + dataManager = new DataManager(); + mLoginPresenter = new LoginPresenter(dataManager); + mConnectionInfo = new ConnectionInfo(getContext()); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle + savedInstanceState) { + + View rootView = inflater.inflate(R.layout.fragment_login, container, false); + ButterKnife.bind(this, rootView); + mLoginPresenter.attachView(this); + return rootView; + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + + mEditTextEmail.addTextChangedListener(new CustomTextWatcher(mEditTextEmail)); + + + mEditTextPassword.addTextChangedListener(new CustomTextWatcher(mEditTextPassword)); + + mEditTextEmail.setOnFocusChangeListener(this); + + mEditTextPassword.setOnFocusChangeListener(this); + + } + + + private void validateEmail() { + + if (mEditTextEmail.getText().toString().trim().isEmpty()) { + mTextInputEmail.setError(getString(R.string.err_login_email)); + + + } else { + mTextInputEmail.setError(null); + } + + + } + + + private void validatePassword() { + if (mEditTextPassword.getText().toString().trim().isEmpty()) { + mTextInputPassword.setError(getString(R.string.err_login_password)); + + } else { + mTextInputPassword.setError(null); + } + + + } + + @OnClick(R.id.bLogin) + public void login(View v) { + if (mConnectionInfo.isConnectingToInternet()) { + if (!mEditTextEmail.getText().toString().trim().isEmpty() && !mEditTextPassword + .getText().toString().trim().isEmpty()) { + + mLoginPresenter.login(mEditTextEmail.getText().toString().trim(), + mEditTextPassword.getText().toString().trim()); + + } else { + + showError("Please enter valid credential"); + } + } else { + + showError("NO Internet Connection"); + } + } + + @Override + public void showError(String string) { + final Snackbar snackbar = Snackbar.make(mEditTextPassword, string, Snackbar + .LENGTH_INDEFINITE); + snackbar.setAction("OK", new View.OnClickListener() { + @Override + public void onClick(View view) { + snackbar.dismiss(); + } + }); + + snackbar.show(); + } + + @Override + public void moveToWorkflowList() { + + } + + @Override + public void showCredentialError() { + showError("Please enter valid credential"); + + mTextInputEmail.setError(getString(R.string.err_login_email)); + mTextInputPassword.setError(getString(R.string.err_login_password)); + requestFocus(mEditTextEmail); + } + + @Override + public void saveUser(User user) { + + } + + + private void requestFocus(View view) { + if (view.requestFocus()) { + getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams + .SOFT_INPUT_STATE_ALWAYS_VISIBLE); + } + } + + @Override + public void onFocusChange(View v, boolean hasFocus) { + switch (v.getId()) { + case R.id.etEmail: + if(!v.hasFocus()) { + validateEmail(); + } + break; + case R.id.etPassword: + if(!v.hasFocus()) { + validatePassword(); + } + break; + } + } + + private class CustomTextWatcher implements TextWatcher { + + private View view; + + private CustomTextWatcher(View view) { + this.view = view; + } + + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + public void afterTextChanged(Editable editable) { + switch (view.getId()) { + case R.id.etEmail: + validateEmail(); + break; + case R.id.etPassword: + validatePassword(); + break; + } + } + } + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/bda66e81/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginMvpView.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginMvpView.java b/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginMvpView.java new file mode 100644 index 0000000..ecea83f --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginMvpView.java @@ -0,0 +1,16 @@ +package org.apache.taverna.mobile.ui.login; + + +import org.apache.taverna.mobile.data.model.User; +import org.apache.taverna.mobile.ui.base.MvpView; + +public interface LoginMvpView extends MvpView { + + void moveToWorkflowList(); + + void showCredentialError(); + + void saveUser(User user); + + void showError(String string); +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/bda66e81/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java ---------------------------------------------------------------------- diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java new file mode 100644 index 0000000..9ab9d32 --- /dev/null +++ b/app/src/main/java/org/apache/taverna/mobile/ui/login/LoginPresenter.java @@ -0,0 +1,68 @@ +package org.apache.taverna.mobile.ui.login; + + +import android.util.Base64; + +import org.apache.taverna.mobile.data.DataManager; +import org.apache.taverna.mobile.data.model.User; +import org.apache.taverna.mobile.ui.base.BasePresenter; + +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +public class LoginPresenter extends BasePresenter<LoginMvpView> { + + public final String LOG_TAG = getClass().getSimpleName(); + + private DataManager mDataManager; + + private Subscription mSubscriptions; + + public LoginPresenter(DataManager dataManager) { + mDataManager = dataManager; + } + + @Override + public void attachView(LoginMvpView mvpView) { + super.attachView(mvpView); + } + + @Override + public void detachView() { + super.detachView(); + if (mSubscriptions != null) mSubscriptions.unsubscribe(); + } + + public void login(String username, String password) { + if (mSubscriptions != null) mSubscriptions.unsubscribe(); + + mSubscriptions = mDataManager.getLoginUserDetail(getEncodedCredential(username, password)) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(new Observer<User>() { + @Override + public void onCompleted() { + getMvpView().moveToWorkflowList(); + } + + @Override + public void onError(Throwable e) { + getMvpView().showCredentialError(); + } + + @Override + public void onNext(User user) { + getMvpView().saveUser(user); + } + }); + } + + private String getEncodedCredential(String username, String password) { + + return "Basic " + Base64.encodeToString((username + ":" + password).getBytes(), Base64 + .NO_WRAP); + } + +}
