Add screenshot test for the footer actions (2/2)
Bug: 243636422 Test: atest FooterActionsScreenshotTest Change-Id: I3339dbaa2c3684f5020e2956aaa27a2b3896fdb6
This commit is contained in:
@@ -0,0 +1,160 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 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.qs.footer
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.UserHandle
|
||||||
|
import android.view.View
|
||||||
|
import com.android.internal.util.UserIcons
|
||||||
|
import com.android.systemui.R
|
||||||
|
import com.android.systemui.animation.Expandable
|
||||||
|
import com.android.systemui.classifier.FalsingManagerFake
|
||||||
|
import com.android.systemui.common.shared.model.Icon
|
||||||
|
import com.android.systemui.dagger.qualifiers.Application
|
||||||
|
import com.android.systemui.globalactions.GlobalActionsDialogLite
|
||||||
|
import com.android.systemui.qs.footer.data.model.UserSwitcherStatusModel
|
||||||
|
import com.android.systemui.qs.footer.domain.interactor.FooterActionsInteractor
|
||||||
|
import com.android.systemui.qs.footer.domain.model.SecurityButtonConfig
|
||||||
|
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel
|
||||||
|
import com.android.systemui.util.mockito.mock
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.flowOf
|
||||||
|
|
||||||
|
/** A list of fake [FooterActionsViewModel] to be used in screenshot tests and the gallery. */
|
||||||
|
fun fakeFooterActionsViewModels(
|
||||||
|
@Application context: Context,
|
||||||
|
): List<FooterActionsViewModel> {
|
||||||
|
return listOf(
|
||||||
|
fakeFooterActionsViewModel(context),
|
||||||
|
fakeFooterActionsViewModel(context, showPowerButton = false, isGuestUser = true),
|
||||||
|
fakeFooterActionsViewModel(context, showUserSwitcher = false),
|
||||||
|
fakeFooterActionsViewModel(context, showUserSwitcher = false, foregroundServices = 4),
|
||||||
|
fakeFooterActionsViewModel(
|
||||||
|
context,
|
||||||
|
foregroundServices = 4,
|
||||||
|
hasNewForegroundServices = true,
|
||||||
|
userId = 1,
|
||||||
|
),
|
||||||
|
fakeFooterActionsViewModel(
|
||||||
|
context,
|
||||||
|
securityText = "Security",
|
||||||
|
foregroundServices = 4,
|
||||||
|
showUserSwitcher = false,
|
||||||
|
),
|
||||||
|
fakeFooterActionsViewModel(
|
||||||
|
context,
|
||||||
|
securityText = "Security (not clickable)",
|
||||||
|
securityClickable = false,
|
||||||
|
foregroundServices = 4,
|
||||||
|
hasNewForegroundServices = true,
|
||||||
|
userId = 2,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun fakeFooterActionsViewModel(
|
||||||
|
@Application context: Context,
|
||||||
|
securityText: String? = null,
|
||||||
|
securityClickable: Boolean = true,
|
||||||
|
foregroundServices: Int = 0,
|
||||||
|
hasNewForegroundServices: Boolean = false,
|
||||||
|
showUserSwitcher: Boolean = true,
|
||||||
|
showPowerButton: Boolean = true,
|
||||||
|
userId: Int = UserHandle.USER_OWNER,
|
||||||
|
isGuestUser: Boolean = false,
|
||||||
|
): FooterActionsViewModel {
|
||||||
|
val interactor =
|
||||||
|
FakeFooterActionsInteractor(
|
||||||
|
securityButtonConfig =
|
||||||
|
flowOf(
|
||||||
|
securityText?.let { text ->
|
||||||
|
SecurityButtonConfig(
|
||||||
|
icon = Icon.Resource(R.drawable.ic_info_outline),
|
||||||
|
text = text,
|
||||||
|
isClickable = securityClickable,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
),
|
||||||
|
foregroundServicesCount = flowOf(foregroundServices),
|
||||||
|
hasNewForegroundServices = flowOf(hasNewForegroundServices),
|
||||||
|
userSwitcherStatus =
|
||||||
|
flowOf(
|
||||||
|
if (showUserSwitcher) {
|
||||||
|
UserSwitcherStatusModel.Enabled(
|
||||||
|
currentUserName = "foo",
|
||||||
|
currentUserImage =
|
||||||
|
UserIcons.getDefaultUserIcon(
|
||||||
|
context.resources,
|
||||||
|
userId,
|
||||||
|
/* light= */ false,
|
||||||
|
),
|
||||||
|
isGuestUser = isGuestUser,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
UserSwitcherStatusModel.Disabled
|
||||||
|
}
|
||||||
|
),
|
||||||
|
deviceMonitoringDialogRequests = flowOf(),
|
||||||
|
)
|
||||||
|
|
||||||
|
return FooterActionsViewModel(
|
||||||
|
context,
|
||||||
|
interactor,
|
||||||
|
FalsingManagerFake(),
|
||||||
|
globalActionsDialogLite = mock(),
|
||||||
|
showPowerButton = showPowerButton,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private class FakeFooterActionsInteractor(
|
||||||
|
override val securityButtonConfig: Flow<SecurityButtonConfig?> = flowOf(null),
|
||||||
|
override val foregroundServicesCount: Flow<Int> = flowOf(0),
|
||||||
|
override val hasNewForegroundServices: Flow<Boolean> = flowOf(false),
|
||||||
|
override val userSwitcherStatus: Flow<UserSwitcherStatusModel> =
|
||||||
|
flowOf(UserSwitcherStatusModel.Disabled),
|
||||||
|
override val deviceMonitoringDialogRequests: Flow<Unit> = flowOf(),
|
||||||
|
private val onShowDeviceMonitoringDialogFromView: (View) -> Unit = {},
|
||||||
|
private val onShowDeviceMonitoringDialog: (Context) -> Unit = {},
|
||||||
|
private val onShowForegroundServicesDialog: (View) -> Unit = {},
|
||||||
|
private val onShowPowerMenuDialog: (GlobalActionsDialogLite, View) -> Unit = { _, _ -> },
|
||||||
|
private val onShowSettings: (Expandable) -> Unit = {},
|
||||||
|
private val onShowUserSwitcher: (View) -> Unit = {},
|
||||||
|
) : FooterActionsInteractor {
|
||||||
|
override fun showDeviceMonitoringDialog(view: View) {
|
||||||
|
onShowDeviceMonitoringDialogFromView(view)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun showDeviceMonitoringDialog(quickSettingsContext: Context) {
|
||||||
|
onShowDeviceMonitoringDialog(quickSettingsContext)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun showForegroundServicesDialog(view: View) {
|
||||||
|
onShowForegroundServicesDialog(view)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun showPowerMenuDialog(globalActionsDialogLite: GlobalActionsDialogLite, view: View) {
|
||||||
|
onShowPowerMenuDialog(globalActionsDialogLite, view)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun showSettings(expandable: Expandable) {
|
||||||
|
onShowSettings(expandable)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun showUserSwitcher(view: View) {
|
||||||
|
onShowUserSwitcher(view)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/footer_actions_height"
|
android:layout_height="@dimen/footer_actions_height"
|
||||||
android:elevation="@dimen/qs_panel_elevation"
|
android:elevation="@dimen/qs_panel_elevation"
|
||||||
android:paddingTop="8dp"
|
android:paddingTop="@dimen/qs_footer_actions_top_padding"
|
||||||
android:paddingBottom="@dimen/qs_footer_actions_bottom_padding"
|
android:paddingBottom="@dimen/qs_footer_actions_bottom_padding"
|
||||||
android:background="@drawable/qs_footer_actions_background"
|
android:background="@drawable/qs_footer_actions_background"
|
||||||
android:gravity="center_vertical|end"
|
android:gravity="center_vertical|end"
|
||||||
|
|||||||
@@ -380,6 +380,7 @@
|
|||||||
|
|
||||||
<!-- (48dp - 40dp) / 2 -->
|
<!-- (48dp - 40dp) / 2 -->
|
||||||
<dimen name="qs_footer_action_inset">4dp</dimen>
|
<dimen name="qs_footer_action_inset">4dp</dimen>
|
||||||
|
<dimen name="qs_footer_actions_top_padding">8dp</dimen>
|
||||||
<dimen name="qs_footer_actions_bottom_padding">4dp</dimen>
|
<dimen name="qs_footer_actions_bottom_padding">4dp</dimen>
|
||||||
<dimen name="qs_footer_action_inset_negative">-4dp</dimen>
|
<dimen name="qs_footer_action_inset_negative">-4dp</dimen>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user