Merge pull request #777 from akaita/media_detail

Fix issues in Media Detail screen
This commit is contained in:
Josephine Lim 2017-07-20 01:20:10 +10:00 committed by GitHub
commit 19a3fa3adc
6 changed files with 51 additions and 30 deletions

View file

@ -1,5 +1,7 @@
package fr.free.nrw.commons;
import android.support.annotation.Nullable;
public class License {
String key;
String template;
@ -36,7 +38,7 @@ public class License {
}
}
public String getUrl(String language) {
public @Nullable String getUrl(String language) {
if (url == null) {
return null;
} else {

View file

@ -3,6 +3,7 @@ package fr.free.nrw.commons;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.Nullable;
import java.util.ArrayList;
import java.util.Date;
@ -12,6 +13,8 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import fr.free.nrw.commons.location.LatLng;
public class Media implements Parcelable {
public static Creator<Media> CREATOR = new Creator<Media>() {
@ -99,7 +102,7 @@ public class Media implements Parcelable {
this.dateCreated = date;
}
public Date getDateUploaded() {
public @Nullable Date getDateUploaded() {
return dateUploaded;
}
@ -135,11 +138,11 @@ public class Media implements Parcelable {
this.license = license;
}
public String getCoordinates() {
public @Nullable LatLng getCoordinates() {
return coordinates;
}
public void setCoordinates(String coordinates) {
public void setCoordinates(LatLng coordinates) {
this.coordinates = coordinates;
}
@ -150,11 +153,11 @@ public class Media implements Parcelable {
protected String description; // monolingual description on input...
protected long dataLength;
protected Date dateCreated;
protected Date dateUploaded;
protected @Nullable Date dateUploaded;
protected int width;
protected int height;
protected String license;
private String coordinates;
private @Nullable LatLng coordinates;
protected String creator;
protected ArrayList<String> categories; // as loaded at runtime?
protected Map<String, String> descriptions; // multilingual descriptions as loaded

View file

@ -1,5 +1,8 @@
package fr.free.nrw.commons;
import android.support.annotation.Nullable;
import org.mediawiki.api.ApiResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@ -38,7 +41,7 @@ public class MediaDataExtractor {
private Map<String, String> descriptions;
private Date date;
private String license;
private String coordinates;
private @Nullable LatLng coordinates;
private LicenseList licenseList;
/**
@ -112,7 +115,7 @@ public class MediaDataExtractor {
if (coordinateTemplateNode != null) {
coordinates = getCoordinates(coordinateTemplateNode);
} else {
coordinates = "No coordinates found";
coordinates = null;
}
/*
@ -236,22 +239,20 @@ public class MediaDataExtractor {
}
/**
* Extracts the coordinates from the template and returns them as pretty formatted string.
* Extracts the coordinates from the template.
* Loops over the children of the coordinate template:
* {{Location|47.50111007666667|19.055700301944444}}
* and extracts the latitude and longitude as a pretty string.
* and extracts the latitude and longitude.
*
* @param parentNode The node of the coordinates template.
* @return Pretty formatted coordinates.
* @return Extracted coordinates.
* @throws IOException Parsing failed.
*/
private String getCoordinates(Node parentNode) throws IOException {
private LatLng getCoordinates(Node parentNode) throws IOException {
NodeList childNodes = parentNode.getChildNodes();
double latitudeText = Double.parseDouble(childNodes.item(1).getTextContent());
double longitudeText = Double.parseDouble(childNodes.item(2).getTextContent());
LatLng coordinates = new LatLng(latitudeText, longitudeText, 0);
return coordinates.getPrettyCoordinateString();
return new LatLng(latitudeText, longitudeText, 0);
}
// Extract a dictionary of multilingual texts from a subset of the parse tree.

View file

@ -2,8 +2,10 @@ package fr.free.nrw.commons.media;
import android.content.Intent;
import android.database.DataSetObserver;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.TypedValue;
import android.view.LayoutInflater;
@ -18,6 +20,7 @@ import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import fr.free.nrw.commons.License;
import fr.free.nrw.commons.LicenseList;
@ -26,6 +29,7 @@ import fr.free.nrw.commons.MediaDataExtractor;
import fr.free.nrw.commons.MediaWikiImageView;
import fr.free.nrw.commons.PageTitle;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.location.LatLng;
import timber.log.Timber;
public class MediaDetailFragment extends Fragment {
@ -262,6 +266,7 @@ public class MediaDetailFragment extends Fragment {
}
private void rebuildCatList() {
categoryContainer.removeAllViews();
// @fixme add the category items
for (String cat : categoryNames) {
View catLabel = buildCatLabel(cat);
@ -327,7 +332,7 @@ public class MediaDetailFragment extends Fragment {
private String prettyUploadedDate(Media media) {
Date date = media.getDateUploaded();
if (date.toString() == null || date.toString().isEmpty()) {
if (date == null || date.toString() == null || date.toString().isEmpty()) {
return "Uploaded date not available";
}
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy");
@ -340,6 +345,9 @@ public class MediaDetailFragment extends Fragment {
* @return Coordinates as text.
*/
private String prettyCoordinates(Media media) {
return media.getCoordinates();
if (media.getCoordinates() == null) {
return getString(R.string.media_detail_coordinates_empty);
}
return media.getCoordinates().getPrettyCoordinateString();
}
}