Skip to content

Commit

Permalink
Version 4.2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
samtstern authored Oct 24, 2018
2 parents df657cd + a2d1846 commit aa447a6
Show file tree
Hide file tree
Showing 30 changed files with 253 additions and 110 deletions.
4 changes: 3 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ android:
before_script:
- cp library/google-services.json app/google-services.json
- cp library/google-services.json proguard-tests/google-services.json
script: ./gradlew clean assembleDebug proguard-tests:build check
script:
- ./gradlew clean
- ./gradlew assembleDebug proguard-tests:build check
after_success: ./scripts/artifactory.sh
after_failure:
# tests
Expand Down
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,19 @@ libraries.
```groovy
dependencies {
// FirebaseUI for Firebase Realtime Database
implementation 'com.firebaseui:firebase-ui-database:4.2.0'
implementation 'com.firebaseui:firebase-ui-database:4.2.1'
// FirebaseUI for Cloud Firestore
implementation 'com.firebaseui:firebase-ui-firestore:4.2.0'
implementation 'com.firebaseui:firebase-ui-firestore:4.2.1'
// FirebaseUI for Firebase Auth
implementation 'com.firebaseui:firebase-ui-auth:4.2.0'
implementation 'com.firebaseui:firebase-ui-auth:4.2.1'
// FirebaseUI for Firebase Auth (GitHub provider)
implementation 'com.firebaseui:firebase-ui-auth-github:4.2.0'
implementation 'com.firebaseui:firebase-ui-auth-github:4.2.1'
// FirebaseUI for Cloud Storage
implementation 'com.firebaseui:firebase-ui-storage:4.2.0'
implementation 'com.firebaseui:firebase-ui-storage:4.2.1'
}
```

Expand Down Expand Up @@ -105,15 +105,15 @@ versions. This means that FirebaseUI has independent dependencies on each of the
For best results, your app should depend on a version of each dependency with the same major
version number as the version used by FirebaseUI.

As of version `4.2.0`, FirebaseUI has the following dependency versions:
As of version `4.2.1`, FirebaseUI has the following dependency versions:

| Library | Version |
|----------------------|--------------------------------|
| `firebase-auth` | 16.0.3 |
| `play-services-auth` | 16.0.0 |
| `firebase-database` | 16.0.2 |
| `firebase-firestore` | 17.1.0 |
| `firebase-storage` | 16.0.2 |
| `firebase-auth` | 16.0.5 |
| `play-services-auth` | 16.0.1 |
| `firebase-database` | 16.0.3 |
| `firebase-firestore` | 17.1.1 |
| `firebase-storage` | 16.0.3 |

### Upgrading dependencies

Expand Down
50 changes: 30 additions & 20 deletions app/src/main/java/com/firebase/uidemo/auth/AuthUiActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,8 @@ public class AuthUiActivity extends AppCompatActivity {
@BindView(R.id.google_logo) RadioButton mGoogleLogo;
@BindView(R.id.no_logo) RadioButton mNoLogo;

@BindView(R.id.google_tos) RadioButton mUseGoogleTos;
@BindView(R.id.firebase_tos) RadioButton mUseFirebaseTos;

@BindView(R.id.google_privacy) RadioButton mUseGooglePrivacyPolicy;
@BindView(R.id.firebase_privacy) RadioButton mUseFirebasePrivacyPolicy;
@BindView(R.id.google_tos_privacy) RadioButton mUseGoogleTosPp;
@BindView(R.id.firebase_tos_privacy) RadioButton mUseFirebaseTosPp;

@BindView(R.id.google_scopes_header) TextView mGoogleScopesHeader;
@BindView(R.id.google_scope_drive_file) CheckBox mGoogleScopeDriveFile;
Expand Down Expand Up @@ -180,17 +177,20 @@ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {

@OnClick(R.id.sign_in)
public void signIn() {
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder()
.setTheme(getSelectedTheme())
.setLogo(getSelectedLogo())
.setAvailableProviders(getSelectedProviders())
.setTosAndPrivacyPolicyUrls(getSelectedTosUrl(),
getSelectedPrivacyPolicyUrl())
.setIsSmartLockEnabled(mEnableCredentialSelector.isChecked(),
mEnableHintSelector.isChecked())
.build(),
RC_SIGN_IN);
AuthUI.SignInIntentBuilder builder = AuthUI.getInstance().createSignInIntentBuilder()
.setTheme(getSelectedTheme())
.setLogo(getSelectedLogo())
.setAvailableProviders(getSelectedProviders())
.setIsSmartLockEnabled(mEnableCredentialSelector.isChecked(),
mEnableHintSelector.isChecked());

if (getSelectedTosUrl() != null && getSelectedPrivacyPolicyUrl() != null) {
builder.setTosAndPrivacyPolicyUrls(
getSelectedTosUrl(),
getSelectedPrivacyPolicyUrl());
}

startActivityForResult(builder.build(), RC_SIGN_IN);
}

@OnClick(R.id.sign_in_silent)
Expand Down Expand Up @@ -328,20 +328,30 @@ private List<IdpConfig> getSelectedProviders() {
return selectedProviders;
}

@Nullable
private String getSelectedTosUrl() {
if (mUseGoogleTos.isChecked()) {
if (mUseGoogleTosPp.isChecked()) {
return GOOGLE_TOS_URL;
}

return FIREBASE_TOS_URL;
if (mUseFirebaseTosPp.isChecked()) {
return FIREBASE_TOS_URL;
}

return null;
}

@Nullable
private String getSelectedPrivacyPolicyUrl() {
if (mUseGooglePrivacyPolicy.isChecked()) {
if (mUseGoogleTosPp.isChecked()) {
return GOOGLE_PRIVACY_POLICY_URL;
}

return FIREBASE_PRIVACY_POLICY_URL;
if (mUseFirebaseTosPp.isChecked()) {
return FIREBASE_PRIVACY_POLICY_URL;
}

return null;
}

private void setGoogleScopesEnabled(boolean enabled) {
Expand Down
35 changes: 6 additions & 29 deletions app/src/main/res/layout/auth_ui_layout.xml
Original file line number Diff line number Diff line change
Expand Up @@ -182,53 +182,30 @@
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
android:text="@string/tos_header" />
android:text="@string/tos_pp_header" />

<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">

<RadioButton
android:id="@+id/google_tos"
android:id="@+id/google_tos_privacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/tos_google" />
android:text="@string/tos_pp_google" />

<RadioButton
android:id="@+id/firebase_tos"
android:id="@+id/firebase_tos_privacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tos_firebase" />

</RadioGroup>

<TextView
style="@style/Base.TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
android:text="@string/pp_header" />

<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">

<RadioButton
android:id="@+id/google_privacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/pp_google" />
android:text="@string/tos_pp_firebase" />

<RadioButton
android:id="@+id/firebase_privacy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pp_firebase" />
android:text="@string/tos_pp_none" />

</RadioGroup>

Expand Down
11 changes: 4 additions & 7 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,10 @@
<string name="logo_google">Google</string>
<string name="logo_none">None</string>

<string name="tos_header">Terms of Service URL</string>
<string name="tos_google">Google</string>
<string name="tos_firebase">Firebase</string>

<string name="pp_header">Privacy Policy URL</string>
<string name="pp_google">Google</string>
<string name="pp_firebase">Firebase</string>
<string name="tos_pp_header">Terms of Service and Privacy Policy</string>
<string name="tos_pp_google">Google</string>
<string name="tos_pp_firebase">Firebase</string>
<string name="tos_pp_none">None</string>

<string name="google_scopes_header">Example extra Google scopes</string>
<string name="google_scope_drive_file">Drive File</string>
Expand Down
6 changes: 6 additions & 0 deletions auth-github/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
android {
lintOptions {
disable("UnknownNullness") // TODO fix in future PR
}
}

dependencies {
compileOnly(project(":auth")) { isTransitive = false }
compileOnly(Config.Libs.Firebase.auth) { isTransitive = false }
Expand Down
4 changes: 2 additions & 2 deletions auth/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@ Gradle, add the dependency:
```groovy
dependencies {
// ...
implementation 'com.firebaseui:firebase-ui-auth:4.2.0'
implementation 'com.firebaseui:firebase-ui-auth:4.2.1'
// Required only if GitHub OAuth support is required
implementation 'com.firebaseui:firebase-ui-auth-github:4.2.0'
implementation 'com.firebaseui:firebase-ui-auth-github:4.2.1'
// Required only if Facebook login support is required
// Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94
Expand Down
17 changes: 16 additions & 1 deletion auth/src/main/java/com/firebase/ui/auth/AuthUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -1025,6 +1025,7 @@ private abstract class AuthIntentBuilder<T extends AuthIntentBuilder> {
final List<IdpConfig> mProviders = new ArrayList<>();
String mTosUrl;
String mPrivacyPolicyUrl;
boolean mAlwaysShowProviderChoice = false;
boolean mEnableCredentials = true;
boolean mEnableHints = true;

Expand Down Expand Up @@ -1156,6 +1157,19 @@ public T setIsSmartLockEnabled(boolean enableCredentials, boolean enableHints) {
return (T) this;
}

/**
* Forces the sign-in method choice screen to always show, even if there is only
* a single provider configured.
* <p>
* <p>This is false by default.
* @param alwaysShow if true, force the sign-in choice screen to show.
*/
@NonNull
public T setAlwaysShowSignInMethodScreen(boolean alwaysShow) {
mAlwaysShowProviderChoice = alwaysShow;
return (T) this;
}

@CallSuper
@NonNull
public Intent build() {
Expand Down Expand Up @@ -1201,7 +1215,8 @@ protected FlowParameters getFlowParams() {
mPrivacyPolicyUrl,
mEnableCredentials,
mEnableHints,
mEnableAnonymousUpgrade);
mEnableAnonymousUpgrade,
mAlwaysShowProviderChoice);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public class FlowParameters implements Parcelable {
public final boolean enableCredentials;
public final boolean enableHints;
public final boolean enableAnonymousUpgrade;
public final boolean alwaysShowProviderChoice;

public FlowParameters(
@NonNull String appName,
Expand All @@ -67,7 +68,8 @@ public FlowParameters(
@Nullable String privacyPolicyUrl,
boolean enableCredentials,
boolean enableHints,
boolean enableAnonymousUpgrade) {
boolean enableAnonymousUpgrade,
boolean alwaysShowProviderChoice) {
this.appName = Preconditions.checkNotNull(appName, "appName cannot be null");
this.providers = Collections.unmodifiableList(
Preconditions.checkNotNull(providers, "providers cannot be null"));
Expand All @@ -78,6 +80,7 @@ public FlowParameters(
this.enableCredentials = enableCredentials;
this.enableHints = enableHints;
this.enableAnonymousUpgrade = enableAnonymousUpgrade;
this.alwaysShowProviderChoice = alwaysShowProviderChoice;
}

/**
Expand All @@ -98,6 +101,7 @@ public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(enableCredentials ? 1 : 0);
dest.writeInt(enableHints ? 1 : 0);
dest.writeInt(enableAnonymousUpgrade ? 1 : 0);
dest.writeInt(alwaysShowProviderChoice ? 1 : 0);
}

@Override
Expand All @@ -117,6 +121,7 @@ public FlowParameters createFromParcel(Parcel in) {
boolean enableCredentials = in.readInt() != 0;
boolean enableHints = in.readInt() != 0;
boolean enableAnonymousUpgrade = in.readInt() != 0;
boolean alwaysShowProviderChoice = in.readInt() != 0;

return new FlowParameters(
appName,
Expand All @@ -127,7 +132,8 @@ public FlowParameters createFromParcel(Parcel in) {
privacyPolicyUrl,
enableCredentials,
enableHints,
enableAnonymousUpgrade);
enableAnonymousUpgrade,
alwaysShowProviderChoice);
}

@Override
Expand All @@ -151,4 +157,8 @@ public boolean isPrivacyPolicyUrlProvided() {
public boolean isAnonymousUpgradeEnabled() {
return enableAnonymousUpgrade;
}

public boolean shouldShowProviderChoice() {
return !isSingleProviderFlow() || alwaysShowProviderChoice;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public void onComplete(@NonNull Task<CredentialRequestResponse> task) {

private void startAuthMethodChoice() {
// If there is only one provider selected, launch the flow directly
if (getArguments().isSingleProviderFlow()) {
if (!getArguments().shouldShowProviderChoice()) {
AuthUI.IdpConfig firstIdpConfig = getArguments().providers.get(0);
String firstProvider = firstIdpConfig.getProviderId();
switch (firstProvider) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import android.support.annotation.RestrictTo;
import android.support.v7.app.AppCompatActivity;

import com.firebase.ui.auth.AuthUI;
import com.firebase.ui.auth.ErrorCodes;
import com.firebase.ui.auth.IdpResponse;
import com.firebase.ui.auth.data.model.FlowParameters;
Expand All @@ -29,11 +30,13 @@ protected static Intent createBaseIntent(
@NonNull Context context,
@NonNull Class<? extends Activity> target,
@NonNull FlowParameters flowParams) {
return new Intent(
Intent intent = new Intent(
checkNotNull(context, "context cannot be null"),
checkNotNull(target, "target activity cannot be null"))
.putExtra(ExtraConstants.FLOW_PARAMS,
checkNotNull(flowParams, "flowParams cannot be null"));
intent.setExtrasClassLoader(AuthUI.class.getClassLoader());
return intent;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
TextView footerText = view.findViewById(R.id.email_footer_tos_and_pp_text);
FlowParameters flowParameters = getFlowParams();

if (flowParameters.isSingleProviderFlow()) {
if (!flowParameters.shouldShowProviderChoice()) {
PrivacyDisclosureUtils.setupTermsOfServiceAndPrivacyPolicyText(requireContext(),
flowParameters,
termsText);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,12 @@ protected void onFailure(@NonNull Exception e) {
PrivacyDisclosureUtils.setupTermsOfServiceAndPrivacyPolicyText(this,
getFlowParams(),
termsText);

// No ToS or PP provided, so we should hide the view entirely
if (!getFlowParams().isPrivacyPolicyUrlProvided() &&
!getFlowParams().isTermsOfServiceUrlProvided()) {
termsText.setVisibility(View.GONE);
}
}

private void populateIdpList(List<IdpConfig> providerConfigs,
Expand Down
Loading

0 comments on commit aa447a6

Please sign in to comment.