in auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneActivity.java [60:138]
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fui_activity_register_phone);
final PhoneProviderResponseHandler handler =
new ViewModelProvider(this).get(PhoneProviderResponseHandler.class);
handler.init(getFlowParams());
handler.getOperation().observe(this, new ResourceObserver<IdpResponse>(
this, R.string.fui_progress_dialog_signing_in) {
@Override
protected void onSuccess(@NonNull IdpResponse response) {
startSaveCredentials(handler.getCurrentUser(), response, null);
}
@Override
protected void onFailure(@NonNull Exception e) {
handleError(e);
}
});
mPhoneVerifier = new ViewModelProvider(this).get(PhoneNumberVerificationHandler.class);
mPhoneVerifier.init(getFlowParams());
mPhoneVerifier.onRestoreInstanceState(savedInstanceState);
mPhoneVerifier.getOperation().observe(this, new ResourceObserver<PhoneVerification>(
this, R.string.fui_verifying) {
@Override
protected void onSuccess(@NonNull PhoneVerification verification) {
if (verification.isAutoVerified()) {
Toast.makeText(
PhoneActivity.this,
R.string.fui_auto_verified,
Toast.LENGTH_LONG
).show();
FragmentManager manager = getSupportFragmentManager();
if (manager.findFragmentByTag(SubmitConfirmationCodeFragment.TAG) != null) {
// Ensure the submit code screen isn't visible if there's no code to submit.
// It's possible to get into this state when an SMS is sent, but then
// automatically retrieved.
manager.popBackStack();
}
}
handler.startSignIn(verification.getCredential(), new IdpResponse.Builder(
new User.Builder(PhoneAuthProvider.PROVIDER_ID, null)
.setPhoneNumber(verification.getNumber())
.build())
.build());
}
@Override
protected void onFailure(@NonNull Exception e) {
if (e instanceof PhoneNumberVerificationRequiredException) {
// Only boot up the submit code fragment if it isn't already being shown to the
// user. If the user requests another verification code, the fragment will
// already be visible so we have nothing to do.
if (getSupportFragmentManager()
.findFragmentByTag(SubmitConfirmationCodeFragment.TAG) == null) {
showSubmitCodeFragment(
((PhoneNumberVerificationRequiredException) e).getPhoneNumber());
}
// Clear existing errors
handleError(null);
} else {
handleError(e);
}
}
});
if (savedInstanceState != null) { return; }
Bundle params = getIntent().getExtras().getBundle(ExtraConstants.PARAMS);
CheckPhoneNumberFragment fragment = CheckPhoneNumberFragment.newInstance(params);
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_phone, fragment, CheckPhoneNumberFragment.TAG)
.disallowAddToBackStack()
.commit();
}