Skip to content

Update dependencies #1203

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Mar 28, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ dependencies {
// They are used to make some aspects of the demo app implementation simpler for
// demonstrative purposes, and you may find them useful in your own apps; YMMV.
implementation "android.arch.lifecycle:runtime:$architectureVersion"
implementation 'pub.devrel:easypermissions:1.1.3'
implementation 'pub.devrel:easypermissions:1.2.0'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
Expand Down
10 changes: 6 additions & 4 deletions app/src/main/java/com/firebase/uidemo/auth/SignedInActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.auth.PhoneAuthProvider;
import com.google.firebase.auth.TwitterAuthProvider;
import com.google.firebase.auth.UserInfo;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -152,11 +153,11 @@ private void populateProfile() {
TextUtils.isEmpty(user.getDisplayName()) ? "No display name" : user.getDisplayName());

List<String> providers = new ArrayList<>();
if (user.getProviders() == null || user.getProviders().isEmpty()) {
if (user.getProviderData().isEmpty()) {
providers.add("Anonymous");
} else {
for (String provider : user.getProviders()) {
switch (provider) {
for (UserInfo info : user.getProviderData()) {
switch (info.getProviderId()) {
case GoogleAuthProvider.PROVIDER_ID:
providers.add(getString(R.string.providers_google));
break;
Expand All @@ -173,7 +174,8 @@ private void populateProfile() {
providers.add(getString(R.string.providers_phone));
break;
default:
throw new IllegalStateException("Unknown provider: " + provider);
throw new IllegalStateException(
"Unknown provider: " + info.getProviderId());
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion auth/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ android {
dependencies {
implementation "com.android.support:design:$supportLibraryVersion"
implementation "com.android.support:customtabs:$supportLibraryVersion"
implementation 'com.android.support.constraint:constraint-layout:1.1.0-beta5'
implementation 'com.android.support.constraint:constraint-layout:1.1.0-beta6'

implementation "android.arch.lifecycle:extensions:$architectureVersion"
annotationProcessor "android.arch.lifecycle:compiler:$architectureVersion"
Expand Down
70 changes: 23 additions & 47 deletions auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import android.arch.lifecycle.ViewModelProviders;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.os.Bundle;
Expand All @@ -14,23 +13,21 @@
import com.firebase.ui.auth.data.model.UserCancellationException;
import com.firebase.ui.auth.data.remote.SignInKickstarter;
import com.firebase.ui.auth.ui.HelperActivityBase;
import com.firebase.ui.auth.util.PlayServicesHelper;
import com.firebase.ui.auth.viewmodel.RequestCodes;
import com.firebase.ui.auth.viewmodel.ResourceObserver;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;

@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class KickoffActivity extends HelperActivityBase {
private static final String IS_WAITING_FOR_PLAY_SERVICES = "is_waiting_for_play_services";

private SignInKickstarter mKickstarter;
private boolean mIsWaitingForPlayServices = false;

public static Intent createIntent(Context context, FlowParameters flowParams) {
return createBaseIntent(context, KickoffActivity.class, flowParams);
}

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mKickstarter = ViewModelProviders.of(this).get(SignInKickstarter.class);
mKickstarter.init(getFlowParams());
Expand All @@ -51,55 +48,34 @@ protected void onFailure(@NonNull Exception e) {
}
});

if (savedInstanceState == null || savedInstanceState.getBoolean(IS_WAITING_FOR_PLAY_SERVICES)) {
init();
}
}

private void init() {
if (isOffline()) {
finish(RESULT_CANCELED, IdpResponse.getErrorIntent(
new FirebaseUiException(ErrorCodes.NO_NETWORK)));
return;
}
GoogleApiAvailability.getInstance()
.makeGooglePlayServicesAvailable(this)
.addOnSuccessListener(this, new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
if (savedInstanceState != null) { return; }

boolean isPlayServicesAvailable = PlayServicesHelper.makePlayServicesAvailable(
this,
RequestCodes.PLAY_SERVICES_CHECK,
new DialogInterface.OnCancelListener() {
if (isOffline()) {
finish(RESULT_CANCELED, IdpResponse.getErrorIntent(
new FirebaseUiException(ErrorCodes.NO_NETWORK)));
} else {
mKickstarter.start();
}
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onCancel(DialogInterface dialog) {
finish(RESULT_CANCELED, IdpResponse.getErrorIntent(
new FirebaseUiException(ErrorCodes.PLAY_SERVICES_UPDATE_CANCELLED)));
public void onFailure(@NonNull Exception e) {
finish(RESULT_CANCELED, IdpResponse.getErrorIntent(new FirebaseUiException(
ErrorCodes.PLAY_SERVICES_UPDATE_CANCELLED, e)));
}
});

if (isPlayServicesAvailable) {
mKickstarter.start();
} else {
mIsWaitingForPlayServices = true;
}
}

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(IS_WAITING_FOR_PLAY_SERVICES, mIsWaitingForPlayServices);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RequestCodes.PLAY_SERVICES_CHECK) {
if (resultCode == RESULT_OK) {
mKickstarter.start();
} else {
finish(RESULT_CANCELED, IdpResponse.getErrorIntent(
new FirebaseUiException(ErrorCodes.PLAY_SERVICES_UPDATE_CANCELLED)));
}
} else {
mKickstarter.onActivityResult(requestCode, resultCode, data);
}
mKickstarter.onActivityResult(requestCode, resultCode, data);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,14 @@
/**
* Helper class wrapping {@link GoogleApiAvailability}. Used internally but can also be used by
* client application
*
* @deprecated use {@link GoogleApiAvailability} instead
*/
@Deprecated
public class PlayServicesHelper {
/**
* @deprecated use {@link GoogleApiAvailability#getInstance()} instead
*/
@Deprecated
public static GoogleApiAvailability getGoogleApiAvailability() {
return GoogleApiAvailability.getInstance();
Expand All @@ -21,7 +27,10 @@ public static GoogleApiAvailability getGoogleApiAvailability() {
* @param requestCode A request code to be used to return results to the Activity.
* @param cancelListener A Dialog listener if the user cancels the recommended action.
* @return true if play services is available, false otherwise.
* @deprecated use {@link GoogleApiAvailability#makeGooglePlayServicesAvailable(Activity)}
* instead.
*/
@Deprecated
public static boolean makePlayServicesAvailable(Activity activity,
int requestCode,
DialogInterface.OnCancelListener cancelListener) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.auth.PhoneAuthProvider;
import com.google.firebase.auth.ProviderQueryResult;
import com.google.firebase.auth.SignInMethodQueryResult;
import com.google.firebase.auth.TwitterAuthProvider;

import java.util.List;
Expand Down Expand Up @@ -68,6 +68,26 @@ public static String idpResponseToAccountType(@Nullable IdpResponse response) {
return providerIdToAccountType(response.getProviderType());
}

@NonNull
@AuthUI.SupportedProvider
public static String signInMethodToProviderId(@NonNull String method) {
switch (method) {
case GoogleAuthProvider.GOOGLE_SIGN_IN_METHOD:
return GoogleAuthProvider.PROVIDER_ID;
case FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD:
return FacebookAuthProvider.PROVIDER_ID;
case TwitterAuthProvider.TWITTER_SIGN_IN_METHOD:
return TwitterAuthProvider.PROVIDER_ID;
case PhoneAuthProvider.PHONE_SIGN_IN_METHOD:
return PhoneAuthProvider.PROVIDER_ID;
case EmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD:
case EmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD:
return EmailAuthProvider.PROVIDER_ID;
default:
throw new IllegalStateException("Unknown method: + " + method);
}
}

/**
* Translate a Firebase Auth provider ID (such as {@link GoogleAuthProvider#PROVIDER_ID}) to a
* Credentials API account type (such as {@link IdentityProviders#GOOGLE}).
Expand Down Expand Up @@ -128,15 +148,25 @@ public static Task<String> fetchTopProvider(FirebaseAuth auth, @NonNull String e
return Tasks.forException(new NullPointerException("Email cannot be empty"));
}

return auth.fetchProvidersForEmail(email)
.continueWith(new Continuation<ProviderQueryResult, String>() {
return auth.fetchSignInMethodsForEmail(email)
.continueWith(new Continuation<SignInMethodQueryResult, String>() {
@Override
public String then(@NonNull Task<ProviderQueryResult> task) {
public String then(@NonNull Task<SignInMethodQueryResult> task) {
if (!task.isSuccessful()) return null;

List<String> providers = task.getResult().getProviders();
return providers == null || providers.isEmpty()
? null : providers.get(providers.size() - 1);
List<String> methods = task.getResult().getSignInMethods();
return methods == null || methods.isEmpty()
? null : methods.get(methods.size() - 1);
}
}).continueWith(new Continuation<String, String>() {
@Override
public String then(@NonNull Task<String> task) {
String method = task.getResult();
if (method == null) {
return null;
} else {
return signInMethodToProviderId(method);
}
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,6 @@ public final class RequestCodes {
/** Request code for retrieving a Google credential. */
public static final int GOOGLE_PROVIDER = 110;

/** Request code for checking if a valid version of Play Services exists. */
public static final int PLAY_SERVICES_CHECK = 111;

private RequestCodes() {
throw new AssertionError("No instance for you!");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,20 @@

import android.support.annotation.Nullable;

import com.google.firebase.auth.ProviderQueryResult;
import com.google.firebase.auth.SignInMethodQueryResult;

import java.util.List;

public class FakeProviderQueryResult implements ProviderQueryResult {
private List<String> mProviders;
public class FakeSignInMethodQueryResult implements SignInMethodQueryResult {
private List<String> mMethods;

public FakeProviderQueryResult(List<String> providers) {
mProviders = providers;
public FakeSignInMethodQueryResult(List<String> methods) {
mMethods = methods;
}

@Nullable
@Override
public List<String> getProviders() {
return mProviders;
public List<String> getSignInMethods() {
return mMethods;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import com.firebase.ui.auth.data.model.User;
import com.firebase.ui.auth.testhelpers.AutoCompleteTask;
import com.firebase.ui.auth.testhelpers.FakeAuthResult;
import com.firebase.ui.auth.testhelpers.FakeProviderQueryResult;
import com.firebase.ui.auth.testhelpers.FakeSignInMethodQueryResult;
import com.firebase.ui.auth.testhelpers.ResourceMatchers;
import com.firebase.ui.auth.testhelpers.TestConstants;
import com.firebase.ui.auth.testhelpers.TestHelper;
Expand All @@ -24,7 +24,7 @@
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthUserCollisionException;
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.auth.ProviderQueryResult;
import com.google.firebase.auth.SignInMethodQueryResult;
import com.google.firebase.auth.UserProfileChangeRequest;

import org.junit.Before;
Expand Down Expand Up @@ -122,10 +122,10 @@ public void testSignInIdp_resolution() {
when(mMockAuth.signInWithCredential(any(AuthCredential.class)))
.thenReturn(AutoCompleteTask.<AuthResult>forFailure(
new FirebaseAuthUserCollisionException("foo", "bar")));
when(mMockAuth.fetchProvidersForEmail(any(String.class)))
.thenReturn(AutoCompleteTask.<ProviderQueryResult>forSuccess(
new FakeProviderQueryResult(Collections.singletonList(
FacebookAuthProvider.PROVIDER_ID))));
when(mMockAuth.fetchSignInMethodsForEmail(any(String.class)))
.thenReturn(AutoCompleteTask.<SignInMethodQueryResult>forSuccess(
new FakeSignInMethodQueryResult(Collections.singletonList(
FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD))));

IdpResponse response = new IdpResponse.Builder(new User.Builder(
GoogleAuthProvider.PROVIDER_ID, TestConstants.EMAIL).build())
Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ buildscript {
}

dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.android.tools.build:gradle:3.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
classpath 'com.google.gms:google-services:3.2.0'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
Expand Down Expand Up @@ -118,7 +118,7 @@ allprojects { project ->
def archivesBaseName = isLibrary ? 'firebase-ui' : "firebase-ui-${project.name}"

def groupName = project.ext.group
def versionName = project.ext.version;
def versionName = project.ext.version

publishing {
publications {
Expand Down
3 changes: 1 addition & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
org.gradle.jvmargs=-Xmx6g -XX:MaxPermSize=6g -XX:ReservedCodeCacheSize=2g -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx6g -XX:ReservedCodeCacheSize=2g -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.caching=true
android.enableD8=true