diff --git a/app/src/main/java/fr/free/nrw/commons/filepicker/UploadableFile.java b/app/src/main/java/fr/free/nrw/commons/filepicker/UploadableFile.java index 5e3a43bbe..1fe306a8b 100644 --- a/app/src/main/java/fr/free/nrw/commons/filepicker/UploadableFile.java +++ b/app/src/main/java/fr/free/nrw/commons/filepicker/UploadableFile.java @@ -10,13 +10,11 @@ import android.os.Parcelable; import androidx.annotation.Nullable; import androidx.exifinterface.media.ExifInterface; +import fr.free.nrw.commons.upload.FileUtils; import java.io.File; import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.Date; - -import fr.free.nrw.commons.upload.FileUtils; +import timber.log.Timber; public class UploadableFile implements Parcelable { public static final Creator CREATOR = new Creator() { @@ -74,7 +72,6 @@ public class UploadableFile implements Parcelable { return 0; } - /** * First try to get the file creation date from EXIF else fall back to CP * @param context @@ -118,6 +115,24 @@ public class UploadableFile implements Parcelable { } } + /** + * Indicate whether the EXIF contains the location (both latitude and longitude). + * + * @return whether the location exists for the file's EXIF + */ + public boolean hasLocation() { + try { + ExifInterface exif = new ExifInterface(file.getAbsolutePath()); + final String latitude = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); + final String longitude = exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE); + return latitude != null && longitude != null; + } catch (IOException | NumberFormatException | IndexOutOfBoundsException e) { + Timber.tag("UploadableFile"); + Timber.d(e); + } + return false; + } + /** * Get filePath creation date from uri from EXIF * @@ -143,13 +158,9 @@ public class UploadableFile implements Parcelable { } } } - - } catch (IOException e) { - e.printStackTrace(); - } catch (NumberFormatException e) { - e.printStackTrace(); - } catch (IndexOutOfBoundsException e) { - e.printStackTrace(); + } catch (IOException | NumberFormatException | IndexOutOfBoundsException e) { + Timber.tag("UploadableFile"); + Timber.d(e); } return null; } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java index 847cb857f..2f54ae15c 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java @@ -17,6 +17,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; +import android.graphics.drawable.Drawable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatButton; @@ -47,6 +48,7 @@ import fr.free.nrw.commons.upload.UploadMediaDetailAdapter; import fr.free.nrw.commons.utils.DialogUtil; import fr.free.nrw.commons.utils.ImageUtils; import fr.free.nrw.commons.utils.ViewUtil; +import fr.free.nrw.commons.R.drawable.*; import java.util.List; import java.util.Locale; import java.util.Objects; @@ -180,6 +182,18 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements btnPrevious.setAlpha(1.0f); } + // If the image EXIF data contains the location, show the map icon with a green tick + if (inAppPictureLocation != null || + (uploadableFile != null && uploadableFile.hasLocation())) { + Drawable mapTick = getResources().getDrawable(R.drawable.ic_map_tick_white_24dp); + ibMap.setImageDrawable(mapTick); + } else { + // Otherwise, show the map icon with a red question mark + Drawable mapQuestionMark = + getResources().getDrawable(R.drawable.ic_map_question_white_24dp); + ibMap.setImageDrawable(mapQuestionMark); + } + //If this is the last media, we have nothing to copy, lets not show the button if (callback.getIndexInViewFlipper(this) == callback.getTotalNumberOfSteps()-4) { btnCopyToSubsequentMedia.setVisibility(View.GONE); @@ -188,7 +202,6 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements } attachImageViewScaleChangeListener(); - } /** @@ -540,6 +553,11 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements editableUploadItem.getGpsCoords().setDecimalCoords(latitude+"|"+longitude); editableUploadItem.getGpsCoords().setImageCoordsExists(true); editableUploadItem.getGpsCoords().setZoomLevel(zoom); + + // Replace the map icon using the one with a green tick + Drawable mapTick = getResources().getDrawable(R.drawable.ic_map_tick_white_24dp); + ibMap.setImageDrawable(mapTick); + Toast.makeText(getContext(), "Location Updated", Toast.LENGTH_LONG).show(); } diff --git a/app/src/main/res/drawable/ic_map_question_dark_24dp.xml b/app/src/main/res/drawable/ic_map_question_dark_24dp.xml new file mode 100644 index 000000000..e1ec06b37 --- /dev/null +++ b/app/src/main/res/drawable/ic_map_question_dark_24dp.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_map_question_white_24dp.xml b/app/src/main/res/drawable/ic_map_question_white_24dp.xml new file mode 100644 index 000000000..df2055589 --- /dev/null +++ b/app/src/main/res/drawable/ic_map_question_white_24dp.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_map_tick_dark_24dp.xml b/app/src/main/res/drawable/ic_map_tick_dark_24dp.xml new file mode 100644 index 000000000..80212a459 --- /dev/null +++ b/app/src/main/res/drawable/ic_map_tick_dark_24dp.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_map_tick_white_24dp.xml b/app/src/main/res/drawable/ic_map_tick_white_24dp.xml new file mode 100644 index 000000000..422f12349 --- /dev/null +++ b/app/src/main/res/drawable/ic_map_tick_white_24dp.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file