Skip to content

Commit f9989ba

Browse files
post merge upstream master wip [[issue #1491]]
1 parent 693c37f commit f9989ba

File tree

2 files changed

+112
-95
lines changed

2 files changed

+112
-95
lines changed

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

Lines changed: 107 additions & 93 deletions
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;
@@ -74,23 +78,37 @@ public static MediaDetailFragment forMedia(int index, boolean editable, boolean
7478
@Inject
7579
MediaWikiApi mwApi;
7680

77-
78-
private MediaWikiImageView image;
79-
private MediaDetailSpacer spacer;
8081
private int initialListTop = 0;
8182

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

121+
//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
122+
private Media media;
123+
103124
@Override
104125
public void onSaveInstanceState(Bundle outState) {
105126
super.onSaveInstanceState(outState);
@@ -136,22 +157,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
136157

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

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

156162
if (isFeaturedMedia){
157163
authorLayout.setVisibility(View.VISIBLE);
@@ -195,7 +201,7 @@ public void onGlobalLayout() {
195201
@Override
196202
public void onResume() {
197203
super.onResume();
198-
Media media = detailProvider.getMediaAtPosition(index);
204+
media = detailProvider.getMediaAtPosition(index);
199205
if (media == null) {
200206
// Ask the detail provider to ping us when we're ready
201207
Timber.d("MediaDetailFragment not yet ready to display details; registering observer");
@@ -208,17 +214,18 @@ public void onChanged() {
208214
Timber.d("MediaDetailFragment ready to display delayed details!");
209215
detailProvider.unregisterDataSetObserver(dataObserver);
210216
dataObserver = null;
211-
displayMediaDetails(detailProvider.getMediaAtPosition(index));
217+
media=detailProvider.getMediaAtPosition(index);
218+
displayMediaDetails();
212219
}
213220
};
214221
detailProvider.registerDataSetObserver(dataObserver);
215222
} else {
216223
Timber.d("MediaDetailFragment ready to display details");
217-
displayMediaDetails(media);
224+
displayMediaDetails();
218225
}
219226
}
220227

221-
private void displayMediaDetails(final Media media) {
228+
private void displayMediaDetails() {
222229
//Always load image from Internet to allow viewing the desc, license, and cats
223230
image.setMedia(media);
224231

@@ -255,7 +262,6 @@ protected void onPostExecute(Boolean success) {
255262
if (success) {
256263
extractor.fill(media);
257264
setTextFields(media);
258-
setOnClickListeners(media);
259265
} else {
260266
Timber.d("Failed to load photo details.");
261267
}
@@ -309,70 +315,77 @@ private void setTextFields(Media media) {
309315
checkDeletion(media);
310316
}
311317

312-
private void setOnClickListeners(final Media media) {
313-
if (licenseLink(media) != null) {
314-
license.setOnClickListener(v -> openWebBrowser(licenseLink(media)));
318+
@OnClick(R.id.mediaDetailLicense)
319+
public void onMediaDetailLicenceClicked(){
320+
if (!TextUtils.isEmpty(licenseLink(media))) {
321+
openWebBrowser(licenseLink(media));
315322
} else {
316323
Toast toast = Toast.makeText(getContext(), getString(R.string.null_url), Toast.LENGTH_SHORT);
317324
toast.show();
318325
}
326+
}
327+
328+
@OnClick(R.id.mediaDetailCoordinates)
329+
public void onMediaDetailCoordinatesClicked(){
319330
if (media.getCoordinates() != null) {
320-
coordinates.setOnClickListener(v -> openMap(media.getCoordinates()));
331+
openMap(media.getCoordinates());
321332
}
322-
if (delete.getVisibility() == View.VISIBLE) {
323-
enableDeleteButton(true);
324-
325-
delete.setOnClickListener(v -> {
326-
327-
AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
328-
alert.setMessage("Why should this file be deleted?");
329-
final EditText input = new EditText(getActivity());
330-
alert.setView(input);
331-
input.requestFocus();
332-
alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
333-
public void onClick(DialogInterface dialog, int whichButton) {
334-
String reason = input.getText().toString();
335-
DeleteTask deleteTask = new DeleteTask(getActivity(), media, reason);
336-
deleteTask.execute();
337-
enableDeleteButton(false);
338-
}
339-
});
340-
alert.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
341-
public void onClick(DialogInterface dialog, int whichButton) {
342-
}
343-
});
344-
AlertDialog d = alert.create();
345-
input.addTextChangedListener(new TextWatcher() {
346-
private void handleText() {
347-
final Button okButton = d.getButton(AlertDialog.BUTTON_POSITIVE);
348-
if (input.getText().length() == 0) {
349-
okButton.setEnabled(false);
350-
} else {
351-
okButton.setEnabled(true);
352-
}
353-
}
333+
}
354334

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

360-
@Override
361-
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
362-
}
368+
@Override
369+
public void afterTextChanged(Editable arg0) {
370+
handleText();
371+
}
363372

364-
@Override
365-
public void onTextChanged(CharSequence s, int start, int before, int count) {
366-
}
367-
});
368-
d.show();
369-
d.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
370-
});
371-
}
372-
if (nominatedforDeletion.getVisibility() == View.VISIBLE){
373-
seeMore.setOnClickListener(v -> {
374-
openWebBrowser(media.getFilePageTitle().getMobileUri().toString());
375-
});
373+
@Override
374+
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
375+
}
376+
377+
@Override
378+
public void onTextChanged(CharSequence s, int start, int before, int count) {
379+
}
380+
});
381+
d.show();
382+
d.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
383+
}
384+
385+
@OnClick(R.id.seeMore)
386+
public void onSeeMoreClicked(){
387+
if(nominatedForDeletion.getVisibility()==View.VISIBLE) {
388+
openWebBrowser(media.getFilePageTitle().getMobileUri().toString());
376389
}
377390
}
378391

@@ -477,11 +490,12 @@ private String prettyCoordinates(Media media) {
477490
private void checkDeletion(Media media){
478491
if (media.getRequestedDeletion()){
479492
delete.setVisibility(View.GONE);
480-
nominatedforDeletion.setVisibility(View.VISIBLE);
493+
nominatedForDeletion.setVisibility(View.VISIBLE);
481494
}
482495
else{
483496
delete.setVisibility(View.VISIBLE);
484-
nominatedforDeletion.setVisibility(View.GONE);
497+
enableDeleteButton(true);//I believe this is to enable delete button and set its text color resemblance accordingly
498+
nominatedForDeletion.setVisibility(View.GONE);
485499
}
486500
}
487501

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

Lines changed: 5 additions & 2 deletions
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)