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(); } }