Fix height and top padding of shade header and keyguard status bar
Values are now read from a central place, instead of directly from
resources.
Top padding is now also accounted for, which was introduced recently.
Flag: ACONFIG com.android.systemui.centralized_status_bar_dimens_refactor DISABLED
Fixes: 317016114
Fixes: 317016116
Test: Manual and unit tests
Change-Id: I339d3159f0b82a4118ae3e34c99c57e87990eb07
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index d9286b3..7ce1d79 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -248,6 +248,15 @@
}
flag {
+ name: "centralized_status_bar_dimens_refactor"
+ namespace: "systemui"
+ description: "Refactors shade header and keyguard status bar to read status bar dimens from a"
+ " central place, instead of reading resources directly. This is to take into account display"
+ " cutouts and other special cases. "
+ bug: "317199366"
+}
+
+flag {
name: "enable_layout_tracing"
namespace: "systemui"
description: "Enables detailed traversal slices during measure and layout in perfetto traces"
diff --git a/packages/SystemUI/res/layout/keyguard_status_bar.xml b/packages/SystemUI/res/layout/keyguard_status_bar.xml
index fc0bf24..4cb7591 100644
--- a/packages/SystemUI/res/layout/keyguard_status_bar.xml
+++ b/packages/SystemUI/res/layout/keyguard_status_bar.xml
@@ -23,7 +23,6 @@
android:layout_width="match_parent"
android:layout_height="@dimen/status_bar_header_height_keyguard"
android:baselineAligned="false"
- android:gravity="center_vertical"
>
<LinearLayout
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeNotificationStackScrollLayoutSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeNotificationStackScrollLayoutSection.kt
index 0f8e673..756a4cc 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeNotificationStackScrollLayoutSection.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/SplitShadeNotificationStackScrollLayoutSection.kt
@@ -23,11 +23,13 @@
import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
import androidx.constraintlayout.widget.ConstraintSet.START
import androidx.constraintlayout.widget.ConstraintSet.TOP
+import com.android.systemui.Flags.centralizedStatusBarDimensRefactor
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.shared.KeyguardShadeMigrationNssl
import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlags
+import com.android.systemui.shade.LargeScreenHeaderHelper
import com.android.systemui.shade.NotificationPanelView
import com.android.systemui.statusbar.notification.stack.AmbientState
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
@@ -35,6 +37,7 @@
import com.android.systemui.statusbar.notification.stack.ui.view.SharedNotificationContainer
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationStackAppearanceViewModel
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.SharedNotificationContainerViewModel
+import dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
@@ -53,6 +56,7 @@
notificationStackSizeCalculator: NotificationStackSizeCalculator,
private val smartspaceViewModel: KeyguardSmartspaceViewModel,
@Main mainDispatcher: CoroutineDispatcher,
+ private val largeScreenHeaderHelperLazy: Lazy<LargeScreenHeaderHelper>,
) :
NotificationStackScrollLayoutSection(
context,
@@ -72,7 +76,13 @@
}
constraintSet.apply {
val splitShadeTopMargin =
- context.resources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height)
+ if (centralizedStatusBarDimensRefactor()) {
+ largeScreenHeaderHelperLazy.get().getLargeScreenHeaderHeight()
+ } else {
+ context.resources.getDimensionPixelSize(
+ R.dimen.large_screen_shade_header_height
+ )
+ }
connect(R.id.nssl_placeholder, TOP, PARENT_ID, TOP, splitShadeTopMargin)
connect(R.id.nssl_placeholder, START, PARENT_ID, START)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
index 0644237..a3b9254 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
@@ -18,6 +18,8 @@
import static android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS;
+import static com.android.systemui.Flags.centralizedStatusBarDimensRefactor;
+
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Path;
@@ -30,6 +32,7 @@
import com.android.systemui.Dumpable;
import com.android.systemui.qs.customize.QSCustomizer;
import com.android.systemui.res.R;
+import com.android.systemui.shade.LargeScreenHeaderHelper;
import com.android.systemui.shade.TouchLogger;
import com.android.systemui.util.LargeScreenUtils;
@@ -162,8 +165,12 @@
QuickStatusBarHeaderController quickStatusBarHeaderController) {
int topPadding = QSUtils.getQsHeaderSystemIconsAreaHeight(mContext);
if (!LargeScreenUtils.shouldUseLargeScreenShadeHeader(mContext.getResources())) {
- topPadding = mContext.getResources()
- .getDimensionPixelSize(R.dimen.large_screen_shade_header_height);
+ topPadding =
+ centralizedStatusBarDimensRefactor()
+ ? LargeScreenHeaderHelper.getLargeScreenHeaderHeight(mContext)
+ : mContext.getResources()
+ .getDimensionPixelSize(
+ R.dimen.large_screen_shade_header_height);
}
mQSPanelContainer.setPaddingRelative(
mQSPanelContainer.getPaddingStart(),
diff --git a/packages/SystemUI/src/com/android/systemui/shade/LargeScreenHeaderHelper.kt b/packages/SystemUI/src/com/android/systemui/shade/LargeScreenHeaderHelper.kt
new file mode 100644
index 0000000..c74f038
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/shade/LargeScreenHeaderHelper.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade
+
+import android.content.Context
+import com.android.internal.policy.SystemBarUtils
+import com.android.systemui.res.R
+import javax.inject.Inject
+import kotlin.math.max
+
+class LargeScreenHeaderHelper @Inject constructor(private val context: Context) {
+
+ fun getLargeScreenHeaderHeight(): Int = getLargeScreenHeaderHeight(context)
+
+ companion object {
+ @JvmStatic
+ fun getLargeScreenHeaderHeight(context: Context): Int {
+ val defaultHeight =
+ context.resources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height)
+ val statusBarHeight = SystemBarUtils.getStatusBarHeight(context)
+ // Height has to be at least as tall as the status bar, as the status bar height takes
+ // into account display cutouts.
+ return max(defaultHeight, statusBarHeight)
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
index 286037e..d2399ed 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java
@@ -1213,7 +1213,7 @@
.setMaxLengthSeconds(0.4f).build();
mStatusBarMinHeight = SystemBarUtils.getStatusBarHeight(mView.getContext());
mStatusBarHeaderHeightKeyguard = Utils.getStatusBarHeaderHeightKeyguard(mView.getContext());
- mClockPositionAlgorithm.loadDimens(mResources);
+ mClockPositionAlgorithm.loadDimens(mView.getContext(), mResources);
mIndicationBottomPadding = mResources.getDimensionPixelSize(
R.dimen.keyguard_indication_bottom_padding);
int statusbarHeight = SystemBarUtils.getStatusBarHeight(mView.getContext());
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt
index 9c8a286..84cad1d 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationsQSContainerController.kt
@@ -27,6 +27,7 @@
import androidx.constraintlayout.widget.ConstraintSet.START
import androidx.constraintlayout.widget.ConstraintSet.TOP
import androidx.lifecycle.lifecycleScope
+import com.android.systemui.Flags.centralizedStatusBarDimensRefactor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.flags.FeatureFlags
@@ -47,10 +48,11 @@
import com.android.systemui.util.LargeScreenUtils
import com.android.systemui.util.ViewController
import com.android.systemui.util.concurrency.DelayableExecutor
-import kotlinx.coroutines.launch
+import dagger.Lazy
import java.util.function.Consumer
import javax.inject.Inject
import kotlin.reflect.KMutableProperty0
+import kotlinx.coroutines.launch
@VisibleForTesting
internal const val INSET_DEBOUNCE_MILLIS = 500L
@@ -67,7 +69,8 @@
private val featureFlags: FeatureFlags,
private val
notificationStackScrollLayoutController: NotificationStackScrollLayoutController,
- private val splitShadeStateController: SplitShadeStateController
+ private val splitShadeStateController: SplitShadeStateController,
+ private val largeScreenHeaderHelperLazy: Lazy<LargeScreenHeaderHelper>,
) : ViewController<NotificationsQuickSettingsContainer>(view), QSContainerController {
private var splitShadeEnabled = false
@@ -186,7 +189,11 @@
}
private fun calculateLargeShadeHeaderHeight(): Int {
- return resources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height)
+ return if (centralizedStatusBarDimensRefactor()) {
+ largeScreenHeaderHelperLazy.get().getLargeScreenHeaderHeight()
+ } else {
+ resources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height)
+ }
}
private fun calculateShadeHeaderHeight(): Int {
diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
index 8397caa..9273540 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java
@@ -20,6 +20,7 @@
import static android.view.WindowInsets.Type.ime;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE;
+import static com.android.systemui.Flags.centralizedStatusBarDimensRefactor;
import static com.android.systemui.classifier.Classifier.QS_COLLAPSE;
import static com.android.systemui.shade.NotificationPanelViewController.COUNTER_PANEL_OPEN_QS;
import static com.android.systemui.shade.NotificationPanelViewController.FLING_COLLAPSE;
@@ -126,6 +127,7 @@
private final Lazy<NotificationPanelViewController> mPanelViewControllerLazy;
private final NotificationPanelView mPanelView;
+ private final Lazy<LargeScreenHeaderHelper> mLargeScreenHeaderHelperLazy;
private final KeyguardStatusBarView mKeyguardStatusBar;
private final FrameLayout mQsFrame;
@@ -344,10 +346,12 @@
ActiveNotificationsInteractor activeNotificationsInteractor,
JavaAdapter javaAdapter,
CastController castController,
- SplitShadeStateController splitShadeStateController
+ SplitShadeStateController splitShadeStateController,
+ Lazy<LargeScreenHeaderHelper> largeScreenHeaderHelperLazy
) {
mPanelViewControllerLazy = panelViewControllerLazy;
mPanelView = panelView;
+ mLargeScreenHeaderHelperLazy = largeScreenHeaderHelperLazy;
mQsFrame = mPanelView.findViewById(R.id.qs_frame);
mKeyguardStatusBar = mPanelView.findViewById(R.id.keyguard_header);
mResources = mPanelView.getResources();
@@ -449,7 +453,10 @@
mUseLargeScreenShadeHeader =
LargeScreenUtils.shouldUseLargeScreenShadeHeader(mPanelView.getResources());
mLargeScreenShadeHeaderHeight =
- mResources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height);
+ centralizedStatusBarDimensRefactor()
+ ? mLargeScreenHeaderHelperLazy.get().getLargeScreenHeaderHeight()
+ : mResources.getDimensionPixelSize(
+ R.dimen.large_screen_shade_header_height);
int topMargin = mUseLargeScreenShadeHeader ? mLargeScreenShadeHeaderHeight :
mResources.getDimensionPixelSize(R.dimen.notification_panel_margin_top);
mShadeHeaderController.setLargeScreenActive(mUseLargeScreenShadeHeader);
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
index 2460a33..a66bacd 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
@@ -38,6 +38,7 @@
import com.android.app.animation.Interpolators
import com.android.settingslib.Utils
import com.android.systemui.Dumpable
+import com.android.systemui.Flags.centralizedStatusBarDimensRefactor
import com.android.systemui.animation.ShadeInterpolation
import com.android.systemui.battery.BatteryMeterView
import com.android.systemui.battery.BatteryMeterViewController
@@ -432,6 +433,9 @@
changes += combinedShadeHeadersConstraintManager.emptyCutoutConstraints()
}
+ if (centralizedStatusBarDimensRefactor()) {
+ view.setPadding(view.paddingLeft, sbInsets.top, view.paddingRight, view.paddingBottom)
+ }
view.updateAllConstraints(changes)
updateBatteryMode()
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractor.kt
index 625fdc1..4b8fb1e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractor.kt
@@ -18,12 +18,15 @@
package com.android.systemui.statusbar.notification.stack.domain.interactor
import android.content.Context
+import com.android.systemui.Flags.centralizedStatusBarDimensRefactor
import com.android.systemui.common.ui.data.repository.ConfigurationRepository
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryUdfpsInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.res.R
+import com.android.systemui.shade.LargeScreenHeaderHelper
import com.android.systemui.statusbar.policy.SplitShadeStateController
+import dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -45,6 +48,7 @@
private val splitShadeStateController: SplitShadeStateController,
keyguardInteractor: KeyguardInteractor,
deviceEntryUdfpsInteractor: DeviceEntryUdfpsInteractor,
+ largeScreenHeaderHelperLazy: Lazy<LargeScreenHeaderHelper>,
) {
private val _topPosition = MutableStateFlow(0f)
@@ -72,7 +76,11 @@
getDimensionPixelSize(R.dimen.notification_panel_margin_bottom),
marginTop = getDimensionPixelSize(R.dimen.notification_panel_margin_top),
marginTopLargeScreen =
- getDimensionPixelSize(R.dimen.large_screen_shade_header_height),
+ if (centralizedStatusBarDimensRefactor()) {
+ largeScreenHeaderHelperLazy.get().getLargeScreenHeaderHeight()
+ } else {
+ getDimensionPixelSize(R.dimen.large_screen_shade_header_height)
+ },
keyguardSplitShadeTopMargin =
getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin),
)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
index 0a03af7..ca3e3c6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
@@ -16,10 +16,12 @@
package com.android.systemui.statusbar.phone;
+import static com.android.systemui.Flags.centralizedStatusBarDimensRefactor;
import static com.android.systemui.doze.util.BurnInHelperKt.getBurnInOffset;
import static com.android.systemui.doze.util.BurnInHelperKt.getBurnInScale;
import static com.android.systemui.statusbar.notification.NotificationUtils.interpolate;
+import android.content.Context;
import android.content.res.Resources;
import android.util.MathUtils;
@@ -30,6 +32,7 @@
import com.android.systemui.log.core.Logger;
import com.android.systemui.log.dagger.KeyguardClockLog;
import com.android.systemui.res.R;
+import com.android.systemui.shade.LargeScreenHeaderHelper;
import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.statusbar.policy.KeyguardUserSwitcherListView;
@@ -160,14 +163,14 @@
mLogger = new Logger(logBuffer, TAG);
}
- /**
- * Refreshes the dimension values.
- */
- public void loadDimens(Resources res) {
- mStatusViewBottomMargin = res.getDimensionPixelSize(
- R.dimen.keyguard_status_view_bottom_margin);
+ /** Refreshes the dimension values. */
+ public void loadDimens(Context context, Resources res) {
+ mStatusViewBottomMargin =
+ res.getDimensionPixelSize(R.dimen.keyguard_status_view_bottom_margin);
mSplitShadeTopNotificationsMargin =
- res.getDimensionPixelSize(R.dimen.large_screen_shade_header_height);
+ centralizedStatusBarDimensRefactor()
+ ? LargeScreenHeaderHelper.getLargeScreenHeaderHeight(context)
+ : res.getDimensionPixelSize(R.dimen.large_screen_shade_header_height);
mSplitShadeTargetTopMargin =
res.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
index 7cc0888..7691459 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.phone;
+import static com.android.systemui.Flags.centralizedStatusBarDimensRefactor;
import static com.android.systemui.ScreenDecorations.DisplayCutoutView.boundsFromDirection;
import static com.android.systemui.util.Utils.getStatusBarHeaderHeightKeyguard;
@@ -130,6 +131,9 @@
mUserSwitcherContainer = findViewById(R.id.user_switcher_container);
mIsPrivacyDotEnabled = mContext.getResources().getBoolean(R.bool.config_enablePrivacyDot);
loadDimens();
+ if (!centralizedStatusBarDimensRefactor()) {
+ setGravity(Gravity.CENTER_VERTICAL);
+ }
}
/**
@@ -307,7 +311,8 @@
final int minRight = (!isLayoutRtl() && mIsPrivacyDotEnabled)
? Math.max(mMinDotWidth, mPadding.right) : mPadding.right;
- setPadding(minLeft, waterfallTop, minRight, 0);
+ int top = centralizedStatusBarDimensRefactor() ? waterfallTop + mPadding.top : waterfallTop;
+ setPadding(minLeft, top, minRight, 0);
}
private boolean updateLayoutParamsNoCutout() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
index e572dcc..520e43e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java
@@ -344,6 +344,7 @@
@Mock private ActiveNotificationsInteractor mActiveNotificationsInteractor;
@Mock private KeyguardClockPositionAlgorithm mKeyguardClockPositionAlgorithm;
@Mock private NaturalScrollingSettingObserver mNaturalScrollingSettingObserver;
+ @Mock private LargeScreenHeaderHelper mLargeScreenHeaderHelper;
protected final int mMaxUdfpsBurnInOffsetY = 5;
protected FakeFeatureFlagsClassic mFeatureFlags = new FakeFeatureFlagsClassic();
@@ -425,7 +426,8 @@
mContext,
new ResourcesSplitShadeStateController(),
mKeyguardInteractor,
- deviceEntryUdfpsInteractor
+ deviceEntryUdfpsInteractor,
+ () -> mLargeScreenHeaderHelper
),
mShadeRepository
)
@@ -806,7 +808,8 @@
mActiveNotificationsInteractor,
mJavaAdapter,
mCastController,
- new ResourcesSplitShadeStateController()
+ new ResourcesSplitShadeStateController(),
+ () -> mLargeScreenHeaderHelper
);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
index 9d8b214..437d00a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
@@ -143,6 +143,7 @@
@Mock private SelectedUserInteractor mSelectedUserInteractor;
@Mock private UserTracker mUserTracker;
@Mock private SceneContainerFlags mSceneContainerFlags;
+ @Mock private LargeScreenHeaderHelper mLargeScreenHeaderHelper;
@Captor private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters;
@Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListener;
@@ -261,7 +262,8 @@
mContext,
new ResourcesSplitShadeStateController(),
keyguardInteractor,
- deviceEntryUdfpsInteractor),
+ deviceEntryUdfpsInteractor,
+ () -> mLargeScreenHeaderHelper),
shadeRepository
)
);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt
index 88a47eb..ea3caa3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerLegacyTest.kt
@@ -42,6 +42,7 @@
import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.capture
+import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
@@ -52,7 +53,6 @@
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.Captor
-import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.RETURNS_DEEP_STUBS
import org.mockito.Mockito.any
@@ -74,15 +74,16 @@
@SmallTest
class NotificationsQSContainerControllerLegacyTest : SysuiTestCase() {
- @Mock lateinit var view: NotificationsQuickSettingsContainer
- @Mock lateinit var navigationModeController: NavigationModeController
- @Mock lateinit var overviewProxyService: OverviewProxyService
- @Mock lateinit var shadeHeaderController: ShadeHeaderController
- @Mock lateinit var shadeInteractor: ShadeInteractor
- @Mock lateinit var fragmentService: FragmentService
- @Mock lateinit var fragmentHostManager: FragmentHostManager
- @Mock
- lateinit var notificationStackScrollLayoutController: NotificationStackScrollLayoutController
+ private val view = mock<NotificationsQuickSettingsContainer>()
+ private val navigationModeController = mock<NavigationModeController>()
+ private val overviewProxyService = mock<OverviewProxyService>()
+ private val shadeHeaderController = mock<ShadeHeaderController>()
+ private val shadeInteractor = mock<ShadeInteractor>()
+ private val fragmentService = mock<FragmentService>()
+ private val fragmentHostManager = mock<FragmentHostManager>()
+ private val notificationStackScrollLayoutController =
+ mock<NotificationStackScrollLayoutController>()
+ private val largeScreenHeaderHelper = mock<LargeScreenHeaderHelper>()
@Captor lateinit var navigationModeCaptor: ArgumentCaptor<ModeChangedListener>
@Captor lateinit var taskbarVisibilityCaptor: ArgumentCaptor<OverviewProxyListener>
@@ -123,7 +124,8 @@
delayableExecutor,
featureFlags,
notificationStackScrollLayoutController,
- ResourcesSplitShadeStateController()
+ ResourcesSplitShadeStateController(),
+ largeScreenHeaderHelperLazy = { largeScreenHeaderHelper }
)
overrideResource(R.dimen.split_shade_notifications_scrim_margin_bottom, SCRIM_MARGIN)
@@ -480,7 +482,8 @@
delayableExecutor,
featureFlags,
notificationStackScrollLayoutController,
- ResourcesSplitShadeStateController()
+ ResourcesSplitShadeStateController(),
+ largeScreenHeaderHelperLazy = { largeScreenHeaderHelper }
)
controller.updateConstraints()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt
index 1f37ca0..c1bc303 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationsQSContainerControllerTest.kt
@@ -43,6 +43,7 @@
import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.capture
+import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
@@ -53,7 +54,6 @@
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.Captor
-import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.RETURNS_DEEP_STUBS
import org.mockito.Mockito.any
@@ -71,15 +71,16 @@
@SmallTest
class NotificationsQSContainerControllerTest : SysuiTestCase() {
- @Mock lateinit var view: NotificationsQuickSettingsContainer
- @Mock lateinit var navigationModeController: NavigationModeController
- @Mock lateinit var overviewProxyService: OverviewProxyService
- @Mock lateinit var shadeHeaderController: ShadeHeaderController
- @Mock lateinit var shadeInteractor: ShadeInteractor
- @Mock lateinit var fragmentService: FragmentService
- @Mock lateinit var fragmentHostManager: FragmentHostManager
- @Mock
- lateinit var notificationStackScrollLayoutController: NotificationStackScrollLayoutController
+ private val view = mock<NotificationsQuickSettingsContainer>()
+ private val navigationModeController = mock<NavigationModeController>()
+ private val overviewProxyService = mock<OverviewProxyService>()
+ private val shadeHeaderController = mock<ShadeHeaderController>()
+ private val shadeInteractor = mock<ShadeInteractor>()
+ private val fragmentService = mock<FragmentService>()
+ private val fragmentHostManager = mock<FragmentHostManager>()
+ private val notificationStackScrollLayoutController =
+ mock<NotificationStackScrollLayoutController>()
+ private val largeScreenHeaderHelper = mock<LargeScreenHeaderHelper>()
@Captor lateinit var navigationModeCaptor: ArgumentCaptor<ModeChangedListener>
@Captor lateinit var taskbarVisibilityCaptor: ArgumentCaptor<OverviewProxyListener>
@@ -122,7 +123,8 @@
delayableExecutor,
featureFlags,
notificationStackScrollLayoutController,
- ResourcesSplitShadeStateController()
+ ResourcesSplitShadeStateController(),
+ largeScreenHeaderHelperLazy = { largeScreenHeaderHelper }
)
overrideResource(R.dimen.split_shade_notifications_scrim_margin_bottom, SCRIM_MARGIN)
@@ -463,7 +465,8 @@
delayableExecutor,
featureFlags,
notificationStackScrollLayoutController,
- ResourcesSplitShadeStateController()
+ ResourcesSplitShadeStateController(),
+ largeScreenHeaderHelperLazy = { largeScreenHeaderHelper }
)
controller.updateConstraints()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java
index eb5633b..c631e33 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerBaseTest.java
@@ -176,6 +176,7 @@
@Mock protected CastController mCastController;
@Mock protected UserSwitcherInteractor mUserSwitcherInteractor;
@Mock protected SelectedUserInteractor mSelectedUserInteractor;
+ @Mock protected LargeScreenHeaderHelper mLargeScreenHeaderHelper;
protected FakeDisableFlagsRepository mDisableFlagsRepository =
new FakeDisableFlagsRepository();
@@ -299,7 +300,8 @@
mContext,
splitShadeStateController,
keyguardInteractor,
- deviceEntryUdfpsInteractor),
+ deviceEntryUdfpsInteractor,
+ () -> mLargeScreenHeaderHelper),
mShadeRepository
)
);
@@ -384,7 +386,8 @@
mActiveNotificationsInteractor,
new JavaAdapter(mTestScope.getBackgroundScope()),
mCastController,
- splitShadeStateController
+ splitShadeStateController,
+ () -> mLargeScreenHeaderHelper
);
mQsController.init();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
index f25ce0a..aed6163 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
@@ -27,7 +27,7 @@
import com.android.systemui.classifier.FalsingCollectorFake
import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
-import com.android.systemui.deviceentry.domain.interactor.DeviceEntryUdfpsInteractor;
+import com.android.systemui.deviceentry.domain.interactor.DeviceEntryUdfpsInteractor
import com.android.systemui.flags.FakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.FakeCommandQueue
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
@@ -44,6 +44,7 @@
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.SceneTestUtils
import com.android.systemui.scene.shared.flag.FakeSceneContainerFlags
+import com.android.systemui.shade.LargeScreenHeaderHelper
import com.android.systemui.shade.data.repository.FakeShadeRepository
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.domain.interactor.ShadeInteractorImpl
@@ -65,7 +66,6 @@
import org.mockito.ArgumentMatchers.anyFloat
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.eq
-import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
@@ -83,9 +83,10 @@
private lateinit var fromLockscreenTransitionInteractor: FromLockscreenTransitionInteractor
private lateinit var fromPrimaryBouncerTransitionInteractor:
FromPrimaryBouncerTransitionInteractor
- @Mock lateinit var interactionJankMonitor: InteractionJankMonitor
- @Mock lateinit var mockDarkAnimator: ObjectAnimator
- @Mock lateinit var deviceEntryUdfpsInteractor: DeviceEntryUdfpsInteractor
+ private val interactionJankMonitor = mock<InteractionJankMonitor>()
+ private val mockDarkAnimator = mock<ObjectAnimator>()
+ private val deviceEntryUdfpsInteractor = mock<DeviceEntryUdfpsInteractor>()
+ private val largeScreenHeaderHelper = mock<LargeScreenHeaderHelper>()
private lateinit var controller: StatusBarStateControllerImpl
private lateinit var uiEventLogger: UiEventLoggerFake
@@ -189,6 +190,7 @@
ResourcesSplitShadeStateController(),
keyguardInteractor,
deviceEntryUdfpsInteractor,
+ largeScreenHeaderHelperLazy = { largeScreenHeaderHelper }
),
shadeRepository,
)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
index 3556703..4dc4798 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithmTest.java
@@ -84,7 +84,7 @@
LogBuffer logBuffer = FakeLogBuffer.Factory.Companion.create();
mClockPositionAlgorithm = new KeyguardClockPositionAlgorithm(logBuffer);
when(mResources.getDimensionPixelSize(anyInt())).thenReturn(0);
- mClockPositionAlgorithm.loadDimens(mResources);
+ mClockPositionAlgorithm.loadDimens(mContext, mResources);
mClockPosition = new KeyguardClockPositionAlgorithm.Result();
}
@@ -297,7 +297,7 @@
.thenReturn(100);
when(mResources.getDimensionPixelSize(R.dimen.large_screen_shade_header_height))
.thenReturn(70);
- mClockPositionAlgorithm.loadDimens(mResources);
+ mClockPositionAlgorithm.loadDimens(mContext, mResources);
givenLockScreen();
mIsSplitShade = true;
// WHEN the position algorithm is run
@@ -589,7 +589,7 @@
private void setSplitShadeTopMargin(int value) {
when(mResources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin))
.thenReturn(value);
- mClockPositionAlgorithm.loadDimens(mResources);
+ mClockPositionAlgorithm.loadDimens(mContext, mResources);
}
private void givenHighestBurnInOffset() {
@@ -603,7 +603,7 @@
private void givenMaxBurnInOffset(int offset) {
when(mResources.getDimensionPixelSize(R.dimen.burn_in_prevention_offset_y_clock))
.thenReturn(offset);
- mClockPositionAlgorithm.loadDimens(mResources);
+ mClockPositionAlgorithm.loadDimens(mContext, mResources);
}
private void givenAOD() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
index 814ea19..b7529a8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
@@ -126,6 +126,7 @@
import com.android.systemui.scene.shared.logger.SceneLogger;
import com.android.systemui.settings.FakeDisplayTracker;
import com.android.systemui.settings.UserTracker;
+import com.android.systemui.shade.LargeScreenHeaderHelper;
import com.android.systemui.shade.NotificationShadeWindowControllerImpl;
import com.android.systemui.shade.NotificationShadeWindowView;
import com.android.systemui.shade.ShadeController;
@@ -349,6 +350,8 @@
private Display mDefaultDisplay;
@Mock
private SceneContainerFlags mSceneContainerFlags;
+ @Mock
+ private LargeScreenHeaderHelper mLargeScreenHeaderHelper;
private final SceneTestUtils mUtils = new SceneTestUtils(this);
private final TestScope mTestScope = mUtils.getTestScope();
@@ -490,7 +493,8 @@
mContext,
splitShadeStateController,
keyguardInteractor,
- deviceEntryUdfpsInteractor),
+ deviceEntryUdfpsInteractor,
+ () -> mLargeScreenHeaderHelper),
shadeRepository
)
);
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/LargeScreenHeaderHelperKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/LargeScreenHeaderHelperKosmos.kt
new file mode 100644
index 0000000..d3e7574
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/LargeScreenHeaderHelperKosmos.kt
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade
+
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.util.mockito.mock
+
+var Kosmos.largeScreenHeaderHelper by Fixture { mockLargeScreenHeaderHelper }
+val Kosmos.mockLargeScreenHeaderHelper by Fixture { mock<LargeScreenHeaderHelper>() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractorKosmos.kt
index 13d577b..8909d75 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/domain/interactor/SharedNotificationContainerInteractorKosmos.kt
@@ -21,6 +21,7 @@
import com.android.systemui.deviceentry.domain.interactor.deviceEntryUdfpsInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.shade.largeScreenHeaderHelper
import com.android.systemui.statusbar.policy.splitShadeStateController
val Kosmos.sharedNotificationContainerInteractor by
@@ -31,5 +32,6 @@
splitShadeStateController = splitShadeStateController,
keyguardInteractor = keyguardInteractor,
deviceEntryUdfpsInteractor = deviceEntryUdfpsInteractor,
+ largeScreenHeaderHelperLazy = { largeScreenHeaderHelper }
)
}