summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Taylor <tomtaylor@google.com>2012-10-04 11:30:15 -0700
committerTom Taylor <tomtaylor@google.com>2012-10-04 11:30:15 -0700
commit9c9df2773645d195dbf17df91d7cccdf5154fe84 (patch)
tree91a8d4e85e8ba17ad0f0c4e307da45ca70d364b2 /src
parentd2f67cfca13a6e415636dc253c371fb76974f5fa (diff)
downloadMms-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.java4
-rw-r--r--src/com/android/mms/model/VideoModel.java4
-rw-r--r--src/com/android/mms/ui/MessageItem.java9
-rw-r--r--src/com/android/mms/ui/MessageListItem.java2
-rw-r--r--src/com/android/mms/ui/MmsThumbnailPresenter.java11
-rw-r--r--src/com/android/mms/util/ItemLoadedFuture.java6
-rw-r--r--src/com/android/mms/util/NullItemLoadedFuture.java8
-rw-r--r--src/com/android/mms/util/PduLoaderManager.java21
-rw-r--r--src/com/android/mms/util/ThumbnailManager.java20
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