Loading packages/SystemUI/res/layout-xlarge/status_bar.xml +2 −3 Original line number Diff line number Diff line Loading @@ -78,15 +78,14 @@ </LinearLayout> <!-- fake space bar zone --> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/fake_space_bar" <com.android.systemui.statusbar.policy.EventHole android:id="@+id/fake_space_bar" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_width="0dp" android:paddingLeft="8dip" android:paddingRight="8dip" android:layout_toRightOf="@+id/navigationArea" android:layout_toLeftOf="@+id/notificationArea" android:visibility="gone" systemui:keyCode="62" /> </RelativeLayout> </FrameLayout> Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/EventHole.java 0 → 100644 +99 −0 Original line number Diff line number Diff line /* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.statusbar.policy; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Region; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.os.RemoteException; import android.os.SystemClock; import android.os.ServiceManager; import android.util.AttributeSet; import android.util.Slog; import android.view.HapticFeedbackConstants; import android.view.IWindowManager; import android.view.InputDevice; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewTreeObserver; import android.widget.RemoteViews.RemoteView; import com.android.systemui.R; public class EventHole extends View implements ViewTreeObserver.OnComputeInternalInsetsListener { private static final String TAG = "StatusBar.EventHole"; private boolean mWindowVis; private int[] mLoc = new int[2]; public EventHole(Context context, AttributeSet attrs) { this(context, attrs, 0); } public EventHole(Context context, AttributeSet attrs, int defStyle) { super(context, attrs); } @Override protected void onWindowVisibilityChanged(int visibility) { super.onWindowVisibilityChanged(visibility); mWindowVis = visibility == View.VISIBLE; } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); getViewTreeObserver().addOnComputeInternalInsetsListener(this); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); getViewTreeObserver().removeOnComputeInternalInsetsListener(this); } public void onComputeInternalInsets(ViewTreeObserver.InternalInsetsInfo info) { final boolean visible = isShown() && mWindowVis && getWidth() > 0 && getHeight() > 0; final int[] loc = mLoc; getLocationInWindow(loc); final int l = loc[0]; final int r = l + getWidth(); final int t = loc[1]; final int b = t + getHeight(); View top = this; while (top.getParent() instanceof View) { top = (View)top.getParent(); } if (visible) { info.setTouchableInsets( ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION); info.touchableRegion.set(0, 0, top.getWidth(), top.getHeight()); info.touchableRegion.op(l, t, r, b, Region.Op.DIFFERENCE); } else { info.setTouchableInsets( ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME); } } } Loading
packages/SystemUI/res/layout-xlarge/status_bar.xml +2 −3 Original line number Diff line number Diff line Loading @@ -78,15 +78,14 @@ </LinearLayout> <!-- fake space bar zone --> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/fake_space_bar" <com.android.systemui.statusbar.policy.EventHole android:id="@+id/fake_space_bar" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_width="0dp" android:paddingLeft="8dip" android:paddingRight="8dip" android:layout_toRightOf="@+id/navigationArea" android:layout_toLeftOf="@+id/notificationArea" android:visibility="gone" systemui:keyCode="62" /> </RelativeLayout> </FrameLayout> Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/EventHole.java 0 → 100644 +99 −0 Original line number Diff line number Diff line /* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.statusbar.policy; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Region; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.Drawable; import android.os.RemoteException; import android.os.SystemClock; import android.os.ServiceManager; import android.util.AttributeSet; import android.util.Slog; import android.view.HapticFeedbackConstants; import android.view.IWindowManager; import android.view.InputDevice; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewTreeObserver; import android.widget.RemoteViews.RemoteView; import com.android.systemui.R; public class EventHole extends View implements ViewTreeObserver.OnComputeInternalInsetsListener { private static final String TAG = "StatusBar.EventHole"; private boolean mWindowVis; private int[] mLoc = new int[2]; public EventHole(Context context, AttributeSet attrs) { this(context, attrs, 0); } public EventHole(Context context, AttributeSet attrs, int defStyle) { super(context, attrs); } @Override protected void onWindowVisibilityChanged(int visibility) { super.onWindowVisibilityChanged(visibility); mWindowVis = visibility == View.VISIBLE; } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); getViewTreeObserver().addOnComputeInternalInsetsListener(this); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); getViewTreeObserver().removeOnComputeInternalInsetsListener(this); } public void onComputeInternalInsets(ViewTreeObserver.InternalInsetsInfo info) { final boolean visible = isShown() && mWindowVis && getWidth() > 0 && getHeight() > 0; final int[] loc = mLoc; getLocationInWindow(loc); final int l = loc[0]; final int r = l + getWidth(); final int t = loc[1]; final int b = t + getHeight(); View top = this; while (top.getParent() instanceof View) { top = (View)top.getParent(); } if (visible) { info.setTouchableInsets( ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION); info.touchableRegion.set(0, 0, top.getWidth(), top.getHeight()); info.touchableRegion.op(l, t, r, b, Region.Op.DIFFERENCE); } else { info.setTouchableInsets( ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME); } } }