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 ;
@@ -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
0 commit comments