You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by ia...@apache.org on 2016/10/03 14:49:26 UTC
[16/50] [abbrv] incubator-taverna-mobile git commit: add player login
fragment with mvp classes
add player login fragment with mvp classes
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/1aa2c70a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/tree/1aa2c70a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/diff/1aa2c70a
Branch: refs/heads/master
Commit: 1aa2c70a2163d448d3c5db9db8b10a53faaede46
Parents: 2e4c7bb
Author: Sagar <ku...@gmail.com>
Authored: Sun Sep 25 21:40:33 2016 +0530
Committer: Sagar <ku...@gmail.com>
Committed: Sun Sep 25 21:40:33 2016 +0530
----------------------------------------------------------------------
.../ui/playerlogin/PlayerLoginFragment.java | 252 +++++++++++++++++++
.../ui/playerlogin/PlayerLoginMvpView.java | 13 +
.../ui/playerlogin/PlayerLoginPresenter.java | 79 ++++++
.../res/layout/fragment_player_login_layout.xml | 67 +++++
4 files changed, 411 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1aa2c70a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginFragment.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginFragment.java b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginFragment.java
new file mode 100644
index 0000000..35ebedc
--- /dev/null
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginFragment.java
@@ -0,0 +1,252 @@
+package org.apache.taverna.mobile.ui.playerlogin;
+
+
+import android.content.Context;
+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.CheckBox;
+import android.widget.EditText;
+
+import org.apache.taverna.mobile.R;
+import org.apache.taverna.mobile.data.DataManager;
+import org.apache.taverna.mobile.data.local.PreferencesHelper;
+import org.apache.taverna.mobile.utils.ConnectionInfo;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+
+
+public class PlayerLoginFragment extends Fragment implements PlayerLoginMvpView, 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;
+
+ @BindView(R.id.cbRemember)
+ CheckBox mCheckBoxRemember;
+
+
+ private DataManager dataManager;
+
+ private PlayerLoginPresenter mPlayerLoginPresenter;
+
+ OnSuccessful mCallback;
+
+
+ public static PlayerLoginFragment newInstance() {
+
+ Bundle args = new Bundle();
+
+ PlayerLoginFragment fragment = new PlayerLoginFragment();
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ dataManager = new DataManager(new PreferencesHelper(getContext()));
+ mPlayerLoginPresenter = new PlayerLoginPresenter(dataManager);
+
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
+ savedInstanceState) {
+
+ View rootView = inflater.inflate(R.layout.fragment_player_login_layout, container, false);
+ ButterKnife.bind(this, rootView);
+ mPlayerLoginPresenter.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);
+
+
+ //mPlayerLoginPresenter.PlayerLogin("kumarsagar15795@gmail.com", "Sagarishere", true);
+
+
+
+ }
+
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ mPlayerLoginPresenter.detachView();
+ }
+
+
+ @OnClick(R.id.bLogin)
+ public void login(View v) {
+ if (ConnectionInfo.isConnectingToInternet(getContext())) {
+ if (!mEditTextEmail.getText().toString().trim().isEmpty() && !mEditTextPassword
+ .getText().toString().trim().isEmpty()) {
+
+ mPlayerLoginPresenter.playerLogin(mEditTextEmail.getText().toString().trim(),
+ mEditTextPassword.getText().toString().trim(), mCheckBoxRemember
+ .isChecked());
+
+ } 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_LONG);
+ snackbar.setAction("OK", new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ snackbar.dismiss();
+ }
+ });
+
+ snackbar.show();
+ }
+
+ @Override
+ public void showCredentialError() {
+ mTextInputEmail.setError(getString(R.string.err_login_email));
+ mTextInputPassword.setError(getString(R.string.err_login_password));
+ requestFocus(mEditTextPassword);
+ }
+
+ @Override
+ public void validCredential() {
+ mCallback.onSuccessfulLogin();
+ }
+
+
+ private void validateEmail() {
+
+ if (mEditTextEmail.getText().toString().trim().isEmpty()) {
+
+ mTextInputEmail.setError(getString(R.string.err_login_email));
+ } else {
+
+ mTextInputEmail.setError(null);
+ }
+
+
+ }
+
+ private void requestFocus(View view) {
+ if (view.requestFocus()) {
+ getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams
+ .SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ }
+ }
+
+ private void validatePassword() {
+ if (mEditTextPassword.getText().toString().trim().isEmpty()) {
+
+ mTextInputPassword.setError(getString(R.string.err_login_password));
+ } else {
+
+ mTextInputPassword.setError(null);
+ }
+
+
+ }
+
+ @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;
+ }
+ }
+ }
+
+
+ public interface OnSuccessful {
+ void onSuccessfulLogin();
+ }
+
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+
+ try {
+ mCallback = (OnSuccessful) getActivity();
+ } catch (ClassCastException e) {
+ throw new ClassCastException(getActivity().toString()
+ + " must implement OnSuccessful");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1aa2c70a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginMvpView.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginMvpView.java b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginMvpView.java
new file mode 100644
index 0000000..9e0f9e6
--- /dev/null
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginMvpView.java
@@ -0,0 +1,13 @@
+package org.apache.taverna.mobile.ui.playerlogin;
+
+import org.apache.taverna.mobile.ui.base.MvpView;
+
+
+public interface PlayerLoginMvpView extends MvpView{
+
+ void showError(String string);
+
+ void showCredentialError();
+
+ void validCredential();
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1aa2c70a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
----------------------------------------------------------------------
diff --git a/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
new file mode 100644
index 0000000..411eca2
--- /dev/null
+++ b/app/src/main/java/org/apache/taverna/mobile/ui/playerlogin/PlayerLoginPresenter.java
@@ -0,0 +1,79 @@
+package org.apache.taverna.mobile.ui.playerlogin;
+
+import android.util.Base64;
+import android.util.Log;
+
+import org.apache.taverna.mobile.data.DataManager;
+import org.apache.taverna.mobile.ui.base.BasePresenter;
+
+import okhttp3.ResponseBody;
+import retrofit2.adapter.rxjava.HttpException;
+import rx.Observer;
+import rx.Subscription;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
+
+
+public class PlayerLoginPresenter extends BasePresenter<PlayerLoginMvpView> {
+
+ private DataManager mDataManager;
+
+ private Subscription mSubscriptions;
+
+ public PlayerLoginPresenter(DataManager dataManager) {
+ mDataManager = dataManager;
+ }
+
+ @Override
+ public void attachView(PlayerLoginMvpView mvpView) {
+ super.attachView(mvpView);
+ }
+
+ @Override
+ public void detachView() {
+ super.detachView();
+ if (mSubscriptions != null) mSubscriptions.unsubscribe();
+ }
+
+ public void playerLogin(final String username, final String password, final boolean loginFlag) {
+ if (mSubscriptions != null) mSubscriptions.unsubscribe();
+
+ mSubscriptions = mDataManager.authPlayerUserLoginDetail(getEncodedCredential(username,
+ password),loginFlag)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribeOn(Schedulers.io())
+ .subscribe(new Observer<ResponseBody>() {
+ @Override
+ public void onCompleted() {
+
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ Log.e("TAG", "onError: ", e);
+ if (e instanceof HttpException) {
+ if (((HttpException) e).code() == 401) {
+ getMvpView().showCredentialError();
+ } else if (((HttpException) e).code() == 406) {
+ getMvpView().validCredential();
+ mDataManager.getPreferencesHelper().setUserPlayerLoggedInFlag
+ (loginFlag,getEncodedCredential(username, password));
+
+ }
+ }
+ }
+
+ @Override
+ public void onNext(ResponseBody responseBody) {
+ Log.e("hello", "onCompleted: " + responseBody.byteStream());
+ }
+ });
+
+ }
+
+ private String getEncodedCredential(String username, String password) {
+
+ return "Basic " + Base64.encodeToString((username + ":" + password).getBytes(), Base64
+ .NO_WRAP);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-mobile/blob/1aa2c70a/app/src/main/res/layout/fragment_player_login_layout.xml
----------------------------------------------------------------------
diff --git a/app/src/main/res/layout/fragment_player_login_layout.xml b/app/src/main/res/layout/fragment_player_login_layout.xml
new file mode 100644
index 0000000..4379459
--- /dev/null
+++ b/app/src/main/res/layout/fragment_player_login_layout.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:padding="40dp"
+ >
+
+ <TextView
+ android:id="@+id/header"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:textSize="24sp"
+ android:text="Taverna Player Portal Login"/>
+
+ <android.support.design.widget.TextInputLayout
+ android:layout_below="@id/header"
+ android:id="@+id/input_layout_email"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="20dp">
+
+ <EditText
+ android:id="@+id/etEmail"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/hint_email"
+ android:inputType="textEmailAddress"
+ android:singleLine="true"/>
+
+ </android.support.design.widget.TextInputLayout>
+
+ <android.support.design.widget.TextInputLayout
+ android:id="@+id/input_layout_password"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/input_layout_email"
+ android:layout_marginTop="20dp">
+
+ <EditText
+ android:id="@+id/etPassword"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/hint_password"
+ android:inputType="textPassword"
+ android:singleLine="true"/>
+
+ </android.support.design.widget.TextInputLayout>
+
+ <CheckBox
+ android:id="@+id/cbRemember"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/input_layout_password"
+ android:checked="true"
+ android:text="@string/keeplogin"/>
+
+ <Button
+ android:id="@+id/bLogin"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="Login"
+ android:layout_marginTop="20dp"
+ android:layout_below="@id/cbRemember"/>
+
+</RelativeLayout>
\ No newline at end of file