Skip to content

Commit a045fb9

Browse files
authored
Merge pull request #1444 from firebase/version-4.2.0
Version 4.2.0
2 parents 0d1e22c + 780e744 commit a045fb9

File tree

182 files changed

+1031
-418
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

182 files changed

+1031
-418
lines changed

README.md

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,19 @@ libraries.
5050
```groovy
5151
dependencies {
5252
// FirebaseUI for Firebase Realtime Database
53-
implementation 'com.firebaseui:firebase-ui-database:4.1.0'
53+
implementation 'com.firebaseui:firebase-ui-database:4.2.0'
5454
5555
// FirebaseUI for Cloud Firestore
56-
implementation 'com.firebaseui:firebase-ui-firestore:4.1.0'
56+
implementation 'com.firebaseui:firebase-ui-firestore:4.2.0'
5757
5858
// FirebaseUI for Firebase Auth
59-
implementation 'com.firebaseui:firebase-ui-auth:4.1.0'
59+
implementation 'com.firebaseui:firebase-ui-auth:4.2.0'
60+
61+
// FirebaseUI for Firebase Auth (GitHub provider)
62+
implementation 'com.firebaseui:firebase-ui-auth-github:4.2.0'
6063
6164
// FirebaseUI for Cloud Storage
62-
implementation 'com.firebaseui:firebase-ui-storage:4.1.0'
65+
implementation 'com.firebaseui:firebase-ui-storage:4.2.0'
6366
}
6467
```
6568

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

105-
As of version `4.1.0`, FirebaseUI has the following dependency versions:
108+
As of version `4.2.0`, FirebaseUI has the following dependency versions:
106109

107110
| Library | Version |
108111
|----------------------|--------------------------------|
109-
| `firebase-auth` | 16.0.1 |
110-
| `play-services-auth` | 15.0.1 |
111-
| `firebase-database` | 16.0.1 |
112-
| `firebase-firestore` | 17.0.1 |
113-
| `firebase-storage` | 16.0.1 |
112+
| `firebase-auth` | 16.0.3 |
113+
| `play-services-auth` | 16.0.0 |
114+
| `firebase-database` | 16.0.2 |
115+
| `firebase-firestore` | 17.1.0 |
116+
| `firebase-storage` | 16.0.2 |
114117

115118
### Upgrading dependencies
116119

app/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ android {
77
}
88

99
buildTypes {
10-
getByName("release") {
10+
named("release").configure {
1111
// For the purposes of the sample, allow testing of a proguarded release build
1212
// using the debug key
1313
signingConfig = signingConfigs["debug"]
@@ -32,6 +32,7 @@ dependencies {
3232
implementation(Config.Libs.Support.multidex)
3333

3434
implementation(project(":auth"))
35+
implementation(project(":auth-github"))
3536
implementation(project(":firestore"))
3637
implementation(project(":database"))
3738
implementation(project(":storage"))
@@ -55,6 +56,7 @@ dependencies {
5556
implementation(Config.Libs.Misc.butterKnife)
5657
annotationProcessor(Config.Libs.Misc.butterKnifeCompiler)
5758
debugImplementation(Config.Libs.Misc.leakCanary)
59+
debugImplementation(Config.Libs.Misc.leakCanaryFragments)
5860
releaseImplementation(Config.Libs.Misc.leakCanaryNoop)
5961
testImplementation(Config.Libs.Misc.leakCanaryNoop)
6062
}
Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
package com.firebase.uidemo;
22

3-
import android.content.Context;
43
import android.support.multidex.MultiDexApplication;
54
import android.support.v7.app.AppCompatDelegate;
65

76
import com.squareup.leakcanary.LeakCanary;
8-
import com.squareup.leakcanary.RefWatcher;
97

108
public class FirebaseUIDemo extends MultiDexApplication {
11-
private RefWatcher mRefWatcher;
12-
139
static {
1410
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
1511
}
1612

17-
public static RefWatcher getRefWatcher(Context context) {
18-
return ((FirebaseUIDemo) context.getApplicationContext()).mRefWatcher;
19-
}
20-
2113
@Override
2214
public void onCreate() {
2315
super.onCreate();
@@ -26,6 +18,6 @@ public void onCreate() {
2618
// You should not init your app in this process.
2719
return;
2820
}
29-
mRefWatcher = LeakCanary.install(this);
21+
LeakCanary.install(this);
3022
}
3123
}

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

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.support.annotation.NonNull;
6+
import android.support.annotation.Nullable;
67
import android.support.v7.app.AppCompatActivity;
78
import android.text.TextUtils;
89
import android.util.Log;
@@ -52,7 +53,7 @@ public class AnonymousUpgradeActivity extends AppCompatActivity {
5253
private AuthCredential mPendingCredential;
5354

5455
@Override
55-
protected void onCreate(Bundle savedInstanceState) {
56+
protected void onCreate(@Nullable Bundle savedInstanceState) {
5657
super.onCreate(savedInstanceState);
5758
setContentView(R.layout.activity_anonymous_upgrade);
5859
ButterKnife.bind(this);
@@ -82,7 +83,6 @@ public void startAuthUI() {
8283
Intent intent = AuthUI.getInstance().createSignInIntentBuilder()
8384
.setLogo(R.drawable.firebase_auth_120dp)
8485
.setAvailableProviders(providers)
85-
.setIsSmartLockEnabled(false)
8686
.enableAnonymousUsersAutoUpgrade()
8787
.build();
8888
startActivityForResult(intent, RC_SIGN_IN);
@@ -127,7 +127,7 @@ public void onComplete(@NonNull Task<Void> task) {
127127
}
128128

129129
@Override
130-
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
130+
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
131131
super.onActivityResult(requestCode, resultCode, data);
132132
if (requestCode == RC_SIGN_IN) {
133133
IdpResponse response = IdpResponse.fromResultIntent(data);
@@ -137,12 +137,13 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
137137
}
138138
if (resultCode == RESULT_OK) {
139139
setStatus("Signed in as " + getUserIdentifier(FirebaseAuth.getInstance().getCurrentUser()));
140+
} else if (response.getError().getErrorCode() == ErrorCodes.ANONYMOUS_UPGRADE_MERGE_CONFLICT) {
141+
setStatus("Merge conflict: user already exists.");
142+
mResolveMergeButton.setEnabled(true);
143+
mPendingCredential = response.getCredentialForLinking();
140144
} else {
141-
if (response.getError().getErrorCode() == ErrorCodes.ANONYMOUS_UPGRADE_MERGE_CONFLICT) {
142-
setStatus("Merge conflict: user already exists.");
143-
mResolveMergeButton.setEnabled(true);
144-
mPendingCredential = response.getCredentialForLinking();
145-
}
145+
Toast.makeText(this, "Auth error, see logs", Toast.LENGTH_SHORT).show();
146+
Log.w(TAG, "Error: " + response.getError().getMessage(), response.getError());
146147
}
147148

148149
updateUI();

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public class AuthUiActivity extends AppCompatActivity {
7070
@BindView(R.id.github_provider) CheckBox mUseGitHubProvider;
7171
@BindView(R.id.email_provider) CheckBox mUseEmailProvider;
7272
@BindView(R.id.phone_provider) CheckBox mUsePhoneProvider;
73+
@BindView(R.id.anonymous_provider) CheckBox mUseAnonymousProvider;
7374

7475
@BindView(R.id.default_theme) RadioButton mDefaultTheme;
7576
@BindView(R.id.green_theme) RadioButton mGreenTheme;
@@ -103,7 +104,8 @@ public class AuthUiActivity extends AppCompatActivity {
103104
@BindView(R.id.allow_new_email_accounts) CheckBox mAllowNewEmailAccounts;
104105
@BindView(R.id.require_name) CheckBox mRequireName;
105106

106-
public static Intent createIntent(Context context) {
107+
@NonNull
108+
public static Intent createIntent(@NonNull Context context) {
107109
return new Intent(context, AuthUiActivity.class);
108110
}
109111

@@ -177,7 +179,7 @@ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
177179
}
178180

179181
@OnClick(R.id.sign_in)
180-
public void signIn(View view) {
182+
public void signIn() {
181183
startActivityForResult(
182184
AuthUI.getInstance().createSignInIntentBuilder()
183185
.setTheme(getSelectedTheme())
@@ -192,7 +194,7 @@ public void signIn(View view) {
192194
}
193195

194196
@OnClick(R.id.sign_in_silent)
195-
public void silentSignIn(View view) {
197+
public void silentSignIn() {
196198
AuthUI.getInstance().silentSignIn(this, getSelectedProviders())
197199
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
198200
@Override
@@ -207,7 +209,7 @@ public void onComplete(@NonNull Task<AuthResult> task) {
207209
}
208210

209211
@Override
210-
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
212+
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
211213
super.onActivityResult(requestCode, resultCode, data);
212214
if (requestCode == RC_SIGN_IN) {
213215
handleSignInResponse(resultCode, data);
@@ -224,8 +226,8 @@ protected void onResume() {
224226
}
225227
}
226228

227-
private void handleSignInResponse(int resultCode, Intent data) {
228-
final IdpResponse response = IdpResponse.fromResultIntent(data);
229+
private void handleSignInResponse(int resultCode, @Nullable Intent data) {
230+
IdpResponse response = IdpResponse.fromResultIntent(data);
229231

230232
// Successfully signed in
231233
if (resultCode == RESULT_OK) {
@@ -249,7 +251,7 @@ private void handleSignInResponse(int resultCode, Intent data) {
249251
}
250252
}
251253

252-
private void startSignedInActivity(IdpResponse response) {
254+
private void startSignedInActivity(@Nullable IdpResponse response) {
253255
startActivity(SignedInActivity.createIntent(this, response));
254256
}
255257

@@ -319,6 +321,10 @@ private List<IdpConfig> getSelectedProviders() {
319321
selectedProviders.add(new IdpConfig.PhoneBuilder().build());
320322
}
321323

324+
if (mUseAnonymousProvider.isChecked()) {
325+
selectedProviders.add(new IdpConfig.AnonymousBuilder().build());
326+
}
327+
322328
return selectedProviders;
323329
}
324330

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,10 @@ public class SignedInActivity extends AppCompatActivity {
6767
@BindView(R.id.user_enabled_providers) TextView mEnabledProviders;
6868
@BindView(R.id.user_is_new) TextView mIsNewUser;
6969

70-
public static Intent createIntent(Context context, IdpResponse idpResponse) {
70+
@NonNull
71+
public static Intent createIntent(@NonNull Context context, @Nullable IdpResponse response) {
7172
return new Intent().setClass(context, SignedInActivity.class)
72-
.putExtra(ExtraConstants.IDP_RESPONSE, idpResponse);
73+
.putExtra(ExtraConstants.IDP_RESPONSE, response);
7374
}
7475

7576
@Override
@@ -164,7 +165,7 @@ private void populateProfile(@Nullable IdpResponse response) {
164165

165166
List<String> providers = new ArrayList<>();
166167
if (user.getProviderData().isEmpty()) {
167-
providers.add("Anonymous");
168+
providers.add(getString(R.string.providers_anonymous));
168169
} else {
169170
for (UserInfo info : user.getProviderData()) {
170171
switch (info.getProviderId()) {
Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,32 @@
11
package com.firebase.uidemo.database;
22

3+
import android.support.annotation.NonNull;
4+
import android.support.annotation.Nullable;
5+
36
/**
47
* Common interface for chat messages, helps share code between RTDB and Firestore examples.
58
*/
69
public abstract class AbstractChat {
710

11+
@Nullable
812
public abstract String getName();
913

14+
public abstract void setName(@Nullable String name);
15+
16+
@Nullable
1017
public abstract String getMessage();
1118

19+
public abstract void setMessage(@Nullable String message);
20+
21+
@NonNull
1222
public abstract String getUid();
1323

24+
public abstract void setUid(@NonNull String uid);
25+
1426
@Override
15-
public abstract int hashCode();
27+
public abstract boolean equals(@Nullable Object obj);
1628

1729
@Override
18-
public abstract boolean equals(Object obj);
30+
public abstract int hashCode();
1931

2032
}

app/src/main/java/com/firebase/uidemo/database/ChatHolder.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import android.graphics.PorterDuff;
44
import android.graphics.drawable.GradientDrawable;
55
import android.graphics.drawable.RotateDrawable;
6+
import android.support.annotation.NonNull;
7+
import android.support.annotation.Nullable;
68
import android.support.v4.content.ContextCompat;
79
import android.support.v7.widget.RecyclerView;
810
import android.view.Gravity;
@@ -26,7 +28,7 @@ public class ChatHolder extends RecyclerView.ViewHolder {
2628
private final int mGreen300;
2729
private final int mGray300;
2830

29-
public ChatHolder(View itemView) {
31+
public ChatHolder(@NonNull View itemView) {
3032
super(itemView);
3133
mNameField = itemView.findViewById(R.id.name_text);
3234
mTextField = itemView.findViewById(R.id.message_text);
@@ -38,19 +40,19 @@ public ChatHolder(View itemView) {
3840
mGray300 = ContextCompat.getColor(itemView.getContext(), R.color.material_gray_300);
3941
}
4042

41-
public void bind(AbstractChat chat) {
43+
public void bind(@NonNull AbstractChat chat) {
4244
setName(chat.getName());
43-
setText(chat.getMessage());
45+
setMessage(chat.getMessage());
4446

4547
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
4648
setIsSender(currentUser != null && chat.getUid().equals(currentUser.getUid()));
4749
}
4850

49-
private void setName(String name) {
51+
private void setName(@Nullable String name) {
5052
mNameField.setText(name);
5153
}
5254

53-
private void setText(String text) {
55+
private void setMessage(@Nullable String text) {
5456
mTextField.setText(text);
5557
}
5658

0 commit comments

Comments
 (0)