127 lines
4.3 KiB
Java
127 lines
4.3 KiB
Java
package org.mercury_im.messenger.android.ui.account.login;
|
|
|
|
import android.app.AlertDialog;
|
|
import android.app.Dialog;
|
|
import android.content.DialogInterface;
|
|
import android.os.Bundle;
|
|
import android.view.KeyEvent;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.inputmethod.EditorInfo;
|
|
import android.widget.Button;
|
|
import android.widget.TextView;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.appcompat.app.AppCompatDialogFragment;
|
|
|
|
import com.google.android.material.textfield.TextInputEditText;
|
|
import com.google.android.material.textfield.TextInputLayout;
|
|
|
|
import org.mercury_im.messenger.android.MercuryImApplication;
|
|
import org.mercury_im.messenger.R;
|
|
|
|
import butterknife.BindView;
|
|
import butterknife.ButterKnife;
|
|
|
|
public class AddAccountDialogFragment extends AppCompatDialogFragment {
|
|
|
|
@BindView(R.id.username)
|
|
TextInputEditText addressView;
|
|
|
|
@BindView(R.id.username_layout)
|
|
TextInputLayout addressLayout;
|
|
|
|
@BindView(R.id.password)
|
|
TextInputEditText passwordView;
|
|
|
|
@BindView(R.id.password_layout)
|
|
TextInputLayout passwordLayout;
|
|
|
|
private AndroidLoginViewModel viewModel;
|
|
|
|
@NonNull
|
|
@Override
|
|
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
|
|
LayoutInflater inflater = requireActivity().getLayoutInflater();
|
|
View dialogView = inflater.inflate(R.layout.view_account_credentials, null);
|
|
ButterKnife.bind(this, dialogView);
|
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
|
|
|
builder.setTitle(R.string.action_add_account)
|
|
.setView(dialogView)
|
|
.setCancelable(false)
|
|
.setPositiveButton(R.string.action_sign_in, null)
|
|
.setNegativeButton(R.string.button_cancel, cancelButtonClickListener);
|
|
|
|
return builder.create();
|
|
}
|
|
|
|
private final DialogInterface.OnClickListener cancelButtonClickListener =
|
|
(dialog, which) -> AddAccountDialogFragment.this.onCancel(dialog);
|
|
|
|
@Override
|
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
|
super.onViewCreated(view, savedInstanceState);
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
final AlertDialog d = (AlertDialog)getDialog();
|
|
if(d == null) {
|
|
return;
|
|
}
|
|
|
|
viewModel = new AndroidLoginViewModel(MercuryImApplication.getApplication());
|
|
|
|
Button positiveButton = d.getButton(Dialog.BUTTON_POSITIVE);
|
|
positiveButton.setOnClickListener(v -> viewModel.onLoginButtonClicked());
|
|
|
|
viewModel.getLoginUsernameError().observe(this, error -> addressLayout.setError(error));
|
|
viewModel.getLoginPasswordError().observe(this, error -> passwordLayout.setError(error));
|
|
viewModel.isLoginButtonEnabled().observe(this, positiveButton::setEnabled);
|
|
|
|
viewModel.isLoginFinished().observe(this, optAccount -> {
|
|
if (optAccount.isPresent()) {
|
|
dismiss();
|
|
}
|
|
});
|
|
|
|
addressView.addTextChangedListener(viewModel.getUsernameTextChangedListener());
|
|
passwordView.addTextChangedListener(viewModel.getPasswordTextChangedListener());
|
|
|
|
addressView.setOnEditorActionListener(focusPasswordFieldOnEnterPressed);
|
|
passwordView.setOnEditorActionListener(loginOnEnterPressed);
|
|
}
|
|
|
|
private final TextView.OnEditorActionListener focusPasswordFieldOnEnterPressed = new TextView.OnEditorActionListener() {
|
|
@Override
|
|
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
|
if (actionId == EditorInfo.IME_ACTION_NEXT) {
|
|
passwordView.requestFocus();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
};
|
|
|
|
private final TextView.OnEditorActionListener loginOnEnterPressed = new TextView.OnEditorActionListener() {
|
|
@Override
|
|
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
|
if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_NULL) {
|
|
viewModel.getCommonViewModel().login();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
};
|
|
|
|
@Override
|
|
public void onDestroy() {
|
|
super.onDestroy();
|
|
}
|
|
|
|
}
|