Bug 826639 - Force pending about:home updates to happen onDraw. r=lucasr

This commit is contained in:
Wes Johnston 2013-04-02 10:54:48 -07:00
Родитель 40376063b5
Коммит 87c6119c08
2 изменённых файлов: 34 добавлений и 5 удалений

Просмотреть файл

@ -14,6 +14,7 @@ import org.mozilla.gecko.util.ThreadUtils;
import android.content.Context;
import android.database.ContentObserver;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.ContextMenu.ContextMenuInfo;
@ -45,6 +46,7 @@ public class AboutHomeContent extends ScrollView
private Context mContext;
private BrowserApp mActivity;
private UriLoadCallback mUriLoadCallback = null;
private EnumSet<UpdateFlags> mPendingUpdates = EnumSet.noneOf(UpdateFlags.class);
private ContentObserver mTabsContentObserver = null;
@ -155,19 +157,44 @@ public class AboutHomeContent extends ScrollView
}
public void update(final EnumSet<UpdateFlags> flags) {
ThreadUtils.postToBackgroundThread(new Runnable() {
synchronized (mPendingUpdates) {
for (UpdateFlags flag : flags) {
if (!mPendingUpdates.contains(flag))
mPendingUpdates.add(flag);
}
}
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
// if any updates are pending, process them on a background thread
processPendingUpdates();
}
void processPendingUpdates() {
// during startup, this may be called before init()
final EnumSet<UpdateFlags> copiedUpdates;
synchronized (mPendingUpdates) {
if (mPendingUpdates.isEmpty())
return;
copiedUpdates = mPendingUpdates.clone();
mPendingUpdates = EnumSet.noneOf(UpdateFlags.class);
}
ThreadUtils.getBackgroundHandler().post(new Runnable() {
@Override
public void run() {
if (flags.contains(UpdateFlags.TOP_SITES))
if (copiedUpdates.contains(UpdateFlags.TOP_SITES))
loadTopSites();
if (flags.contains(UpdateFlags.PREVIOUS_TABS))
if (copiedUpdates.contains(UpdateFlags.PREVIOUS_TABS))
readLastTabs();
if (flags.contains(UpdateFlags.RECOMMENDED_ADDONS))
if (copiedUpdates.contains(UpdateFlags.RECOMMENDED_ADDONS))
readRecommendedAddons();
if (flags.contains(UpdateFlags.REMOTE_TABS))
if (copiedUpdates.contains(UpdateFlags.REMOTE_TABS))
loadRemoteTabs();
}
});

Просмотреть файл

@ -255,6 +255,7 @@ public class TopSitesView extends GridView {
} catch (OutOfMemoryError oom) {
Log.e(LOGTAG, "Unable to load thumbnail bitmap", oom);
thumbnailView.setImageResource(R.drawable.abouthome_thumbnail_bg);
thumbnailView.setBackgroundColor(mThumbnailBackground);
thumbnailView.setScaleType(ImageView.ScaleType.FIT_CENTER);
}
}
@ -274,6 +275,7 @@ public class TopSitesView extends GridView {
if (TextUtils.isEmpty(url)) {
holder.thumbnailView.setImageResource(R.drawable.abouthome_thumbnail_add);
holder.thumbnailView.setScaleType(ImageView.ScaleType.FIT_CENTER);
holder.thumbnailView.setBackgroundColor(mThumbnailBackground);
} else {
displayThumbnail(view, thumbnails.get(url));
}