Fix issues with media uploads restoring. Fixes #419. Fixes #308. (#425)

This commit is contained in:
Ivan Kupalov 2017-10-29 00:24:26 +04:00 committed by Konrad Pozniak
parent 671957da5a
commit bc59d4d938
1 changed files with 29 additions and 20 deletions

View File

@ -27,7 +27,6 @@ import android.content.res.AssetFileDescriptor;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.media.MediaMetadataRetriever; import android.media.MediaMetadataRetriever;
import android.media.ThumbnailUtils; import android.media.ThumbnailUtils;
@ -408,7 +407,8 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
} }
} else if (savedMediaQueued != null) { } else if (savedMediaQueued != null) {
for (SavedQueuedMedia item : savedMediaQueued) { for (SavedQueuedMedia item : savedMediaQueued) {
addMediaToQueue(item.type, item.preview, item.uri, item.mediaSize); Bitmap preview = getImageThumbnail(getContentResolver(), item.uri);
addMediaToQueue(item.type, preview, item.uri, item.mediaSize, item.readyStage);
} }
} else if (intent != null && savedInstanceState == null) { } else if (intent != null && savedInstanceState == null) {
/* Get incoming images being sent through a share action from another app. Only do this /* Get incoming images being sent through a share action from another app. Only do this
@ -464,8 +464,8 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
protected void onSaveInstanceState(Bundle outState) { protected void onSaveInstanceState(Bundle outState) {
ArrayList<SavedQueuedMedia> savedMediaQueued = new ArrayList<>(); ArrayList<SavedQueuedMedia> savedMediaQueued = new ArrayList<>();
for (QueuedMedia item : mediaQueued) { for (QueuedMedia item : mediaQueued) {
savedMediaQueued.add(new SavedQueuedMedia(item.type, item.uri, item.preview, savedMediaQueued.add(new SavedQueuedMedia(item.type, item.uri,
item.mediaSize)); item.mediaSize, item.readyStage));
} }
outState.putParcelableArrayList("savedMediaQueued", savedMediaQueued); outState.putParcelableArrayList("savedMediaQueued", savedMediaQueued);
outState.putBoolean("showMarkSensitive", showMarkSensitive); outState.putBoolean("showMarkSensitive", showMarkSensitive);
@ -605,8 +605,12 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
File directory; File directory;
switch (item.type) { switch (item.type) {
default: default:
case IMAGE: directory = imageDirectory; break; case IMAGE:
case VIDEO: directory = videoDirectory; break; directory = imageDirectory;
break;
case VIDEO:
directory = videoDirectory;
break;
} }
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US) String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US)
.format(new Date()); .format(new Date());
@ -1145,8 +1149,9 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
R.attr.compose_media_button_disabled_tint); R.attr.compose_media_button_disabled_tint);
} }
private void addMediaToQueue(QueuedMedia.Type type, Bitmap preview, Uri uri, long mediaSize) { private void addMediaToQueue(QueuedMedia.Type type, Bitmap preview, Uri uri, long mediaSize, QueuedMedia.ReadyStage readyStage) {
final QueuedMedia item = new QueuedMedia(type, uri, new ImageView(this), mediaSize); final QueuedMedia item = new QueuedMedia(type, uri, new ImageView(this), mediaSize);
item.readyStage = readyStage;
ImageView view = item.preview; ImageView view = item.preview;
Resources resources = getResources(); Resources resources = getResources();
int side = resources.getDimensionPixelSize(R.dimen.compose_media_preview_side); int side = resources.getDimensionPixelSize(R.dimen.compose_media_preview_side);
@ -1186,6 +1191,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
if (queuedCount >= 1) { if (queuedCount >= 1) {
showMarkSensitive(true); showMarkSensitive(true);
} }
if (item.readyStage != QueuedMedia.ReadyStage.UPLOADED) {
waitForMediaLatch.countUp(); waitForMediaLatch.countUp();
if (mediaSize > STATUS_MEDIA_SIZE_LIMIT && type == QueuedMedia.Type.IMAGE) { if (mediaSize > STATUS_MEDIA_SIZE_LIMIT && type == QueuedMedia.Type.IMAGE) {
downsizeMedia(item); downsizeMedia(item);
@ -1193,6 +1199,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
uploadMedia(item); uploadMedia(item);
} }
} }
}
private void removeMediaFromQueue(QueuedMedia item) { private void removeMediaFromQueue(QueuedMedia item) {
mediaPreviewBar.removeView(item.preview); mediaPreviewBar.removeView(item.preview);
@ -1309,6 +1316,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
private void onUploadSuccess(final QueuedMedia item, Media media) { private void onUploadSuccess(final QueuedMedia item, Media media) {
item.id = media.id; item.id = media.id;
item.readyStage = QueuedMedia.ReadyStage.UPLOADED;
/* Add the upload URL to the text field. Also, keep a reference to the span so if the user /* Add the upload URL to the text field. Also, keep a reference to the span so if the user
* chooses to remove the media, the URL is also automatically removed. */ * chooses to remove the media, the URL is also automatically removed. */
@ -1427,7 +1435,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
} }
Bitmap bitmap = getVideoThumbnail(this, uri); Bitmap bitmap = getVideoThumbnail(this, uri);
if (bitmap != null) { if (bitmap != null) {
addMediaToQueue(QueuedMedia.Type.VIDEO, bitmap, uri, mediaSize); addMediaToQueue(QueuedMedia.Type.VIDEO, bitmap, uri, mediaSize, null);
} else { } else {
displayTransientError(R.string.error_media_upload_opening); displayTransientError(R.string.error_media_upload_opening);
} }
@ -1436,7 +1444,7 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
case "image": { case "image": {
Bitmap bitmap = getImageThumbnail(contentResolver, uri); Bitmap bitmap = getImageThumbnail(contentResolver, uri);
if (bitmap != null) { if (bitmap != null) {
addMediaToQueue(QueuedMedia.Type.IMAGE, bitmap, uri, mediaSize); addMediaToQueue(QueuedMedia.Type.IMAGE, bitmap, uri, mediaSize, null);
} else { } else {
displayTransientError(R.string.error_media_upload_opening); displayTransientError(R.string.error_media_upload_opening);
} }
@ -1532,7 +1540,8 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
enum ReadyStage { enum ReadyStage {
DOWNSIZING, DOWNSIZING,
UPLOADING UPLOADING,
UPLOADED
} }
} }
@ -1552,21 +1561,21 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
}; };
QueuedMedia.Type type; QueuedMedia.Type type;
Uri uri; Uri uri;
Bitmap preview;
long mediaSize; long mediaSize;
QueuedMedia.ReadyStage readyStage;
SavedQueuedMedia(QueuedMedia.Type type, Uri uri, ImageView view, long mediaSize) { SavedQueuedMedia(QueuedMedia.Type type, Uri uri, long mediaSize, QueuedMedia.ReadyStage readyStage) {
this.type = type; this.type = type;
this.uri = uri; this.uri = uri;
this.preview = ((BitmapDrawable) view.getDrawable()).getBitmap();
this.mediaSize = mediaSize; this.mediaSize = mediaSize;
this.readyStage = readyStage;
} }
SavedQueuedMedia(Parcel parcel) { SavedQueuedMedia(Parcel parcel) {
type = (QueuedMedia.Type) parcel.readSerializable(); type = (QueuedMedia.Type) parcel.readSerializable();
uri = parcel.readParcelable(Uri.class.getClassLoader()); uri = parcel.readParcelable(Uri.class.getClassLoader());
preview = parcel.readParcelable(Bitmap.class.getClassLoader());
mediaSize = parcel.readLong(); mediaSize = parcel.readLong();
readyStage = QueuedMedia.ReadyStage.valueOf(parcel.readString());
} }
@Override @Override
@ -1578,8 +1587,8 @@ public class ComposeActivity extends BaseActivity implements ComposeOptionsFragm
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeSerializable(type); dest.writeSerializable(type);
dest.writeParcelable(uri, flags); dest.writeParcelable(uri, flags);
dest.writeParcelable(preview, flags);
dest.writeLong(mediaSize); dest.writeLong(mediaSize);
dest.writeString(readyStage.name());
} }
} }