Skip to content

Commit e4ece3a

Browse files
yramanchuksamtstern
authored andcommitted
Default phone (#906)
1 parent 868247f commit e4ece3a

File tree

5 files changed

+58
-8
lines changed

5 files changed

+58
-8
lines changed

app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ public void signIn(View view) {
205205
.setTosUrl(getSelectedTosUrl())
206206
.setPrivacyPolicyUrl(getSelectedPrivacyPolicyUrl())
207207
.setIsSmartLockEnabled(mEnableCredentialSelector.isChecked(),
208-
mEnableHintSelector.isChecked())
208+
mEnableHintSelector.isChecked())
209209
.setAllowNewEmailAccounts(mAllowNewEmailAccounts.isChecked())
210210
.build(),
211211
RC_SIGN_IN);

auth/README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,20 @@ startActivityForResult(
256256
RC_SIGN_IN);
257257
```
258258

259+
When using the phone verification provider and the number is known in advance, it is possible to
260+
provide a default phone number (in international format) that will be used to prepopulate the
261+
country code and phone number input fields. The user is still able to edit the number if desired.
262+
263+
```java
264+
// Use a Bundle to hold the default number, and pass it to the Builder via setParams:
265+
Bundle params = new Bundle();
266+
params.putString(AuthUI.EXTRA_DEFAULT_PHONE, "+12345678901");
267+
IdpConfig phoneConfigWithDefaultNumber =
268+
new IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER)
269+
.setParams(params)
270+
.build();
271+
```
272+
259273
#### Handling the sign-in response
260274

261275
##### Response codes

auth/src/main/java/com/firebase/ui/auth/AuthUI.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import android.app.Activity;
1818
import android.content.Intent;
19+
import android.os.Bundle;
1920
import android.os.Parcel;
2021
import android.os.Parcelable;
2122
import android.support.annotation.CallSuper;
@@ -28,6 +29,7 @@
2829

2930
import com.facebook.login.LoginManager;
3031
import com.firebase.ui.auth.provider.TwitterProvider;
32+
import com.firebase.ui.auth.ui.ExtraConstants;
3133
import com.firebase.ui.auth.ui.FlowParameters;
3234
import com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity;
3335
import com.firebase.ui.auth.util.GoogleSignInHelper;
@@ -104,6 +106,11 @@ public class AuthUI {
104106
*/
105107
public static final String PHONE_VERIFICATION_PROVIDER = PhoneAuthProvider.PROVIDER_ID;
106108

109+
/**
110+
* Bundle key for the default phone number parameter
111+
*/
112+
public static final String EXTRA_DEFAULT_PHONE = ExtraConstants.EXTRA_PHONE;
113+
107114
/**
108115
* Default value for logo resource, omits the logo from the {@link AuthMethodPickerActivity}.
109116
*/
@@ -269,15 +276,21 @@ public SignInIntentBuilder createSignInIntentBuilder() {
269276
public static class IdpConfig implements Parcelable {
270277
private final String mProviderId;
271278
private final List<String> mScopes;
279+
private final Bundle mParams;
272280

273-
private IdpConfig(@SupportedProvider @NonNull String providerId, List<String> scopes) {
281+
private IdpConfig(
282+
@SupportedProvider @NonNull String providerId,
283+
List<String> scopes,
284+
Bundle params) {
274285
mProviderId = providerId;
275286
mScopes = Collections.unmodifiableList(scopes);
287+
mParams = params;
276288
}
277289

278290
private IdpConfig(Parcel in) {
279291
mProviderId = in.readString();
280292
mScopes = Collections.unmodifiableList(in.createStringArrayList());
293+
mParams = in.readBundle(getClass().getClassLoader());
281294
}
282295

283296
@SupportedProvider
@@ -289,6 +302,10 @@ public List<String> getScopes() {
289302
return mScopes;
290303
}
291304

305+
public Bundle getParams() {
306+
return mParams;
307+
}
308+
292309
public static final Creator<IdpConfig> CREATOR = new Creator<IdpConfig>() {
293310
@Override
294311
public IdpConfig createFromParcel(Parcel in) {
@@ -310,6 +327,7 @@ public int describeContents() {
310327
public void writeToParcel(Parcel parcel, int i) {
311328
parcel.writeString(mProviderId);
312329
parcel.writeStringList(mScopes);
330+
parcel.writeBundle(mParams);
313331
}
314332

315333
@Override
@@ -332,12 +350,14 @@ public String toString() {
332350
return "IdpConfig{" +
333351
"mProviderId='" + mProviderId + '\'' +
334352
", mScopes=" + mScopes +
353+
", mParams=" + mParams +
335354
'}';
336355
}
337356

338357
public static class Builder {
339358
@SupportedProvider private String mProviderId;
340359
private List<String> mScopes = new ArrayList<>();
360+
private Bundle mParams = new Bundle();
341361

342362
/**
343363
* Builds the configuration parameters for an identity provider.
@@ -372,8 +392,13 @@ public Builder setPermissions(List<String> permissions) {
372392
return this;
373393
}
374394

395+
public Builder setParams(Bundle params) {
396+
mParams = params;
397+
return this;
398+
}
399+
375400
public IdpConfig build() {
376-
return new IdpConfig(mProviderId, mScopes);
401+
return new IdpConfig(mProviderId, mScopes, mParams);
377402
}
378403
}
379404
}
@@ -448,8 +473,8 @@ public T setAvailableProviders(@NonNull List<IdpConfig> idpConfigs) {
448473
for (IdpConfig config : idpConfigs) {
449474
if (mProviders.contains(config)) {
450475
throw new IllegalArgumentException("Each provider can only be set once. "
451-
+ config.getProviderId()
452-
+ " was set twice.");
476+
+ config.getProviderId()
477+
+ " was set twice.");
453478
} else {
454479
mProviders.add(config);
455480
}

auth/src/main/java/com/firebase/ui/auth/provider/PhoneProvider.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.Intent;
66
import android.support.annotation.LayoutRes;
77

8+
import com.firebase.ui.auth.AuthUI;
89
import com.firebase.ui.auth.R;
910
import com.firebase.ui.auth.ui.FlowParameters;
1011
import com.firebase.ui.auth.ui.phone.PhoneVerificationActivity;
@@ -34,8 +35,16 @@ public int getButtonLayout() {
3435

3536
@Override
3637
public void startLogin(Activity activity) {
38+
39+
String phone = null;
40+
for (AuthUI.IdpConfig idpConfig : mFlowParameters.providerInfo) {
41+
if (idpConfig.getProviderId().equals(AuthUI.PHONE_VERIFICATION_PROVIDER)) {
42+
phone = idpConfig.getParams().getString(AuthUI.EXTRA_DEFAULT_PHONE);
43+
}
44+
}
45+
3746
activity.startActivityForResult(
38-
PhoneVerificationActivity.createIntent(activity, mFlowParameters, null),
47+
PhoneVerificationActivity.createIntent(activity, mFlowParameters, phone),
3948
RC_PHONE_FLOW);
4049
}
4150

auth/src/main/java/com/firebase/ui/auth/util/signincontainer/SignInDelegate.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,8 @@ private void startAuthMethodChoice() {
238238

239239
// If there is only one provider selected, launch the flow directly
240240
if (idpConfigs.size() == 1) {
241-
String firstProvider = idpConfigs.get(0).getProviderId();
241+
AuthUI.IdpConfig firstIdpConfig = idpConfigs.get(0);
242+
String firstProvider = firstIdpConfig.getProviderId();
242243
switch (firstProvider) {
243244
case EmailAuthProvider.PROVIDER_ID:
244245
// Go directly to email flow
@@ -248,8 +249,9 @@ private void startAuthMethodChoice() {
248249
break;
249250
case PhoneAuthProvider.PROVIDER_ID:
250251
// Go directly to phone flow
252+
String phone = firstIdpConfig.getParams().getString(AuthUI.EXTRA_DEFAULT_PHONE);
251253
startActivityForResult(
252-
PhoneVerificationActivity.createIntent(getContext(), flowParams, null),
254+
PhoneVerificationActivity.createIntent(getContext(), flowParams, phone),
253255
RC_PHONE_FLOW);
254256
break;
255257
default:

0 commit comments

Comments
 (0)