From fcda2ec5b77b0f249a56a988a325551c16c98d29 Mon Sep 17 00:00:00 2001 From: Alex Saveau Date: Wed, 18 Jul 2018 10:49:30 -0700 Subject: [PATCH] Save phone verification ID across process deaths Signed-off-by: Alex Saveau --- .../firebase/ui/auth/ui/phone/PhoneActivity.java | 16 ++++++++++++---- .../ui/phone/PhoneNumberVerificationHandler.java | 13 +++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneActivity.java index 2dccd14ff..431e6e379 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneActivity.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneActivity.java @@ -46,6 +46,8 @@ */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public class PhoneActivity extends AppCompatBase { + private PhoneNumberVerificationHandler mPhoneVerifier; + public static Intent createIntent(Context context, FlowParameters params, Bundle args) { return createBaseIntent(context, PhoneActivity.class, params) .putExtra(ExtraConstants.PARAMS, args); @@ -72,10 +74,10 @@ protected void onFailure(@NonNull Exception e) { } }); - final PhoneNumberVerificationHandler phoneVerifier = - ViewModelProviders.of(this).get(PhoneNumberVerificationHandler.class); - phoneVerifier.init(getFlowParams()); - phoneVerifier.getOperation().observe(this, new ResourceObserver( + mPhoneVerifier = ViewModelProviders.of(this).get(PhoneNumberVerificationHandler.class); + mPhoneVerifier.init(getFlowParams()); + mPhoneVerifier.onRestoreInstanceState(savedInstanceState); + mPhoneVerifier.getOperation().observe(this, new ResourceObserver( this, R.string.fui_verifying) { @Override protected void onSuccess(@NonNull PhoneVerification verification) { @@ -121,6 +123,12 @@ protected void onFailure(@NonNull Exception e) { .commit(); } + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mPhoneVerifier.onSaveInstanceState(outState); + } + @Override public void onBackPressed() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneNumberVerificationHandler.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneNumberVerificationHandler.java index ee1ffe53b..a00151006 100644 --- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneNumberVerificationHandler.java +++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneNumberVerificationHandler.java @@ -1,7 +1,9 @@ package com.firebase.ui.auth.ui.phone; import android.app.Application; +import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.firebase.ui.auth.data.model.PhoneNumberVerificationRequiredException; import com.firebase.ui.auth.data.model.Resource; @@ -15,6 +17,7 @@ public class PhoneNumberVerificationHandler extends AuthViewModelBase { private static final long AUTO_RETRIEVAL_TIMEOUT_SECONDS = 120; + private static final String VERIFICATION_ID_KEY = "verification_id"; private String mVerificationId; private PhoneAuthProvider.ForceResendingToken mForceResendingToken; @@ -60,4 +63,14 @@ public void submitVerificationCode(String number, String code) { PhoneAuthProvider.getCredential(mVerificationId, code), false))); } + + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putString(VERIFICATION_ID_KEY, mVerificationId); + } + + public void onRestoreInstanceState(@Nullable Bundle savedInstanceState) { + if (mVerificationId == null && savedInstanceState != null) { + mVerificationId = savedInstanceState.getString(VERIFICATION_ID_KEY); + } + } }