Merge "Change CarSystemUI notification button from launching Car Notification Center to opening the panel instead." into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
def2bc1aef
@@ -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"
|
||||
/>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user