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);
+    }
+
+}

Reply via email to