diff options
author | Tom Taylor <tomtaylor@google.com> | 2012-10-04 11:30:15 -0700 |
---|---|---|
committer | Tom Taylor <tomtaylor@google.com> | 2012-10-04 11:30:15 -0700 |
commit | 9c9df2773645d195dbf17df91d7cccdf5154fe84 (patch) | |
tree | 91a8d4e85e8ba17ad0f0c4e307da45ca70d364b2 /src | |
parent | d2f67cfca13a6e415636dc253c371fb76974f5fa (diff) | |
download | Mms-9c9df2773645d195dbf17df91d7cccdf5154fe84.tar.gz |
MMS not displaying image or text after sending
Bug 7276966
When a pdu or image is canceled during loading, remove the pdu/slideshow
or image from the cache so it's fully reloaded the next time the uri is
requested.
Change-Id: I0f898821cfc1ad75115f298394a4f2497c3e4706
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/mms/model/ImageModel.java | 4 | ||||
-rw-r--r-- | src/com/android/mms/model/VideoModel.java | 4 | ||||
-rw-r--r-- | src/com/android/mms/ui/MessageItem.java | 9 | ||||
-rw-r--r-- | src/com/android/mms/ui/MessageListItem.java | 2 | ||||
-rw-r--r-- | src/com/android/mms/ui/MmsThumbnailPresenter.java | 11 | ||||
-rw-r--r-- | src/com/android/mms/util/ItemLoadedFuture.java | 6 | ||||
-rw-r--r-- | src/com/android/mms/util/NullItemLoadedFuture.java | 8 | ||||
-rw-r--r-- | src/com/android/mms/util/PduLoaderManager.java | 21 | ||||
-rw-r--r-- | src/com/android/mms/util/ThumbnailManager.java | 20 |
9 files changed, 66 insertions, 19 deletions
diff --git a/src/com/android/mms/model/ImageModel.java b/src/com/android/mms/model/ImageModel.java index 1fede11c..46573f07 100644 --- a/src/com/android/mms/model/ImageModel.java +++ b/src/com/android/mms/model/ImageModel.java @@ -143,11 +143,11 @@ public class ImageModel extends RegionMediaModel { } public void cancelThumbnailLoading() { - if (mItemLoadedFuture != null) { + if (mItemLoadedFuture != null && !mItemLoadedFuture.isDone()) { if (Log.isLoggable(LogTag.APP, Log.DEBUG)) { Log.v(TAG, "cancelThumbnailLoading for: " + this); } - mItemLoadedFuture.cancel(); + mItemLoadedFuture.cancel(getUri()); mItemLoadedFuture = null; } } diff --git a/src/com/android/mms/model/VideoModel.java b/src/com/android/mms/model/VideoModel.java index 67f4be36..a426b42b 100644 --- a/src/com/android/mms/model/VideoModel.java +++ b/src/com/android/mms/model/VideoModel.java @@ -202,11 +202,11 @@ public class VideoModel extends RegionMediaModel { } public void cancelThumbnailLoading() { - if (mItemLoadedFuture != null) { + if (mItemLoadedFuture != null && !mItemLoadedFuture.isDone()) { if (Log.isLoggable(LogTag.APP, Log.DEBUG)) { Log.v(TAG, "cancelThumbnailLoading for: " + this); } - mItemLoadedFuture.cancel(); + mItemLoadedFuture.cancel(getUri()); mItemLoadedFuture = null; } } diff --git a/src/com/android/mms/ui/MessageItem.java b/src/com/android/mms/ui/MessageItem.java index 337f7d39..f01804dc 100644 --- a/src/com/android/mms/ui/MessageItem.java +++ b/src/com/android/mms/ui/MessageItem.java @@ -304,6 +304,11 @@ public class MessageItem { Log.e(TAG, "PduLoadedMessageItemCallback PDU couldn't be loaded: ", exception); return; } + if (mItemLoadedFuture != null) { + synchronized(mItemLoadedFuture) { + mItemLoadedFuture.setIsDone(true); + } + } PduLoaderManager.PduLoaded pduLoaded = (PduLoaderManager.PduLoaded)result; long timestamp = 0L; if (PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND == mMessageType) { @@ -399,11 +404,11 @@ public class MessageItem { } public void cancelPduLoading() { - if (mItemLoadedFuture != null) { + if (mItemLoadedFuture != null && !mItemLoadedFuture.isDone()) { if (Log.isLoggable(LogTag.APP, Log.DEBUG)) { Log.v(TAG, "cancelPduLoading for: " + this); } - mItemLoadedFuture.cancel(); + mItemLoadedFuture.cancel(mMessageUri); mItemLoadedFuture = null; } } diff --git a/src/com/android/mms/ui/MessageListItem.java b/src/com/android/mms/ui/MessageListItem.java index 98582c61..180e4eea 100644 --- a/src/com/android/mms/ui/MessageListItem.java +++ b/src/com/android/mms/ui/MessageListItem.java @@ -253,7 +253,7 @@ public class MessageListItem extends LinearLayout implements } private String buildTimestampLine(String timestamp) { - if (!mMultiRecipients || mMessageItem.isMe()) { + if (!mMultiRecipients || mMessageItem.isMe() || TextUtils.isEmpty(mMessageItem.mContact)) { // Never show "Me" for messages I sent. return timestamp; } diff --git a/src/com/android/mms/ui/MmsThumbnailPresenter.java b/src/com/android/mms/ui/MmsThumbnailPresenter.java index abcec2f7..45b10c66 100644 --- a/src/com/android/mms/ui/MmsThumbnailPresenter.java +++ b/src/com/android/mms/ui/MmsThumbnailPresenter.java @@ -26,11 +26,13 @@ import com.android.mms.model.SlideModel; import com.android.mms.model.SlideshowModel; import com.android.mms.model.VideoModel; import com.android.mms.util.ItemLoadedCallback; +import com.android.mms.util.ItemLoadedFuture; import com.android.mms.util.ThumbnailManager.ImageLoaded; public class MmsThumbnailPresenter extends Presenter { private static final String TAG = "MmsThumbnailPresenter"; private ItemLoadedCallback mOnLoadedCallback; + private ItemLoadedFuture mItemLoadedFuture; public MmsThumbnailPresenter(Context context, ViewInterface view, Model model) { super(context, view, model); @@ -61,6 +63,11 @@ public class MmsThumbnailPresenter extends Presenter { new ItemLoadedCallback<ImageLoaded>() { public void onItemLoaded(ImageLoaded imageLoaded, Throwable exception) { if (exception == null) { + if (mItemLoadedFuture != null) { + synchronized(mItemLoadedFuture) { + mItemLoadedFuture.setIsDone(true); + } + } if (mOnLoadedCallback != null) { mOnLoadedCallback.onItemLoaded(imageLoaded, exception); } else { @@ -80,11 +87,11 @@ public class MmsThumbnailPresenter extends Presenter { }; private void presentVideoThumbnail(SlideViewInterface view, VideoModel video) { - video.loadThumbnailBitmap(mImageLoadedCallback); + mItemLoadedFuture = video.loadThumbnailBitmap(mImageLoadedCallback); } private void presentImageThumbnail(SlideViewInterface view, ImageModel image) { - image.loadThumbnailBitmap(mImageLoadedCallback); + mItemLoadedFuture = image.loadThumbnailBitmap(mImageLoadedCallback); } protected void presentAudioThumbnail(SlideViewInterface view, AudioModel audio) { diff --git a/src/com/android/mms/util/ItemLoadedFuture.java b/src/com/android/mms/util/ItemLoadedFuture.java index 1076d6d3..509c5c61 100644 --- a/src/com/android/mms/util/ItemLoadedFuture.java +++ b/src/com/android/mms/util/ItemLoadedFuture.java @@ -16,6 +16,8 @@ package com.android.mms.util; +import android.net.Uri; + /** * Interface for querying the state of a pending item loading request. * @@ -29,5 +31,7 @@ public interface ItemLoadedFuture { */ boolean isDone(); - void cancel(); + void setIsDone(boolean done); + + void cancel(Uri uri); } diff --git a/src/com/android/mms/util/NullItemLoadedFuture.java b/src/com/android/mms/util/NullItemLoadedFuture.java index 87ae9f6c..6f331852 100644 --- a/src/com/android/mms/util/NullItemLoadedFuture.java +++ b/src/com/android/mms/util/NullItemLoadedFuture.java @@ -16,6 +16,8 @@ package com.android.mms.util; +import android.net.Uri; + /** * {@link PduFuture} for a pdu that is available now. * @@ -23,7 +25,7 @@ package com.android.mms.util; public class NullItemLoadedFuture implements ItemLoadedFuture { /** {@inheritDoc} */ - public void cancel() { + public void cancel(Uri uri) { // The callback has already been made, so there's nothing to cancel. } @@ -31,4 +33,8 @@ public class NullItemLoadedFuture implements ItemLoadedFuture { public boolean isDone() { return true; } + + @Override + public void setIsDone(boolean done) { + } } diff --git a/src/com/android/mms/util/PduLoaderManager.java b/src/com/android/mms/util/PduLoaderManager.java index f24af228..6ebcd307 100644 --- a/src/com/android/mms/util/PduLoaderManager.java +++ b/src/com/android/mms/util/PduLoaderManager.java @@ -110,11 +110,20 @@ public class PduLoaderManager extends BackgroundLoaderManager { mExecutor.execute(task); } return new ItemLoadedFuture() { - public void cancel() { + private boolean mIsDone; + + public void cancel(Uri uri) { cancelCallback(callback); + removePdu(uri); // the pdu and/or slideshow might be half loaded. Make sure + // we load fresh the next time this uri is requested. + } + + public void setIsDone(boolean done) { + mIsDone = done; } + public boolean isDone() { - return false; + return mIsDone; } }; } @@ -133,10 +142,12 @@ public class PduLoaderManager extends BackgroundLoaderManager { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "removePdu: " + uri); } - synchronized(mPduCache) { - mPduCache.purge(uri); + if (uri != null) { + synchronized(mPduCache) { + mPduCache.purge(uri); + } + mSlideshowCache.remove(uri); } - mSlideshowCache.remove(uri); } public String getTag() { diff --git a/src/com/android/mms/util/ThumbnailManager.java b/src/com/android/mms/util/ThumbnailManager.java index edafd16d..3834168d 100644 --- a/src/com/android/mms/util/ThumbnailManager.java +++ b/src/com/android/mms/util/ThumbnailManager.java @@ -159,13 +159,22 @@ public class ThumbnailManager extends BackgroundLoaderManager { mExecutor.execute(task); } return new ItemLoadedFuture() { + private boolean mIsDone; + @Override - public void cancel() { + public void cancel(Uri uri) { cancelCallback(callback); + removeThumbnail(uri); // if the thumbnail is half loaded, force a reload next time } + + @Override + public void setIsDone(boolean done) { + mIsDone = done; + } + @Override public boolean isDone() { - return false; + return mIsDone; } }; } @@ -193,7 +202,12 @@ public class ThumbnailManager extends BackgroundLoaderManager { } public void removeThumbnail(Uri uri) { - mThumbnailCache.remove(uri); + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "removeThumbnail: " + uri); + } + if (uri != null) { + mThumbnailCache.remove(uri); + } } @Override |