Index: chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java |
index 27c1180ef071fd4cd1539c7510872b53bb13117e..4cf82e2ba7b3688e62f29103fa6f317d93aae9e9 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java |
@@ -35,6 +35,7 @@ import org.chromium.chrome.browser.fullscreen.FullscreenHtmlApiHandler.Fullscree |
import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
import org.chromium.content.browser.ContentViewCore; |
+import java.lang.ref.WeakReference; |
import java.util.ArrayList; |
import java.util.HashSet; |
@@ -149,6 +150,35 @@ public class ChromeFullscreenManager |
} |
}; |
+ // This static inner class holds a WeakReference to the outer object, to avoid triggering the |
+ // lint HandlerLeak warning. |
+ private static class FullscreenHandler extends Handler { |
+ private final WeakReference<ChromeFullscreenManager> mChromeFullscreenManager; |
+ |
+ public FullscreenHandler(ChromeFullscreenManager chromeFullscreenManager) { |
+ mChromeFullscreenManager = new WeakReference<ChromeFullscreenManager>( |
+ chromeFullscreenManager); |
+ } |
+ |
+ @Override |
+ public void handleMessage(Message msg) { |
+ if (msg == null) return; |
+ ChromeFullscreenManager chromeFullscreenManager = mChromeFullscreenManager.get(); |
+ if (chromeFullscreenManager == null) return; |
+ switch (msg.what) { |
+ case MSG_ID_CONTROLS_REQUEST_LAYOUT: |
+ chromeFullscreenManager.mControlContainer.requestLayout(); |
+ break; |
+ case MSG_ID_HIDE_CONTROLS: |
+ chromeFullscreenManager.update(false); |
+ break; |
+ default: |
+ assert false : "Unexpected message for ID: " + msg.what; |
+ break; |
+ } |
+ } |
+ } |
+ |
/** |
* Creates an instance of the fullscreen mode manager. |
* @param activity The activity that supports fullscreen. |
@@ -167,23 +197,7 @@ public class ChromeFullscreenManager |
.registerWindowFocusChangedListener(this); |
mWindow = activity.getWindow(); |
- mHandler = new Handler() { |
- @Override |
- public void handleMessage(Message msg) { |
- if (msg == null) return; |
- switch (msg.what) { |
- case MSG_ID_CONTROLS_REQUEST_LAYOUT: |
- mControlContainer.requestLayout(); |
- break; |
- case MSG_ID_HIDE_CONTROLS: |
- update(false); |
- break; |
- default: |
- assert false : "Unexpected message for ID: " + msg.what; |
- break; |
- } |
- } |
- }; |
+ mHandler = new FullscreenHandler(this); |
setControlContainer(controlContainer); |
Resources resources = mWindow.getContext().getResources(); |
mControlContainerHeight = resources.getDimensionPixelSize(resControlContainerHeight); |