diff --git a/packages/CarSystemUI/res/drawable/headsup_scrim_bottom.xml b/packages/CarSystemUI/res/drawable/headsup_scrim_bottom.xml
deleted file mode 100644
index 1724ef008269a..0000000000000
--- a/packages/CarSystemUI/res/drawable/headsup_scrim_bottom.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
diff --git a/packages/CarSystemUI/res/layout/headsup_container_bottom.xml b/packages/CarSystemUI/res/layout/headsup_container_bottom.xml
deleted file mode 100644
index 5aab0a172b99f..0000000000000
--- a/packages/CarSystemUI/res/layout/headsup_container_bottom.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/packages/CarSystemUI/res/values/config.xml b/packages/CarSystemUI/res/values/config.xml
index b6179edfb0637..61963ace08016 100644
--- a/packages/CarSystemUI/res/values/config.xml
+++ b/packages/CarSystemUI/res/values/config.xml
@@ -70,13 +70,6 @@
true
-
- false
true
false
diff --git a/packages/CarSystemUI/src/com/android/systemui/car/notification/CarHeadsUpNotificationSystemContainer.java b/packages/CarSystemUI/src/com/android/systemui/car/notification/CarHeadsUpNotificationSystemContainer.java
index 3b22a30857a9b..98b1fc4ae7c00 100644
--- a/packages/CarSystemUI/src/com/android/systemui/car/notification/CarHeadsUpNotificationSystemContainer.java
+++ b/packages/CarSystemUI/src/com/android/systemui/car/notification/CarHeadsUpNotificationSystemContainer.java
@@ -17,45 +17,41 @@
package com.android.systemui.car.notification;
import android.content.Context;
-import android.content.res.Resources;
import android.graphics.PixelFormat;
import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
-import com.android.car.notification.R;
import com.android.car.notification.headsup.CarHeadsUpNotificationContainer;
import com.android.systemui.car.CarDeviceProvisionedController;
import com.android.systemui.car.window.OverlayViewGlobalStateController;
import com.android.systemui.dagger.SysUISingleton;
-import com.android.systemui.dagger.qualifiers.Main;
import javax.inject.Inject;
/**
* A controller for SysUI's HUN display.
+ *
+ * Used to attach HUNs views to window and determine whether to show HUN panel.
*/
@SysUISingleton
-public class CarHeadsUpNotificationSystemContainer implements CarHeadsUpNotificationContainer {
+public class CarHeadsUpNotificationSystemContainer extends CarHeadsUpNotificationContainer {
+ private static final String WINDOW_TITLE = "HeadsUpNotification";
private final CarDeviceProvisionedController mCarDeviceProvisionedController;
private final OverlayViewGlobalStateController mOverlayViewGlobalStateController;
- private final ViewGroup mWindow;
- private final ViewGroup mHeadsUpContentFrame;
-
@Inject
CarHeadsUpNotificationSystemContainer(Context context,
- @Main Resources resources,
CarDeviceProvisionedController deviceProvisionedController,
WindowManager windowManager,
OverlayViewGlobalStateController overlayViewGlobalStateController) {
+ super(context, windowManager);
mCarDeviceProvisionedController = deviceProvisionedController;
mOverlayViewGlobalStateController = overlayViewGlobalStateController;
+ }
- boolean showOnBottom = resources.getBoolean(R.bool.config_showHeadsUpNotificationOnBottom);
-
+ @Override
+ protected WindowManager.LayoutParams getWindowManagerLayoutParams() {
// Use TYPE_STATUS_BAR_SUB_PANEL window type since we need to find a window that is above
// status bar but below navigation bar.
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
@@ -66,45 +62,15 @@ public class CarHeadsUpNotificationSystemContainer implements CarHeadsUpNotifica
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT);
- lp.gravity = showOnBottom ? Gravity.BOTTOM : Gravity.TOP;
- lp.setTitle("HeadsUpNotification");
+ lp.gravity = getShowHunOnBottom() ? Gravity.BOTTOM : Gravity.TOP;
+ lp.setTitle(WINDOW_TITLE);
- int layoutId = showOnBottom
- ? R.layout.headsup_container_bottom
- : R.layout.headsup_container;
- mWindow = (ViewGroup) LayoutInflater.from(context).inflate(layoutId, null, false);
- windowManager.addView(mWindow, lp);
- mWindow.setVisibility(View.INVISIBLE);
- mHeadsUpContentFrame = mWindow.findViewById(R.id.headsup_content);
- }
-
- private void animateShow() {
- if (mCarDeviceProvisionedController.isCurrentUserFullySetup()
- && mOverlayViewGlobalStateController.shouldShowHUN()) {
- mWindow.setVisibility(View.VISIBLE);
- }
- }
-
- private void animateHide() {
- mWindow.setVisibility(View.INVISIBLE);
+ return lp;
}
@Override
- public void displayNotification(View notificationView) {
- mHeadsUpContentFrame.addView(notificationView);
- animateShow();
- }
-
- @Override
- public void removeNotification(View notificationView) {
- mHeadsUpContentFrame.removeView(notificationView);
- if (mHeadsUpContentFrame.getChildCount() == 0) {
- animateHide();
- }
- }
-
- @Override
- public boolean isVisible() {
- return mWindow.getVisibility() == View.VISIBLE;
+ public boolean shouldShowHunPanel() {
+ return mCarDeviceProvisionedController.isCurrentUserFullySetup()
+ && mOverlayViewGlobalStateController.shouldShowHUN();
}
}
diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/car/notification/CarHeadsUpNotificationSystemContainerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/car/notification/CarHeadsUpNotificationSystemContainerTest.java
index 384888ab42c3c..19b7f7baf1c8d 100644
--- a/packages/CarSystemUI/tests/src/com/android/systemui/car/notification/CarHeadsUpNotificationSystemContainerTest.java
+++ b/packages/CarSystemUI/tests/src/com/android/systemui/car/notification/CarHeadsUpNotificationSystemContainerTest.java
@@ -22,12 +22,12 @@ import static org.mockito.Mockito.when;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
-import android.testing.TestableResources;
import android.view.View;
import android.view.WindowManager;
import androidx.test.filters.SmallTest;
+import com.android.car.notification.CarNotificationTypeItem;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.car.CarDeviceProvisionedController;
import com.android.systemui.car.CarSystemUiTest;
@@ -64,37 +64,41 @@ public class CarHeadsUpNotificationSystemContainerTest extends SysuiTestCase {
when(mOverlayViewGlobalStateController.shouldShowHUN()).thenReturn(true);
when(mCarDeviceProvisionedController.isCurrentUserFullySetup()).thenReturn(true);
- TestableResources testableResources = mContext.getOrCreateTestableResources();
+ mContext.ensureTestableResources();
mCarHeadsUpNotificationSystemContainer = new CarHeadsUpNotificationSystemContainer(mContext,
- testableResources.getResources(), mCarDeviceProvisionedController, mWindowManager,
- mOverlayViewGlobalStateController);
+ mCarDeviceProvisionedController, mWindowManager, mOverlayViewGlobalStateController);
}
@Test
public void testDisplayNotification_firstNotification_isVisible() {
- mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView);
+ mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView,
+ CarNotificationTypeItem.INBOX);
assertThat(mCarHeadsUpNotificationSystemContainer.isVisible()).isTrue();
}
@Test
public void testRemoveNotification_lastNotification_isInvisible() {
- mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView);
+ mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView,
+ CarNotificationTypeItem.INBOX);
mCarHeadsUpNotificationSystemContainer.removeNotification(mNotificationView);
assertThat(mCarHeadsUpNotificationSystemContainer.isVisible()).isFalse();
}
@Test
public void testRemoveNotification_nonLastNotification_isVisible() {
- mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView);
- mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView2);
+ mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView,
+ CarNotificationTypeItem.INBOX);
+ mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView2,
+ CarNotificationTypeItem.INBOX);
mCarHeadsUpNotificationSystemContainer.removeNotification(mNotificationView);
assertThat(mCarHeadsUpNotificationSystemContainer.isVisible()).isTrue();
}
@Test
public void testDisplayNotification_userFullySetupTrue_isInvisible() {
- mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView);
+ mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView,
+ CarNotificationTypeItem.INBOX);
assertThat(mCarHeadsUpNotificationSystemContainer.isVisible()).isTrue();
}
@@ -102,20 +106,23 @@ public class CarHeadsUpNotificationSystemContainerTest extends SysuiTestCase {
@Test
public void testDisplayNotification_userFullySetupFalse_isInvisible() {
when(mCarDeviceProvisionedController.isCurrentUserFullySetup()).thenReturn(false);
- mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView);
+ mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView,
+ CarNotificationTypeItem.INBOX);
assertThat(mCarHeadsUpNotificationSystemContainer.isVisible()).isFalse();
}
@Test
public void testDisplayNotification_overlayWindowStateShouldShowHUNFalse_isInvisible() {
when(mOverlayViewGlobalStateController.shouldShowHUN()).thenReturn(false);
- mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView);
+ mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView,
+ CarNotificationTypeItem.INBOX);
assertThat(mCarHeadsUpNotificationSystemContainer.isVisible()).isFalse();
}
@Test
public void testDisplayNotification_overlayWindowStateShouldShowHUNTrue_isVisible() {
- mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView);
+ mCarHeadsUpNotificationSystemContainer.displayNotification(mNotificationView,
+ CarNotificationTypeItem.INBOX);
assertThat(mCarHeadsUpNotificationSystemContainer.isVisible()).isTrue();
}
}