diff options
Diffstat (limited to 'src/com/android/swe/browser/WebViewTimersControl.java')
-rw-r--r-- | src/com/android/swe/browser/WebViewTimersControl.java | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/com/android/swe/browser/WebViewTimersControl.java b/src/com/android/swe/browser/WebViewTimersControl.java new file mode 100644 index 00000000..d6d17263 --- /dev/null +++ b/src/com/android/swe/browser/WebViewTimersControl.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.browser; + +import android.os.Looper; +import android.util.Log; +import android.webkit.WebView; + +/** + * Centralised point for controlling WebView timers pausing and resuming. + * + * All methods on this class should only be called from the UI thread. + */ +public class WebViewTimersControl { + + private static final boolean LOGD_ENABLED = com.android.browser.Browser.LOGD_ENABLED; + private static final String LOGTAG = "WebViewTimersControl"; + + private static WebViewTimersControl sInstance; + + private boolean mBrowserActive; + private boolean mPrerenderActive; + + /** + * Get the static instance. Must be called from UI thread. + */ + public static WebViewTimersControl getInstance() { + if (Looper.myLooper() != Looper.getMainLooper()) { + throw new IllegalStateException("WebViewTimersControl.get() called on wrong thread"); + } + if (sInstance == null) { + sInstance = new WebViewTimersControl(); + } + return sInstance; + } + + private WebViewTimersControl() { + } + + private void resumeTimers(WebView wv) { + if (LOGD_ENABLED) Log.d(LOGTAG, "Resuming webview timers, view=" + wv); + if (wv != null) { + wv.resumeTimers(); + } + } + + private void maybePauseTimers(WebView wv) { + if (!mBrowserActive && !mPrerenderActive && wv != null) { + if (LOGD_ENABLED) Log.d(LOGTAG, "Pausing webview timers, view=" + wv); + wv.pauseTimers(); + } + } + + public void onBrowserActivityResume(WebView wv) { + if (LOGD_ENABLED) Log.d(LOGTAG, "onBrowserActivityResume"); + mBrowserActive = true; + resumeTimers(wv); + } + + public void onBrowserActivityPause(WebView wv) { + if (LOGD_ENABLED) Log.d(LOGTAG, "onBrowserActivityPause"); + mBrowserActive = false; + maybePauseTimers(wv); + } + + public void onPrerenderStart(WebView wv) { + if (LOGD_ENABLED) Log.d(LOGTAG, "onPrerenderStart"); + mPrerenderActive = true; + resumeTimers(wv); + } + + public void onPrerenderDone(WebView wv) { + if (LOGD_ENABLED) Log.d(LOGTAG, "onPrerenderDone"); + mPrerenderActive = false; + maybePauseTimers(wv); + } + +} |