9
9
import android .os .Bundle ;
10
10
import android .support .annotation .Nullable ;
11
11
import android .text .Editable ;
12
+ import android .text .TextUtils ;
12
13
import android .text .TextWatcher ;
13
14
import android .util .TypedValue ;
14
15
import android .view .LayoutInflater ;
22
23
import android .widget .TextView ;
23
24
import android .widget .Toast ;
24
25
26
+ import butterknife .BindView ;
27
+ import butterknife .ButterKnife ;
28
+ import butterknife .OnClick ;
25
29
import java .io .IOException ;
26
30
import java .text .SimpleDateFormat ;
27
31
import java .util .ArrayList ;
45
49
import fr .free .nrw .commons .ui .widget .CompatTextView ;
46
50
import timber .log .Timber ;
47
51
48
- import static android .view .View .*;
52
+ import static android .view .View .GONE ;
53
+ import static android .view .View .VISIBLE ;
49
54
import static android .widget .Toast .LENGTH_SHORT ;
50
55
51
56
public class MediaDetailFragment extends CommonsDaggerSupportFragment {
@@ -75,23 +80,37 @@ public static MediaDetailFragment forMedia(int index, boolean editable, boolean
75
80
@ Inject
76
81
MediaWikiApi mwApi ;
77
82
78
-
79
- private MediaWikiImageView image ;
80
- private MediaDetailSpacer spacer ;
81
83
private int initialListTop = 0 ;
82
84
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
+
95
114
private ArrayList <String > categoryNames ;
96
115
private boolean categoriesLoaded = false ;
97
116
private boolean categoriesPresent = false ;
@@ -101,6 +120,9 @@ public static MediaDetailFragment forMedia(int index, boolean editable, boolean
101
120
private AsyncTask <Void , Void , Boolean > detailFetchTask ;
102
121
private LicenseList licenseList ;
103
122
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
+
104
126
@ Override
105
127
public void onSaveInstanceState (Bundle outState ) {
106
128
super .onSaveInstanceState (outState );
@@ -137,22 +159,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
137
159
138
160
final View view = inflater .inflate (R .layout .fragment_media_detail , container , false );
139
161
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 );
156
163
157
164
if (isFeaturedMedia ){
158
165
authorLayout .setVisibility (VISIBLE );
@@ -196,7 +203,7 @@ public void onGlobalLayout() {
196
203
@ Override
197
204
public void onResume () {
198
205
super .onResume ();
199
- Media media = detailProvider .getMediaAtPosition (index );
206
+ media = detailProvider .getMediaAtPosition (index );
200
207
if (media == null ) {
201
208
// Ask the detail provider to ping us when we're ready
202
209
Timber .d ("MediaDetailFragment not yet ready to display details; registering observer" );
@@ -209,17 +216,18 @@ public void onChanged() {
209
216
Timber .d ("MediaDetailFragment ready to display delayed details!" );
210
217
detailProvider .unregisterDataSetObserver (dataObserver );
211
218
dataObserver = null ;
212
- displayMediaDetails (detailProvider .getMediaAtPosition (index ));
219
+ media =detailProvider .getMediaAtPosition (index );
220
+ displayMediaDetails ();
213
221
}
214
222
};
215
223
detailProvider .registerDataSetObserver (dataObserver );
216
224
} else {
217
225
Timber .d ("MediaDetailFragment ready to display details" );
218
- displayMediaDetails (media );
226
+ displayMediaDetails ();
219
227
}
220
228
}
221
229
222
- private void displayMediaDetails (final Media media ) {
230
+ private void displayMediaDetails () {
223
231
//Always load image from Internet to allow viewing the desc, license, and cats
224
232
image .setMedia (media );
225
233
@@ -256,7 +264,6 @@ protected void onPostExecute(Boolean success) {
256
264
if (success ) {
257
265
extractor .fill (media );
258
266
setTextFields (media );
259
- setOnClickListeners (media );
260
267
} else {
261
268
Timber .d ("Failed to load photo details." );
262
269
}
@@ -316,74 +323,81 @@ private void setTextFields(Media media) {
316
323
checkDeletion (media );
317
324
}
318
325
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 ));
322
330
} else {
323
331
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 ());
325
333
} else {
326
334
Toast toast = Toast .makeText (getContext (), getString (R .string .null_url ), Toast .LENGTH_SHORT );
327
335
toast .show ();
328
336
}
329
337
}
338
+ }
339
+
340
+ @ OnClick (R .id .mediaDetailCoordinates )
341
+ public void onMediaDetailCoordinatesClicked (){
330
342
if (media .getCoordinates () != null ) {
331
- coordinates . setOnClickListener ( v -> openMap (media .getCoordinates () ));
343
+ openMap (media .getCoordinates ());
332
344
}
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
+ }
365
346
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
+ }
370
379
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
+ }
374
384
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 ());
387
401
}
388
402
}
389
403
@@ -488,11 +502,11 @@ private String prettyCoordinates(Media media) {
488
502
private void checkDeletion (Media media ){
489
503
if (media .getRequestedDeletion ()){
490
504
delete .setVisibility (GONE );
491
- nominatedforDeletion .setVisibility (VISIBLE );
505
+ nominatedForDeletion .setVisibility (VISIBLE );
492
506
}
493
507
else {
494
508
delete .setVisibility (VISIBLE );
495
- nominatedforDeletion .setVisibility (GONE );
509
+ nominatedForDeletion .setVisibility (GONE );
496
510
}
497
511
}
498
512
0 commit comments