Merge "Change CarSystemUI notification button from launching Car Notification Center to opening the panel instead." into qt-dev

This commit is contained in:
TreeHugger Robot
2019-04-24 20:15:26 +00:00
committed by Android (Google) Code Review
3 changed files with 48 additions and 9 deletions

View File

@@ -108,12 +108,13 @@
android:layout_height="match_parent"
android:layout_weight="1"/>
<com.android.systemui.statusbar.car.CarFacetButton
android:id="@+id/note"
<!-- Click handling will be initialized in CarNavigationBarView because its
id = notifications which is treated special for the opening of the notification panel
-->
<com.android.systemui.statusbar.car.CarNavigationButton
android:id="@+id/notifications"
style="@style/NavigationBarButton"
systemui:icon="@drawable/car_ic_notification"
systemui:intent="intent:#Intent;component=com.android.car.notification/.CarNotificationCenterActivity;launchFlags=0x14000000;end"
systemui:packages="com.android.car.notification"
android:src="@drawable/car_ic_notification"
systemui:selectedIcon="@drawable/car_ic_notification_selected"
systemui:useMoreIcon="false"
/>

View File

@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.car;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
@@ -34,7 +35,7 @@ import com.android.systemui.statusbar.phone.StatusBarIconController;
*/
class CarNavigationBarView extends LinearLayout {
private View mNavButtons;
private CarFacetButton mNotificationsButton;
private View mNotificationsButton;
private CarStatusBar mCarStatusBar;
private Context mContext;
private View mLockScreenButtons;
@@ -74,13 +75,39 @@ class CarNavigationBarView extends LinearLayout {
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (mStatusBarWindowTouchListener != null) {
// forward touch events to the status bar window so it can add a drag down
boolean shouldConsumeEvent = shouldConsumeNotificationButtonEvent(ev);
// Forward touch events to the status bar window so it can drag
// windows if required (Notification shade)
mStatusBarWindowTouchListener.onTouch(this, ev);
// return true if child views should not receive this event.
if (shouldConsumeEvent) {
return true;
}
}
return super.onInterceptTouchEvent(ev);
}
/**
* If the motion event is over top of the notification button while the notification
* panel is open, we need the statusbar touch listeners handle the event instead of the button.
* Since the statusbar listener will trigger a close of the notification panel before the
* any button click events are fired this will prevent reopening the panel.
*
* Note: we can't use requestDisallowInterceptTouchEvent because the gesture detector will
* always receive the ACTION_DOWN and thus think a longpress happened if no other events are
* received
*
* @return true if the notification button should not receive the event
*/
private boolean shouldConsumeNotificationButtonEvent(MotionEvent ev) {
if (mNotificationsButton == null || !mCarStatusBar.isNotificationPanelOpen()) {
return false;
}
Rect notificationButtonLocation = new Rect();
mNotificationsButton.getHitRect(notificationButtonLocation);
return notificationButtonLocation.contains((int) ev.getX(), (int) ev.getY());
}
void setStatusBar(CarStatusBar carStatusBar) {
mCarStatusBar = carStatusBar;

View File

@@ -349,7 +349,9 @@ public class CarStatusBar extends StatusBar implements
new CloseNotificationGestureListener() {
@Override
protected void close() {
animateCollapsePanels();
if (mPanelExpanded) {
animateCollapsePanels();
}
}
});
// Attached to the NavBars to close the notification shade
@@ -357,7 +359,9 @@ public class CarStatusBar extends StatusBar implements
new NavBarCloseNotificationGestureListener() {
@Override
protected void close() {
animateCollapsePanels();
if (mPanelExpanded) {
animateCollapsePanels();
}
}
});
mNavBarNotificationTouchListener =
@@ -520,6 +524,13 @@ public class CarStatusBar extends StatusBar implements
mNotificationViewController.enable();
}
/**
* @return true if the notification panel is currently visible
*/
boolean isNotificationPanelOpen() {
return mPanelExpanded;
}
@Override
public void animateExpandNotificationsPanel() {
if (!mCommandQueue.panelsEnabled() || !mUserSetup) {