package co.nano.nanowallet.ui.pin; import android.app.Activity; import android.content.Context; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import com.crashlytics.android.answers.Answers; import com.crashlytics.android.answers.CustomEvent; import javax.inject.Inject; import co.nano.nanowallet.R; import co.nano.nanowallet.analytics.AnalyticsEvents; import co.nano.nanowallet.analytics.AnalyticsService; import co.nano.nanowallet.bus.CreatePin; import co.nano.nanowallet.bus.RxBus; import co.nano.nanowallet.databinding.FragmentCreatePinBinding; import co.nano.nanowallet.ui.common.ActivityWithComponent; import co.nano.nanowallet.ui.common.BaseDialogFragment; /** * Settings main screen */ public class CreatePinDialogFragment extends BaseDialogFragment { private FragmentCreatePinBinding binding; public static String TAG = CreatePinDialogFragment.class.getSimpleName(); private static final int PIN_LENGTH = 4; private String firstPin = null; @Inject AnalyticsService analyticsService; /** * Create new instance of the dialog fragment (handy pattern if any data needs to be passed to it) * * @return ReceiveDialogFragment instance */ public static CreatePinDialogFragment newInstance() { Bundle args = new Bundle(); CreatePinDialogFragment fragment = new CreatePinDialogFragment(); fragment.setArguments(args); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NO_FRAME, R.style.AppTheme_Modal_Window); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // init dependency injection if (getActivity() instanceof ActivityWithComponent) { ((ActivityWithComponent) getActivity()).getActivityComponent().inject(this); } // inflate the view binding = DataBindingUtil.inflate( inflater, R.layout.fragment_create_pin, container, false); view = binding.getRoot(); // show keyboard by default binding.pinEntry.requestFocus(); InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); } binding.setHandlers(new ClickHandlers()); binding.pinEntry.setOnEditorActionListener((v, actionId, event) -> { if (actionId == EditorInfo.IME_ACTION_DONE) { String pin = v.getText().toString(); if (pin.length() != PIN_LENGTH) { return false; } if (firstPin == null) { // first pin submitted, so move to confirm screen firstPin = pin; binding.pinTitle.setText(R.string.pin_confirm_title); v.setText(""); } else if (firstPin.equals(pin)) { // pins matched, so set this as the pin RxBus.get().post(new CreatePin(pin)); // close keyboard InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); if (inputMethodManager != null && getActivity().getCurrentFocus() != null) { inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0); } dismiss(); } else { // pins did not match binding.pinTitle.setText(R.string.pin_confirm_error); } return true; } return false; }); setStatusBarWhite(view); return view; } public class ClickHandlers { public void onClickClose(View view) { InputMethodManager input = (InputMethodManager) binding.pinEntry.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (input != null && input.isActive()) { input.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } dismiss(); } } }