diff --git a/app/src/main/java/fr/free/nrw/commons/License.java b/app/src/main/java/fr/free/nrw/commons/License.java index d7b5c28e2..d1aea6269 100644 --- a/app/src/main/java/fr/free/nrw/commons/License.java +++ b/app/src/main/java/fr/free/nrw/commons/License.java @@ -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 { diff --git a/app/src/main/java/fr/free/nrw/commons/Media.java b/app/src/main/java/fr/free/nrw/commons/Media.java index d8f73cae9..a1ae1cc84 100644 --- a/app/src/main/java/fr/free/nrw/commons/Media.java +++ b/app/src/main/java/fr/free/nrw/commons/Media.java @@ -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 CREATOR = new Creator() { @@ -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 categories; // as loaded at runtime? protected Map descriptions; // multilingual descriptions as loaded diff --git a/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java b/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java index 978c06115..5ec80f0d3 100644 --- a/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java +++ b/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java @@ -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 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. diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index a076a7d25..cb879395c 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -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(); } } diff --git a/app/src/main/res/layout/fragment_media_detail.xml b/app/src/main/res/layout/fragment_media_detail.xml index 8cfa45d17..b7d69290e 100644 --- a/app/src/main/res/layout/fragment_media_detail.xml +++ b/app/src/main/res/layout/fragment_media_detail.xml @@ -1,6 +1,7 @@ @@ -130,26 +131,28 @@ android:background="?attr/subBackground" android:padding="16dp" > + + + tools:text="License link" /> @@ -199,7 +203,7 @@ android:layout_height="wrap_content" android:text="@string/detail_panel_cats_label" android:textSize="16sp" - android:layout_gravity="left|start" + android:layout_gravity="start" android:textColor="@android:color/white" android:paddingBottom="6dp" /> @@ -239,7 +243,7 @@ android:background="?attr/subBackground" android:id="@+id/mediaDetailuploadeddate" android:textColor="@android:color/white" - android:layout_gravity="left|start" + android:layout_gravity="start" android:textSize="14sp" android:padding="12dp" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d4e688e50..5f6e0d98b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -153,7 +153,10 @@ Tap this message (or hit back) to skip this step. Title of the media Description Description of the media goes here. This can potentially be fairly long, and will need to wrap across multiple lines. We hope it looks nice though. - Uploaded date> + Uploaded date + License + Coordinates + None provided Become a Beta Tester Opt-in to our beta channel on Google Play and get early access to new features and bug fixes https://play.google.com/apps/testing/fr.free.nrw.commons