Skip to content

Commit 756aa8f

Browse files
authored
Merge pull request #390 from firebase/version-1.0.0-dev
Version 1.0.0
2 parents 46e5499 + dcebaed commit 756aa8f

File tree

87 files changed

+3027
-1535
lines changed

Some content is hidden

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

87 files changed

+3027
-1535
lines changed

README.md

+5-4
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@ libraries.
2828
```groovy
2929
dependencies {
3030
// FirebaseUI Database only
31-
compile 'com.firebaseui:firebase-ui-database:0.6.2'
31+
compile 'com.firebaseui:firebase-ui-database:1.0.0'
3232
3333
// FirebaseUI Auth only
34-
compile 'com.firebaseui:firebase-ui-auth:0.6.2'
34+
compile 'com.firebaseui:firebase-ui-auth:1.0.0'
3535
3636
// FirebaseUI Storage only
37-
compile 'com.firebaseui:firebase-ui-storage:0.6.2'
37+
compile 'com.firebaseui:firebase-ui-storage:1.0.0'
3838
3939
// Single target that includes all FirebaseUI libraries above
40-
compile 'com.firebaseui:firebase-ui:0.6.2'
40+
compile 'com.firebaseui:firebase-ui:1.0.0'
4141
}
4242
```
4343

@@ -67,6 +67,7 @@ For convenience, here are some examples:
6767

6868
| FirebaseUI Version | Firebase/Play Services Version |
6969
|--------------------|--------------------------------|
70+
| 1.0.0 | 9.8.0 |
7071
| 0.6.2 | 9.8.0 |
7172
| 0.6.1 | 9.6.1 |
7273
| 0.6.0 | 9.6.0 |

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

+135-9
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,22 @@
2626
import android.view.View;
2727
import android.widget.Button;
2828
import android.widget.CheckBox;
29+
import android.widget.CompoundButton;
30+
import android.widget.CompoundButton.OnCheckedChangeListener;
2931
import android.widget.RadioButton;
3032

33+
import android.widget.TextView;
3134
import com.firebase.ui.auth.AuthUI;
35+
import com.firebase.ui.auth.AuthUI.IdpConfig;
36+
import com.firebase.ui.auth.IdpResponse;
37+
import com.firebase.ui.auth.ui.ResultCodes;
3238
import com.firebase.uidemo.R;
39+
import com.google.android.gms.common.Scopes;
3340
import com.google.firebase.auth.FirebaseAuth;
3441

3542
import java.util.ArrayList;
43+
import java.util.Arrays;
44+
import java.util.List;
3645

3746
import butterknife.BindView;
3847
import butterknife.ButterKnife;
@@ -60,6 +69,9 @@ public class AuthUiActivity extends AppCompatActivity {
6069
@BindView(R.id.purple_theme)
6170
RadioButton mUsePurpleTheme;
6271

72+
@BindView(R.id.dark_theme)
73+
RadioButton mUseDarkTheme;
74+
6375
@BindView(R.id.email_provider)
6476
CheckBox mUseEmailProvider;
6577

@@ -69,6 +81,9 @@ public class AuthUiActivity extends AppCompatActivity {
6981
@BindView(R.id.facebook_provider)
7082
CheckBox mUseFacebookProvider;
7183

84+
@BindView(R.id.twitter_provider)
85+
CheckBox mUseTwitterProvider;
86+
7287
@BindView(R.id.google_tos)
7388
RadioButton mUseGoogleTos;
7489

@@ -93,13 +108,31 @@ public class AuthUiActivity extends AppCompatActivity {
93108
@BindView(R.id.smartlock_enabled)
94109
CheckBox mEnableSmartLock;
95110

111+
@BindView(R.id.facebook_scopes_label)
112+
TextView mFacebookScopesLabel;
113+
114+
@BindView(R.id.facebook_scope_friends)
115+
CheckBox mFacebookScopeFriends;
116+
117+
@BindView(R.id.facebook_scope_photos)
118+
CheckBox mFacebookScopePhotos;
119+
120+
@BindView(R.id.google_scopes_label)
121+
TextView mGoogleScopesLabel;
122+
123+
@BindView(R.id.google_scope_drive_file)
124+
CheckBox mGoogleScopeDriveFile;
125+
126+
@BindView(R.id.google_scope_games)
127+
CheckBox mGoogleScopeGames;
128+
96129
@Override
97130
public void onCreate(Bundle savedInstanceState) {
98131
super.onCreate(savedInstanceState);
99132

100133
FirebaseAuth auth = FirebaseAuth.getInstance();
101134
if (auth.getCurrentUser() != null) {
102-
startActivity(SignedInActivity.createIntent(this));
135+
startActivity(SignedInActivity.createIntent(this, null));
103136
finish();
104137
}
105138

@@ -110,17 +143,42 @@ public void onCreate(Bundle savedInstanceState) {
110143
mUseGoogleProvider.setChecked(false);
111144
mUseGoogleProvider.setEnabled(false);
112145
mUseGoogleProvider.setText(R.string.google_label_missing_config);
146+
setGoogleScopesEnabled(false);
147+
} else {
148+
setGoogleScopesEnabled(mUseGoogleProvider.isChecked());
149+
mUseGoogleProvider.setOnCheckedChangeListener(new OnCheckedChangeListener() {
150+
@Override
151+
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
152+
setGoogleScopesEnabled(checked);
153+
}
154+
});
113155
}
114156

115157
if (!isFacebookConfigured()) {
116158
mUseFacebookProvider.setChecked(false);
117159
mUseFacebookProvider.setEnabled(false);
118160
mUseFacebookProvider.setText(R.string.facebook_label_missing_config);
161+
setFacebookScopesEnabled(false);
162+
} else {
163+
setFacebookScopesEnabled(mUseFacebookProvider.isChecked());
164+
mUseFacebookProvider.setOnCheckedChangeListener(new OnCheckedChangeListener() {
165+
@Override
166+
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
167+
setFacebookScopesEnabled(checked);
168+
}
169+
});
170+
}
171+
172+
if (!isTwitterConfigured()) {
173+
mUseTwitterProvider.setChecked(false);
174+
mUseTwitterProvider.setEnabled(false);
175+
mUseTwitterProvider.setText(R.string.twitter_label_missing_config);
119176
}
120177

121-
if (!isGoogleConfigured() || !isFacebookConfigured()) {
178+
if (!isGoogleConfigured() || !isFacebookConfigured() || !isTwitterConfigured()) {
122179
showSnackbar(R.string.configuration_required);
123180
}
181+
124182
}
125183

126184
@OnClick(R.id.sign_in)
@@ -147,10 +205,25 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
147205
showSnackbar(R.string.unknown_response);
148206
}
149207

208+
209+
@MainThread
210+
private void setGoogleScopesEnabled(boolean enabled) {
211+
mGoogleScopesLabel.setEnabled(enabled);
212+
mGoogleScopeDriveFile.setEnabled(enabled);
213+
mGoogleScopeGames.setEnabled(enabled);
214+
}
215+
216+
@MainThread
217+
private void setFacebookScopesEnabled(boolean enabled) {
218+
mFacebookScopesLabel.setEnabled(enabled);
219+
mFacebookScopeFriends.setEnabled(enabled);
220+
mFacebookScopePhotos.setEnabled(enabled);
221+
}
222+
150223
@MainThread
151224
private void handleSignInResponse(int resultCode, Intent data) {
152225
if (resultCode == RESULT_OK) {
153-
startActivity(SignedInActivity.createIntent(this));
226+
startActivity(SignedInActivity.createIntent(this, IdpResponse.fromResultIntent(data)));
154227
finish();
155228
return;
156229
}
@@ -160,6 +233,11 @@ private void handleSignInResponse(int resultCode, Intent data) {
160233
return;
161234
}
162235

236+
if (resultCode == ResultCodes.RESULT_NO_NETWORK) {
237+
showSnackbar(R.string.no_internet_connection);
238+
return;
239+
}
240+
163241
showSnackbar(R.string.unknown_sign_in_response);
164242
}
165243

@@ -174,6 +252,10 @@ private int getSelectedTheme() {
174252
return R.style.PurpleTheme;
175253
}
176254

255+
if (mUseDarkTheme.isChecked()) {
256+
return R.style.DarkTheme;
257+
}
258+
177259
return R.style.GreenTheme;
178260
}
179261

@@ -189,22 +271,32 @@ private int getSelectedLogo() {
189271
}
190272

191273
@MainThread
192-
private String[] getSelectedProviders() {
193-
ArrayList<String> selectedProviders = new ArrayList<>();
274+
private List<IdpConfig> getSelectedProviders() {
275+
List<IdpConfig> selectedProviders = new ArrayList<>();
194276

195277
if (mUseEmailProvider.isChecked()) {
196-
selectedProviders.add(AuthUI.EMAIL_PROVIDER);
278+
selectedProviders.add(new IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build());
197279
}
198280

199281
if (mUseFacebookProvider.isChecked()) {
200-
selectedProviders.add(AuthUI.FACEBOOK_PROVIDER);
282+
selectedProviders.add(
283+
new IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER)
284+
.setPermissions(getFacebookPermissions())
285+
.build());
201286
}
202287

203288
if (mUseGoogleProvider.isChecked()) {
204-
selectedProviders.add(AuthUI.GOOGLE_PROVIDER);
289+
selectedProviders.add(
290+
new IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER)
291+
.setPermissions(getGooglePermissions())
292+
.build());
293+
}
294+
295+
if (mUseTwitterProvider.isChecked()) {
296+
selectedProviders.add(new IdpConfig.Builder(AuthUI.TWITTER_PROVIDER).build());
205297
}
206298

207-
return selectedProviders.toArray(new String[selectedProviders.size()]);
299+
return selectedProviders;
208300
}
209301

210302
@MainThread
@@ -228,11 +320,45 @@ private boolean isFacebookConfigured() {
228320
getResources().getString(R.string.facebook_application_id));
229321
}
230322

323+
@MainThread
324+
private boolean isTwitterConfigured() {
325+
List<String> twitterConfigs = Arrays.asList(
326+
getResources().getString(R.string.twitter_consumer_key),
327+
getResources().getString(R.string.twitter_consumer_secret)
328+
);
329+
330+
return !twitterConfigs.contains(UNCHANGED_CONFIG_VALUE);
331+
}
332+
231333
@MainThread
232334
private void showSnackbar(@StringRes int errorMessageRes) {
233335
Snackbar.make(mRootView, errorMessageRes, Snackbar.LENGTH_LONG).show();
234336
}
235337

338+
@MainThread
339+
private List<String> getFacebookPermissions() {
340+
List<String> result = new ArrayList<>();
341+
if (mFacebookScopeFriends.isChecked()) {
342+
result.add("user_friends");
343+
}
344+
if (mFacebookScopePhotos.isChecked()) {
345+
result.add("user_photos");
346+
}
347+
return result;
348+
}
349+
350+
@MainThread
351+
private List<String> getGooglePermissions() {
352+
List<String> result = new ArrayList<>();
353+
if (mGoogleScopeGames.isChecked()) {
354+
result.add(Scopes.GAMES);
355+
}
356+
if (mGoogleScopeDriveFile.isChecked()) {
357+
result.add(Scopes.DRIVE_FILE);
358+
}
359+
return result;
360+
}
361+
236362
public static Intent createIntent(Context context) {
237363
Intent in = new Intent();
238364
in.setClass(context, AuthUiActivity.class);

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

+28-10
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,12 @@
2828
import android.view.View;
2929
import android.widget.ImageView;
3030
import android.widget.TextView;
31-
31+
import butterknife.BindView;
32+
import butterknife.ButterKnife;
33+
import butterknife.OnClick;
3234
import com.bumptech.glide.Glide;
3335
import com.firebase.ui.auth.AuthUI;
36+
import com.firebase.ui.auth.IdpResponse;
3437
import com.firebase.uidemo.R;
3538
import com.google.android.gms.tasks.OnCompleteListener;
3639
import com.google.android.gms.tasks.Task;
@@ -39,14 +42,10 @@
3942
import com.google.firebase.auth.FirebaseAuth;
4043
import com.google.firebase.auth.FirebaseUser;
4144
import com.google.firebase.auth.GoogleAuthProvider;
42-
4345
import java.util.Iterator;
4446

45-
import butterknife.BindView;
46-
import butterknife.ButterKnife;
47-
import butterknife.OnClick;
48-
4947
public class SignedInActivity extends AppCompatActivity {
48+
private static final String EXTRA_IDP_RESPONSE = "extra_idp_response";
5049

5150
@BindView(android.R.id.content)
5251
View mRootView;
@@ -77,6 +76,7 @@ public void onCreate(Bundle savedInstanceState) {
7776
setContentView(R.layout.signed_in_layout);
7877
ButterKnife.bind(this);
7978
populateProfile();
79+
populateIdpToken();
8080
}
8181

8282
@OnClick(R.id.sign_out)
@@ -114,9 +114,8 @@ public void onClick(DialogInterface dialogInterface, int i) {
114114
}
115115

116116
private void deleteAccount() {
117-
FirebaseAuth.getInstance()
118-
.getCurrentUser()
119-
.delete()
117+
AuthUI.getInstance()
118+
.delete(this)
120119
.addOnCompleteListener(new OnCompleteListener<Void>() {
121120
@Override
122121
public void onComplete(@NonNull Task<Void> task) {
@@ -174,15 +173,34 @@ private void populateProfile() {
174173
mEnabledProviders.setText(providerList);
175174
}
176175

176+
private void populateIdpToken() {
177+
IdpResponse idpResponse = getIntent().getParcelableExtra(EXTRA_IDP_RESPONSE);
178+
if (idpResponse != null) {
179+
String token = idpResponse.getIdpToken();
180+
String secret = idpResponse.getIdpSecret();
181+
if (token == null) {
182+
findViewById(R.id.idp_token_layout).setVisibility(View.GONE);
183+
} else {
184+
((TextView) findViewById(R.id.idp_token)).setText(token);
185+
}
186+
if (secret == null) {
187+
findViewById(R.id.idp_secret_layout).setVisibility(View.GONE);
188+
} else {
189+
((TextView) findViewById(R.id.idp_secret)).setText(secret);
190+
}
191+
}
192+
}
193+
177194
@MainThread
178195
private void showSnackbar(@StringRes int errorMessageRes) {
179196
Snackbar.make(mRootView, errorMessageRes, Snackbar.LENGTH_LONG)
180197
.show();
181198
}
182199

183-
public static Intent createIntent(Context context) {
200+
public static Intent createIntent(Context context, IdpResponse idpResponse) {
184201
Intent in = new Intent();
185202
in.setClass(context, SignedInActivity.class);
203+
in.putExtra(EXTRA_IDP_RESPONSE, idpResponse);
186204
return in;
187205
}
188206
}

0 commit comments

Comments
 (0)