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);