Overhaul handling tab data updates
Bug: 2127502, 3191165
Pushed some state tracking to the tab for URL, title, favicon,
and lock status. This allowed me to remove many duplicate methods
of updating that data, preventing the UI from getting out of sync
with the web view.
Change-Id: I995caa98068ad03ca37710207b5ab57bb9d801ab
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index 1e9038d..7e0c5da 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -16,6 +16,8 @@
package com.android.browser;
+import com.android.browser.Tab.LockIcon;
+
import android.app.Activity;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -178,15 +180,12 @@
return false;
}
- // WebView callbacks
-
+ // Tab callbacks
@Override
- public void onPageStarted(Tab tab, String url, Bitmap favicon) {
- if (tab.inForeground()) {
- resetLockIcon(tab, url);
- setUrlTitle(tab, url, null);
- setFavicon(tab, favicon);
- }
+ public void onTabDataChanged(Tab tab) {
+ setUrlTitle(tab);
+ setFavicon(tab);
+ updateLockIconToLatest(tab);
}
@Override
@@ -195,16 +194,6 @@
}
@Override
- public void onPageFinished(Tab tab, String url) {
- if (tab.inForeground()) {
- // Reset the title and icon in case we stopped a provisional load.
- resetTitleAndIcon(tab);
- // Update the lock icon image only once we are done loading
- updateLockIconToLatest(tab);
- }
- }
-
- @Override
public void onPageStopped(Tab tab) {
cancelStopToast();
if (tab.inForeground()) {
@@ -231,6 +220,8 @@
mActiveTab = tab;
attachTabToContentView(tab);
setShouldShowErrorConsole(tab, mUiController.shouldShowErrorConsole());
+ onTabDataChanged(tab);
+ onProgressChanged(tab);
}
Tab getActiveTab() {
@@ -424,7 +415,7 @@
@Override
public void revertVoiceTitleBar(Tab tab) {
getEmbeddedTitleBar().setInVoiceMode(false);
- String url = tab.getCurrentUrl();
+ String url = tab.getUrl();
getEmbeddedTitleBar().setDisplayTitle(url);
getFakeTitleBar().setInVoiceMode(false);
getFakeTitleBar().setDisplayTitle(url);
@@ -524,81 +515,32 @@
// -------------------------------------------------------------------------
- @Override
- public void resetTitleAndRevertLockIcon(Tab tab) {
- tab.revertLockIcon();
- updateLockIconToLatest(tab);
- resetTitleIconAndProgress(tab);
- }
-
- /**
- * Resets the lock icon. This method is called when we start a new load and
- * know the url to be loaded.
- */
- private void resetLockIcon(Tab tab, String url) {
- // Save the lock-icon state (we revert to it if the load gets cancelled)
- tab.resetLockIcon(url);
- updateLockIconImage(Tab.LOCK_ICON_UNSECURE);
- }
-
/**
* Update the lock icon to correspond to our latest state.
*/
protected void updateLockIconToLatest(Tab t) {
- if (t != null) {
+ if (t != null && t.inForeground()) {
updateLockIconImage(t.getLockIconType());
}
}
/**
- * Reset the title, favicon, and progress.
- */
- protected void resetTitleIconAndProgress(Tab tab) {
- WebView current = tab.getWebView();
- if (current == null) {
- return;
- }
- resetTitleAndIcon(tab, current);
- int progress = current.getProgress();
- current.getWebChromeClient().onProgressChanged(current, progress);
- }
-
- @Override
- public void resetTitleAndIcon(Tab tab) {
- WebView current = tab.getWebView();
- if (current != null) {
- resetTitleAndIcon(tab, current);
- }
- }
-
- // Reset the title and the icon based on the given item.
- private void resetTitleAndIcon(Tab tab, WebView view) {
- WebHistoryItem item = view.copyBackForwardList().getCurrentItem();
- if (item != null) {
- setUrlTitle(tab, item.getUrl(), item.getTitle());
- setFavicon(tab, item.getFavicon());
- } else {
- setUrlTitle(tab, null, mActivity.getString(R.string.new_tab));
- setFavicon(tab, null);
- }
- }
-
- /**
* Updates the lock-icon image in the title-bar.
*/
- private void updateLockIconImage(int lockIconType) {
+ private void updateLockIconImage(LockIcon lockIconType) {
Drawable d = null;
- if (lockIconType == Tab.LOCK_ICON_SECURE) {
+ if (lockIconType == LockIcon.LOCK_ICON_SECURE) {
d = mSecLockIcon;
- } else if (lockIconType == Tab.LOCK_ICON_MIXED) {
+ } else if (lockIconType == LockIcon.LOCK_ICON_MIXED) {
d = mMixLockIcon;
}
getEmbeddedTitleBar().setLock(d);
getFakeTitleBar().setLock(d);
}
- @Override
- public void setUrlTitle(Tab tab, String url, String title) {
+ protected void setUrlTitle(Tab tab) {
+ String url = tab.getUrl();
+ String title = tab.getTitle();
if (TextUtils.isEmpty(title)) {
title = url;
}
@@ -610,10 +552,12 @@
}
// Set the favicon in the title bar.
- @Override
- public void setFavicon(Tab tab, Bitmap icon) {
- getEmbeddedTitleBar().setFavicon(icon);
- getFakeTitleBar().setFavicon(icon);
+ protected void setFavicon(Tab tab) {
+ if (tab.inForeground()) {
+ Bitmap icon = tab.getFavicon();
+ getEmbeddedTitleBar().setFavicon(icon);
+ getFakeTitleBar().setFavicon(icon);
+ }
}
@Override