26
26
import android .view .View ;
27
27
import android .widget .Button ;
28
28
import android .widget .CheckBox ;
29
+ import android .widget .CompoundButton ;
30
+ import android .widget .CompoundButton .OnCheckedChangeListener ;
29
31
import android .widget .RadioButton ;
30
32
33
+ import android .widget .TextView ;
31
34
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 ;
32
38
import com .firebase .uidemo .R ;
39
+ import com .google .android .gms .common .Scopes ;
33
40
import com .google .firebase .auth .FirebaseAuth ;
34
41
35
42
import java .util .ArrayList ;
43
+ import java .util .Arrays ;
44
+ import java .util .List ;
36
45
37
46
import butterknife .BindView ;
38
47
import butterknife .ButterKnife ;
@@ -60,6 +69,9 @@ public class AuthUiActivity extends AppCompatActivity {
60
69
@ BindView (R .id .purple_theme )
61
70
RadioButton mUsePurpleTheme ;
62
71
72
+ @ BindView (R .id .dark_theme )
73
+ RadioButton mUseDarkTheme ;
74
+
63
75
@ BindView (R .id .email_provider )
64
76
CheckBox mUseEmailProvider ;
65
77
@@ -69,6 +81,9 @@ public class AuthUiActivity extends AppCompatActivity {
69
81
@ BindView (R .id .facebook_provider )
70
82
CheckBox mUseFacebookProvider ;
71
83
84
+ @ BindView (R .id .twitter_provider )
85
+ CheckBox mUseTwitterProvider ;
86
+
72
87
@ BindView (R .id .google_tos )
73
88
RadioButton mUseGoogleTos ;
74
89
@@ -93,13 +108,31 @@ public class AuthUiActivity extends AppCompatActivity {
93
108
@ BindView (R .id .smartlock_enabled )
94
109
CheckBox mEnableSmartLock ;
95
110
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
+
96
129
@ Override
97
130
public void onCreate (Bundle savedInstanceState ) {
98
131
super .onCreate (savedInstanceState );
99
132
100
133
FirebaseAuth auth = FirebaseAuth .getInstance ();
101
134
if (auth .getCurrentUser () != null ) {
102
- startActivity (SignedInActivity .createIntent (this ));
135
+ startActivity (SignedInActivity .createIntent (this , null ));
103
136
finish ();
104
137
}
105
138
@@ -110,17 +143,42 @@ public void onCreate(Bundle savedInstanceState) {
110
143
mUseGoogleProvider .setChecked (false );
111
144
mUseGoogleProvider .setEnabled (false );
112
145
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
+ });
113
155
}
114
156
115
157
if (!isFacebookConfigured ()) {
116
158
mUseFacebookProvider .setChecked (false );
117
159
mUseFacebookProvider .setEnabled (false );
118
160
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 );
119
176
}
120
177
121
- if (!isGoogleConfigured () || !isFacebookConfigured ()) {
178
+ if (!isGoogleConfigured () || !isFacebookConfigured () || ! isTwitterConfigured () ) {
122
179
showSnackbar (R .string .configuration_required );
123
180
}
181
+
124
182
}
125
183
126
184
@ OnClick (R .id .sign_in )
@@ -147,10 +205,25 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
147
205
showSnackbar (R .string .unknown_response );
148
206
}
149
207
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
+
150
223
@ MainThread
151
224
private void handleSignInResponse (int resultCode , Intent data ) {
152
225
if (resultCode == RESULT_OK ) {
153
- startActivity (SignedInActivity .createIntent (this ));
226
+ startActivity (SignedInActivity .createIntent (this , IdpResponse . fromResultIntent ( data ) ));
154
227
finish ();
155
228
return ;
156
229
}
@@ -160,6 +233,11 @@ private void handleSignInResponse(int resultCode, Intent data) {
160
233
return ;
161
234
}
162
235
236
+ if (resultCode == ResultCodes .RESULT_NO_NETWORK ) {
237
+ showSnackbar (R .string .no_internet_connection );
238
+ return ;
239
+ }
240
+
163
241
showSnackbar (R .string .unknown_sign_in_response );
164
242
}
165
243
@@ -174,6 +252,10 @@ private int getSelectedTheme() {
174
252
return R .style .PurpleTheme ;
175
253
}
176
254
255
+ if (mUseDarkTheme .isChecked ()) {
256
+ return R .style .DarkTheme ;
257
+ }
258
+
177
259
return R .style .GreenTheme ;
178
260
}
179
261
@@ -189,22 +271,32 @@ private int getSelectedLogo() {
189
271
}
190
272
191
273
@ MainThread
192
- private String [] getSelectedProviders () {
193
- ArrayList < String > selectedProviders = new ArrayList <>();
274
+ private List < IdpConfig > getSelectedProviders () {
275
+ List < IdpConfig > selectedProviders = new ArrayList <>();
194
276
195
277
if (mUseEmailProvider .isChecked ()) {
196
- selectedProviders .add (AuthUI .EMAIL_PROVIDER );
278
+ selectedProviders .add (new IdpConfig . Builder ( AuthUI .EMAIL_PROVIDER ). build () );
197
279
}
198
280
199
281
if (mUseFacebookProvider .isChecked ()) {
200
- selectedProviders .add (AuthUI .FACEBOOK_PROVIDER );
282
+ selectedProviders .add (
283
+ new IdpConfig .Builder (AuthUI .FACEBOOK_PROVIDER )
284
+ .setPermissions (getFacebookPermissions ())
285
+ .build ());
201
286
}
202
287
203
288
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 ());
205
297
}
206
298
207
- return selectedProviders . toArray ( new String [ selectedProviders . size ()]) ;
299
+ return selectedProviders ;
208
300
}
209
301
210
302
@ MainThread
@@ -228,11 +320,45 @@ private boolean isFacebookConfigured() {
228
320
getResources ().getString (R .string .facebook_application_id ));
229
321
}
230
322
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
+
231
333
@ MainThread
232
334
private void showSnackbar (@ StringRes int errorMessageRes ) {
233
335
Snackbar .make (mRootView , errorMessageRes , Snackbar .LENGTH_LONG ).show ();
234
336
}
235
337
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
+
236
362
public static Intent createIntent (Context context ) {
237
363
Intent in = new Intent ();
238
364
in .setClass (context , AuthUiActivity .class );
0 commit comments