1020460b610d8196cb820ba390300e3fefda82f30Joe Onorato/* 2020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * Copyright (C) 2008 The Android Open Source Project 3020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * 4020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 5020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * you may not use this file except in compliance with the License. 6020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * You may obtain a copy of the License at 7020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * 8020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * http://www.apache.org/licenses/LICENSE-2.0 9020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * 10020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * Unless required by applicable law or agreed to in writing, software 11020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 12020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * See the License for the specific language governing permissions and 14020460b610d8196cb820ba390300e3fefda82f30Joe Onorato * limitations under the License. 15020460b610d8196cb820ba390300e3fefda82f30Joe Onorato */ 16020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 17020460b610d8196cb820ba390300e3fefda82f30Joe Onoratopackage com.android.systemui.statusbar.policy; 18020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 19020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.content.Context; 20020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.content.res.TypedArray; 21020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.graphics.Region; 22020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.graphics.drawable.AnimationDrawable; 23020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.graphics.drawable.Drawable; 24020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.os.RemoteException; 25020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.os.SystemClock; 26020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.os.ServiceManager; 27020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.util.AttributeSet; 28020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.util.Slog; 29020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.view.HapticFeedbackConstants; 30020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.view.IWindowManager; 31020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.view.InputDevice; 32020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.view.KeyCharacterMap; 33020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.view.KeyEvent; 34020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.view.MotionEvent; 35020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.view.View; 36020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.view.ViewConfiguration; 37020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.view.ViewTreeObserver; 38020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport android.widget.RemoteViews.RemoteView; 39020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 40020460b610d8196cb820ba390300e3fefda82f30Joe Onoratoimport com.android.systemui.R; 41020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 42020460b610d8196cb820ba390300e3fefda82f30Joe Onoratopublic class EventHole extends View implements ViewTreeObserver.OnComputeInternalInsetsListener { 43020460b610d8196cb820ba390300e3fefda82f30Joe Onorato private static final String TAG = "StatusBar.EventHole"; 44020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 45020460b610d8196cb820ba390300e3fefda82f30Joe Onorato private boolean mWindowVis; 46020460b610d8196cb820ba390300e3fefda82f30Joe Onorato private int[] mLoc = new int[2]; 47020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 48020460b610d8196cb820ba390300e3fefda82f30Joe Onorato public EventHole(Context context, AttributeSet attrs) { 49020460b610d8196cb820ba390300e3fefda82f30Joe Onorato this(context, attrs, 0); 50020460b610d8196cb820ba390300e3fefda82f30Joe Onorato } 51020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 52020460b610d8196cb820ba390300e3fefda82f30Joe Onorato public EventHole(Context context, AttributeSet attrs, int defStyle) { 53020460b610d8196cb820ba390300e3fefda82f30Joe Onorato super(context, attrs); 54020460b610d8196cb820ba390300e3fefda82f30Joe Onorato } 55020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 56020460b610d8196cb820ba390300e3fefda82f30Joe Onorato @Override 57020460b610d8196cb820ba390300e3fefda82f30Joe Onorato protected void onWindowVisibilityChanged(int visibility) { 58020460b610d8196cb820ba390300e3fefda82f30Joe Onorato super.onWindowVisibilityChanged(visibility); 59020460b610d8196cb820ba390300e3fefda82f30Joe Onorato mWindowVis = visibility == View.VISIBLE; 60020460b610d8196cb820ba390300e3fefda82f30Joe Onorato } 61020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 62020460b610d8196cb820ba390300e3fefda82f30Joe Onorato @Override 63020460b610d8196cb820ba390300e3fefda82f30Joe Onorato protected void onAttachedToWindow() { 64020460b610d8196cb820ba390300e3fefda82f30Joe Onorato super.onAttachedToWindow(); 65020460b610d8196cb820ba390300e3fefda82f30Joe Onorato getViewTreeObserver().addOnComputeInternalInsetsListener(this); 66020460b610d8196cb820ba390300e3fefda82f30Joe Onorato } 67020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 68020460b610d8196cb820ba390300e3fefda82f30Joe Onorato @Override 69020460b610d8196cb820ba390300e3fefda82f30Joe Onorato protected void onDetachedFromWindow() { 70020460b610d8196cb820ba390300e3fefda82f30Joe Onorato super.onDetachedFromWindow(); 71020460b610d8196cb820ba390300e3fefda82f30Joe Onorato getViewTreeObserver().removeOnComputeInternalInsetsListener(this); 72020460b610d8196cb820ba390300e3fefda82f30Joe Onorato } 73020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 74020460b610d8196cb820ba390300e3fefda82f30Joe Onorato public void onComputeInternalInsets(ViewTreeObserver.InternalInsetsInfo info) { 75020460b610d8196cb820ba390300e3fefda82f30Joe Onorato final boolean visible = isShown() && mWindowVis && getWidth() > 0 && getHeight() > 0; 76020460b610d8196cb820ba390300e3fefda82f30Joe Onorato final int[] loc = mLoc; 77020460b610d8196cb820ba390300e3fefda82f30Joe Onorato getLocationInWindow(loc); 78020460b610d8196cb820ba390300e3fefda82f30Joe Onorato final int l = loc[0]; 79020460b610d8196cb820ba390300e3fefda82f30Joe Onorato final int r = l + getWidth(); 80020460b610d8196cb820ba390300e3fefda82f30Joe Onorato final int t = loc[1]; 81020460b610d8196cb820ba390300e3fefda82f30Joe Onorato final int b = t + getHeight(); 82020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 83020460b610d8196cb820ba390300e3fefda82f30Joe Onorato View top = this; 84020460b610d8196cb820ba390300e3fefda82f30Joe Onorato while (top.getParent() instanceof View) { 85020460b610d8196cb820ba390300e3fefda82f30Joe Onorato top = (View)top.getParent(); 86020460b610d8196cb820ba390300e3fefda82f30Joe Onorato } 87020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 88020460b610d8196cb820ba390300e3fefda82f30Joe Onorato if (visible) { 89020460b610d8196cb820ba390300e3fefda82f30Joe Onorato info.setTouchableInsets( 90020460b610d8196cb820ba390300e3fefda82f30Joe Onorato ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION); 91020460b610d8196cb820ba390300e3fefda82f30Joe Onorato info.touchableRegion.set(0, 0, top.getWidth(), top.getHeight()); 92020460b610d8196cb820ba390300e3fefda82f30Joe Onorato info.touchableRegion.op(l, t, r, b, Region.Op.DIFFERENCE); 93020460b610d8196cb820ba390300e3fefda82f30Joe Onorato } else { 94020460b610d8196cb820ba390300e3fefda82f30Joe Onorato info.setTouchableInsets( 95020460b610d8196cb820ba390300e3fefda82f30Joe Onorato ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME); 96020460b610d8196cb820ba390300e3fefda82f30Joe Onorato } 97020460b610d8196cb820ba390300e3fefda82f30Joe Onorato } 98020460b610d8196cb820ba390300e3fefda82f30Joe Onorato} 99020460b610d8196cb820ba390300e3fefda82f30Joe Onorato 100