From 3e8dd514a08773f3da306ca7b27ec4f71ecf7883 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Thu, 21 May 2015 13:27:58 -0700 Subject: [PATCH] Prevent ImmersiveModeCling from eating all touches Bug: 21330248 Bug: 19282730 Change-Id: I3982aa9582341032a41670fdf82e0321b84178d2 --- .../policy/ImmersiveModeConfirmation.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java index e720f3ebd312b..f99ca7a1ab609 100644 --- a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java +++ b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java @@ -36,10 +36,10 @@ import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; import android.view.WindowManager; import android.view.animation.Animation; import android.view.animation.AnimationUtils; -import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import android.widget.Button; import android.widget.FrameLayout; @@ -212,6 +212,25 @@ public class ImmersiveModeConfirmation { } }; + private ViewTreeObserver.OnComputeInternalInsetsListener mInsetsListener = + new ViewTreeObserver.OnComputeInternalInsetsListener() { + private final int[] mTmpInt2 = new int[2]; + + @Override + public void onComputeInternalInsets( + ViewTreeObserver.InternalInsetsInfo inoutInfo) { + // Set touchable region to cover the cling layout. + mClingLayout.getLocationInWindow(mTmpInt2); + inoutInfo.setTouchableInsets( + ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION); + inoutInfo.touchableRegion.set( + mTmpInt2[0], + mTmpInt2[1], + mTmpInt2[0] + mClingLayout.getWidth(), + mTmpInt2[1] + mClingLayout.getHeight()); + } + }; + private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -238,6 +257,8 @@ public class ImmersiveModeConfirmation { mWindowManager.getDefaultDisplay().getMetrics(metrics); float density = metrics.density; + getViewTreeObserver().addOnComputeInternalInsetsListener(mInsetsListener); + // create the confirmation cling mClingLayout = (ViewGroup) View.inflate(getContext(), R.layout.immersive_mode_cling, null);