post merge upstream master wip [[issue #1491]]

This commit is contained in:
Ashish 2018-05-05 14:03:59 +05:30
parent 693c37f2ec
commit f9989ba1a3
2 changed files with 110 additions and 93 deletions

View file

@ -9,6 +9,7 @@ import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.Editable; import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -22,6 +23,9 @@ import android.widget.ScrollView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
@ -74,23 +78,37 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment {
@Inject @Inject
MediaWikiApi mwApi; MediaWikiApi mwApi;
private MediaWikiImageView image;
private MediaDetailSpacer spacer;
private int initialListTop = 0; private int initialListTop = 0;
private TextView title; @BindView(R.id.mediaDetailImage)
private TextView desc; MediaWikiImageView image;
private TextView author; @BindView(R.id.mediaDetailSpacer)
private TextView license; MediaDetailSpacer spacer;
private TextView coordinates; @BindView(R.id.mediaDetailTitle)
private TextView uploadedDate; TextView title;
private TextView seeMore; @BindView(R.id.mediaDetailDesc)
private LinearLayout nominatedforDeletion; TextView desc;
private LinearLayout categoryContainer; @BindView(R.id.mediaDetailAuthor)
private LinearLayout authorLayout; TextView author;
private Button delete; @BindView(R.id.mediaDetailLicense)
private ScrollView scrollView; TextView license;
@BindView(R.id.mediaDetailCoordinates)
TextView coordinates;
@BindView(R.id.mediaDetailuploadeddate)
TextView uploadedDate;
@BindView(R.id.seeMore)
TextView seeMore;
@BindView(R.id.nominatedDeletionBanner)
LinearLayout nominatedForDeletion;
@BindView(R.id.mediaDetailCategoryContainer)
LinearLayout categoryContainer;
@BindView(R.id.authorLinearLayout)
LinearLayout authorLayout;
@BindView(R.id.nominateDeletion)
Button delete;
@BindView(R.id.mediaDetailScrollView)
ScrollView scrollView;
private ArrayList<String> categoryNames; private ArrayList<String> categoryNames;
private boolean categoriesLoaded = false; private boolean categoriesLoaded = false;
private boolean categoriesPresent = false; private boolean categoriesPresent = false;
@ -100,6 +118,9 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment {
private AsyncTask<Void, Void, Boolean> detailFetchTask; private AsyncTask<Void, Void, Boolean> detailFetchTask;
private LicenseList licenseList; private LicenseList licenseList;
//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
private Media media;
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
@ -136,22 +157,7 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment {
final View view = inflater.inflate(R.layout.fragment_media_detail, container, false); final View view = inflater.inflate(R.layout.fragment_media_detail, container, false);
image = (MediaWikiImageView) view.findViewById(R.id.mediaDetailImage); ButterKnife.bind(this,view);
scrollView = (ScrollView) view.findViewById(R.id.mediaDetailScrollView);
// Detail consists of a list view with main pane in header view, plus category list.
spacer = (MediaDetailSpacer) view.findViewById(R.id.mediaDetailSpacer);
title = (TextView) view.findViewById(R.id.mediaDetailTitle);
desc = (TextView) view.findViewById(R.id.mediaDetailDesc);
author = (TextView) view.findViewById(R.id.mediaDetailAuthor);
license = (TextView) view.findViewById(R.id.mediaDetailLicense);
coordinates = (TextView) view.findViewById(R.id.mediaDetailCoordinates);
uploadedDate = (TextView) view.findViewById(R.id.mediaDetailuploadeddate);
seeMore = (TextView) view.findViewById(R.id.seeMore);
nominatedforDeletion = (LinearLayout) view.findViewById(R.id.nominatedDeletionBanner);
delete = (Button) view.findViewById(R.id.nominateDeletion);
categoryContainer = (LinearLayout) view.findViewById(R.id.mediaDetailCategoryContainer);
authorLayout = (LinearLayout) view.findViewById(R.id.authorLinearLayout);
if (isFeaturedMedia){ if (isFeaturedMedia){
authorLayout.setVisibility(View.VISIBLE); authorLayout.setVisibility(View.VISIBLE);
@ -195,7 +201,7 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment {
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
Media media = detailProvider.getMediaAtPosition(index); media = detailProvider.getMediaAtPosition(index);
if (media == null) { if (media == null) {
// Ask the detail provider to ping us when we're ready // Ask the detail provider to ping us when we're ready
Timber.d("MediaDetailFragment not yet ready to display details; registering observer"); Timber.d("MediaDetailFragment not yet ready to display details; registering observer");
@ -208,17 +214,18 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment {
Timber.d("MediaDetailFragment ready to display delayed details!"); Timber.d("MediaDetailFragment ready to display delayed details!");
detailProvider.unregisterDataSetObserver(dataObserver); detailProvider.unregisterDataSetObserver(dataObserver);
dataObserver = null; dataObserver = null;
displayMediaDetails(detailProvider.getMediaAtPosition(index)); media=detailProvider.getMediaAtPosition(index);
displayMediaDetails();
} }
}; };
detailProvider.registerDataSetObserver(dataObserver); detailProvider.registerDataSetObserver(dataObserver);
} else { } else {
Timber.d("MediaDetailFragment ready to display details"); Timber.d("MediaDetailFragment ready to display details");
displayMediaDetails(media); displayMediaDetails();
} }
} }
private void displayMediaDetails(final Media media) { private void displayMediaDetails() {
//Always load image from Internet to allow viewing the desc, license, and cats //Always load image from Internet to allow viewing the desc, license, and cats
image.setMedia(media); image.setMedia(media);
@ -255,7 +262,6 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment {
if (success) { if (success) {
extractor.fill(media); extractor.fill(media);
setTextFields(media); setTextFields(media);
setOnClickListeners(media);
} else { } else {
Timber.d("Failed to load photo details."); Timber.d("Failed to load photo details.");
} }
@ -309,21 +315,28 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment {
checkDeletion(media); checkDeletion(media);
} }
private void setOnClickListeners(final Media media) { @OnClick(R.id.mediaDetailLicense)
if (licenseLink(media) != null) { public void onMediaDetailLicenceClicked(){
license.setOnClickListener(v -> openWebBrowser(licenseLink(media))); if (!TextUtils.isEmpty(licenseLink(media))) {
openWebBrowser(licenseLink(media));
} else { } else {
Toast toast = Toast.makeText(getContext(), getString(R.string.null_url), Toast.LENGTH_SHORT); Toast toast = Toast.makeText(getContext(), getString(R.string.null_url), Toast.LENGTH_SHORT);
toast.show(); toast.show();
} }
if (media.getCoordinates() != null) {
coordinates.setOnClickListener(v -> openMap(media.getCoordinates()));
} }
if (delete.getVisibility() == View.VISIBLE) {
enableDeleteButton(true);
delete.setOnClickListener(v -> { @OnClick(R.id.mediaDetailCoordinates)
public void onMediaDetailCoordinatesClicked(){
if (media.getCoordinates() != null) {
openMap(media.getCoordinates());
}
}
@OnClick(R.id.nominateDeletion)
public void onDeleteButtonClicked(){
//Reviewer correct me if i have misunderstood something over here
//But how does this if (delete.getVisibility() == View.VISIBLE) {
// enableDeleteButton(true); makes sense ?
AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setMessage("Why should this file be deleted?"); alert.setMessage("Why should this file be deleted?");
final EditText input = new EditText(getActivity()); final EditText input = new EditText(getActivity());
@ -367,12 +380,12 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment {
}); });
d.show(); d.show();
d.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); d.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
});
} }
if (nominatedforDeletion.getVisibility() == View.VISIBLE){
seeMore.setOnClickListener(v -> { @OnClick(R.id.seeMore)
public void onSeeMoreClicked(){
if(nominatedForDeletion.getVisibility()==View.VISIBLE) {
openWebBrowser(media.getFilePageTitle().getMobileUri().toString()); openWebBrowser(media.getFilePageTitle().getMobileUri().toString());
});
} }
} }
@ -477,11 +490,12 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment {
private void checkDeletion(Media media){ private void checkDeletion(Media media){
if (media.getRequestedDeletion()){ if (media.getRequestedDeletion()){
delete.setVisibility(View.GONE); delete.setVisibility(View.GONE);
nominatedforDeletion.setVisibility(View.VISIBLE); nominatedForDeletion.setVisibility(View.VISIBLE);
} }
else{ else{
delete.setVisibility(View.VISIBLE); delete.setVisibility(View.VISIBLE);
nominatedforDeletion.setVisibility(View.GONE); enableDeleteButton(true);//I believe this is to enable delete button and set its text color resemblance accordingly
nominatedForDeletion.setVisibility(View.GONE);
} }
} }

View file

@ -26,6 +26,8 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast; import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
@ -53,7 +55,8 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
@Named("default_preferences") @Named("default_preferences")
SharedPreferences prefs; SharedPreferences prefs;
private ViewPager pager; @BindView(R.id.mediaDetailsPager)
ViewPager pager;
private Boolean editable; private Boolean editable;
private boolean isFeaturedImage; private boolean isFeaturedImage;
@ -72,7 +75,7 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple
ViewGroup container, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false); View view = inflater.inflate(R.layout.fragment_media_detail_pager, container, false);
pager = (ViewPager) view.findViewById(R.id.mediaDetailsPager); ButterKnife.bind(this,view);
pager.addOnPageChangeListener(this); pager.addOnPageChangeListener(this);
final MediaDetailAdapter adapter = new MediaDetailAdapter(getChildFragmentManager()); final MediaDetailAdapter adapter = new MediaDetailAdapter(getChildFragmentManager());