Skip to content

Commit 2bc0d41

Browse files
maskaravivekmisaochan
authored andcommitted
Fix date time issue for google photos (#2438)
1 parent d86a3aa commit 2bc0d41

File tree

9 files changed

+61
-58
lines changed

9 files changed

+61
-58
lines changed

app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import android.os.Build;
88
import android.support.annotation.NonNull;
99

10-
import java.io.File;
1110
import java.util.ArrayList;
1211
import java.util.List;
1312

@@ -18,6 +17,7 @@
1817
import fr.free.nrw.commons.R;
1918
import fr.free.nrw.commons.filepicker.DefaultCallback;
2019
import fr.free.nrw.commons.filepicker.FilePicker;
20+
import fr.free.nrw.commons.filepicker.UploadableFile;
2121
import fr.free.nrw.commons.kvstore.BasicKvStore;
2222
import fr.free.nrw.commons.kvstore.JsonKvStore;
2323
import fr.free.nrw.commons.nearby.Place;
@@ -116,30 +116,29 @@ public void onImagePickerError(Exception e, FilePicker.ImageSource source, int t
116116
}
117117

118118
@Override
119-
public void onImagesPicked(@NonNull List<File> imagesFiles, FilePicker.ImageSource source, int type) {
119+
public void onImagesPicked(@NonNull List<UploadableFile> imagesFiles, FilePicker.ImageSource source, int type) {
120120
Intent intent = handleImagesPicked(activity, imagesFiles, getSourceFromImageSource(source));
121121
activity.startActivity(intent);
122122
}
123123
});
124124
}
125125

126126
public List<UploadableFile> handleExternalImagesPicked(Activity activity,
127-
Intent data) {
128-
return getUploadableFiles(FilePicker.handleExternalImagesPicked(data, activity));
127+
Intent data) {
128+
return FilePicker.handleExternalImagesPicked(data, activity);
129129
}
130130

131131
/**
132132
* Returns intent to be passed to upload activity
133133
* Attaches place object for nearby uploads
134134
*/
135135
private Intent handleImagesPicked(Context context,
136-
List<File> imagesFiles,
136+
List<UploadableFile> imagesFiles,
137137
String source) {
138-
ArrayList<UploadableFile> uploadableFiles = getUploadableFiles(imagesFiles);
139138
Intent shareIntent = new Intent(context, UploadActivity.class);
140139
shareIntent.setAction(ACTION_INTERNAL_UPLOADS);
141140
shareIntent.putExtra(EXTRA_SOURCE, source);
142-
shareIntent.putParcelableArrayListExtra(EXTRA_FILES, uploadableFiles);
141+
shareIntent.putParcelableArrayListExtra(EXTRA_FILES, new ArrayList<>(imagesFiles));
143142
Place place = directKvStore.getJson(PLACE_OBJECT, Place.class);
144143
if (place != null) {
145144
shareIntent.putExtra(PLACE_OBJECT, place);
@@ -148,15 +147,6 @@ private Intent handleImagesPicked(Context context,
148147
return shareIntent;
149148
}
150149

151-
@NonNull
152-
private ArrayList<UploadableFile> getUploadableFiles(List<File> imagesFiles) {
153-
ArrayList<UploadableFile> uploadableFiles = new ArrayList<>();
154-
for (File file : imagesFiles) {
155-
uploadableFiles.add(new UploadableFile(file));
156-
}
157-
return uploadableFiles;
158-
}
159-
160150
/**
161151
* Get image upload source
162152
*/

app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -289,20 +289,20 @@ public static void openCameraForVideo(android.app.Fragment fragment, int type) {
289289
}
290290

291291
@Nullable
292-
private static File takenCameraPicture(Context context) throws IOException, URISyntaxException {
292+
private static UploadableFile takenCameraPicture(Context context) throws IOException, URISyntaxException {
293293
String lastCameraPhoto = PreferenceManager.getDefaultSharedPreferences(context).getString(KEY_LAST_CAMERA_PHOTO, null);
294294
if (lastCameraPhoto != null) {
295-
return new File(lastCameraPhoto);
295+
return new UploadableFile(new File(lastCameraPhoto));
296296
} else {
297297
return null;
298298
}
299299
}
300300

301301
@Nullable
302-
private static File takenCameraVideo(Context context) throws IOException, URISyntaxException {
302+
private static UploadableFile takenCameraVideo(Context context) throws IOException, URISyntaxException {
303303
String lastCameraPhoto = PreferenceManager.getDefaultSharedPreferences(context).getString(KEY_LAST_CAMERA_VIDEO, null);
304304
if (lastCameraPhoto != null) {
305-
return new File(lastCameraPhoto);
305+
return new UploadableFile(new File(lastCameraPhoto));
306306
} else {
307307
return null;
308308
}
@@ -343,7 +343,7 @@ public static void handleActivityResult(int requestCode, int resultCode, Intent
343343
}
344344
}
345345

346-
public static List<File> handleExternalImagesPicked(Intent data, Activity activity) {
346+
public static List<UploadableFile> handleExternalImagesPicked(Intent data, Activity activity) {
347347
try {
348348
return getFilesFromGalleryPictures(data, activity);
349349
} catch (IOException e) {
@@ -406,7 +406,7 @@ public static File lastlyTakenButCanceledVideo(@NonNull Context context) {
406406
private static void onPictureReturnedFromDocuments(Intent data, Activity activity, @NonNull FilePicker.Callbacks callbacks) {
407407
try {
408408
Uri photoPath = data.getData();
409-
File photoFile = PickedFiles.pickedExistingPicture(activity, photoPath);
409+
UploadableFile photoFile = PickedFiles.pickedExistingPicture(activity, photoPath);
410410
callbacks.onImagesPicked(singleFileList(photoFile), FilePicker.ImageSource.DOCUMENTS, restoreType(activity));
411411

412412
if (configuration(activity).shouldCopyPickedImagesToPublicGalleryAppFolder()) {
@@ -420,28 +420,28 @@ private static void onPictureReturnedFromDocuments(Intent data, Activity activit
420420

421421
private static void onPictureReturnedFromGallery(Intent data, Activity activity, @NonNull FilePicker.Callbacks callbacks) {
422422
try {
423-
List<File> files = getFilesFromGalleryPictures(data, activity);
423+
List<UploadableFile> files = getFilesFromGalleryPictures(data, activity);
424424
callbacks.onImagesPicked(files, FilePicker.ImageSource.GALLERY, restoreType(activity));
425425
} catch (Exception e) {
426426
e.printStackTrace();
427427
callbacks.onImagePickerError(e, FilePicker.ImageSource.GALLERY, restoreType(activity));
428428
}
429429
}
430430

431-
private static List<File> getFilesFromGalleryPictures(Intent data, Activity activity) throws IOException {
432-
List<File> files = new ArrayList<>();
431+
private static List<UploadableFile> getFilesFromGalleryPictures(Intent data, Activity activity) throws IOException {
432+
List<UploadableFile> files = new ArrayList<>();
433433
ClipData clipData = null;
434434
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
435435
clipData = data.getClipData();
436436
}
437437
if (clipData == null) {
438438
Uri uri = data.getData();
439-
File file = PickedFiles.pickedExistingPicture(activity, uri);
439+
UploadableFile file = PickedFiles.pickedExistingPicture(activity, uri);
440440
files.add(file);
441441
} else {
442442
for (int i = 0; i < clipData.getItemCount(); i++) {
443443
Uri uri = clipData.getItemAt(i).getUri();
444-
File file = PickedFiles.pickedExistingPicture(activity, uri);
444+
UploadableFile file = PickedFiles.pickedExistingPicture(activity, uri);
445445
files.add(file);
446446
}
447447
}
@@ -460,8 +460,8 @@ private static void onPictureReturnedFromCamera(Activity activity, @NonNull File
460460
revokeWritePermission(activity, Uri.parse(lastImageUri));
461461
}
462462

463-
File photoFile = FilePicker.takenCameraPicture(activity);
464-
List<File> files = new ArrayList<>();
463+
UploadableFile photoFile = FilePicker.takenCameraPicture(activity);
464+
List<UploadableFile> files = new ArrayList<>();
465465
files.add(photoFile);
466466

467467
if (photoFile == null) {
@@ -493,8 +493,8 @@ private static void onVideoReturnedFromCamera(Activity activity, @NonNull FilePi
493493
revokeWritePermission(activity, Uri.parse(lastVideoUri));
494494
}
495495

496-
File photoFile = FilePicker.takenCameraVideo(activity);
497-
List<File> files = new ArrayList<>();
496+
UploadableFile photoFile = FilePicker.takenCameraVideo(activity);
497+
List<UploadableFile> files = new ArrayList<>();
498498
files.add(photoFile);
499499

500500
if (photoFile == null) {
@@ -545,7 +545,7 @@ public enum ImageSource {
545545
public interface Callbacks {
546546
void onImagePickerError(Exception e, FilePicker.ImageSource source, int type);
547547

548-
void onImagesPicked(@NonNull List<File> imageFiles, FilePicker.ImageSource source, int type);
548+
void onImagesPicked(@NonNull List<UploadableFile> imageFiles, FilePicker.ImageSource source, int type);
549549

550550
void onCanceled(FilePicker.ImageSource source, int type);
551551
}

app/src/main/java/fr/free/nrw/commons/filepicker/PickedFiles.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,14 @@ private static void copyFile(File src, File dst) throws IOException {
5555
writeToFile(in, dst);
5656
}
5757

58-
static void copyFilesInSeparateThread(final Context context, final List<File> filesToCopy) {
58+
static void copyFilesInSeparateThread(final Context context, final List<UploadableFile> filesToCopy) {
5959
new Thread(new Runnable() {
6060
@Override
6161
public void run() {
6262
List<File> copiedFiles = new ArrayList<>();
6363
int i = 1;
64-
for (File fileToCopy : filesToCopy) {
64+
for (UploadableFile uploadableFile : filesToCopy) {
65+
File fileToCopy = uploadableFile.getFile();
6566
File dstDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), getFolderName(context));
6667
if (!dstDir.exists()) dstDir.mkdirs();
6768

@@ -84,8 +85,8 @@ public void run() {
8485
}).run();
8586
}
8687

87-
static List<File> singleFileList(File file) {
88-
List<File> list = new ArrayList<>();
88+
static List<UploadableFile> singleFileList(UploadableFile file) {
89+
List<UploadableFile> list = new ArrayList<>();
8990
list.add(file);
9091
return list;
9192
}
@@ -106,13 +107,13 @@ public void onScanCompleted(String path, Uri uri) {
106107
});
107108
}
108109

109-
static File pickedExistingPicture(@NonNull Context context, Uri photoUri) throws IOException {
110+
static UploadableFile pickedExistingPicture(@NonNull Context context, Uri photoUri) throws IOException {
110111
InputStream pictureInputStream = context.getContentResolver().openInputStream(photoUri);
111112
File directory = tempImageDirectory(context);
112113
File photoFile = new File(directory, UUID.randomUUID().toString() + "." + getMimeType(context, photoUri));
113114
photoFile.createNewFile();
114115
writeToFile(pictureInputStream, photoFile);
115-
return photoFile;
116+
return new UploadableFile(photoUri, photoFile);
116117
}
117118

118119
static File getCameraPicturesLocation(@NonNull Context context) throws IOException {

app/src/main/java/fr/free/nrw/commons/contributions/UploadableFile.java renamed to app/src/main/java/fr/free/nrw/commons/filepicker/UploadableFile.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package fr.free.nrw.commons.contributions;
1+
package fr.free.nrw.commons.filepicker;
22

3-
import android.content.ContentResolver;
43
import android.content.Context;
54
import android.database.Cursor;
65
import android.net.Uri;
@@ -23,16 +22,29 @@ public UploadableFile[] newArray(int size) {
2322
return new UploadableFile[size];
2423
}
2524
};
25+
26+
private final Uri contentUri;
2627
private final File file;
2728

29+
public UploadableFile(Uri contentUri, File file) {
30+
this.contentUri = contentUri;
31+
this.file = file;
32+
}
33+
2834
public UploadableFile(File file) {
2935
this.file = file;
36+
this.contentUri = Uri.parse(file.getAbsolutePath());
3037
}
3138

3239
public UploadableFile(Parcel in) {
40+
this.contentUri = in.readParcelable(Uri.class.getClassLoader());
3341
file = (File) in.readSerializable();
3442
}
3543

44+
public File getFile() {
45+
return file;
46+
}
47+
3648
public String getFilePath() {
3749
return file.getPath();
3850
}
@@ -50,20 +62,14 @@ public int describeContents() {
5062
return 0;
5163
}
5264

53-
@Override
54-
public void writeToParcel(Parcel parcel, int i) {
55-
parcel.writeSerializable(file);
56-
}
57-
5865
/**
5966
* Get filePath creation date from uri from all possible content providers
6067
*
6168
* @return
6269
*/
6370
public long getFileCreatedDate(Context context) {
6471
try {
65-
ContentResolver contentResolver = context.getContentResolver();
66-
Cursor cursor = contentResolver.query(getMediaUri(), null, null, null, null);
72+
Cursor cursor = context.getContentResolver().query(contentUri, null, null, null, null);
6773
if (cursor == null) {
6874
return -1;//Could not fetch last_modified
6975
}
@@ -74,12 +80,18 @@ public long getFileCreatedDate(Context context) {
7480
}
7581
//If both the content providers do not give the data, lets leave it to Jesus
7682
if (lastModifiedColumnIndex == -1) {
77-
return -1L;
83+
return -1l;
7884
}
7985
cursor.moveToFirst();
8086
return cursor.getLong(lastModifiedColumnIndex);
8187
} catch (Exception e) {
8288
return -1;////Could not fetch last_modified
8389
}
8490
}
91+
92+
@Override
93+
public void writeToParcel(Parcel parcel, int i) {
94+
parcel.writeParcelable(contentUri, 0);
95+
parcel.writeSerializable(file);
96+
}
8597
}

app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,14 @@
5454
import fr.free.nrw.commons.category.CategoryItem;
5555
import fr.free.nrw.commons.contributions.Contribution;
5656
import fr.free.nrw.commons.contributions.ContributionController;
57-
import fr.free.nrw.commons.contributions.UploadableFile;
57+
import fr.free.nrw.commons.filepicker.UploadableFile;
5858
import fr.free.nrw.commons.kvstore.JsonKvStore;
5959
import fr.free.nrw.commons.mwapi.MediaWikiApi;
6060
import fr.free.nrw.commons.nearby.Place;
6161
import fr.free.nrw.commons.theme.BaseActivity;
6262
import fr.free.nrw.commons.utils.DialogUtil;
6363
import fr.free.nrw.commons.utils.NetworkUtils;
6464
import fr.free.nrw.commons.utils.PermissionUtils;
65-
import fr.free.nrw.commons.utils.StringUtils;
6665
import fr.free.nrw.commons.utils.ViewUtil;
6766
import io.reactivex.Observable;
6867
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -73,8 +72,6 @@
7372
import static fr.free.nrw.commons.contributions.Contribution.SOURCE_EXTERNAL;
7473
import static fr.free.nrw.commons.contributions.ContributionController.ACTION_INTERNAL_UPLOADS;
7574
import static fr.free.nrw.commons.upload.UploadService.EXTRA_FILES;
76-
import static fr.free.nrw.commons.utils.ImageUtils.Result;
77-
import static fr.free.nrw.commons.utils.ImageUtils.getErrorMessageForResult;
7875
import static fr.free.nrw.commons.wikidata.WikidataConstants.PLACE_OBJECT;
7976

8077
public class UploadActivity extends BaseActivity implements UploadView, SimilarImageInterface {

app/src/main/java/fr/free/nrw/commons/upload/UploadModel.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
import fr.free.nrw.commons.Utils;
2020
import fr.free.nrw.commons.auth.SessionManager;
2121
import fr.free.nrw.commons.contributions.Contribution;
22-
import fr.free.nrw.commons.contributions.UploadableFile;
2322
import fr.free.nrw.commons.filepicker.MimeTypeMapWrapper;
23+
import fr.free.nrw.commons.filepicker.UploadableFile;
2424
import fr.free.nrw.commons.kvstore.BasicKvStore;
2525
import fr.free.nrw.commons.nearby.Place;
2626
import fr.free.nrw.commons.settings.Prefs;
@@ -100,6 +100,7 @@ private UploadItem getUploadItem(UploadableFile uploadableFile,
100100
SimilarImageInterface similarImageInterface) {
101101
fileProcessor.initFileDetails(Objects.requireNonNull(uploadableFile.getFilePath()), context.getContentResolver());
102102
long fileCreatedDate = uploadableFile.getFileCreatedDate(context);
103+
Timber.d("File created date is %d", fileCreatedDate);
103104
GPSExtractor gpsExtractor = fileProcessor.processFileCoordinates(similarImageInterface);
104105
return new UploadItem(Uri.parse(uploadableFile.getFilePath()), uploadableFile.getMimeType(context), source, gpsExtractor, place, fileCreatedDate);
105106
}
@@ -283,8 +284,11 @@ Observable<Contribution> buildContributions(List<String> categoryStringList) {
283284
contribution.setTag("mimeType", item.mimeType);
284285
contribution.setSource(item.source);
285286
contribution.setContentProviderUri(item.mediaUri);
287+
Timber.d("Created timestamp while building contribution is %s, %s",
288+
item.getCreatedTimestamp(),
289+
new Date(item.getCreatedTimestamp()));
286290
if (item.createdTimestamp != -1L) {
287-
contribution.setDateCreated(new Date(item.createdTimestamp));
291+
contribution.setDateCreated(new Date(item.getCreatedTimestamp()));
288292
//Set the date only if you have it, else the upload service is gonna try it the other way
289293
}
290294
return contribution;

app/src/main/java/fr/free/nrw/commons/upload/UploadPresenter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.lang.reflect.Proxy;
77
import java.util.ArrayList;
88
import java.util.List;
9-
import java.util.concurrent.TimeUnit;
109

1110
import javax.inject.Inject;
1211
import javax.inject.Named;
@@ -15,7 +14,7 @@
1514
import fr.free.nrw.commons.R;
1615
import fr.free.nrw.commons.category.CategoriesModel;
1716
import fr.free.nrw.commons.contributions.Contribution;
18-
import fr.free.nrw.commons.contributions.UploadableFile;
17+
import fr.free.nrw.commons.filepicker.UploadableFile;
1918
import fr.free.nrw.commons.kvstore.BasicKvStore;
2019
import fr.free.nrw.commons.kvstore.JsonKvStore;
2120
import fr.free.nrw.commons.nearby.Place;

app/src/test/kotlin/fr/free/nrw/commons/upload/UploadModelTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package fr.free.nrw.commons.upload
33
import android.app.Application
44
import android.content.Context
55
import fr.free.nrw.commons.auth.SessionManager
6-
import fr.free.nrw.commons.contributions.UploadableFile
6+
import fr.free.nrw.commons.filepicker.UploadableFile
77
import fr.free.nrw.commons.kvstore.BasicKvStore
88
import fr.free.nrw.commons.mwapi.MediaWikiApi
99
import fr.free.nrw.commons.nearby.Place

app/src/test/kotlin/fr/free/nrw/commons/upload/UploadPresenterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package fr.free.nrw.commons.upload
22

3-
import fr.free.nrw.commons.contributions.UploadableFile
3+
import fr.free.nrw.commons.filepicker.UploadableFile
44
import fr.free.nrw.commons.mwapi.MediaWikiApi
55
import fr.free.nrw.commons.nearby.Place
66
import io.reactivex.Observable

0 commit comments

Comments
 (0)