Merge "Move HUN car notifications into SystemUI" into qt-dev
diff --git a/packages/CarSystemUI/res/layout/super_status_bar.xml b/packages/CarSystemUI/res/layout/super_status_bar.xml
index 9a074dd..728a239a 100644
--- a/packages/CarSystemUI/res/layout/super_status_bar.xml
+++ b/packages/CarSystemUI/res/layout/super_status_bar.xml
@@ -74,17 +74,21 @@
android:layout_height="match_parent"
android:layout="@layout/car_fullscreen_user_switcher"/>
- <include layout="@layout/status_bar_expanded"
+ <include layout="@layout/notification_center_activity"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginBottom="@dimen/navigation_bar_height"
+ android:visibility="invisible"/>
+
+ <include layout="@layout/headsup_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible"/>
- <include layout="@layout/notification_center_activity"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginBottom="112dp"
- android:visibility="invisible"
- />
+ <include layout="@layout/status_bar_expanded"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="invisible"/>
<com.android.systemui.statusbar.ScrimView
android:id="@+id/scrim_in_front"
diff --git a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
index ae99126..8f8fd11 100644
--- a/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
+++ b/packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java
@@ -23,6 +23,7 @@
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
import android.car.drivingstate.CarDrivingStateEvent;
+import android.content.Context;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
@@ -38,10 +39,13 @@
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
+import com.android.car.notification.CarHeadsUpNotificationManager;
import com.android.car.notification.CarNotificationListener;
import com.android.car.notification.CarNotificationView;
import com.android.car.notification.CarUxRestrictionManagerWrapper;
+import com.android.car.notification.HeadsUpEntry;
import com.android.car.notification.NotificationClickHandlerFactory;
+import com.android.car.notification.NotificationDataManager;
import com.android.car.notification.NotificationViewController;
import com.android.car.notification.PreprocessingManager;
import com.android.internal.statusbar.RegisterStatusBarResult;
@@ -407,8 +411,13 @@
CarNotificationListener carNotificationListener = new CarNotificationListener();
CarUxRestrictionManagerWrapper carUxRestrictionManagerWrapper =
new CarUxRestrictionManagerWrapper();
+ NotificationDataManager notificationDataManager = new NotificationDataManager();
+ CarHeadsUpNotificationManager carHeadsUpNotificationManager =
+ new CarSystemUIHeadsUpNotificationManager(mContext, clickHandlerFactory,
+ notificationDataManager);
+
carNotificationListener.registerAsSystemService(mContext, carUxRestrictionManagerWrapper,
- clickHandlerFactory);
+ carHeadsUpNotificationManager, notificationDataManager);
mNotificationView = mStatusBarWindow.findViewById(R.id.notification_view);
View glassPane = mStatusBarWindow.findViewById(R.id.glass_pane);
@@ -1093,4 +1102,48 @@
super.onLongPress(e);
}
}
+
+ /**
+ * SystemUi version onf the notification manager that overrides methods such that the
+ * notifications end up in the status bar layouts instead of a standalone window.
+ */
+ private class CarSystemUIHeadsUpNotificationManager extends CarHeadsUpNotificationManager {
+
+ CarSystemUIHeadsUpNotificationManager(Context context,
+ NotificationClickHandlerFactory clickHandlerFactory,
+ NotificationDataManager notificationDataManager) {
+ super(context, clickHandlerFactory, notificationDataManager);
+ }
+
+ @Override
+ protected View createHeadsUpPanel() {
+ // In SystemUi the view is already in the window so just return a reference.
+ return mStatusBarWindow.findViewById(R.id.notification_headsup);
+ }
+
+ @Override
+ protected void addHeadsUpPanelToDisplay() {
+ // Set the panel initial state to invisible
+ mHeadsUpPanel.setVisibility(View.INVISIBLE);
+ }
+
+ @Override
+ protected void setHeadsUpVisible() {
+ super.setHeadsUpVisible();
+ if (mHeadsUpPanel.getVisibility() == View.VISIBLE) {
+ mStatusBarWindowController.setHeadsUpShowing(true);
+ mStatusBarWindowController.setForceStatusBarVisible(true);
+ }
+ }
+
+ @Override
+ protected void removeNotificationFromPanel(HeadsUpEntry currentHeadsUpNotification) {
+ super.removeNotificationFromPanel(currentHeadsUpNotification);
+ // If the panel ended up empty and hidden we can remove it from SystemUi
+ if (mHeadsUpPanel.getVisibility() != View.VISIBLE) {
+ mStatusBarWindowController.setHeadsUpShowing(false);
+ mStatusBarWindowController.setForceStatusBarVisible(false);
+ }
+ }
+ }
}