mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
* Create utility class for contribution process * implement method to save five from given URİ * Add file utilities for directory checks * Add ContributionUtils for saving file during upload * Change method call acordingly with handleImagePicked() method * Call method to save file temproarily when a photo to upload is chosen from contributions list. * Call method to save file temproarily when a photo to upload is chosen from nearby list and map * Arrange method call * Write a method to save file temporarily during upload process. It will save the file to a internal path and it will be deleted by another method after upload process is done. * Add a method to save a file to a given path from a content provider Uri * On openAssetFileDescriptor method, use URi from temporarily saved file, instead of Contributions.getLocalUri which was Uri from content provider * Edit uploadContribution method so that it will use FileInputStream from temporarily saved file, insdeat of the Uri from content provider. * Make it work * Code cleanup * Add directory cleaner method * Call temp directory cleaner method at the end of uplpoad process * Use FileInputStream insted * Add directory cleaner method * Add file removal method * Use external directory instead * Make destination file name flexible * Make it work with share action coming from another activity * Make it work for Multiple hare Activity * Code cleanup * Solve camera issue * Fix camera crash * Cleanup * Revert change of commenting out posibly useles code, because I am not sure if it is useless or not. Requires discussion * Use timestamp in temoorary file names, so that we wont never create same file and access old file reference. It was a weird problem though * Code cleanup * Add nullable annotation to handleImagePicked method uri parameter * Add Nullable anotation to method * Code cleanup * Bugfix: use uri.getPath() instead uri.toString * Remove unecesarry file saving operation, which was added accidentally * Fix travis fail * Remove temp file if upload gets failed and file is still there * Code cleanup:Remove unused parameters from removeTempFile method * Empty temp directory on app create, in case some of files are still there * Add null check to array to prevent NPE on first run * Fix multiple uploads bug * Remove file if upload is succeed * Add external storage utility methods * Check external file permission before saving files temporarily * finish activity if permission is not granted * Add log lines * Remove files even if user decides to go back without sharing * Add easy null check * Change storage permission settings in singe upload fragment too * Finish app if permission is not granted * Code optimisation * Remove temp file if upload process never is finalised on activity stop * Bugfix maybe contribution is never created * Fix travis build
122 lines
3.9 KiB
Java
122 lines
3.9 KiB
Java
package fr.free.nrw.commons;
|
|
|
|
import android.content.Context;
|
|
import android.support.annotation.NonNull;
|
|
import android.support.annotation.Nullable;
|
|
import android.support.graphics.drawable.VectorDrawableCompat;
|
|
import android.support.v4.util.LruCache;
|
|
import android.text.TextUtils;
|
|
import android.util.AttributeSet;
|
|
import android.widget.Toast;
|
|
|
|
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
|
|
import com.facebook.drawee.view.SimpleDraweeView;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
import fr.free.nrw.commons.di.ApplicationlessInjection;
|
|
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
|
import timber.log.Timber;
|
|
|
|
public class MediaWikiImageView extends SimpleDraweeView {
|
|
@Inject MediaWikiApi mwApi;
|
|
@Inject LruCache<String, String> thumbnailUrlCache;
|
|
|
|
private ThumbnailFetchTask currentThumbnailTask;
|
|
|
|
public MediaWikiImageView(Context context) {
|
|
this(context, null);
|
|
init();
|
|
}
|
|
|
|
public MediaWikiImageView(Context context, AttributeSet attrs) {
|
|
this(context, attrs, 0);
|
|
init();
|
|
}
|
|
|
|
public MediaWikiImageView(Context context, AttributeSet attrs, int defStyle) {
|
|
super(context, attrs, defStyle);
|
|
init();
|
|
}
|
|
|
|
/**
|
|
* Sets the media. Fetches its thumbnail if necessary.
|
|
* @param media the new media
|
|
*/
|
|
public void setMedia(Media media) {
|
|
if (currentThumbnailTask != null) {
|
|
currentThumbnailTask.cancel(true);
|
|
}
|
|
if (media == null) {
|
|
return;
|
|
}
|
|
|
|
if (media.getFilename() != null && thumbnailUrlCache.get(media.getFilename()) != null) {
|
|
setImageUrl(thumbnailUrlCache.get(media.getFilename()));
|
|
} else {
|
|
setImageUrl(null);
|
|
currentThumbnailTask = new ThumbnailFetchTask(media, mwApi);
|
|
currentThumbnailTask.execute(media.getFilename());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onDetachedFromWindow() {
|
|
if (currentThumbnailTask != null) {
|
|
currentThumbnailTask.cancel(true);
|
|
}
|
|
super.onDetachedFromWindow();
|
|
}
|
|
|
|
/**
|
|
* Initializes MediaWikiImageView.
|
|
*/
|
|
private void init() {
|
|
ApplicationlessInjection
|
|
.getInstance(getContext()
|
|
.getApplicationContext())
|
|
.getCommonsApplicationComponent()
|
|
.inject(this);
|
|
setHierarchy(GenericDraweeHierarchyBuilder
|
|
.newInstance(getResources())
|
|
.setPlaceholderImage(VectorDrawableCompat.create(getResources(),
|
|
R.drawable.ic_image_black_24dp, getContext().getTheme()))
|
|
.setFailureImage(VectorDrawableCompat.create(getResources(),
|
|
R.drawable.ic_image_black_24dp, getContext().getTheme()))
|
|
.build());
|
|
}
|
|
|
|
/**
|
|
* Displays the image from the URL.
|
|
* @param url the URL of the image
|
|
*/
|
|
private void setImageUrl(@Nullable String url) {
|
|
setImageURI(url);
|
|
}
|
|
|
|
private class ThumbnailFetchTask extends MediaThumbnailFetchTask {
|
|
ThumbnailFetchTask(@NonNull Media media, @NonNull MediaWikiApi mwApi) {
|
|
super(media, mwApi);
|
|
}
|
|
|
|
@Override
|
|
protected void onPostExecute(String result) {
|
|
if (isCancelled()) {
|
|
return;
|
|
}
|
|
if (TextUtils.isEmpty(result) && media.getLocalUri() != null) {
|
|
result = media.getLocalUri().toString();
|
|
} else {
|
|
// only cache meaningful thumbnails received from network.
|
|
try {
|
|
thumbnailUrlCache.put(media.getFilename(), result);
|
|
} catch (NullPointerException npe) {
|
|
Timber.e("error when adding pic to cache " + npe);
|
|
|
|
Toast.makeText(getContext(), R.string.error_while_cache, Toast.LENGTH_SHORT).show();
|
|
}
|
|
}
|
|
setImageUrl(result);
|
|
}
|
|
}
|
|
}
|