package cl.monsoon.s1next.view.fragment; import android.databinding.DataBindingUtil; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import cl.monsoon.s1next.R; import cl.monsoon.s1next.data.api.Api; import cl.monsoon.s1next.databinding.FragmentLoginBinding; import cl.monsoon.s1next.util.IntentUtil; import cl.monsoon.s1next.util.ViewUtil; import cl.monsoon.s1next.view.dialog.LoginDialogFragment; /** * A Fragment offers login via username and password. */ public final class LoginFragment extends Fragment { public static final String TAG = LoginFragment.class.getName(); private EditText mUsernameView; private EditText mPasswordView; private Button mLoginButton; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { FragmentLoginBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_login, container, false); mUsernameView = binding.username; mPasswordView = binding.password; mLoginButton = binding.login; return binding.getRoot(); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ViewUtil.consumeRunnableWhenImeActionPerformed(mPasswordView, this::prepareLogin); mLoginButton.setOnClickListener(v -> prepareLogin()); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.fragment_login, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_account_new: IntentUtil.startViewIntentExcludeOurApp(getContext(), Uri.parse( Api.URL_BROWSER_REGISTER)); return true; default: return super.onOptionsItemSelected(item); } } private void prepareLogin() { // reset errors mUsernameView.setError(null); mPasswordView.setError(null); String username = mUsernameView.getText().toString(); String password = mPasswordView.getText().toString(); boolean cancel = false; View focusView = null; CharSequence error = getText(R.string.error_field_required); if (TextUtils.isEmpty(username)) { mUsernameView.setError(error); cancel = true; focusView = mUsernameView; } if (TextUtils.isEmpty(password)) { mPasswordView.setError(error); cancel = true; if (focusView == null) { focusView = mPasswordView; } } if (cancel) { // There was an error; don't attempt login and focus the first // form field with an error. focusView.requestFocus(); } else { // start to log in LoginDialogFragment.newInstance(username, password).show(getFragmentManager(), LoginDialogFragment.TAG); } } }