diff options
-rw-r--r-- | src/com/android/mail/browse/ConversationCursor.java | 32 | ||||
-rw-r--r-- | src/com/android/mail/photomanager/ContactPhotoManager.java | 2 | ||||
-rw-r--r-- | src/com/android/mail/utils/NotificationUtils.java | 6 |
3 files changed, 29 insertions, 11 deletions
diff --git a/src/com/android/mail/browse/ConversationCursor.java b/src/com/android/mail/browse/ConversationCursor.java index 75a0ea65b..7024f6e0e 100644 --- a/src/com/android/mail/browse/ConversationCursor.java +++ b/src/com/android/mail/browse/ConversationCursor.java @@ -312,6 +312,7 @@ public final class ConversationCursor implements Cursor, ConversationCursorOpera } mCachePos = pos + 1; } + System.gc(); } finally { Utils.traceEndSection(); } @@ -356,6 +357,7 @@ public final class ConversationCursor implements Cursor, ConversationCursorOpera * notes on thread safety. */ private int mCachePos; + private boolean mCachingEnabled = true; private final NewCursorUpdateObserver mCursorUpdateObserver; private boolean mUpdateObserverRegistered; @@ -453,18 +455,25 @@ public final class ConversationCursor implements Cursor, ConversationCursorOpera mCachePos = 0; } - private void startCaching() { + /** + * Resumes caching at {@link #mCachePos}. + * + * @return true if we actually resumed, false if we're done or stopped + */ + private boolean resumeCaching() { if (mCacheLoaderTask != null) { throw new IllegalStateException("unexpected existing task: " + mCacheLoaderTask); } - if (mCachePos < getCount()) { + if (mCachingEnabled && mCachePos < getCount()) { mCacheLoaderTask = new CacheLoaderTask(mCachePos); mCacheLoaderTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + return true; } + return false; } - private void stopCaching() { + private void pauseCaching() { if (mCacheLoaderTask != null) { LogUtils.i(LOG_TAG, "Cancelling caching startPos=%s pos=%s", mCacheLoaderTask.mStartPos, mCachePos); @@ -473,6 +482,11 @@ public final class ConversationCursor implements Cursor, ConversationCursorOpera } } + public void stopCaching() { + pauseCaching(); + mCachingEnabled = false; + } + public boolean contains(String uri) { return mConversationUriPositionMap.containsKey(uri); } @@ -538,13 +552,13 @@ public final class ConversationCursor implements Cursor, ConversationCursorOpera if (oldState != newState) { if (newState == DrawIdler.STATE_IDLE) { // begin/resume caching - startCaching(); - if (mCachePos < getCount()) { + final boolean resumed = resumeCaching(); + if (resumed) { LogUtils.i(LOG_TAG, "Resuming caching, pos=%s idler=%s", mCachePos, idler); } } else { // pause caching - stopCaching(); + pauseCaching(); } } } @@ -612,7 +626,9 @@ public final class ConversationCursor implements Cursor, ConversationCursorOpera } long time = System.currentTimeMillis(); + Utils.traceBeginSection("query"); final Cursor result = mResolver.query(uri, qProjection, null, null, null); + Utils.traceEndSection(); if (result == null) { LogUtils.w(LOG_TAG, "doQuery returning null cursor, uri: " + uri); } else if (DEBUG) { @@ -620,6 +636,7 @@ public final class ConversationCursor implements Cursor, ConversationCursorOpera LogUtils.i(LOG_TAG, "ConversationCursor query: %s, %dms, %d results", uri, time, result.getCount()); } + System.gc(); return new UnderlyingCursorWrapper(result); } @@ -1069,6 +1086,9 @@ public final class ConversationCursor implements Cursor, ConversationCursorOpera } return false; } + if (mUnderlyingCursor != null) { + mUnderlyingCursor.stopCaching(); + } mRefreshTask = new RefreshTask(); mRefreshTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } diff --git a/src/com/android/mail/photomanager/ContactPhotoManager.java b/src/com/android/mail/photomanager/ContactPhotoManager.java index 68a083c95..1b6eb44b8 100644 --- a/src/com/android/mail/photomanager/ContactPhotoManager.java +++ b/src/com/android/mail/photomanager/ContactPhotoManager.java @@ -56,7 +56,7 @@ public class ContactPhotoManager extends PhotoManager { } @Override - public LetterTileProvider getDefaultImageProvider() { + public DefaultImageProvider getDefaultImageProvider() { return mLetterTileProvider; } diff --git a/src/com/android/mail/utils/NotificationUtils.java b/src/com/android/mail/utils/NotificationUtils.java index 7873ffe1f..8b8b0d1f1 100644 --- a/src/com/android/mail/utils/NotificationUtils.java +++ b/src/com/android/mail/utils/NotificationUtils.java @@ -47,6 +47,7 @@ import com.android.mail.R; import com.android.mail.browse.MessageCursor; import com.android.mail.browse.SendersView; import com.android.mail.photomanager.ContactPhotoManager; +import com.android.mail.photomanager.LetterTileProvider; import com.android.mail.preferences.AccountPreferences; import com.android.mail.preferences.FolderPreferences; import com.android.mail.preferences.MailPrefs; @@ -1344,13 +1345,10 @@ public class NotificationUtils { if (icon == null) { // Make a colorful tile! - final ContactPhotoManager contactPhotoManager = - ContactPhotoManager.getInstance(context); - final Dimensions dimensions = new Dimensions(idealIconWidth, idealIconHeight, Dimensions.SCALE_ONE); - icon = contactPhotoManager.getDefaultImageProvider().getLetterTile(dimensions, + icon = new LetterTileProvider(context).getLetterTile(dimensions, displayName, senderAddress); } |