package tellh.com.gitclub.presentation.view.fragment.login; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.TextInputEditText; import android.support.design.widget.TextInputLayout; import android.support.v4.app.DialogFragment; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.ProgressBar; import android.widget.TextView; import javax.inject.Inject; import tellh.com.gitclub.R; import tellh.com.gitclub.common.AndroidApplication; import tellh.com.gitclub.common.utils.Utils; import tellh.com.gitclub.common.wrapper.Note; import tellh.com.gitclub.di.component.DaggerLoginComponent; import tellh.com.gitclub.presentation.contract.LoginContract; /** * Created by tlh on 2016/8/28 :) */ public class LoginFragment extends DialogFragment implements LoginContract.View { @Inject LoginContract.Presenter presenter; @Inject Context mCtx; private TextInputEditText editUsername; private TextInputLayout textWrapperUsername; private TextInputEditText editPassword; private TextInputLayout textWrapperPsw; private ProgressBar progressBar; private TextView tvLogin; private View mRootView; private boolean dismissable; private TextView tvCancel; private LoginCallback callback; @Override public void initData(Bundle savedInstanceState) { initDagger(); String loginUserName = presenter.getLoginUserName(); if (!TextUtils.isEmpty(loginUserName)) editUsername.setText(loginUserName); } private void initDagger() { DaggerLoginComponent.builder() .appComponent(AndroidApplication.getInstance().getAppComponent()) .build().inject(this); presenter.attachView(this); } @Override public void onDestroy() { super.onDestroy(); presenter.detachView(); Utils.leakWatch(this); } @Override public int getLayoutId() { return R.layout.frag_dialog_login; } @Override public void initView() { editUsername = (TextInputEditText) mRootView.findViewById(R.id.edit_username); textWrapperUsername = (TextInputLayout) mRootView.findViewById(R.id.text_wrapper_username); editPassword = (TextInputEditText) mRootView.findViewById(R.id.edit_password); textWrapperPsw = (TextInputLayout) mRootView.findViewById(R.id.text_wrapper_psw); progressBar = (ProgressBar) mRootView.findViewById(R.id.progressBar); tvLogin = (TextView) mRootView.findViewById(R.id.tv_login); tvLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { submit(); } }); tvCancel = (TextView) mRootView.findViewById(R.id.tv_cancel); tvCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (dismissable) dismiss(); else getDialog().hide(); } }); } @Override public Context getViewContext() { return getContext(); } @Override public void showOnError(String s) { toggle(); Note.show(s); } @Override public void showOnLoading() { toggle(); } private void toggle() { if (progressBar.getVisibility() == View.INVISIBLE && tvLogin.getVisibility() == View.VISIBLE) { progressBar.setVisibility(View.VISIBLE); tvLogin.setVisibility(View.INVISIBLE); } else { progressBar.setVisibility(View.INVISIBLE); tvLogin.setVisibility(View.VISIBLE); } } @Override public void showOnSuccess() { toggle(); if (callback != null) callback.onSuccessToLogin(); } public void setDismissable(boolean dismissable) { this.dismissable = dismissable; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (mRootView == null) { mRootView = inflater.inflate(R.layout.frag_dialog_login, container, false); initView(); initData(null); } return mRootView; } private void submit() { // validate String username = editUsername.getText().toString().trim(); textWrapperUsername.setError(null); if (TextUtils.isEmpty(username)) { textWrapperUsername.setError(mCtx.getString(R.string.error_null_username)); return; } String password = editPassword.getText().toString().trim(); textWrapperPsw.setError(null); if (TextUtils.isEmpty(password)) { textWrapperPsw.setError(mCtx.getString(R.string.error_null_password)); return; } presenter.login(username, password); } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setCanceledOnTouchOutside(false); // setCancelable(false);//To avoid cancel the dialog by pressing BACK key.Note: don't invoke the Dialog#setCancelable instead. dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); return dialog; } @Override public void onDismiss(DialogInterface dialog) { if (!dismissable && getDialog() != null) { getDialog().hide(); return; } if (callback != null) callback.onDismissLogin(); super.onDismiss(dialog); } public void setCallback(LoginCallback callback) { this.callback = callback; } public interface LoginCallback { void onSuccessToLogin(); void onDismissLogin(); } }