Skip to content

Commit 75e34a5

Browse files
authored
Merge pull request #4762 from Isira-Seneviratne/Use_view_binding_in_activities
Use view binding in activities.
2 parents a919a03 + d6121c8 commit 75e34a5

14 files changed

Lines changed: 263 additions & 322 deletions

app/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ android {
8585
sourceSets {
8686
androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
8787
}
88+
89+
buildFeatures {
90+
viewBinding true
91+
}
8892
}
8993

9094
ext {

app/src/main/java/org/schabi/newpipe/MainActivity.java

Lines changed: 81 additions & 87 deletions
Large diffs are not rendered by default.

app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
import androidx.annotation.RequiresApi;
1919
import androidx.appcompat.app.ActionBar;
2020
import androidx.appcompat.app.AppCompatActivity;
21-
import androidx.appcompat.widget.Toolbar;
2221
import androidx.core.app.NavUtils;
2322
import androidx.preference.PreferenceManager;
2423

24+
import org.schabi.newpipe.databinding.ActivityRecaptchaBinding;
2525
import org.schabi.newpipe.util.ThemeHelper;
2626

2727
import java.io.UnsupportedEncodingException;
@@ -62,30 +62,28 @@ public static String sanitizeRecaptchaUrl(@Nullable final String url) {
6262
}
6363
}
6464

65-
66-
private WebView webView;
65+
private ActivityRecaptchaBinding recaptchaBinding;
6766
private String foundCookies = "";
6867

6968
@Override
7069
protected void onCreate(final Bundle savedInstanceState) {
7170
ThemeHelper.setTheme(this);
7271
super.onCreate(savedInstanceState);
73-
setContentView(R.layout.activity_recaptcha);
74-
final Toolbar toolbar = findViewById(R.id.toolbar);
75-
setSupportActionBar(toolbar);
72+
73+
recaptchaBinding = ActivityRecaptchaBinding.inflate(getLayoutInflater());
74+
setContentView(recaptchaBinding.getRoot());
75+
setSupportActionBar(recaptchaBinding.toolbar);
7676

7777
final String url = sanitizeRecaptchaUrl(getIntent().getStringExtra(RECAPTCHA_URL_EXTRA));
7878
// set return to Cancel by default
7979
setResult(RESULT_CANCELED);
8080

81-
webView = findViewById(R.id.reCaptchaWebView);
82-
8381
// enable Javascript
84-
final WebSettings webSettings = webView.getSettings();
82+
final WebSettings webSettings = recaptchaBinding.reCaptchaWebView.getSettings();
8583
webSettings.setJavaScriptEnabled(true);
8684
webSettings.setUserAgentString(DownloaderImpl.USER_AGENT);
8785

88-
webView.setWebViewClient(new WebViewClient() {
86+
recaptchaBinding.reCaptchaWebView.setWebViewClient(new WebViewClient() {
8987
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
9088
@Override
9189
public boolean shouldOverrideUrlLoading(final WebView view,
@@ -117,16 +115,16 @@ public void onPageFinished(final WebView view, final String url) {
117115
});
118116

119117
// cleaning cache, history and cookies from webView
120-
webView.clearCache(true);
121-
webView.clearHistory();
122-
final android.webkit.CookieManager cookieManager = CookieManager.getInstance();
118+
recaptchaBinding.reCaptchaWebView.clearCache(true);
119+
recaptchaBinding.reCaptchaWebView.clearHistory();
120+
final CookieManager cookieManager = CookieManager.getInstance();
123121
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
124122
cookieManager.removeAllCookies(value -> { });
125123
} else {
126124
cookieManager.removeAllCookie();
127125
}
128126

129-
webView.loadUrl(url);
127+
recaptchaBinding.reCaptchaWebView.loadUrl(url);
130128
}
131129

132130
@Override
@@ -158,7 +156,8 @@ public boolean onOptionsItemSelected(final MenuItem item) {
158156
}
159157

160158
private void saveCookiesAndFinish() {
161-
handleCookiesFromUrl(webView.getUrl()); // try to get cookies of unclosed page
159+
// try to get cookies of unclosed page
160+
handleCookiesFromUrl(recaptchaBinding.reCaptchaWebView.getUrl());
162161
if (MainActivity.DEBUG) {
163162
Log.d(TAG, "saveCookiesAndFinish: foundCookies=" + foundCookies);
164163
}

app/src/main/java/org/schabi/newpipe/RouterActivity.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import android.view.View;
1515
import android.view.ViewGroup;
1616
import android.widget.Button;
17-
import android.widget.LinearLayout;
1817
import android.widget.RadioButton;
1918
import android.widget.RadioGroup;
2019
import android.widget.Toast;
@@ -30,6 +29,8 @@
3029
import androidx.fragment.app.FragmentManager;
3130
import androidx.preference.PreferenceManager;
3231

32+
import org.schabi.newpipe.databinding.ListRadioIconItemBinding;
33+
import org.schabi.newpipe.databinding.SingleChoiceDialogViewBinding;
3334
import org.schabi.newpipe.download.DownloadDialog;
3435
import org.schabi.newpipe.extractor.Info;
3536
import org.schabi.newpipe.extractor.NewPipe;
@@ -267,9 +268,8 @@ private void showDialog(final List<AdapterChoiceItem> choices) {
267268
final Context themeWrapperContext = getThemeWrapperContext();
268269

269270
final LayoutInflater inflater = LayoutInflater.from(themeWrapperContext);
270-
final LinearLayout rootLayout = (LinearLayout) inflater.inflate(
271-
R.layout.single_choice_dialog_view, null, false);
272-
final RadioGroup radioGroup = rootLayout.findViewById(android.R.id.list);
271+
final RadioGroup radioGroup = SingleChoiceDialogViewBinding.inflate(getLayoutInflater())
272+
.list;
273273

274274
final DialogInterface.OnClickListener dialogButtonsClickListener = (dialog, which) -> {
275275
final int indexOfChild = radioGroup.indexOfChild(
@@ -322,8 +322,7 @@ private void showDialog(final List<AdapterChoiceItem> choices) {
322322

323323
int id = 12345;
324324
for (final AdapterChoiceItem item : choices) {
325-
final RadioButton radioButton
326-
= (RadioButton) inflater.inflate(R.layout.list_radio_icon_item, null);
325+
final RadioButton radioButton = ListRadioIconItemBinding.inflate(inflater).getRoot();
327326
radioButton.setText(item.description);
328327
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(radioButton,
329328
AppCompatResources.getDrawable(getApplicationContext(), item.icon),

app/src/main/java/org/schabi/newpipe/about/AboutActivity.java

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,19 @@
66
import android.view.MenuItem;
77
import android.view.View;
88
import android.view.ViewGroup;
9-
import android.widget.TextView;
109

1110
import androidx.annotation.NonNull;
1211
import androidx.appcompat.app.AppCompatActivity;
13-
import androidx.appcompat.widget.Toolbar;
1412
import androidx.fragment.app.Fragment;
1513
import androidx.fragment.app.FragmentActivity;
16-
import androidx.recyclerview.widget.RecyclerView;
1714
import androidx.viewpager2.adapter.FragmentStateAdapter;
18-
import androidx.viewpager2.widget.ViewPager2;
1915

20-
import com.google.android.material.tabs.TabLayout;
2116
import com.google.android.material.tabs.TabLayoutMediator;
2217

2318
import org.schabi.newpipe.BuildConfig;
2419
import org.schabi.newpipe.R;
20+
import org.schabi.newpipe.databinding.ActivityAboutBinding;
21+
import org.schabi.newpipe.databinding.FragmentAboutBinding;
2522
import org.schabi.newpipe.util.ThemeHelper;
2623

2724
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
@@ -68,40 +65,27 @@ public class AboutActivity extends AppCompatActivity {
6865
private static final int POS_ABOUT = 0;
6966
private static final int POS_LICENSE = 1;
7067
private static final int TOTAL_COUNT = 2;
71-
/**
72-
* The {@link RecyclerView.Adapter} that will provide
73-
* fragments for each of the sections. We use a
74-
* {@link FragmentStateAdapter} derivative, which will keep every
75-
* loaded fragment in memory.
76-
*/
77-
private SectionsPagerAdapter mSectionsPagerAdapter;
78-
/**
79-
* The {@link ViewPager2} that will host the section contents.
80-
*/
81-
private ViewPager2 mViewPager;
8268

8369
@Override
8470
protected void onCreate(final Bundle savedInstanceState) {
8571
assureCorrectAppLanguage(this);
8672
super.onCreate(savedInstanceState);
8773
ThemeHelper.setTheme(this);
88-
this.setTitle(getString(R.string.title_activity_about));
74+
setTitle(getString(R.string.title_activity_about));
8975

90-
setContentView(R.layout.activity_about);
76+
final ActivityAboutBinding aboutBinding = ActivityAboutBinding.inflate(getLayoutInflater());
77+
setContentView(aboutBinding.getRoot());
9178

92-
final Toolbar toolbar = findViewById(R.id.toolbar);
93-
setSupportActionBar(toolbar);
79+
setSupportActionBar(aboutBinding.toolbar);
9480
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
9581
// Create the adapter that will return a fragment for each of the three
9682
// primary sections of the activity.
97-
mSectionsPagerAdapter = new SectionsPagerAdapter(this);
83+
final SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(this);
9884

9985
// Set up the ViewPager with the sections adapter.
100-
mViewPager = findViewById(R.id.container);
101-
mViewPager.setAdapter(mSectionsPagerAdapter);
86+
aboutBinding.container.setAdapter(mSectionsPagerAdapter);
10287

103-
final TabLayout tabLayout = findViewById(R.id.tabs);
104-
new TabLayoutMediator(tabLayout, mViewPager, (tab, position) -> {
88+
new TabLayoutMediator(aboutBinding.tabs, aboutBinding.container, (tab, position) -> {
10589
switch (position) {
10690
default:
10791
case POS_ABOUT:
@@ -143,33 +127,28 @@ public static AboutFragment newInstance() {
143127
}
144128

145129
@Override
146-
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
130+
public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup container,
147131
final Bundle savedInstanceState) {
148-
final View rootView = inflater.inflate(R.layout.fragment_about, container, false);
149-
final Context context = this.getContext();
132+
final FragmentAboutBinding aboutBinding =
133+
FragmentAboutBinding.inflate(inflater, container, false);
134+
final Context context = getContext();
150135

151-
final TextView version = rootView.findViewById(R.id.app_version);
152-
version.setText(BuildConfig.VERSION_NAME);
136+
aboutBinding.appVersion.setText(BuildConfig.VERSION_NAME);
153137

154-
final View githubLink = rootView.findViewById(R.id.github_link);
155-
githubLink.setOnClickListener(nv ->
138+
aboutBinding.githubLink.setOnClickListener(nv ->
156139
openUrlInBrowser(context, context.getString(R.string.github_url)));
157140

158-
final View donationLink = rootView.findViewById(R.id.donation_link);
159-
donationLink.setOnClickListener(v ->
141+
aboutBinding.donationLink.setOnClickListener(v ->
160142
openUrlInBrowser(context, context.getString(R.string.donation_url)));
161143

162-
final View websiteLink = rootView.findViewById(R.id.website_link);
163-
websiteLink.setOnClickListener(nv ->
144+
aboutBinding.websiteLink.setOnClickListener(nv ->
164145
openUrlInBrowser(context, context.getString(R.string.website_url)));
165146

166-
final View privacyPolicyLink = rootView.findViewById(R.id.privacy_policy_link);
167-
privacyPolicyLink.setOnClickListener(v ->
147+
aboutBinding.privacyPolicyLink.setOnClickListener(v ->
168148
openUrlInBrowser(context, context.getString(R.string.privacy_policy_url)));
169149

170-
return rootView;
150+
return aboutBinding.getRoot();
171151
}
172-
173152
}
174153

175154
/**

app/src/main/java/org/schabi/newpipe/download/DownloadActivity.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99

1010
import androidx.appcompat.app.ActionBar;
1111
import androidx.appcompat.app.AppCompatActivity;
12-
import androidx.appcompat.widget.Toolbar;
1312
import androidx.fragment.app.FragmentTransaction;
1413

1514
import org.schabi.newpipe.R;
15+
import org.schabi.newpipe.databinding.ActivityDownloaderBinding;
1616
import org.schabi.newpipe.util.DeviceUtils;
1717
import org.schabi.newpipe.util.ThemeHelper;
1818
import org.schabi.newpipe.views.FocusOverlayView;
@@ -35,11 +35,14 @@ protected void onCreate(final Bundle savedInstanceState) {
3535

3636
assureCorrectAppLanguage(this);
3737
ThemeHelper.setTheme(this);
38+
3839
super.onCreate(savedInstanceState);
39-
setContentView(R.layout.activity_downloader);
4040

41-
final Toolbar toolbar = findViewById(R.id.toolbar);
42-
setSupportActionBar(toolbar);
41+
final ActivityDownloaderBinding downloaderBinding =
42+
ActivityDownloaderBinding.inflate(getLayoutInflater());
43+
setContentView(downloaderBinding.getRoot());
44+
45+
setSupportActionBar(downloaderBinding.toolbarLayout.toolbar);
4346

4447
final ActionBar actionBar = getSupportActionBar();
4548
if (actionBar != null) {

0 commit comments

Comments
 (0)