summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser/Controller.java
diff options
context:
space:
mode:
authorMichael Kolb <kolby@google.com>2010-11-30 11:34:01 -0800
committerMichael Kolb <kolby@google.com>2010-11-30 12:41:22 -0800
commit70976938146d1b13b9e183ceec41edce50c5d6af (patch)
tree6ac1b5e31c5cc220ed27815ea5d5e9eb63d77319 /src/com/android/browser/Controller.java
parenta713ec8cc9da6c0c8078cd297c6240eb8bf01bbb (diff)
downloadpackages_apps_Browser-70976938146d1b13b9e183ceec41edce50c5d6af.tar.gz
packages_apps_Browser-70976938146d1b13b9e183ceec41edce50c5d6af.tar.bz2
packages_apps_Browser-70976938146d1b13b9e183ceec41edce50c5d6af.zip
Fix NPE in pauseWebViewTimers
Bug: http://b/issue?id=3225410 added Tab parameter to pauseWebViewTimers removed unnecessary activityPaused parameter ensure tab is not null when called removed pauseCurrentTab method in TabControl changed resumeWebViewTimers to be consistent removed resumeCurrentTab from TabControl Change-Id: I1cdf6042aa4df4c832d91c5a19d7235d6dce2b5d
Diffstat (limited to 'src/com/android/browser/Controller.java')
-rw-r--r--src/com/android/browser/Controller.java54
1 files changed, 32 insertions, 22 deletions
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index b9bd9d73e..23921032f 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -548,13 +548,15 @@ public class Controller
Log.e(LOGTAG, "BrowserActivity is already paused.");
return;
}
- mTabControl.pauseCurrentTab();
mActivityPaused = true;
- if (mTabControl.getCurrentIndex() >= 0 &&
- !pauseWebViewTimers(mActivityPaused)) {
- mWakeLock.acquire();
- mHandler.sendMessageDelayed(mHandler
- .obtainMessage(RELEASE_WAKELOCK), WAKELOCK_TIMEOUT);
+ Tab tab = mTabControl.getCurrentTab();
+ if (tab != null) {
+ tab.pause();
+ if (!pauseWebViewTimers(tab)) {
+ mWakeLock.acquire();
+ mHandler.sendMessageDelayed(mHandler
+ .obtainMessage(RELEASE_WAKELOCK), WAKELOCK_TIMEOUT);
+ }
}
mUi.onPause();
mNetworkHandler.onPause();
@@ -580,10 +582,12 @@ public class Controller
Log.e(LOGTAG, "BrowserActivity is already resumed.");
return;
}
- mTabControl.resumeCurrentTab();
mActivityPaused = false;
- resumeWebViewTimers();
-
+ Tab current = mTabControl.getCurrentTab();
+ if (current != null) {
+ current.resume();
+ resumeWebViewTimers(current);
+ }
if (mWakeLock.isHeld()) {
mHandler.removeMessages(RELEASE_WAKELOCK);
mWakeLock.release();
@@ -593,9 +597,11 @@ public class Controller
WebView.enablePlatformNotifications();
}
- private void resumeWebViewTimers() {
- Tab tab = mTabControl.getCurrentTab();
- if (tab == null) return; // monkey can trigger this
+ /**
+ * resume all WebView timers using the WebView instance of the given tab
+ * @param tab guaranteed non-null
+ */
+ private void resumeWebViewTimers(Tab tab) {
boolean inLoad = tab.inPageLoad();
if ((!mActivityPaused && !inLoad) || (mActivityPaused && inLoad)) {
CookieSyncManager.getInstance().startSync();
@@ -606,19 +612,23 @@ public class Controller
}
}
- private boolean pauseWebViewTimers(boolean activityPaused) {
- Tab tab = mTabControl.getCurrentTab();
- boolean inLoad = tab.inPageLoad();
- if (activityPaused && !inLoad) {
+ /**
+ * Pause all WebView timers using the WebView of the given tab
+ * @param tab
+ * @return true if the timers are paused or tab is null
+ */
+ private boolean pauseWebViewTimers(Tab tab) {
+ if (tab == null) {
+ return true;
+ } else if (!tab.inPageLoad()) {
CookieSyncManager.getInstance().stopSync();
WebView w = getCurrentWebView();
if (w != null) {
w.pauseTimers();
}
return true;
- } else {
- return false;
}
+ return false;
}
void onDestroy() {
@@ -713,7 +723,7 @@ public class Controller
// to start the timer. As we won't switch tabs while an activity is in
// pause state, we can ensure calling resume and pause in pair.
if (mActivityPaused) {
- resumeWebViewTimers();
+ resumeWebViewTimers(tab);
}
mLoadStopped = false;
if (!mNetworkHandler.isNetworkUp()) {
@@ -754,7 +764,7 @@ public class Controller
}
// pause the WebView timer and release the wake lock if it is finished
// while BrowserActivity is in pause state.
- if (mActivityPaused && pauseWebViewTimers(mActivityPaused)) {
+ if (mActivityPaused && pauseWebViewTimers(tab)) {
if (mWakeLock.isHeld()) {
mHandler.removeMessages(RELEASE_WAKELOCK);
mWakeLock.release();
@@ -2317,7 +2327,7 @@ public class Controller
// force the tab's inLoad() to be false as we are going to
// either finish the activity or remove the tab. This will
// ensure pauseWebViewTimers() taking action.
- mTabControl.getCurrentTab().clearInPageLoad();
+ current.clearInPageLoad();
if (mTabControl.getTabCount() == 1) {
mActivity.finish();
return;
@@ -2326,7 +2336,7 @@ public class Controller
Log.e(LOGTAG, "BrowserActivity is already paused "
+ "while handing goBackOnePageOrQuit.");
}
- pauseWebViewTimers(true);
+ pauseWebViewTimers(current);
removeTab(current);
}
/*