Index: android_webview/java/src/org/chromium/android_webview/AwContents.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java |
index 19190c034521553d8b0566bc1c2233de33290510..7bbe6ec119ebab864ed490770aba261858d1d42e 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java |
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java |
@@ -80,7 +80,6 @@ import org.chromium.ui.base.ActivityWindowAndroid; |
import org.chromium.ui.base.PageTransition; |
import org.chromium.ui.base.ViewAndroidDelegate; |
import org.chromium.ui.base.WindowAndroid; |
-import org.chromium.ui.display.DisplayAndroid; |
import org.chromium.ui.display.DisplayAndroid.DisplayAndroidObserver; |
import java.io.File; |
@@ -120,7 +119,7 @@ public class AwContents implements SmartClipProvider { |
private static final boolean FORCE_AUXILIARY_BITMAP_RENDERING = |
"goldfish".equals(Build.HARDWARE) || "ranchu".equals(Build.HARDWARE); |
- private static final double MIN_SCREEN_PERCENTAGE_FOR_INTERSTITIAL = 0.7; |
+ private static final double MIN_SCREEN_HEIGHT_PERCENTAGE_FOR_INTERSTITIAL = 0.7; |
/** |
* WebKit hit test related data structure. These are used to implement |
@@ -2917,16 +2916,25 @@ public class AwContents implements SmartClipProvider { |
} |
/** |
- * Determine if at least one edge of the WebView extends over the edge of the device screen. |
+ * Determine if at least one edge of the WebView extends over the edge of the window. |
*/ |
- private boolean extendsOffDeviceScreen() { |
+ private boolean extendsOutOfWindow() { |
int loc[] = new int[2]; |
mContainerView.getLocationOnScreen(loc); |
int x = loc[0]; |
int y = loc[1]; |
- DisplayAndroid displayAndroid = mWindowAndroid.getWindowAndroid().getDisplay(); |
- if (x < 0 || y < 0 || x + mContainerView.getWidth() > displayAndroid.getDisplayWidth() |
- || y + mContainerView.getHeight() > displayAndroid.getDisplayHeight()) { |
+ mContainerView.getRootView().getLocationOnScreen(loc); |
+ int rootX = loc[0]; |
+ int rootY = loc[1]; |
+ |
+ // Get the position of the current view, relative to its root view |
+ int relativeX = x - rootX; |
+ int relativeY = y - rootY; |
+ |
+ if (relativeX < 0 || relativeY < 0 |
+ || relativeX + mContainerView.getWidth() > mContainerView.getRootView().getWidth() |
+ || relativeY + mContainerView.getHeight() |
+ > mContainerView.getRootView().getHeight()) { |
return true; |
} |
return false; |
@@ -2953,15 +2961,14 @@ public class AwContents implements SmartClipProvider { |
@CalledByNative |
protected boolean canShowBigInterstitial() { |
if (!canShowInterstitial()) return false; |
- if (extendsOffDeviceScreen()) return false; |
+ if (extendsOutOfWindow()) return false; |
- DisplayAndroid displayAndroid = mWindowAndroid.getWindowAndroid().getDisplay(); |
double percentOfScreenHeight = |
- (double) mContainerView.getHeight() / displayAndroid.getDisplayHeight(); |
+ (double) mContainerView.getHeight() / mContainerView.getRootView().getHeight(); |
- // If the WebView is full width and most of the height, it's probably the main UI. |
- return mContainerView.getWidth() == displayAndroid.getDisplayWidth() |
- && percentOfScreenHeight >= MIN_SCREEN_PERCENTAGE_FOR_INTERSTITIAL; |
+ // Make a guess as to whether the WebView is the predominant part of the UI |
+ return mContainerView.getWidth() == mContainerView.getRootView().getWidth() |
+ && percentOfScreenHeight >= MIN_SCREEN_HEIGHT_PERCENTAGE_FOR_INTERSTITIAL; |
} |
@VisibleForTesting |