зеркало из https://github.com/mozilla/gecko-dev.git
Bug 826639 - Force pending about:home updates to happen onDraw. r=lucasr
This commit is contained in:
Родитель
40376063b5
Коммит
87c6119c08
|
@ -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));
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче