Skip to content

Commit 73a3bca

Browse files
bug fix commons-app#1854 wip
1 parent 27123f5 commit 73a3bca

File tree

3 files changed

+40
-43
lines changed

3 files changed

+40
-43
lines changed

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

+3
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,9 @@ private static boolean isMediaDocument(Uri uri) {
272272
* Check if the URI is owned by the current app.
273273
*/
274274
public static boolean isSelfOwned(Context context, Uri uri) {
275+
if(null == uri.getAuthority()){
276+
return false;
277+
}
275278
return uri.getAuthority().equals(context.getPackageName() + ".provider");
276279
}
277280

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

+30-5
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
1111
import android.content.Intent;
1212
import android.content.SharedPreferences;
1313
import android.content.pm.PackageManager;
14+
import android.database.Cursor;
1415
import android.graphics.Bitmap;
1516
import android.graphics.Point;
1617
import android.graphics.Rect;
1718
import android.net.Uri;
1819
import android.os.Build;
1920
import android.os.Bundle;
2021
import android.os.Environment;
22+
import android.provider.MediaStore;
2123
import android.support.annotation.NonNull;
2224
import android.support.annotation.RequiresApi;
2325
import android.support.design.widget.FloatingActionButton;
@@ -35,6 +37,7 @@
3537
import com.facebook.drawee.view.SimpleDraweeView;
3638
import com.github.chrisbanes.photoview.PhotoView;
3739

40+
import java.io.File;
3841
import java.io.FileNotFoundException;
3942
import java.io.IOException;
4043
import java.io.InputStream;
@@ -125,7 +128,6 @@ public class ShareActivity
125128
private String mimeType;
126129
private CategorizationFragment categorizationFragment;
127130
private Uri mediaUri;
128-
private Uri contentProviderUri;
129131
private Contribution contribution;
130132
private GPSExtractor gpsObj;
131133
private String decimalCoords;
@@ -214,7 +216,7 @@ private void uploadBegins() {
214216
Timber.d("Cache the categories found");
215217
}
216218

217-
uploadController.startUpload(title, contentProviderUri, mediaUri, description, mimeType, source, decimalCoords, wikiDataEntityId, c -> {
219+
uploadController.startUpload(title,mediaUri, description, mimeType, source, decimalCoords, wikiDataEntityId, c -> {
218220
ShareActivity.this.contribution = c;
219221
showPostUpload();
220222
});
@@ -354,9 +356,12 @@ private void receiveImageIntent() {
354356

355357
if (Intent.ACTION_SEND.equals(intent.getAction())) {
356358
mediaUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
357-
contentProviderUri = mediaUri;
358-
mediaUri = ContributionUtils.saveFileBeingUploadedTemporarily(this, mediaUri);
359-
359+
String imageFilePath = getImageFilePath(mediaUri);
360+
if(imageFilePath==null){
361+
//TODO handle this properly
362+
return;
363+
}
364+
mediaUri=Uri.parse(imageFilePath);
360365
if (intent.hasExtra(UploadService.EXTRA_SOURCE)) {
361366
source = intent.getStringExtra(UploadService.EXTRA_SOURCE);
362367
} else {
@@ -379,6 +384,26 @@ private void receiveImageIntent() {
379384
}
380385
}
381386

387+
public String getImageFilePath(Uri uri) {
388+
String path = null, image_id = null;
389+
390+
Cursor cursor1 = getContentResolver().query(uri, null, null, null, null);
391+
if (cursor1 != null) {
392+
cursor1.moveToFirst();
393+
image_id = cursor1.getString(0);
394+
image_id = image_id.substring(image_id.lastIndexOf(":") + 1);
395+
cursor1.close();
396+
}
397+
398+
Cursor cursor = getContentResolver().query(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, MediaStore.Images.Media._ID + " = ? ", new String[]{image_id}, null);
399+
if (cursor!=null) {
400+
cursor.moveToFirst();
401+
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
402+
cursor.close();
403+
}
404+
return path;
405+
}
406+
382407
/**
383408
* Function to display the zoom and map FAB
384409
*/

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

+7-38
Original file line numberDiff line numberDiff line change
@@ -96,38 +96,29 @@ public void cleanup() {
9696
* @param wikiDataEntityId
9797
* @param onComplete the progress tracker
9898
*/
99-
public void startUpload(String title, Uri contentProviderUri, Uri mediaUri, String description, String mimeType, String source, String decimalCoords, String wikiDataEntityId, ContributionUploadProgress onComplete) {
99+
public void startUpload(String title, Uri mediaUri, String description, String mimeType, String source, String decimalCoords, String wikiDataEntityId, ContributionUploadProgress onComplete) {
100100
Contribution contribution;
101-
102-
103-
//TODO: Modify this to include coords
104-
contribution = new Contribution(mediaUri, null, title, description, -1,
105-
null, null, sessionManager.getCurrentAccount().name,
106-
CommonsApplication.DEFAULT_EDIT_SUMMARY, decimalCoords);
107-
108-
109-
contribution.setTag("mimeType", mimeType);
110-
contribution.setSource(source);
111-
112101
Timber.d("Wikidata entity ID received from Share activity is %s", wikiDataEntityId);
113-
//TODO: Modify this to include coords
114102
Account currentAccount = sessionManager.getCurrentAccount();
115103
if(currentAccount == null) {
116104
Timber.d("Current account is null");
117105
ViewUtil.showLongToast(context, context.getString(R.string.user_not_logged_in));
118106
sessionManager.forceLogin(context);
119107
return;
120108
}
109+
String fileAbsolutePath = mediaUri.toString();
110+
File file=new File(fileAbsolutePath);
111+
long lastModified = file.lastModified();
112+
Date lastModifiedDate=new Date(lastModified);
121113
contribution = new Contribution(mediaUri, null, title, description, -1,
122-
null, null, currentAccount.name,
114+
lastModifiedDate, new Date(System.currentTimeMillis()), currentAccount.name,
123115
CommonsApplication.DEFAULT_EDIT_SUMMARY, decimalCoords);
124116

125117

126118
contribution.setTag("mimeType", mimeType);
127119
contribution.setSource(source);
128120
contribution.setWikiDataEntityId(wikiDataEntityId);
129-
contribution.setContentProviderUri(contentProviderUri);
130-
121+
contribution.setContentProviderUri(mediaUri);
131122
//Calls the next overloaded method
132123
startUpload(contribution, onComplete);
133124
}
@@ -188,36 +179,14 @@ protected Contribution doInBackground(Void... voids /* stare into you */) {
188179
}
189180

190181
String mimeType = (String) contribution.getTag("mimeType");
191-
Boolean imagePrefix = false;
192-
193182
if (mimeType == null || TextUtils.isEmpty(mimeType) || mimeType.endsWith("*")) {
194183
mimeType = contentResolver.getType(contribution.getLocalUri());
195184
}
196185

197186
if (mimeType != null) {
198187
contribution.setTag("mimeType", mimeType);
199-
imagePrefix = mimeType.startsWith("image/");
200188
Timber.d("MimeType is: %s", mimeType);
201189
}
202-
203-
if (imagePrefix && contribution.getDateCreated() == null) {
204-
Timber.d("local uri " + contribution.getLocalUri());
205-
Cursor cursor = contentResolver.query(contribution.getLocalUri(),
206-
new String[]{MediaStore.Images.ImageColumns.DATE_TAKEN}, null, null, null);
207-
if (cursor != null && cursor.getCount() != 0 && cursor.getColumnCount() != 0) {
208-
cursor.moveToFirst();
209-
Date dateCreated = new Date(cursor.getLong(0));
210-
Date epochStart = new Date(0);
211-
if (dateCreated.equals(epochStart) || dateCreated.before(epochStart)) {
212-
// If date is incorrect (1st second of unix time) then set it to the current date
213-
dateCreated = new Date();
214-
}
215-
contribution.setDateCreated(dateCreated);
216-
cursor.close();
217-
} else {
218-
contribution.setDateCreated(new Date());
219-
}
220-
}
221190
return contribution;
222191
}
223192

0 commit comments

Comments
 (0)