Merge "Prepare for flexible system bars" into rvc-dev am: beb2f1f9ad

Change-Id: Ib8fccf379fc316cbd9cea2f361a36748882773eb
This commit is contained in:
Heemin Seog
2020-04-27 20:29:44 +00:00
committed by Automerger Merge Worker
7 changed files with 49 additions and 23 deletions

View File

@@ -33,7 +33,6 @@
android:gravity="top" android:gravity="top"
android:paddingTop="30dp" android:paddingTop="30dp"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/system_bar_background"
android:animateLayoutChanges="true"> android:animateLayoutChanges="true">
<com.android.systemui.car.navigationbar.CarNavigationButton <com.android.systemui.car.navigationbar.CarNavigationButton

View File

@@ -33,7 +33,6 @@
android:gravity="top" android:gravity="top"
android:paddingTop="30dp" android:paddingTop="30dp"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/system_bar_background"
android:animateLayoutChanges="true"> android:animateLayoutChanges="true">
<com.android.systemui.car.navigationbar.CarNavigationButton <com.android.systemui.car.navigationbar.CarNavigationButton

View File

@@ -36,7 +36,6 @@
android:gravity="top" android:gravity="top"
android:paddingTop="30dp" android:paddingTop="30dp"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/system_bar_background"
android:animateLayoutChanges="true"> android:animateLayoutChanges="true">
<com.android.systemui.car.navigationbar.CarNavigationButton <com.android.systemui.car.navigationbar.CarNavigationButton

View File

@@ -33,7 +33,6 @@
android:gravity="top" android:gravity="top"
android:paddingTop="30dp" android:paddingTop="30dp"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/system_bar_background"
android:animateLayoutChanges="true"> android:animateLayoutChanges="true">
<com.android.systemui.car.navigationbar.CarNavigationButton <com.android.systemui.car.navigationbar.CarNavigationButton

View File

@@ -19,7 +19,6 @@ package com.android.systemui.car.navigationbar;
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR; import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
import static android.view.InsetsState.ITYPE_STATUS_BAR; import static android.view.InsetsState.ITYPE_STATUS_BAR;
import static android.view.InsetsState.containsType; import static android.view.InsetsState.containsType;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;
@@ -28,7 +27,6 @@ import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.inputmethodservice.InputMethodService; import android.inputmethodservice.InputMethodService;
import android.os.Binder;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
@@ -354,33 +352,38 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks
WindowManager.LayoutParams lp = new WindowManager.LayoutParams( WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
height, height,
WindowManager.LayoutParams.TYPE_STATUS_BAR, WindowManager.LayoutParams.TYPE_STATUS_BAR_ADDITIONAL,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
PixelFormat.TRANSLUCENT); PixelFormat.TRANSLUCENT);
lp.token = new Binder();
lp.gravity = Gravity.TOP;
lp.setFitInsetsTypes(0 /* types */);
lp.setTitle("TopCarNavigationBar"); lp.setTitle("TopCarNavigationBar");
lp.packageName = mContext.getPackageName(); lp.providesInsetsTypes = new int[]{ITYPE_STATUS_BAR};
lp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; lp.setFitInsetsTypes(0);
lp.windowAnimations = 0;
lp.gravity = Gravity.TOP;
mWindowManager.addView(mTopNavigationBarWindow, lp); mWindowManager.addView(mTopNavigationBarWindow, lp);
} }
if (mBottomNavigationBarWindow != null && !mBottomNavBarVisible) { if (mBottomNavigationBarWindow != null && !mBottomNavBarVisible) {
mBottomNavBarVisible = true; mBottomNavBarVisible = true;
int height = mResources.getDimensionPixelSize(
com.android.internal.R.dimen.navigation_bar_height);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams( WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_NAVIGATION_BAR, height,
WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH,
PixelFormat.TRANSLUCENT); PixelFormat.TRANSLUCENT);
lp.setTitle("BottomCarNavigationBar"); lp.setTitle("BottomCarNavigationBar");
lp.providesInsetsTypes = new int[]{ITYPE_NAVIGATION_BAR};
lp.windowAnimations = 0; lp.windowAnimations = 0;
lp.gravity = Gravity.BOTTOM;
mWindowManager.addView(mBottomNavigationBarWindow, lp); mWindowManager.addView(mBottomNavigationBarWindow, lp);
} }
@@ -397,11 +400,10 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks
PixelFormat.TRANSLUCENT); PixelFormat.TRANSLUCENT);
leftlp.setTitle("LeftCarNavigationBar"); leftlp.setTitle("LeftCarNavigationBar");
leftlp.windowAnimations = 0; leftlp.windowAnimations = 0;
leftlp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR;
leftlp.gravity = Gravity.LEFT; leftlp.gravity = Gravity.LEFT;
leftlp.setFitInsetsTypes(0 /* types */);
mWindowManager.addView(mLeftNavigationBarWindow, leftlp); mWindowManager.addView(mLeftNavigationBarWindow, leftlp);
} }
if (mRightNavigationBarWindow != null) { if (mRightNavigationBarWindow != null) {
int width = mResources.getDimensionPixelSize( int width = mResources.getDimensionPixelSize(
R.dimen.car_right_navigation_bar_width); R.dimen.car_right_navigation_bar_width);
@@ -415,9 +417,7 @@ public class CarNavigationBar extends SystemUI implements CommandQueue.Callbacks
PixelFormat.TRANSLUCENT); PixelFormat.TRANSLUCENT);
rightlp.setTitle("RightCarNavigationBar"); rightlp.setTitle("RightCarNavigationBar");
rightlp.windowAnimations = 0; rightlp.windowAnimations = 0;
rightlp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR;
rightlp.gravity = Gravity.RIGHT; rightlp.gravity = Gravity.RIGHT;
rightlp.setFitInsetsTypes(0 /* types */);
mWindowManager.addView(mRightNavigationBarWindow, rightlp); mWindowManager.addView(mRightNavigationBarWindow, rightlp);
} }
} }

View File

@@ -20,7 +20,6 @@ import android.content.Context;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.android.systemui.R; import com.android.systemui.R;
@@ -160,8 +159,12 @@ public class CarNavigationBarController {
} }
/** Gets the top navigation bar with the appropriate listeners set. */ /** Gets the top navigation bar with the appropriate listeners set. */
@NonNull @Nullable
public CarNavigationBarView getTopBar(boolean isSetUp) { public CarNavigationBarView getTopBar(boolean isSetUp) {
if (!mShowTop) {
return null;
}
mTopView = mNavigationBarViewFactory.getTopBar(isSetUp); mTopView = mNavigationBarViewFactory.getTopBar(isSetUp);
setupBar(mTopView, mTopBarTouchListener, mNotificationsShadeController); setupBar(mTopView, mTopBarTouchListener, mNotificationsShadeController);
return mTopView; return mTopView;

View File

@@ -16,10 +16,14 @@
package com.android.systemui.car.navigationbar; package com.android.systemui.car.navigationbar;
import static android.view.WindowInsets.Type.systemBars;
import android.content.Context; import android.content.Context;
import android.graphics.Insets;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.WindowInsets;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.android.systemui.Dependency; import com.android.systemui.Dependency;
@@ -44,7 +48,6 @@ public class CarNavigationBarView extends LinearLayout {
// used to wire in open/close gestures for notifications // used to wire in open/close gestures for notifications
private OnTouchListener mStatusBarWindowTouchListener; private OnTouchListener mStatusBarWindowTouchListener;
public CarNavigationBarView(Context context, AttributeSet attrs) { public CarNavigationBarView(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
mConsumeTouchWhenPanelOpen = getResources().getBoolean( mConsumeTouchWhenPanelOpen = getResources().getBoolean(
@@ -75,6 +78,30 @@ public class CarNavigationBarView extends LinearLayout {
setClickable(true); setClickable(true);
} }
@Override
public WindowInsets onApplyWindowInsets(WindowInsets windowInsets) {
applyMargins(windowInsets.getInsets(systemBars()));
return windowInsets;
}
private void applyMargins(Insets insets) {
final int count = getChildCount();
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
if (child.getLayoutParams() instanceof LayoutParams) {
LayoutParams lp = (LayoutParams) child.getLayoutParams();
if (lp.rightMargin != insets.right || lp.leftMargin != insets.left
|| lp.topMargin != insets.top || lp.bottomMargin != insets.bottom) {
lp.rightMargin = insets.right;
lp.leftMargin = insets.left;
lp.topMargin = insets.top;
lp.bottomMargin = insets.bottom;
child.requestLayout();
}
}
}
}
// Used to forward touch events even if the touch was initiated from a child component // Used to forward touch events even if the touch was initiated from a child component
@Override @Override
public boolean onInterceptTouchEvent(MotionEvent ev) { public boolean onInterceptTouchEvent(MotionEvent ev) {