Skip to content

Commit 3d578ef

Browse files
authored
refactor(app): replace ButterKnife with View Binding (#1930)
1 parent 4455f41 commit 3d578ef

21 files changed

+294
-364
lines changed

app/build.gradle.kts

+6-5
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ android {
4040
lintOptions {
4141
// Common lint options across all modules
4242
disable(
43-
"ObsoleteLintCustomCheck", // ButterKnife will fix this in v9.0
4443
"IconExpectedSize",
4544
"InvalidPackage", // Firestore uses GRPC which makes lint mad
4645
"NewerVersionAvailable", "GradleDependency", // For reproducible builds
@@ -58,8 +57,12 @@ android {
5857
}
5958

6059
compileOptions {
61-
setSourceCompatibility(JavaVersion.VERSION_1_8)
62-
setTargetCompatibility(JavaVersion.VERSION_1_8)
60+
sourceCompatibility = JavaVersion.VERSION_1_8
61+
targetCompatibility = JavaVersion.VERSION_1_8
62+
}
63+
64+
buildFeatures {
65+
viewBinding = true
6366
}
6467
}
6568

@@ -87,9 +90,7 @@ dependencies {
8790
// They are used to make some aspects of the demo app implementation simpler for
8891
// demonstrative purposes, and you may find them useful in your own apps; YMMV.
8992
implementation(Config.Libs.Misc.permissions)
90-
implementation(Config.Libs.Misc.butterKnife)
9193
implementation(Config.Libs.Androidx.constraint)
92-
annotationProcessor(Config.Libs.Misc.butterKnifeCompiler)
9394
debugImplementation(Config.Libs.Misc.leakCanary)
9495
debugImplementation(Config.Libs.Misc.leakCanaryFragments)
9596
releaseImplementation(Config.Libs.Misc.leakCanaryNoop)

app/src/main/java/com/firebase/uidemo/ChooserActivity.java

+7-10
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,17 @@
2929
import com.firebase.uidemo.database.firestore.FirestorePagingActivity;
3030
import com.firebase.uidemo.database.realtime.FirebaseDbPagingActivity;
3131
import com.firebase.uidemo.database.realtime.RealtimeDbChatActivity;
32+
import com.firebase.uidemo.databinding.ActivityChooserBinding;
3233
import com.firebase.uidemo.storage.ImageActivity;
3334

3435
import androidx.annotation.Nullable;
3536
import androidx.annotation.StringRes;
3637
import androidx.appcompat.app.AppCompatActivity;
3738
import androidx.recyclerview.widget.LinearLayoutManager;
3839
import androidx.recyclerview.widget.RecyclerView;
39-
import butterknife.BindView;
40-
import butterknife.ButterKnife;
4140

4241
public class ChooserActivity extends AppCompatActivity {
43-
@BindView(R.id.activities)
44-
RecyclerView mActivities;
42+
private ActivityChooserBinding mBinding;
4543

4644
@Override
4745
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -55,13 +53,12 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
5553
finish();
5654
return;
5755
}
56+
mBinding = ActivityChooserBinding.inflate(getLayoutInflater());
57+
setContentView(mBinding.getRoot());
5858

59-
setContentView(R.layout.activity_chooser);
60-
ButterKnife.bind(this);
61-
62-
mActivities.setLayoutManager(new LinearLayoutManager(this));
63-
mActivities.setAdapter(new ActivityChooserAdapter());
64-
mActivities.setHasFixedSize(true);
59+
mBinding.activities.setLayoutManager(new LinearLayoutManager(this));
60+
mBinding.activities.setAdapter(new ActivityChooserAdapter());
61+
mBinding.activities.setHasFixedSize(true);
6562
}
6663

6764
private static class ActivityChooserAdapter

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

+51-43
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
import android.os.Bundle;
55
import android.text.TextUtils;
66
import android.util.Log;
7-
import android.widget.Button;
8-
import android.widget.TextView;
7+
import android.view.View;
98
import android.widget.Toast;
109

1110
import com.firebase.ui.auth.AuthUI;
1211
import com.firebase.ui.auth.ErrorCodes;
1312
import com.firebase.ui.auth.IdpResponse;
1413
import com.firebase.uidemo.R;
14+
import com.firebase.uidemo.databinding.ActivityAnonymousUpgradeBinding;
1515
import com.firebase.uidemo.util.ConfigurationUtils;
1616
import com.google.android.gms.tasks.OnCompleteListener;
1717
import com.google.android.gms.tasks.Task;
@@ -25,38 +25,22 @@
2525
import androidx.annotation.NonNull;
2626
import androidx.annotation.Nullable;
2727
import androidx.appcompat.app.AppCompatActivity;
28-
import butterknife.BindView;
29-
import butterknife.ButterKnife;
30-
import butterknife.OnClick;
3128

3229
public class AnonymousUpgradeActivity extends AppCompatActivity {
3330

3431
private static final String TAG = "AccountLink";
3532

3633
private static final int RC_SIGN_IN = 123;
3734

38-
@BindView(R.id.status_text)
39-
TextView mStatus;
40-
41-
@BindView(R.id.anon_sign_in)
42-
Button mAnonSignInButton;
43-
44-
@BindView(R.id.begin_flow)
45-
Button mLaunchUIButton;
46-
47-
@BindView(R.id.resolve_merge)
48-
Button mResolveMergeButton;
49-
50-
@BindView(R.id.sign_out)
51-
Button mSignOutButton;
35+
private ActivityAnonymousUpgradeBinding mBinding;
5236

5337
private AuthCredential mPendingCredential;
5438

5539
@Override
5640
protected void onCreate(@Nullable Bundle savedInstanceState) {
5741
super.onCreate(savedInstanceState);
58-
setContentView(R.layout.activity_anonymous_upgrade);
59-
ButterKnife.bind(this);
42+
mBinding = ActivityAnonymousUpgradeBinding.inflate(getLayoutInflater());
43+
setContentView(mBinding.getRoot());
6044

6145
updateUI();
6246

@@ -67,9 +51,36 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
6751
handleSignInResult(RC_SIGN_IN, ErrorCodes.ANONYMOUS_UPGRADE_MERGE_CONFLICT,
6852
getIntent());
6953
}
54+
55+
mBinding.anonSignIn.setOnClickListener(new View.OnClickListener() {
56+
@Override
57+
public void onClick(View view) {
58+
signInAnonymously();
59+
}
60+
});
61+
62+
mBinding.beginFlow.setOnClickListener(new View.OnClickListener() {
63+
@Override
64+
public void onClick(View view) {
65+
startAuthUI();
66+
}
67+
});
68+
69+
mBinding.resolveMerge.setOnClickListener(new View.OnClickListener() {
70+
@Override
71+
public void onClick(View view) {
72+
resolveMerge();
73+
}
74+
});
75+
76+
mBinding.signOut.setOnClickListener(new View.OnClickListener() {
77+
@Override
78+
public void onClick(View view) {
79+
signOut();
80+
}
81+
});
7082
}
7183

72-
@OnClick(R.id.anon_sign_in)
7384
public void signInAnonymously() {
7485
FirebaseAuth.getInstance().signInAnonymously()
7586
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@@ -87,7 +98,6 @@ public void onComplete(@NonNull Task<AuthResult> task) {
8798
});
8899
}
89100

90-
@OnClick(R.id.begin_flow)
91101
public void startAuthUI() {
92102
List<AuthUI.IdpConfig> providers = ConfigurationUtils.getConfiguredProviders(this);
93103
Intent intent = AuthUI.getInstance().createSignInIntentBuilder()
@@ -98,7 +108,6 @@ public void startAuthUI() {
98108
startActivityForResult(intent, RC_SIGN_IN);
99109
}
100110

101-
@OnClick(R.id.resolve_merge)
102111
public void resolveMerge() {
103112
if (mPendingCredential == null) {
104113
Toast.makeText(this, "Nothing to resolve.", Toast.LENGTH_SHORT).show();
@@ -125,7 +134,6 @@ public void onComplete(@NonNull Task<AuthResult> task) {
125134
});
126135
}
127136

128-
@OnClick(R.id.sign_out)
129137
public void signOut() {
130138
AuthUI.getInstance().signOut(this)
131139
.addOnCompleteListener(new OnCompleteListener<Void>() {
@@ -156,7 +164,7 @@ private void handleSignInResult(int requestCode, int resultCode, Intent data) {
156164
} else if (response.getError().getErrorCode() == ErrorCodes
157165
.ANONYMOUS_UPGRADE_MERGE_CONFLICT) {
158166
setStatus("Merge conflict: user already exists.");
159-
mResolveMergeButton.setEnabled(true);
167+
mBinding.resolveMerge.setEnabled(true);
160168
mPendingCredential = response.getCredentialForLinking();
161169
} else {
162170
Toast.makeText(this, "Auth error, see logs", Toast.LENGTH_SHORT).show();
@@ -172,33 +180,33 @@ private void updateUI() {
172180

173181
if (currentUser == null) {
174182
// Not signed in
175-
mAnonSignInButton.setEnabled(true);
176-
mLaunchUIButton.setEnabled(false);
177-
mResolveMergeButton.setEnabled(false);
178-
mSignOutButton.setEnabled(false);
183+
mBinding.anonSignIn.setEnabled(true);
184+
mBinding.beginFlow.setEnabled(false);
185+
mBinding.resolveMerge.setEnabled(false);
186+
mBinding.signOut.setEnabled(false);
179187
} else if (mPendingCredential == null && currentUser.isAnonymous()) {
180188
// Anonymous user, waiting for linking
181-
mAnonSignInButton.setEnabled(false);
182-
mLaunchUIButton.setEnabled(true);
183-
mResolveMergeButton.setEnabled(false);
184-
mSignOutButton.setEnabled(true);
189+
mBinding.anonSignIn.setEnabled(false);
190+
mBinding.beginFlow.setEnabled(true);
191+
mBinding.resolveMerge.setEnabled(false);
192+
mBinding.signOut.setEnabled(true);
185193
} else if (mPendingCredential == null && !currentUser.isAnonymous()) {
186194
// Fully signed in
187-
mAnonSignInButton.setEnabled(false);
188-
mLaunchUIButton.setEnabled(false);
189-
mResolveMergeButton.setEnabled(false);
190-
mSignOutButton.setEnabled(true);
195+
mBinding.anonSignIn.setEnabled(false);
196+
mBinding.beginFlow.setEnabled(false);
197+
mBinding.resolveMerge.setEnabled(false);
198+
mBinding.signOut.setEnabled(true);
191199
} else if (mPendingCredential != null) {
192200
// Signed in anonymous, awaiting merge conflict
193-
mAnonSignInButton.setEnabled(false);
194-
mLaunchUIButton.setEnabled(false);
195-
mResolveMergeButton.setEnabled(true);
196-
mSignOutButton.setEnabled(true);
201+
mBinding.anonSignIn.setEnabled(false);
202+
mBinding.beginFlow.setEnabled(false);
203+
mBinding.resolveMerge.setEnabled(true);
204+
mBinding.signOut.setEnabled(true);
197205
}
198206
}
199207

200208
private void setStatus(String message) {
201-
mStatus.setText(message);
209+
mBinding.statusText.setText(message);
202210
}
203211

204212
private String getUserIdentifier(FirebaseUser user) {

0 commit comments

Comments
 (0)