Skip to content

Commit

Permalink
add country code screen
Browse files Browse the repository at this point in the history
  • Loading branch information
mateuszKataMobitouch authored and skustra committed Feb 23, 2023
1 parent 6f388ab commit 8be6c12
Show file tree
Hide file tree
Showing 11 changed files with 539 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
import org.thoughtcrime.securesms.util.concurrent.SettableFuture;

import static pigeon.extensions.BuildExtensionsKt.isSignalVersion;

public class VerificationPinKeyboard extends FrameLayout {

private NumericKeyboardView keyboardView;
Expand Down Expand Up @@ -75,24 +77,84 @@ public void setOnKeyPressListener(@Nullable OnKeyPressListener listener) {
this.listener = listener;
}

// /private void updateUiStatus(int type) {
// switch (type) {
// case BaseEnterCodeFragment.EnterCodeStatus.STATUS_INIT:
// case BaseEnterCodeFragment.EnterCodeStatus.STATUS_SWITCH_NEXT:
// mLoadingLayout.setVisibility(View.GONE);
// mVerificationEntry.setVisibility(View.VISIBLE);
// mVerificationInput.setVisibility(View.VISIBLE);
// mVerificationInput.setEnabled(true);
// mVerificationNav.setEnabled(true);
// mVerificationNav.setVisibility(View.VISIBLE);
// recyclerView.setVisibility(View.GONE);
// break;
// case BaseEnterCodeFragment.EnterCodeStatus.STATUS_VERIFY_SUCCESS:
// case BaseEnterCodeFragment.EnterCodeStatus.STATUS_START_VERIFY:
// mLoadingLayout.setVisibility(View.VISIBLE);
// mVerificationEntry.setVisibility(View.VISIBLE);
// mVerificationInput.setVisibility(View.VISIBLE);
// mVerificationInput.setEnabled(false);
// mVerificationNav.setEnabled(false);
// mVerificationNav.setVisibility(View.VISIBLE);
// recyclerView.setVisibility(View.GONE);
// break;
// case BaseEnterCodeFragment.EnterCodeStatus.STATUS_SWITCH_OPTIONS:
// mLoadingLayout.setVisibility(View.GONE);
// mVerificationEntry.setVisibility(View.GONE);
// mVerificationInput.setVisibility(View.GONE);
// mVerificationInput.setEnabled(false);
// mVerificationNav.setEnabled(false);
// mVerificationNav.setVisibility(View.GONE);
// recyclerView.setVisibility(View.VISIBLE);
// recyclerView.requestFocus();
// break;
// case BaseEnterCodeFragment.EnterCodeStatus.STATUS_VERIFY_FAIL:
// mLoadingLayout.setVisibility(View.GONE);
// mVerificationEntry.setVisibility(View.VISIBLE);
// mVerificationInput.setVisibility(View.VISIBLE);
// mVerificationInput.setEnabled(true);
// mVerificationNav.setEnabled(true);
// mVerificationInput.setText("");
// mVerificationNav.setVisibility(View.VISIBLE);
// recyclerView.setVisibility(View.GONE);
// break;
// }
// if (isAdded()) {
// Editable s = mVerificationInput.getText();
// if (!TextUtils.isEmpty(s) && s.toString().length() == 6) {
// mVerificationNav.setTag(true);
// mVerificationNav.setText(getString(R.string.RegistrationActivity_next));
// } else {
// mVerificationNav.setText("Options");
// mVerificationNav.setTag(false);
// }
// }
// }


public void displayKeyboard() {
this.keyboardView.setVisibility(View.VISIBLE);
this.progressBar.setVisibility(View.GONE);
this.successView.setVisibility(View.GONE);
this.failureView.setVisibility(View.GONE);
this.lockedView.setVisibility(View.GONE);
if (isSignalVersion()) {
this.keyboardView.setVisibility(View.VISIBLE);
this.progressBar.setVisibility(View.GONE);
this.successView.setVisibility(View.GONE);
this.failureView.setVisibility(View.GONE);
this.lockedView.setVisibility(View.GONE);
}
}

public void displayProgress() {
this.keyboardView.setVisibility(View.INVISIBLE);
this.progressBar.setVisibility(View.VISIBLE);
this.successView.setVisibility(View.GONE);
this.failureView.setVisibility(View.GONE);
this.lockedView.setVisibility(View.GONE);
if (isSignalVersion()) {
this.keyboardView.setVisibility(View.INVISIBLE);
this.progressBar.setVisibility(View.VISIBLE);
this.successView.setVisibility(View.GONE);
this.failureView.setVisibility(View.GONE);
this.lockedView.setVisibility(View.GONE);
}
}

public ListenableFuture<Boolean> displaySuccess() {
SettableFuture<Boolean> result = new SettableFuture<>();
SettableFuture<Boolean> result = new SettableFuture<>();

this.keyboardView.setVisibility(View.INVISIBLE);
this.progressBar.setVisibility(View.GONE);
Expand Down Expand Up @@ -121,6 +183,7 @@ public void onAnimationRepeat(Animation animation) {}

ViewUtil.animateIn(this.successView, scaleAnimation);
return result;

}

public ListenableFuture<Boolean> displayFailure() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@

import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.showConfirmNumberDialogIfTranslated;
import static pigeon.extensions.BuildExtensionsKt.isSignalVersion;

/**
* Base fragment used by registration and change number flow to input an SMS verification code or request a
Expand Down Expand Up @@ -187,12 +188,16 @@ private void setOnCodeFullyEnteredListener(VerificationCodeView verificationCode
}

protected void displaySuccess(@NonNull Runnable runAfterAnimation) {
keyboard.displaySuccess().addListener(new AssertedSuccessListener<Boolean>() {
@Override
public void onSuccess(Boolean result) {
runAfterAnimation.run();
}
});
if (isSignalVersion()) {
keyboard.displaySuccess().addListener(new AssertedSuccessListener<Boolean>() {
@Override
public void onSuccess(Boolean result) {
runAfterAnimation.run();
}
});
} else {
runAfterAnimation.run();
}
}

protected void handleRateLimited() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
package org.thoughtcrime.securesms.registration.fragments;

import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.Navigation;

import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputLayout;

import org.thoughtcrime.securesms.LoggingFragment;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.registration.util.RegistrationNumberInputController;
import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel;
import org.thoughtcrime.securesms.util.LifecycleDisposable;
import org.thoughtcrime.securesms.util.navigation.SafeNavigation;
import org.thoughtcrime.securesms.util.views.CircularProgressMaterialButton;

import java.util.Objects;

import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
import static pigeon.extensions.BuildExtensionsKt.isSignalVersion;
import static pigeon.extensions.KotilinExtensionsKt.onFocusTextChangeListener;

public final class CountryCodeFragment extends LoggingFragment implements RegistrationNumberInputController.Callbacks {

private static final String NUMBER_COUNTRY_SELECT = "number_country";

private TextInputLayout countryCode;
private CircularProgressMaterialButton next;
private RegistrationViewModel viewModel;
private TextView verifyHeader;

private final LifecycleDisposable disposables = new LifecycleDisposable();

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_registration_country_code, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

verifyHeader = view.findViewById(R.id.verify_header);
countryCode = view.findViewById(R.id.country_code);
next = view.findViewById(R.id.next_button);

setDebugLogSubmitMultiTapView(verifyHeader);

onFocusTextChangeListener(verifyHeader);
onFocusTextChangeListener(countryCode);

RegistrationNumberInputController controller = new RegistrationNumberInputController(requireContext(),
this,
new EditText(getContext()),
countryCode);
next.setOnClickListener(v -> handleRegister(requireContext(), v));

if (!isSignalVersion()) {
CountryPickerFragmentArgs arguments = new CountryPickerFragmentArgs.Builder().setResultKey(NUMBER_COUNTRY_SELECT).build();

countryCode.setOnClickListener(v -> SafeNavigation.safeNavigate(
Navigation.findNavController(v), R.id.action_pickCountry, arguments.toBundle()
));

getParentFragmentManager().setFragmentResultListener(
NUMBER_COUNTRY_SELECT, this, (requestKey, result) -> {
int resultCode = result.getInt(CountryPickerFragment.KEY_COUNTRY_CODE);
String resultCountry = result.getString(CountryPickerFragment.KEY_COUNTRY);
viewModel.onCountrySelected(resultCountry, resultCode);
String fullCountry = (resultCountry + " +" + resultCode);
Objects.requireNonNull(countryCode.getEditText()).setText(fullCountry);
}
);
}

disposables.bindTo(getViewLifecycleOwner().getLifecycle());
viewModel = new ViewModelProvider(requireActivity()).get(RegistrationViewModel.class);

controller.prepopulateCountryCode();
controller.setNumberAndCountryCode(viewModel.getNumber());
}
private void handleRegister(@NonNull Context context, @NonNull View view) {
if (TextUtils.isEmpty(countryCode.getEditText().getText())) {
showErrorDialog(context, getString(R.string.RegistrationActivity_you_must_specify_your_country_code));
return;
}
SafeNavigation.safeNavigate(Navigation.findNavController(view), CountryCodeFragmentDirections.actionCountryCodeFragmentToEnterPhoneNumberFragment());
}


public void showErrorDialog(Context context, String msg) {
new MaterialAlertDialogBuilder(context).setMessage(msg).setPositiveButton(R.string.ok, null).show();
}

@Override
public void setCountry(int countryCode) {

}


@Override public void onNumberFocused() {

}

@Override public void onNumberInputDone(@NonNull View view) {

}

@Override public void setNationalNumber(@NonNull String number) {

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,9 @@

import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.showConfirmNumberDialogIfTranslated;
import static pigeon.extensions.BuildExtensionsKt.isSignalVersion;

public final class EnterPhoneNumberFragment extends LoggingFragment implements RegistrationNumberInputController.Callbacks {

private static final String NUMBER_COUNTRY_SELECT = "number_country";

private static final String TAG = Log.tag(EnterPhoneNumberFragment.class);

private TextInputLayout countryCode;
Expand Down Expand Up @@ -110,22 +107,6 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
countryCode);
register.setOnClickListener(v -> handleRegister(requireContext()));

if (!isSignalVersion()) {
CountryPickerFragmentArgs arguments = new CountryPickerFragmentArgs.Builder().setResultKey(NUMBER_COUNTRY_SELECT).build();

countryCode.setOnClickListener(v -> SafeNavigation.safeNavigate(
Navigation.findNavController(v), R.id.action_pickCountry, arguments.toBundle()
));

getParentFragmentManager().setFragmentResultListener(
NUMBER_COUNTRY_SELECT, this, (requestKey, result) -> {
int resultCountry = result.getInt(CountryPickerFragment.KEY_COUNTRY_CODE);
setCountry(resultCountry);
countryCode.getEditText().setText(String.valueOf(resultCountry));
}
);
}

disposables.bindTo(getViewLifecycleOwner().getLifecycle());
viewModel = new ViewModelProvider(requireActivity()).get(RegistrationViewModel.class);

Expand Down
3 changes: 1 addition & 2 deletions app/src/main/java/pigeon/extensions/KotilinExtensions.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package pigeon.extensions

import android.view.View
import android.widget.TextView
import androidx.core.view.ViewCompat


fun TextView.onFocusTextChangeListener() {
fun View.onFocusTextChangeListener() {

if (!isSignalVersion()) {
val BUTTON_SCALE_FOCUS = 1.3f
Expand Down

0 comments on commit 8be6c12

Please sign in to comment.