Skip to content

Commit 225dffd

Browse files
SUPERCILEXsamtstern
authored andcommitted
Refactor chooseAccountActivity (#357)
1 parent edd3fe5 commit 225dffd

Some content is hidden

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

52 files changed

+1142
-1467
lines changed

app/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ dependencies {
4646
compile 'pub.devrel:easypermissions:0.2.1'
4747
compile 'com.jakewharton:butterknife:8.4.0'
4848
apt 'com.jakewharton:butterknife-compiler:8.4.0'
49+
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
50+
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
51+
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
4952
}
5053

5154
apply plugin: 'com.google.gms.google-services'

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
88

99
<application
10+
android:name=".auth.LeakCatcher"
1011
android:allowBackup="true"
1112
android:icon="@mipmap/ic_launcher"
1213
android:label="@string/app_name"

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

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
import android.widget.CompoundButton;
3030
import android.widget.CompoundButton.OnCheckedChangeListener;
3131
import android.widget.RadioButton;
32-
3332
import android.widget.TextView;
33+
3434
import com.firebase.ui.auth.AuthUI;
3535
import com.firebase.ui.auth.AuthUI.IdpConfig;
3636
import com.firebase.ui.auth.IdpResponse;
@@ -48,16 +48,9 @@
4848
import butterknife.OnClick;
4949

5050
public class AuthUiActivity extends AppCompatActivity {
51-
52-
private static final String TAG = "AuthUIActivity";
53-
5451
private static final String UNCHANGED_CONFIG_VALUE = "CHANGE-ME";
55-
56-
private static final String GOOGLE_TOS_URL =
57-
"https://www.google.com/policies/terms/";
58-
private static final String FIREBASE_TOS_URL =
59-
"https://www.firebase.com/terms/terms-of-service.html";
60-
52+
private static final String GOOGLE_TOS_URL = "https://www.google.com/policies/terms/";
53+
private static final String FIREBASE_TOS_URL = "https://www.firebase.com/terms/terms-of-service.html";
6154
private static final int RC_SIGN_IN = 100;
6255

6356
@BindView(R.id.default_theme)
@@ -178,7 +171,6 @@ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
178171
if (!isGoogleConfigured() || !isFacebookConfigured() || !isTwitterConfigured()) {
179172
showSnackbar(R.string.configuration_required);
180173
}
181-
182174
}
183175

184176
@OnClick(R.id.sign_in)
@@ -205,21 +197,6 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
205197
showSnackbar(R.string.unknown_response);
206198
}
207199

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-
223200
@MainThread
224201
private void handleSignInResponse(int resultCode, Intent data) {
225202
if (resultCode == RESULT_OK) {
@@ -241,6 +218,20 @@ private void handleSignInResponse(int resultCode, Intent data) {
241218
showSnackbar(R.string.unknown_sign_in_response);
242219
}
243220

221+
@MainThread
222+
private void setGoogleScopesEnabled(boolean enabled) {
223+
mGoogleScopesLabel.setEnabled(enabled);
224+
mGoogleScopeDriveFile.setEnabled(enabled);
225+
mGoogleScopeGames.setEnabled(enabled);
226+
}
227+
228+
@MainThread
229+
private void setFacebookScopesEnabled(boolean enabled) {
230+
mFacebookScopesLabel.setEnabled(enabled);
231+
mFacebookScopeFriends.setEnabled(enabled);
232+
mFacebookScopePhotos.setEnabled(enabled);
233+
}
234+
244235
@MainThread
245236
@StyleRes
246237
private int getSelectedTheme() {
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.firebase.uidemo.auth;
2+
3+
import android.app.Application;
4+
import android.content.Context;
5+
6+
import com.squareup.leakcanary.LeakCanary;
7+
import com.squareup.leakcanary.RefWatcher;
8+
9+
public class LeakCatcher extends Application {
10+
private RefWatcher mRefWatcher;
11+
12+
public static RefWatcher getRefWatcher(Context context) {
13+
return ((LeakCatcher) context.getApplicationContext()).mRefWatcher;
14+
}
15+
16+
@Override
17+
public void onCreate() {
18+
super.onCreate();
19+
if (LeakCanary.isInAnalyzerProcess(this)) {
20+
// This process is dedicated to LeakCanary for heap analysis.
21+
// You should not init your app in this process.
22+
return;
23+
}
24+
mRefWatcher = LeakCanary.install(this);
25+
}
26+
}

auth/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ dependencies {
3535
compile "com.google.android.gms:play-services-auth:$firebase_version"
3636

3737
compile 'com.facebook.android:facebook-android-sdk:4.17.0'
38-
compile("com.twitter.sdk.android:twitter:2.1.1@aar") { transitive = true }
38+
compile("com.twitter.sdk.android:twitter:2.2.0@aar") { transitive = true }
3939

4040
// The following libraries are needed to prevent incompatibilities with the facebook
4141
// library when updating com.android.support libraries:
@@ -44,7 +44,7 @@ dependencies {
4444

4545

4646
testCompile 'junit:junit:4.12'
47-
testCompile 'org.mockito:mockito-core:2.2.20'
47+
testCompile 'org.mockito:mockito-core:2.2.22'
4848
testCompile 'org.robolectric:robolectric:3.1.2'
4949
// See https://github.com/robolectric/robolectric/issues/1932#issuecomment-219796474
5050
testCompile 'org.khronos:opengl-api:gl1.1-android-2.1_r1'

auth/src/main/AndroidManifest.xml

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@
1616
android:value="@string/twitter_consumer_secret"/>
1717

1818
<activity
19-
android:name="com.firebase.ui.auth.ui.email.ConfirmRecoverPasswordActivity"
20-
android:label="@string/title_confirm_recover_password_activity"
19+
android:name=".KickoffActivity"
20+
android:label="@string/default_toolbar_title"
2121
android:exported="false"
22-
android:theme="@style/FirebaseUI.Dialog"/>
22+
android:theme="@style/Theme.AppCompat.NoActionBar"/>
2323

2424
<activity
2525
android:name=".ui.email.EmailHintContainerActivity"
2626
android:label="@string/default_toolbar_title"
2727
android:exported="false"
28-
android:theme="@style/FirebaseUI.Translucent"/>
28+
android:theme="@style/Theme.AppCompat.NoActionBar"/>
2929

3030
<activity
3131
android:name=".ui.email.RecoverPasswordActivity"
@@ -69,23 +69,11 @@
6969
android:exported="false"
7070
android:theme="@style/FirebaseUI"/>
7171

72-
<activity
73-
android:name=".ui.idp.IdpSignInContainerActivity"
74-
android:label="@string/default_toolbar_title"
75-
android:exported="false"
76-
android:theme="@style/FirebaseUI.Translucent"/>
77-
78-
<activity
79-
android:name=".ui.ChooseAccountActivity"
80-
android:label="@string/default_toolbar_title"
81-
android:exported="false"
82-
android:theme="@style/FirebaseUI.Translucent"/>
83-
8472
<activity
8573
android:name="com.facebook.FacebookActivity"
8674
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
8775
android:label="@string/app_name"
88-
android:theme="@style/FirebaseUI.Translucent"
76+
android:theme="@style/Theme.AppCompat.NoActionBar"
8977
tools:replace="android:theme"/>
9078

9179
<activity

auth/src/main/java/com/firebase/ui/auth/AuthUI.java

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package com.firebase.ui.auth;
1616

1717
import android.app.Activity;
18-
import android.content.Context;
1918
import android.content.Intent;
2019
import android.os.Parcel;
2120
import android.os.Parcelable;
@@ -27,13 +26,12 @@
2726

2827
import com.facebook.FacebookSdk;
2928
import com.facebook.login.LoginManager;
30-
import com.firebase.ui.auth.ui.ChooseAccountActivity;
3129
import com.firebase.ui.auth.ui.FlowParameters;
3230
import com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity;
3331
import com.firebase.ui.auth.util.CredentialsApiHelper;
3432
import com.firebase.ui.auth.util.GoogleApiClientTaskHelper;
3533
import com.firebase.ui.auth.util.Preconditions;
36-
import com.firebase.ui.auth.util.SmartLockUtil;
34+
import com.firebase.ui.auth.util.signincontainer.SmartLockBase;
3735
import com.google.android.gms.auth.api.Auth;
3836
import com.google.android.gms.auth.api.credentials.Credential;
3937
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
@@ -346,7 +344,7 @@ public Task<Void> delete(@NonNull Activity activity) {
346344
CredentialsApiHelper credentialHelper = CredentialsApiHelper.getInstance(gacHelper);
347345

348346
// Get all SmartLock credentials associated with the user
349-
List<Credential> credentials = SmartLockUtil.credentialsFromFirebaseUser(firebaseUser);
347+
List<Credential> credentials = SmartLockBase.credentialsFromFirebaseUser(firebaseUser);
350348

351349
// For each Credential in the list, create a task to delete it.
352350
List<Task<?>> credentialTasks = new ArrayList<>();
@@ -571,7 +569,8 @@ public SignInIntentBuilder setProviders(@NonNull List<IdpConfig> idpConfigs) {
571569
for (IdpConfig idpConfig : idpConfigs) {
572570
if (configuredProviders.contains(idpConfig.getProviderId())) {
573571
throw new IllegalArgumentException("Each provider can only be set once. "
574-
+ idpConfig.getProviderId() + " was set twice.");
572+
+ idpConfig.getProviderId()
573+
+ " was set twice.");
575574
}
576575
configuredProviders.add(idpConfig.getProviderId());
577576
mProviders.add(idpConfig);
@@ -613,24 +612,6 @@ public SignInIntentBuilder setIsSmartLockEnabled(boolean enabled) {
613612
return this;
614613
}
615614

616-
public Intent build() {
617-
Context context = mApp.getApplicationContext();
618-
return build(context);
619-
}
620-
621-
@VisibleForTesting
622-
public Intent build(Context context) {
623-
return ChooseAccountActivity.createIntent(
624-
context,
625-
new FlowParameters(
626-
mApp.getName(),
627-
new ArrayList<>(mProviders),
628-
mTheme,
629-
mLogo,
630-
mTosUrl,
631-
mIsSmartLockEnabled));
632-
}
633-
634615
private boolean isIdpAlreadyConfigured(@NonNull String providerId) {
635616
for (IdpConfig config : mProviders) {
636617
if (config.getProviderId().equals(providerId)) {
@@ -639,5 +620,19 @@ private boolean isIdpAlreadyConfigured(@NonNull String providerId) {
639620
}
640621
return false;
641622
}
623+
624+
public Intent build() {
625+
return KickoffActivity.createIntent(mApp.getApplicationContext(), getFlowParams());
626+
}
627+
628+
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
629+
public FlowParameters getFlowParams() {
630+
return new FlowParameters(mApp.getName(),
631+
new ArrayList<>(mProviders),
632+
mTheme,
633+
mLogo,
634+
mTosUrl,
635+
mIsSmartLockEnabled);
636+
}
642637
}
643638
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.firebase.ui.auth;
2+
3+
import android.content.Context;
4+
import android.content.Intent;
5+
import android.os.Bundle;
6+
7+
import com.firebase.ui.auth.ui.ActivityHelper;
8+
import com.firebase.ui.auth.ui.AppCompatBase;
9+
import com.firebase.ui.auth.ui.ExtraConstants;
10+
import com.firebase.ui.auth.ui.FlowParameters;
11+
import com.firebase.ui.auth.util.signincontainer.SignInDelegate;
12+
13+
public class KickoffActivity extends AppCompatBase {
14+
@Override
15+
protected void onCreate(Bundle savedInstance) {
16+
super.onCreate(savedInstance);
17+
if (savedInstance == null) {
18+
SignInDelegate.delegate(this, mActivityHelper.getFlowParams());
19+
}
20+
}
21+
22+
@Override
23+
public void onSaveInstanceState(Bundle outState) {
24+
// It doesn't matter what we put here, we just don't want outState to be empty
25+
outState.putBoolean(ExtraConstants.HAS_EXISTING_INSTANCE, true);
26+
super.onSaveInstanceState(outState);
27+
}
28+
29+
@Override
30+
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
31+
super.onActivityResult(requestCode, resultCode, data);
32+
SignInDelegate delegate = SignInDelegate.getInstance(this);
33+
if (delegate != null) {
34+
delegate.onActivityResult(requestCode, resultCode, data);
35+
}
36+
}
37+
38+
public static Intent createIntent(Context context, FlowParameters flowParams) {
39+
return ActivityHelper.createBaseIntent(context, KickoffActivity.class, flowParams);
40+
}
41+
}

auth/src/main/java/com/firebase/ui/auth/ui/AuthCredentialHelper.java renamed to auth/src/main/java/com/firebase/ui/auth/provider/AuthCredentialHelper.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,11 @@
1212
* limitations under the License.
1313
*/
1414

15-
package com.firebase.ui.auth.ui;
15+
package com.firebase.ui.auth.provider;
1616

1717
import android.support.annotation.Nullable;
1818

19-
import com.firebase.ui.auth.provider.FacebookProvider;
20-
import com.firebase.ui.auth.provider.GoogleProvider;
2119
import com.firebase.ui.auth.IdpResponse;
22-
import com.firebase.ui.auth.provider.TwitterProvider;
2320
import com.google.firebase.auth.AuthCredential;
2421
import com.google.firebase.auth.FacebookAuthProvider;
2522
import com.google.firebase.auth.GoogleAuthProvider;

auth/src/main/java/com/firebase/ui/auth/provider/GoogleProvider.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.firebase.ui.auth.AuthUI.IdpConfig;
3030
import com.firebase.ui.auth.IdpResponse;
3131
import com.firebase.ui.auth.R;
32+
import com.firebase.ui.auth.util.GoogleApiConstants;
3233
import com.google.android.gms.auth.api.Auth;
3334
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
3435
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
@@ -43,7 +44,6 @@ public class GoogleProvider implements
4344
IdpProvider, OnClickListener, GoogleApiClient.OnConnectionFailedListener {
4445

4546
private static final String TAG = "GoogleProvider";
46-
private static final int AUTO_MANAGE_ID = 1;
4747
private static final int RC_SIGN_IN = 20;
4848
private static final String ERROR_KEY = "error";
4949
private GoogleApiClient mGoogleApiClient;
@@ -56,12 +56,12 @@ public GoogleProvider(FragmentActivity activity, IdpConfig idpConfig) {
5656

5757
public GoogleProvider(FragmentActivity activity, IdpConfig idpConfig, @Nullable String email) {
5858
mActivity = activity;
59-
String mClientId = activity.getString(R.string.default_web_client_id);
59+
String clientId = activity.getString(R.string.default_web_client_id);
6060

6161
GoogleSignInOptions.Builder builder =
6262
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
6363
.requestEmail()
64-
.requestIdToken(mClientId);
64+
.requestIdToken(clientId);
6565

6666
if (activity.getResources().getIdentifier(
6767
"google_permissions", "array", activity.getPackageName()) != 0) {
@@ -80,7 +80,7 @@ public GoogleProvider(FragmentActivity activity, IdpConfig idpConfig, @Nullable
8080
}
8181

8282
mGoogleApiClient = new GoogleApiClient.Builder(activity)
83-
.enableAutoManage(activity, AUTO_MANAGE_ID, this)
83+
.enableAutoManage(activity, GoogleApiConstants.AUTO_MANAGE_ID0, this)
8484
.addApi(Auth.GOOGLE_SIGN_IN_API, builder.build())
8585
.build();
8686
}

0 commit comments

Comments
 (0)