Skip to content

Commit

Permalink
Merge pull request #1373 from firebase/version-4.1.0
Browse files Browse the repository at this point in the history
Version 4.1.0
  • Loading branch information
samtstern authored Jun 26, 2018
2 parents 9aceabb + 32f67f4 commit 8bda799
Show file tree
Hide file tree
Showing 207 changed files with 4,847 additions and 3,941 deletions.
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,16 @@ libraries.
```groovy
dependencies {
// FirebaseUI for Firebase Realtime Database
implementation 'com.firebaseui:firebase-ui-database:4.0.1'
implementation 'com.firebaseui:firebase-ui-database:4.1.0'
// FirebaseUI for Cloud Firestore
implementation 'com.firebaseui:firebase-ui-firestore:4.0.1'
implementation 'com.firebaseui:firebase-ui-firestore:4.1.0'
// FirebaseUI for Firebase Auth
implementation 'com.firebaseui:firebase-ui-auth:4.0.1'
implementation 'com.firebaseui:firebase-ui-auth:4.1.0'
// FirebaseUI for Cloud Storage
implementation 'com.firebaseui:firebase-ui-storage:4.0.1'
implementation 'com.firebaseui:firebase-ui-storage:4.1.0'
}
```

Expand Down Expand Up @@ -99,7 +99,7 @@ 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.0.0`, FirebaseUI has the following dependency versions:
As of version `4.1.0`, FirebaseUI has the following dependency versions:

| Library | Version |
|----------------------|--------------------------------|
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@
<activity
android:name=".auth.SignedInActivity"
android:label="@string/title_auth_activity" />
<activity
android:name=".auth.AnonymousUpgradeActivity"
android:label="@string/title_anonymous_upgrade"/>

<!-- Firestore demo -->
<activity
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/com/firebase/uidemo/ChooserActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import android.view.ViewGroup;
import android.widget.TextView;

import com.firebase.uidemo.auth.AnonymousUpgradeActivity;
import com.firebase.uidemo.auth.AuthUiActivity;
import com.firebase.uidemo.database.firestore.FirestoreChatActivity;
import com.firebase.uidemo.database.firestore.FirestorePagingActivity;
Expand Down Expand Up @@ -53,6 +54,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
private static class ActivityChooserAdapter extends RecyclerView.Adapter<ActivityStarterHolder> {
private static final Class[] CLASSES = new Class[]{
AuthUiActivity.class,
AnonymousUpgradeActivity.class,
FirestoreChatActivity.class,
FirestorePagingActivity.class,
RealtimeDbChatActivity.class,
Expand All @@ -61,6 +63,7 @@ private static class ActivityChooserAdapter extends RecyclerView.Adapter<Activit

private static final int[] DESCRIPTION_NAMES = new int[]{
R.string.title_auth_activity,
R.string.title_anonymous_upgrade,
R.string.title_firestore_activity,
R.string.title_firestore_paging_activity,
R.string.title_realtime_database_activity,
Expand All @@ -69,6 +72,7 @@ private static class ActivityChooserAdapter extends RecyclerView.Adapter<Activit

private static final int[] DESCRIPTION_IDS = new int[]{
R.string.desc_auth,
R.string.desc_anonymous_upgrade,
R.string.desc_firestore,
R.string.desc_firestore_paging,
R.string.desc_realtime_database,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
package com.firebase.uidemo.auth;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.firebase.ui.auth.AuthUI;
import com.firebase.ui.auth.ErrorCodes;
import com.firebase.ui.auth.IdpResponse;
import com.firebase.uidemo.R;
import com.firebase.uidemo.util.ConfigurationUtils;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class AnonymousUpgradeActivity extends AppCompatActivity {

private static final String TAG = "AccountLink";

private static final int RC_SIGN_IN = 123;

@BindView(R.id.status_text)
TextView mStatus;

@BindView(R.id.anon_sign_in)
Button mAnonSignInButton;

@BindView(R.id.begin_flow)
Button mLaunchUIButton;

@BindView(R.id.resolve_merge)
Button mResolveMergeButton;

@BindView(R.id.sign_out)
Button mSignOutButton;

private AuthCredential mPendingCredential;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_anonymous_upgrade);
ButterKnife.bind(this);
}

@OnClick(R.id.anon_sign_in)
public void signInAnonymously() {
FirebaseAuth.getInstance().signInAnonymously()
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
updateUI();

if (task.isSuccessful()) {
setStatus("Signed in anonymously as user "
+ getUserIdentifier(task.getResult().getUser()));
} else {
setStatus("Anonymous sign in failed.");
}
}
});
}

@OnClick(R.id.begin_flow)
public void startAuthUI() {
List<AuthUI.IdpConfig> providers = ConfigurationUtils.getConfiguredProviders(this);
Intent intent = AuthUI.getInstance().createSignInIntentBuilder()
.setLogo(R.drawable.firebase_auth_120dp)
.setAvailableProviders(providers)
.setIsSmartLockEnabled(false)
.enableAnonymousUsersAutoUpgrade()
.build();
startActivityForResult(intent, RC_SIGN_IN);
}

@OnClick(R.id.resolve_merge)
public void resolveMerge() {
if (mPendingCredential == null) {
Toast.makeText(this, "Nothing to resolve.", Toast.LENGTH_SHORT).show();
return;
}

// TODO: Show how to do good data moving

FirebaseAuth.getInstance().signInWithCredential(mPendingCredential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
mPendingCredential = null;
updateUI();

if (task.isSuccessful()) {
setStatus("Signed in as " + getUserIdentifier(task.getResult().getUser()));
} else {
Log.w(TAG, "Merge failed", task.getException());
setStatus("Failed to resolve merge conflict, see logs.");
}
}
});
}

@OnClick(R.id.sign_out)
public void signOut() {
AuthUI.getInstance().signOut(this)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
setStatus(null);
updateUI();
}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
IdpResponse response = IdpResponse.fromResultIntent(data);
if (response == null) {
// User pressed back button
return;
}
if (resultCode == RESULT_OK) {
setStatus("Signed in as " + getUserIdentifier(FirebaseAuth.getInstance().getCurrentUser()));
} else {
if (response.getError().getErrorCode() == ErrorCodes.ANONYMOUS_UPGRADE_MERGE_CONFLICT) {
setStatus("Merge conflict: user already exists.");
mResolveMergeButton.setEnabled(true);
mPendingCredential = response.getCredentialForLinking();
}
}

updateUI();
}
}

private void updateUI() {
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();

if (currentUser == null) {
// Not signed in
mAnonSignInButton.setEnabled(true);
mLaunchUIButton.setEnabled(false);
mResolveMergeButton.setEnabled(false);
mSignOutButton.setEnabled(false);
} else if (mPendingCredential == null && currentUser.isAnonymous()) {
// Anonymous user, waiting for linking
mAnonSignInButton.setEnabled(false);
mLaunchUIButton.setEnabled(true);
mResolveMergeButton.setEnabled(false);
mSignOutButton.setEnabled(true);
} else if (mPendingCredential == null && !currentUser.isAnonymous()) {
// Fully signed in
mAnonSignInButton.setEnabled(false);
mLaunchUIButton.setEnabled(false);
mResolveMergeButton.setEnabled(false);
mSignOutButton.setEnabled(true);
} else if (mPendingCredential != null) {
// Signed in anonymous, awaiting merge conflict
mAnonSignInButton.setEnabled(false);
mLaunchUIButton.setEnabled(false);
mResolveMergeButton.setEnabled(true);
mSignOutButton.setEnabled(true);
}
}

private void setStatus(String message) {
mStatus.setText(message);
}

private String getUserIdentifier(FirebaseUser user) {
if (user.isAnonymous()) {
return user.getUid();
} else if (!TextUtils.isEmpty(user.getEmail())) {
return user.getEmail();
} else if (!TextUtils.isEmpty(user.getPhoneNumber())) {
return user.getPhoneNumber();
} else {
return "unknown";
}
}
}
Loading

0 comments on commit 8bda799

Please sign in to comment.