package com.greenaddress.greenbits.ui; import android.os.Bundle; import android.view.View; import android.view.WindowManager; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.TextView; import com.afollestad.materialdialogs.DialogAction; import com.afollestad.materialdialogs.MaterialDialog; import com.dd.CircularProgressButton; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.greenaddress.greenapi.LoginData; public class WatchOnlyLoginActivity extends LoginActivity { private final static String CFG = "WATCH_ONLY_CREDENTIALS"; private EditText mUsernameText; private EditText mPasswordText; private CircularProgressButton mLoginButton; private CheckBox mRememberCheckBox; @Override protected void onCreateWithService(final Bundle savedInstanceState) { setContentView(R.layout.activity_watchonly); mUsernameText = UI.find(this, R.id.input_user); mPasswordText = UI.find(this, R.id.input_password); mLoginButton = UI.find(this, R.id.btn_login); mRememberCheckBox = UI.find(this, R.id.remember_watch_only); mLoginButton.setIndeterminateProgressMode(true); mLoginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { login(); } }); final TextView.OnEditorActionListener listener; listener = UI.getListenerRunOnEnter(new Runnable() { public void run() { login(); } }); mPasswordText.setOnEditorActionListener(listener); final String username = mService.cfg(CFG).getString("username", ""); final boolean haveUser = !username.isEmpty(); mUsernameText.setText(username); mRememberCheckBox.setChecked(haveUser); if (haveUser && mPasswordText.requestFocus()) getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); mRememberCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(final CompoundButton compoundButton, final boolean isChecked) { if (!isChecked) { mService.cfgEdit(CFG).putString("username", "").apply(); return; } UI.popup(WatchOnlyLoginActivity.this, R.string.remember_warn_title) .content(R.string.remember_warn_content) .canceledOnTouchOutside(false) .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(final MaterialDialog dlg, final DialogAction which) { mRememberCheckBox.setChecked(false); } }) .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(final MaterialDialog dlg, final DialogAction which) { mService.cfgEdit(CFG).putString("username", UI.getText(mUsernameText)).apply(); } }).build().show(); } }); } private void login() { if (mLoginButton.getProgress() != 0) return; if (!validate()) { onLoginFailed(null); return; } if (!mService.isConnected()) { toast(R.string.err_send_not_connected_will_resume); return; } final String username = UI.getText(mUsernameText); final String password = UI.getText(mPasswordText); onLoginBegin(); final ListenableFuture<LoginData> future = mService.watchOnlyLogin(username, password); Futures.addCallback(future, new FutureCallback<LoginData>() { @Override public void onSuccess(final LoginData result) { onLoginSuccess(); } @Override public void onFailure(final Throwable t) { runOnUiThread(new Runnable() { public void run() { onLoginFailed(getString(R.string.error_username_not_found_or_wrong_password)); } }); } }); } private void onLoginBegin() { mLoginButton.setProgress(50); mUsernameText.setEnabled(false); mPasswordText.setEnabled(false); mRememberCheckBox.setEnabled(false); final String usr = !mRememberCheckBox.isChecked() ? "" : UI.getText(mUsernameText); mService.cfgEdit(CFG).putString("username", usr).apply(); } private void onLoginFailed(final String msg) { mLoginButton.setProgress(0); mUsernameText.setEnabled(true); mPasswordText.setEnabled(true); mRememberCheckBox.setEnabled(true); if (msg != null) mPasswordText.setError(msg); } private boolean validate() { if (mUsernameText.getText().length() == 0) { mUsernameText.setError(getString(R.string.enter_valid_username)); return false; } mUsernameText.setError(null); if (mPasswordText.getText().length() == 0) { mPasswordText.setError(getString(R.string.enter_valid_password)); return false; } mPasswordText.setError(null); return true; } }