99import android .os .Bundle ;
1010import android .support .annotation .Nullable ;
1111import android .text .Editable ;
12+ import android .text .TextUtils ;
1213import android .text .TextWatcher ;
1314import android .util .TypedValue ;
1415import android .view .LayoutInflater ;
2223import android .widget .TextView ;
2324import android .widget .Toast ;
2425
26+ import butterknife .BindView ;
27+ import butterknife .ButterKnife ;
28+ import butterknife .OnClick ;
2529import java .io .IOException ;
2630import java .text .SimpleDateFormat ;
2731import java .util .ArrayList ;
4549import fr .free .nrw .commons .ui .widget .CompatTextView ;
4650import timber .log .Timber ;
4751
48- import static android .view .View .*;
52+ import static android .view .View .GONE ;
53+ import static android .view .View .VISIBLE ;
4954import static android .widget .Toast .LENGTH_SHORT ;
5055
5156public 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
0 commit comments