@@ -67,13 +67,14 @@ public class AuthUiActivity extends AppCompatActivity {
6767 @ BindView (R .id .google_provider ) CheckBox mUseGoogleProvider ;
6868 @ BindView (R .id .facebook_provider ) CheckBox mUseFacebookProvider ;
6969 @ BindView (R .id .twitter_provider ) CheckBox mUseTwitterProvider ;
70+ @ BindView (R .id .github_provider ) CheckBox mUseGitHubProvider ;
7071 @ BindView (R .id .email_provider ) CheckBox mUseEmailProvider ;
7172 @ BindView (R .id .phone_provider ) CheckBox mUsePhoneProvider ;
7273
73- @ BindView (R .id .default_theme ) RadioButton mUseDefaultTheme ;
74- @ BindView (R .id .green_theme ) RadioButton mUseGreenTheme ;
75- @ BindView (R .id .purple_theme ) RadioButton mUsePurpleTheme ;
76- @ BindView (R .id .dark_theme ) RadioButton mUseDarkTheme ;
74+ @ BindView (R .id .default_theme ) RadioButton mDefaultTheme ;
75+ @ BindView (R .id .green_theme ) RadioButton mGreenTheme ;
76+ @ BindView (R .id .purple_theme ) RadioButton mPurpleTheme ;
77+ @ BindView (R .id .dark_theme ) RadioButton mDarkTheme ;
7778
7879 @ BindView (R .id .firebase_logo ) RadioButton mFirebaseLogo ;
7980 @ BindView (R .id .google_logo ) RadioButton mGoogleLogo ;
@@ -85,13 +86,17 @@ public class AuthUiActivity extends AppCompatActivity {
8586 @ BindView (R .id .google_privacy ) RadioButton mUseGooglePrivacyPolicy ;
8687 @ BindView (R .id .firebase_privacy ) RadioButton mUseFirebasePrivacyPolicy ;
8788
88- @ BindView (R .id .google_scopes_header ) TextView mGoogleScopesLabel ;
89+ @ BindView (R .id .google_scopes_header ) TextView mGoogleScopesHeader ;
8990 @ BindView (R .id .google_scope_drive_file ) CheckBox mGoogleScopeDriveFile ;
9091 @ BindView (R .id .google_scope_youtube_data ) CheckBox mGoogleScopeYoutubeData ;
9192
92- @ BindView (R .id .facebook_permissions_header ) TextView mFacebookScopesLabel ;
93- @ BindView (R .id .facebook_permission_friends ) CheckBox mFacebookScopeFriends ;
94- @ BindView (R .id .facebook_permission_photos ) CheckBox mFacebookScopePhotos ;
93+ @ BindView (R .id .facebook_permissions_header ) TextView mFacebookPermissionsHeader ;
94+ @ BindView (R .id .facebook_permission_friends ) CheckBox mFacebookPermissionFriends ;
95+ @ BindView (R .id .facebook_permission_photos ) CheckBox mFacebookPermissionPhotos ;
96+
97+ @ BindView (R .id .github_permissions_header ) TextView mGitHubPermissionsHeader ;
98+ @ BindView (R .id .github_permission_repo ) CheckBox mGitHubPermissionRepo ;
99+ @ BindView (R .id .github_permission_gist ) CheckBox mGitHubPermissionGist ;
95100
96101 @ BindView (R .id .credential_selector_enabled ) CheckBox mEnableCredentialSelector ;
97102 @ BindView (R .id .hint_selector_enabled ) CheckBox mEnableHintSelector ;
@@ -127,13 +132,13 @@ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
127132 mUseFacebookProvider .setChecked (false );
128133 mUseFacebookProvider .setEnabled (false );
129134 mUseFacebookProvider .setText (R .string .facebook_label_missing_config );
130- setFacebookScopesEnabled (false );
135+ setFacebookPermissionsEnabled (false );
131136 } else {
132- setFacebookScopesEnabled (mUseFacebookProvider .isChecked ());
137+ setFacebookPermissionsEnabled (mUseFacebookProvider .isChecked ());
133138 mUseFacebookProvider .setOnCheckedChangeListener (new OnCheckedChangeListener () {
134139 @ Override
135140 public void onCheckedChanged (CompoundButton compoundButton , boolean checked ) {
136- setFacebookScopesEnabled (checked );
141+ setFacebookPermissionsEnabled (checked );
137142 }
138143 });
139144 }
@@ -144,12 +149,28 @@ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
144149 mUseTwitterProvider .setText (R .string .twitter_label_missing_config );
145150 }
146151
147- if (isGoogleMisconfigured () || isFacebookMisconfigured () || isTwitterMisconfigured ()) {
152+ if (isGitHubMisconfigured ()) {
153+ mUseGitHubProvider .setChecked (false );
154+ mUseGitHubProvider .setEnabled (false );
155+ mUseGitHubProvider .setText (R .string .github_label_missing_config );
156+ setGitHubPermissionsEnabled (false );
157+ } else {
158+ setGitHubPermissionsEnabled (mUseGitHubProvider .isChecked ());
159+ mUseGitHubProvider .setOnCheckedChangeListener (new OnCheckedChangeListener () {
160+ @ Override
161+ public void onCheckedChanged (CompoundButton compoundButton , boolean checked ) {
162+ setGitHubPermissionsEnabled (checked );
163+ }
164+ });
165+ }
166+
167+ if (isGoogleMisconfigured () || isFacebookMisconfigured ()
168+ || isTwitterMisconfigured () || isGitHubMisconfigured ()) {
148169 showSnackbar (R .string .configuration_required );
149170 }
150171
151172 if (AppCompatDelegate .getDefaultNightMode () == AppCompatDelegate .MODE_NIGHT_YES ) {
152- mUseDarkTheme .setChecked (true );
173+ mDarkTheme .setChecked (true );
153174 }
154175 }
155176
@@ -232,19 +253,19 @@ private void startSignedInActivity(IdpResponse response) {
232253
233254 @ OnClick ({R .id .default_theme , R .id .purple_theme , R .id .green_theme , R .id .dark_theme })
234255 public void toggleDarkTheme () {
235- int mode = mUseDarkTheme .isChecked () ?
256+ int mode = mDarkTheme .isChecked () ?
236257 AppCompatDelegate .MODE_NIGHT_YES : AppCompatDelegate .MODE_NIGHT_AUTO ;
237258 AppCompatDelegate .setDefaultNightMode (mode );
238259 getDelegate ().setLocalNightMode (mode );
239260 }
240261
241262 @ StyleRes
242263 private int getSelectedTheme () {
243- if (mUseGreenTheme .isChecked ()) {
264+ if (mGreenTheme .isChecked ()) {
244265 return R .style .GreenTheme ;
245266 }
246267
247- if (mUsePurpleTheme .isChecked ()) {
268+ if (mPurpleTheme .isChecked ()) {
248269 return R .style .PurpleTheme ;
249270 }
250271
@@ -279,6 +300,12 @@ private List<IdpConfig> getSelectedProviders() {
279300 selectedProviders .add (new IdpConfig .TwitterBuilder ().build ());
280301 }
281302
303+ if (mUseGitHubProvider .isChecked ()) {
304+ selectedProviders .add (new IdpConfig .GitHubBuilder ()
305+ .setPermissions (getGitHubPermissions ())
306+ .build ());
307+ }
308+
282309 if (mUseEmailProvider .isChecked ()) {
283310 selectedProviders .add (new IdpConfig .EmailBuilder ()
284311 .setRequireName (mRequireName .isChecked ())
@@ -326,16 +353,32 @@ private boolean isTwitterMisconfigured() {
326353 return twitterConfigs .contains (AuthUI .UNCONFIGURED_CONFIG_VALUE );
327354 }
328355
356+ private boolean isGitHubMisconfigured () {
357+ List <String > gitHubConfigs = Arrays .asList (
358+ getString (R .string .firebase_web_host ),
359+ getString (R .string .github_client_id ),
360+ getString (R .string .github_client_secret )
361+ );
362+
363+ return gitHubConfigs .contains (AuthUI .UNCONFIGURED_CONFIG_VALUE );
364+ }
365+
329366 private void setGoogleScopesEnabled (boolean enabled ) {
330- mGoogleScopesLabel .setEnabled (enabled );
367+ mGoogleScopesHeader .setEnabled (enabled );
331368 mGoogleScopeDriveFile .setEnabled (enabled );
332369 mGoogleScopeYoutubeData .setEnabled (enabled );
333370 }
334371
335- private void setFacebookScopesEnabled (boolean enabled ) {
336- mFacebookScopesLabel .setEnabled (enabled );
337- mFacebookScopeFriends .setEnabled (enabled );
338- mFacebookScopePhotos .setEnabled (enabled );
372+ private void setFacebookPermissionsEnabled (boolean enabled ) {
373+ mFacebookPermissionsHeader .setEnabled (enabled );
374+ mFacebookPermissionFriends .setEnabled (enabled );
375+ mFacebookPermissionPhotos .setEnabled (enabled );
376+ }
377+
378+ private void setGitHubPermissionsEnabled (boolean enabled ) {
379+ mGitHubPermissionsHeader .setEnabled (enabled );
380+ mGitHubPermissionRepo .setEnabled (enabled );
381+ mGitHubPermissionGist .setEnabled (enabled );
339382 }
340383
341384 private List <String > getGoogleScopes () {
@@ -351,15 +394,26 @@ private List<String> getGoogleScopes() {
351394
352395 private List <String > getFacebookPermissions () {
353396 List <String > result = new ArrayList <>();
354- if (mFacebookScopeFriends .isChecked ()) {
397+ if (mFacebookPermissionFriends .isChecked ()) {
355398 result .add ("user_friends" );
356399 }
357- if (mFacebookScopePhotos .isChecked ()) {
400+ if (mFacebookPermissionPhotos .isChecked ()) {
358401 result .add ("user_photos" );
359402 }
360403 return result ;
361404 }
362405
406+ private List <String > getGitHubPermissions () {
407+ List <String > result = new ArrayList <>();
408+ if (mGitHubPermissionRepo .isChecked ()) {
409+ result .add ("repo" );
410+ }
411+ if (mGitHubPermissionGist .isChecked ()) {
412+ result .add ("gist" );
413+ }
414+ return result ;
415+ }
416+
363417 private void showSnackbar (@ StringRes int errorMessageRes ) {
364418 Snackbar .make (mRootView , errorMessageRes , Snackbar .LENGTH_LONG ).show ();
365419 }
0 commit comments