Skip to content

Commit cd212b7

Browse files
ashishkumar468Vivek Maskara
authored and
Vivek Maskara
committed
Feature/switch to butterknife (#1494)
* Implemented butterknife in MediaDetailFragment [issue #1491] * Implemented butterknife in MediaDetailPagerFragment [[issue #1491]] * post merge upstream master wip [[issue #1491]]
1 parent 1ae28e3 commit cd212b7

File tree

2 files changed

+114
-97
lines changed

2 files changed

+114
-97
lines changed

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

+109-95
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import android.os.Bundle;
1010
import android.support.annotation.Nullable;
1111
import android.text.Editable;
12+
import android.text.TextUtils;
1213
import android.text.TextWatcher;
1314
import android.util.TypedValue;
1415
import android.view.LayoutInflater;
@@ -22,6 +23,9 @@
2223
import android.widget.TextView;
2324
import android.widget.Toast;
2425

26+
import butterknife.BindView;
27+
import butterknife.ButterKnife;
28+
import butterknife.OnClick;
2529
import java.io.IOException;
2630
import java.text.SimpleDateFormat;
2731
import java.util.ArrayList;
@@ -45,7 +49,8 @@
4549
import fr.free.nrw.commons.ui.widget.CompatTextView;
4650
import timber.log.Timber;
4751

48-
import static android.view.View.*;
52+
import static android.view.View.GONE;
53+
import static android.view.View.VISIBLE;
4954
import static android.widget.Toast.LENGTH_SHORT;
5055

5156
public class MediaDetailFragment extends CommonsDaggerSupportFragment {
@@ -75,23 +80,37 @@ public static MediaDetailFragment forMedia(int index, boolean editable, boolean
7580
@Inject
7681
MediaWikiApi mwApi;
7782

78-
79-
private MediaWikiImageView image;
80-
private MediaDetailSpacer spacer;
8183
private int initialListTop = 0;
8284

83-
private TextView title;
84-
private TextView desc;
85-
private TextView author;
86-
private TextView license;
87-
private TextView coordinates;
88-
private TextView uploadedDate;
89-
private TextView seeMore;
90-
private LinearLayout nominatedforDeletion;
91-
private LinearLayout categoryContainer;
92-
private LinearLayout authorLayout;
93-
private Button delete;
94-
private ScrollView scrollView;
85+
@BindView(R.id.mediaDetailImage)
86+
MediaWikiImageView image;
87+
@BindView(R.id.mediaDetailSpacer)
88+
MediaDetailSpacer spacer;
89+
@BindView(R.id.mediaDetailTitle)
90+
TextView title;
91+
@BindView(R.id.mediaDetailDesc)
92+
TextView desc;
93+
@BindView(R.id.mediaDetailAuthor)
94+
TextView author;
95+
@BindView(R.id.mediaDetailLicense)
96+
TextView license;
97+
@BindView(R.id.mediaDetailCoordinates)
98+
TextView coordinates;
99+
@BindView(R.id.mediaDetailuploadeddate)
100+
TextView uploadedDate;
101+
@BindView(R.id.seeMore)
102+
TextView seeMore;
103+
@BindView(R.id.nominatedDeletionBanner)
104+
LinearLayout nominatedForDeletion;
105+
@BindView(R.id.mediaDetailCategoryContainer)
106+
LinearLayout categoryContainer;
107+
@BindView(R.id.authorLinearLayout)
108+
LinearLayout authorLayout;
109+
@BindView(R.id.nominateDeletion)
110+
Button delete;
111+
@BindView(R.id.mediaDetailScrollView)
112+
ScrollView scrollView;
113+
95114
private ArrayList<String> categoryNames;
96115
private boolean categoriesLoaded = false;
97116
private boolean categoriesPresent = false;
@@ -101,6 +120,9 @@ public static MediaDetailFragment forMedia(int index, boolean editable, boolean
101120
private AsyncTask<Void, Void, Boolean> detailFetchTask;
102121
private LicenseList licenseList;
103122

123+
//Had to make this class variable, to implement various onClicks, which access the media, also I fell why make separate variables when one can serve the purpose
124+
private Media media;
125+
104126
@Override
105127
public void onSaveInstanceState(Bundle outState) {
106128
super.onSaveInstanceState(outState);
@@ -137,22 +159,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
137159

138160
final View view = inflater.inflate(R.layout.fragment_media_detail, container, false);
139161

140-
image = (MediaWikiImageView) view.findViewById(R.id.mediaDetailImage);
141-
scrollView = (ScrollView) view.findViewById(R.id.mediaDetailScrollView);
142-
143-
// Detail consists of a list view with main pane in header view, plus category list.
144-
spacer = (MediaDetailSpacer) view.findViewById(R.id.mediaDetailSpacer);
145-
title = (TextView) view.findViewById(R.id.mediaDetailTitle);
146-
desc = (TextView) view.findViewById(R.id.mediaDetailDesc);
147-
author = (TextView) view.findViewById(R.id.mediaDetailAuthor);
148-
license = (TextView) view.findViewById(R.id.mediaDetailLicense);
149-
coordinates = (TextView) view.findViewById(R.id.mediaDetailCoordinates);
150-
uploadedDate = (TextView) view.findViewById(R.id.mediaDetailuploadeddate);
151-
seeMore = (TextView) view.findViewById(R.id.seeMore);
152-
nominatedforDeletion = (LinearLayout) view.findViewById(R.id.nominatedDeletionBanner);
153-
delete = (Button) view.findViewById(R.id.nominateDeletion);
154-
categoryContainer = (LinearLayout) view.findViewById(R.id.mediaDetailCategoryContainer);
155-
authorLayout = (LinearLayout) view.findViewById(R.id.authorLinearLayout);
162+
ButterKnife.bind(this,view);
156163

157164
if (isFeaturedMedia){
158165
authorLayout.setVisibility(VISIBLE);
@@ -196,7 +203,7 @@ public void onGlobalLayout() {
196203
@Override
197204
public void onResume() {
198205
super.onResume();
199-
Media media = detailProvider.getMediaAtPosition(index);
206+
media = detailProvider.getMediaAtPosition(index);
200207
if (media == null) {
201208
// Ask the detail provider to ping us when we're ready
202209
Timber.d("MediaDetailFragment not yet ready to display details; registering observer");
@@ -209,17 +216,18 @@ public void onChanged() {
209216
Timber.d("MediaDetailFragment ready to display delayed details!");
210217
detailProvider.unregisterDataSetObserver(dataObserver);
211218
dataObserver = null;
212-
displayMediaDetails(detailProvider.getMediaAtPosition(index));
219+
media=detailProvider.getMediaAtPosition(index);
220+
displayMediaDetails();
213221
}
214222
};
215223
detailProvider.registerDataSetObserver(dataObserver);
216224
} else {
217225
Timber.d("MediaDetailFragment ready to display details");
218-
displayMediaDetails(media);
226+
displayMediaDetails();
219227
}
220228
}
221229

222-
private void displayMediaDetails(final Media media) {
230+
private void displayMediaDetails() {
223231
//Always load image from Internet to allow viewing the desc, license, and cats
224232
image.setMedia(media);
225233

@@ -256,7 +264,6 @@ protected void onPostExecute(Boolean success) {
256264
if (success) {
257265
extractor.fill(media);
258266
setTextFields(media);
259-
setOnClickListeners(media);
260267
} else {
261268
Timber.d("Failed to load photo details.");
262269
}
@@ -316,74 +323,81 @@ private void setTextFields(Media media) {
316323
checkDeletion(media);
317324
}
318325

319-
private void setOnClickListeners(final Media media) {
320-
if (licenseLink(media) != null) {
321-
license.setOnClickListener(v -> openWebBrowser(licenseLink(media)));
326+
@OnClick(R.id.mediaDetailLicense)
327+
public void onMediaDetailLicenceClicked(){
328+
if (!TextUtils.isEmpty(licenseLink(media))) {
329+
openWebBrowser(licenseLink(media));
322330
} else {
323331
if(isFeaturedMedia) {
324-
Timber.d("Unable to fetch license URL for %s", media.getLicense());
332+
Timber.d("Unable to fetch license URL for %s", media.getLicense());
325333
} else {
326334
Toast toast = Toast.makeText(getContext(), getString(R.string.null_url), Toast.LENGTH_SHORT);
327335
toast.show();
328336
}
329337
}
338+
}
339+
340+
@OnClick(R.id.mediaDetailCoordinates)
341+
public void onMediaDetailCoordinatesClicked(){
330342
if (media.getCoordinates() != null) {
331-
coordinates.setOnClickListener(v -> openMap(media.getCoordinates()));
343+
openMap(media.getCoordinates());
332344
}
333-
if (delete.getVisibility() == VISIBLE) {
334-
enableDeleteButton(true);
335-
336-
delete.setOnClickListener(v -> {
337-
338-
AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
339-
alert.setMessage("Why should this file be deleted?");
340-
final EditText input = new EditText(getActivity());
341-
alert.setView(input);
342-
input.requestFocus();
343-
alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
344-
public void onClick(DialogInterface dialog, int whichButton) {
345-
String reason = input.getText().toString();
346-
DeleteTask deleteTask = new DeleteTask(getActivity(), media, reason);
347-
deleteTask.execute();
348-
enableDeleteButton(false);
349-
}
350-
});
351-
alert.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
352-
public void onClick(DialogInterface dialog, int whichButton) {
353-
}
354-
});
355-
AlertDialog d = alert.create();
356-
input.addTextChangedListener(new TextWatcher() {
357-
private void handleText() {
358-
final Button okButton = d.getButton(AlertDialog.BUTTON_POSITIVE);
359-
if (input.getText().length() == 0) {
360-
okButton.setEnabled(false);
361-
} else {
362-
okButton.setEnabled(true);
363-
}
364-
}
345+
}
365346

366-
@Override
367-
public void afterTextChanged(Editable arg0) {
368-
handleText();
369-
}
347+
@OnClick(R.id.nominateDeletion)
348+
public void onDeleteButtonClicked(){
349+
//Reviewer correct me if i have misunderstood something over here
350+
//But how does this if (delete.getVisibility() == View.VISIBLE) {
351+
// enableDeleteButton(true); makes sense ?
352+
AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
353+
alert.setMessage("Why should this file be deleted?");
354+
final EditText input = new EditText(getActivity());
355+
alert.setView(input);
356+
input.requestFocus();
357+
alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
358+
public void onClick(DialogInterface dialog, int whichButton) {
359+
String reason = input.getText().toString();
360+
DeleteTask deleteTask = new DeleteTask(getActivity(), media, reason);
361+
deleteTask.execute();
362+
enableDeleteButton(false);
363+
}
364+
});
365+
alert.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
366+
public void onClick(DialogInterface dialog, int whichButton) {
367+
}
368+
});
369+
AlertDialog d = alert.create();
370+
input.addTextChangedListener(new TextWatcher() {
371+
private void handleText() {
372+
final Button okButton = d.getButton(AlertDialog.BUTTON_POSITIVE);
373+
if (input.getText().length() == 0) {
374+
okButton.setEnabled(false);
375+
} else {
376+
okButton.setEnabled(true);
377+
}
378+
}
370379

371-
@Override
372-
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
373-
}
380+
@Override
381+
public void afterTextChanged(Editable arg0) {
382+
handleText();
383+
}
374384

375-
@Override
376-
public void onTextChanged(CharSequence s, int start, int before, int count) {
377-
}
378-
});
379-
d.show();
380-
d.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
381-
});
382-
}
383-
if (nominatedforDeletion.getVisibility() == VISIBLE){
384-
seeMore.setOnClickListener(v -> {
385-
openWebBrowser(media.getFilePageTitle().getMobileUri().toString());
386-
});
385+
@Override
386+
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
387+
}
388+
389+
@Override
390+
public void onTextChanged(CharSequence s, int start, int before, int count) {
391+
}
392+
});
393+
d.show();
394+
d.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
395+
}
396+
397+
@OnClick(R.id.seeMore)
398+
public void onSeeMoreClicked(){
399+
if(nominatedForDeletion.getVisibility()== VISIBLE) {
400+
openWebBrowser(media.getFilePageTitle().getMobileUri().toString());
387401
}
388402
}
389403

@@ -488,11 +502,11 @@ private String prettyCoordinates(Media media) {
488502
private void checkDeletion(Media media){
489503
if (media.getRequestedDeletion()){
490504
delete.setVisibility(GONE);
491-
nominatedforDeletion.setVisibility(VISIBLE);
505+
nominatedForDeletion.setVisibility(VISIBLE);
492506
}
493507
else{
494508
delete.setVisibility(VISIBLE);
495-
nominatedforDeletion.setVisibility(GONE);
509+
nominatedForDeletion.setVisibility(GONE);
496510
}
497511
}
498512

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

+5-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import android.view.ViewGroup;
2727
import android.widget.Toast;
2828

29+
import butterknife.BindView;
30+
import butterknife.ButterKnife;
2931
import javax.inject.Inject;
3032
import javax.inject.Named;
3133

@@ -53,7 +55,8 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
5355
@Named("default_preferences")
5456
SharedPreferences prefs;
5557

56-
private ViewPager pager;
58+
@BindView(R.id.mediaDetailsPager)
59+
ViewPager pager;
5760
private Boolean editable;
5861
private boolean isFeaturedImage;
5962

@@ -72,7 +75,7 @@ public View onCreateView(LayoutInflater inflater,
7275
ViewGroup container,
7376
Bundle savedInstanceState) {
7477
View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false);
75-
pager = (ViewPager) view.findViewById(R.id.mediaDetailsPager);
78+
ButterKnife.bind(this,view);
7679
pager.addOnPageChangeListener(this);
7780

7881
final MediaDetailAdapter adapter = new MediaDetailAdapter(getChildFragmentManager());

0 commit comments

Comments
 (0)