Skip to content

Commit 7e9aa5b

Browse files
Migrated Media Package to View Binding (commons-app#5601)
* Migrated Media Detail Fragment to View Binding * Migrated ZoomableActivity and PagerFragment * Improved Java doc * Improved Java doc
1 parent 8df0055 commit 7e9aa5b

File tree

7 files changed

+178
-284
lines changed

7 files changed

+178
-284
lines changed

app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java

Lines changed: 110 additions & 183 deletions
Large diffs are not rendered by default.

app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
import androidx.fragment.app.FragmentManager;
2525
import androidx.fragment.app.FragmentStatePagerAdapter;
2626
import androidx.viewpager.widget.ViewPager;
27-
import butterknife.BindView;
28-
import butterknife.ButterKnife;
2927
import com.google.android.material.snackbar.Snackbar;
3028
import fr.free.nrw.commons.CommonsApplication;
3129
import fr.free.nrw.commons.Media;
@@ -36,6 +34,7 @@
3634
import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao;
3735
import fr.free.nrw.commons.contributions.Contribution;
3836
import fr.free.nrw.commons.contributions.MainActivity;
37+
import fr.free.nrw.commons.databinding.FragmentMediaDetailPagerBinding;
3938
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
4039
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
4140
import fr.free.nrw.commons.profile.ProfileActivity;
@@ -66,7 +65,8 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
6665

6766
private static CompositeDisposable compositeDisposable = new CompositeDisposable();
6867

69-
@BindView(R.id.mediaDetailsPager) ViewPager pager;
68+
private FragmentMediaDetailPagerBinding binding;
69+
7070
private boolean editable;
7171
private boolean isFeaturedImage;
7272
private boolean isWikipediaButtonDisplayed;
@@ -114,9 +114,8 @@ public MediaDetailPagerFragment() {
114114
public View onCreateView(LayoutInflater inflater,
115115
ViewGroup container,
116116
Bundle savedInstanceState) {
117-
View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false);
118-
ButterKnife.bind(this,view);
119-
pager.addOnPageChangeListener(this);
117+
binding = FragmentMediaDetailPagerBinding.inflate(inflater, container, false);
118+
binding.mediaDetailsPager.addOnPageChangeListener(this);
120119

121120
adapter = new MediaDetailAdapter(getChildFragmentManager());
122121

@@ -139,22 +138,22 @@ else if (getActivity() instanceof MainActivity) {
139138
((MainActivity)getActivity()).hideTabs();
140139
}
141140

142-
pager.setAdapter(adapter);
141+
binding.mediaDetailsPager.setAdapter(adapter);
143142

144143
if (savedInstanceState != null) {
145144
final int pageNumber = savedInstanceState.getInt("current-page");
146-
pager.setCurrentItem(pageNumber, false);
145+
binding.mediaDetailsPager.setCurrentItem(pageNumber, false);
147146
getActivity().invalidateOptionsMenu();
148147
}
149148
adapter.notifyDataSetChanged();
150149

151-
return view;
150+
return binding.getRoot();
152151
}
153152

154153
@Override
155154
public void onSaveInstanceState(Bundle outState) {
156155
super.onSaveInstanceState(outState);
157-
outState.putInt("current-page", pager.getCurrentItem());
156+
outState.putInt("current-page", binding.mediaDetailsPager.getCurrentItem());
158157
outState.putBoolean("editable", editable);
159158
outState.putBoolean("isFeaturedImage", isFeaturedImage);
160159
}
@@ -165,8 +164,8 @@ public void onCreate(Bundle savedInstanceState) {
165164
if (savedInstanceState != null) {
166165
editable = savedInstanceState.getBoolean("editable", false);
167166
isFeaturedImage = savedInstanceState.getBoolean("isFeaturedImage", false);
168-
if(null != pager) {
169-
pager.setCurrentItem(savedInstanceState.getInt("current-page", 0), false);
167+
if(null != binding.mediaDetailsPager) {
168+
binding.mediaDetailsPager.setCurrentItem(savedInstanceState.getInt("current-page", 0), false);
170169
}
171170
}
172171
setHasOptionsMenu(true);
@@ -196,7 +195,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
196195
return true;
197196
}
198197

199-
Media m = provider.getMediaAtPosition(pager.getCurrentItem());
198+
Media m = provider.getMediaAtPosition(binding.mediaDetailsPager.getCurrentItem());
200199
MediaDetailFragment mediaDetailFragment = this.adapter.getCurrentMediaDetailFragment();
201200
switch (item.getItemId()) {
202201
case R.id.menu_bookmark_current_image:
@@ -367,7 +366,7 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
367366
if (!editable) { // Disable menu options for editable views
368367
menu.clear(); // see http://stackoverflow.com/a/8495697/17865
369368
inflater.inflate(R.menu.fragment_image_detail, menu);
370-
if (pager != null) {
369+
if (binding.mediaDetailsPager != null) {
371370
MediaDetailProvider provider = getMediaDetailProvider();
372371
if(provider == null) {
373372
return;
@@ -376,7 +375,7 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
376375
if (isFromFeaturedRootFragment) {
377376
position = this.position;
378377
} else {
379-
position = pager.getCurrentItem();
378+
position = binding.mediaDetailsPager.getCurrentItem();
380379
}
381380

382381
Media m = provider.getMediaAtPosition(position);
@@ -473,13 +472,13 @@ private void handleBackgroundColorMenuItems(Callable<Bitmap> getBitmap, Menu men
473472
private void updateBookmarkState(MenuItem item) {
474473
boolean isBookmarked = bookmarkDao.findBookmark(bookmark);
475474
if(isBookmarked) {
476-
if(removedItems.contains(pager.getCurrentItem())) {
477-
removedItems.remove(new Integer(pager.getCurrentItem()));
475+
if(removedItems.contains(binding.mediaDetailsPager.getCurrentItem())) {
476+
removedItems.remove(new Integer(binding.mediaDetailsPager.getCurrentItem()));
478477
}
479478
}
480479
else {
481-
if(!removedItems.contains(pager.getCurrentItem())) {
482-
removedItems.add(pager.getCurrentItem());
480+
if(!removedItems.contains(binding.mediaDetailsPager.getCurrentItem())) {
481+
removedItems.add(binding.mediaDetailsPager.getCurrentItem());
483482
}
484483
}
485484
int icon = isBookmarked ? R.drawable.menu_ic_round_star_filled_24px : R.drawable.menu_ic_round_star_border_24px;
@@ -506,7 +505,7 @@ private void setViewPagerCurrentItem(int position) {
506505
public void run() {
507506
while(currentItemNotShown[0]){
508507
if(adapter.getCount() > position){
509-
pager.setCurrentItem(position, false);
508+
binding.mediaDetailsPager.setCurrentItem(position, false);
510509
currentItemNotShown[0] = false;
511510
}
512511
}
@@ -589,7 +588,7 @@ public Fragment getItem(int i) {
589588
Timber.d("Skipping getItem. Returning as activity is destroyed!");
590589
return null;
591590
}
592-
pager.postDelayed(() -> getActivity().invalidateOptionsMenu(), 5);
591+
binding.mediaDetailsPager.postDelayed(() -> getActivity().invalidateOptionsMenu(), 5);
593592
}
594593
if (isFromFeaturedRootFragment) {
595594
return MediaDetailFragment.forMedia(position+i, editable, isFeaturedImage, isWikipediaButtonDisplayed);

app/src/main/java/fr/free/nrw/commons/media/ZoomableActivity.kt

Lines changed: 25 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ import android.widget.TextView
1515
import android.widget.Toast
1616
import androidx.core.content.ContextCompat
1717
import androidx.lifecycle.ViewModelProvider
18-
import butterknife.BindView
19-
import butterknife.ButterKnife
2018
import com.facebook.drawee.backends.pipeline.Fresco
2119
import com.facebook.drawee.controller.BaseControllerListener
2220
import com.facebook.drawee.controller.ControllerListener
@@ -38,6 +36,7 @@ import fr.free.nrw.commons.customselector.model.Image
3836
import fr.free.nrw.commons.customselector.model.Result
3937
import fr.free.nrw.commons.customselector.ui.selector.CustomSelectorViewModel
4038
import fr.free.nrw.commons.customselector.ui.selector.CustomSelectorViewModelFactory
39+
import fr.free.nrw.commons.databinding.ActivityZoomableBinding
4140
import fr.free.nrw.commons.media.zoomControllers.zoomable.DoubleTapGestureListener
4241
import fr.free.nrw.commons.media.zoomControllers.zoomable.ZoomableDraweeView
4342
import fr.free.nrw.commons.theme.BaseActivity
@@ -67,20 +66,10 @@ class ZoomableActivity : BaseActivity() {
6766
*/
6867
private lateinit var prefs: SharedPreferences
6968

70-
@JvmField
71-
@BindView(R.id.zoomable)
72-
var photo: ZoomableDraweeView? = null
69+
private lateinit var binding: ActivityZoomableBinding
7370

7471
var photoBackgroundColor: Int? = null
7572

76-
@JvmField
77-
@BindView(R.id.zoom_progress_bar)
78-
var spinner: ProgressBar? = null
79-
80-
@JvmField
81-
@BindView(R.id.selection_count)
82-
var selectedCount: TextView? = null
83-
8473
/**
8574
* Total images present in folder
8675
*/
@@ -145,8 +134,8 @@ class ZoomableActivity : BaseActivity() {
145134

146135
override fun onCreate(savedInstanceState: Bundle?) {
147136
super.onCreate(savedInstanceState)
148-
setContentView(R.layout.activity_zoomable)
149-
ButterKnife.bind(this)
137+
binding = ActivityZoomableBinding.inflate(layoutInflater)
138+
setContentView(binding.root)
150139

151140
prefs = applicationContext.getSharedPreferences(
152141
ImageHelper.CUSTOM_SELECTOR_PREFERENCE_KEY,
@@ -221,7 +210,7 @@ class ZoomableActivity : BaseActivity() {
221210
onSwipe()
222211
}
223212
}
224-
spinner?.let {
213+
binding.zoomProgressBar?.let {
225214
it.visibility = if (result.status is CallbackStatus.FETCHING) View.VISIBLE else View.GONE
226215
}
227216
}
@@ -236,7 +225,7 @@ class ZoomableActivity : BaseActivity() {
236225
sharedPreferences.getBoolean(ImageHelper.SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true)
237226

238227
if (!images.isNullOrEmpty()) {
239-
photo!!.setOnTouchListener(object : OnSwipeTouchListener(this) {
228+
binding.zoomable!!.setOnTouchListener(object : OnSwipeTouchListener(this) {
240229
// Swipe left to view next image in the folder. (if available)
241230
override fun onSwipeLeft() {
242231
super.onSwipeLeft()
@@ -271,7 +260,7 @@ class ZoomableActivity : BaseActivity() {
271260
* Handles down swipe action
272261
*/
273262
private fun onDownSwiped() {
274-
if (photo?.zoomableController?.isIdentity == false)
263+
if (binding.zoomable?.zoomableController?.isIdentity == false)
275264
return
276265

277266
scope.launch {
@@ -333,7 +322,7 @@ class ZoomableActivity : BaseActivity() {
333322
* Handles up swipe action
334323
*/
335324
private fun onUpSwiped() {
336-
if (photo?.zoomableController?.isIdentity == false)
325+
if (binding.zoomable?.zoomableController?.isIdentity == false)
337326
return
338327

339328
scope.launch {
@@ -398,7 +387,7 @@ class ZoomableActivity : BaseActivity() {
398387
* Handles right swipe action
399388
*/
400389
private fun onRightSwiped(showAlreadyActionedImages: Boolean) {
401-
if (photo?.zoomableController?.isIdentity == false)
390+
if (binding.zoomable?.zoomableController?.isIdentity == false)
402391
return
403392

404393
if (showAlreadyActionedImages) {
@@ -432,7 +421,7 @@ class ZoomableActivity : BaseActivity() {
432421
* Handles left swipe action
433422
*/
434423
private fun onLeftSwiped(showAlreadyActionedImages: Boolean) {
435-
if (photo?.zoomableController?.isIdentity == false)
424+
if (binding.zoomable?.zoomableController?.isIdentity == false)
436425
return
437426

438427
if (showAlreadyActionedImages) {
@@ -558,15 +547,15 @@ class ZoomableActivity : BaseActivity() {
558547
* Unselect item UI
559548
*/
560549
private fun itemUnselected() {
561-
selectedCount!!.visibility = View.INVISIBLE
550+
binding.selectionCount.visibility = View.INVISIBLE
562551
}
563552

564553
/**
565554
* Select item UI
566555
*/
567556
private fun itemSelected(i: Int) {
568-
selectedCount!!.visibility = View.VISIBLE
569-
selectedCount!!.text = i.toString()
557+
binding.selectionCount.visibility = View.VISIBLE
558+
binding.selectionCount.text = i.toString()
570559
}
571560

572561
/**
@@ -586,19 +575,19 @@ class ZoomableActivity : BaseActivity() {
586575
object : BaseControllerListener<ImageInfo?>() {
587576
override fun onSubmit(id: String, callerContext: Any) {
588577
// Sometimes the spinner doesn't appear when rapidly switching between images, this fixes that
589-
spinner!!.visibility = View.VISIBLE
578+
binding.zoomProgressBar.visibility = View.VISIBLE
590579
}
591580

592581
override fun onIntermediateImageSet(id: String, imageInfo: ImageInfo?) {
593-
spinner!!.visibility = View.GONE
582+
binding.zoomProgressBar.visibility = View.GONE
594583
}
595584

596585
override fun onFinalImageSet(
597586
id: String,
598587
imageInfo: ImageInfo?,
599588
animatable: Animatable?
600589
) {
601-
spinner!!.visibility = View.GONE
590+
binding.zoomProgressBar.visibility = View.GONE
602591
}
603592
}
604593

@@ -609,18 +598,20 @@ class ZoomableActivity : BaseActivity() {
609598
.setProgressBarImage(ProgressBarDrawable())
610599
.setProgressBarImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
611600
.build()
612-
photo!!.hierarchy = hierarchy
613-
photo!!.setAllowTouchInterceptionWhileZoomed(true)
614-
photo!!.setIsLongpressEnabled(false)
615-
photo!!.setTapListener(DoubleTapGestureListener(photo))
601+
with(binding.zoomable!!) {
602+
setHierarchy(hierarchy)
603+
setAllowTouchInterceptionWhileZoomed(true)
604+
setIsLongpressEnabled(false)
605+
setTapListener(DoubleTapGestureListener(this))
606+
}
616607
val controller: DraweeController = Fresco.newDraweeControllerBuilder()
617608
.setUri(imageUri)
618609
.setControllerListener(loadingListener)
619610
.build()
620-
photo!!.controller = controller
611+
binding.zoomable!!.controller = controller
621612

622613
if (photoBackgroundColor != null) {
623-
photo!!.setBackgroundColor(photoBackgroundColor!!)
614+
binding.zoomable!!.setBackgroundColor(photoBackgroundColor!!)
624615
}
625616

626617
if (!images.isNullOrEmpty()) {
@@ -684,4 +675,4 @@ class ZoomableActivity : BaseActivity() {
684675

685676
const val PHOTO_BACKGROUND_COLOR = "photo_background_color"
686677
}
687-
}
678+
}

app/src/main/res/layout/fragment_media_detail.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
android:weightSum="10">
2121

2222
<include
23+
android:id="@+id/show_captions_binding"
2324
layout="@layout/show_captions_descriptions" />
2425
</LinearLayout>
2526

app/src/main/res/values-yue-hant/error.xml

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)