diff options
Diffstat (limited to 'tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt')
-rw-r--r-- | tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt | 276 |
1 files changed, 251 insertions, 25 deletions
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt index df6c808b5..b1cdef3b0 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt @@ -18,6 +18,7 @@ package android.safetycenter.cts import android.app.PendingIntent import android.content.Context +import android.icu.text.MessageFormat import android.os.UserHandle.USER_NULL import android.safetycenter.SafetyCenterData import android.safetycenter.SafetyCenterEntry @@ -26,6 +27,7 @@ import android.safetycenter.SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_OK import android.safetycenter.SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_RECOMMENDATION import android.safetycenter.SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNKNOWN import android.safetycenter.SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNSPECIFIED +import android.safetycenter.SafetyCenterEntry.IconAction.ICON_ACTION_TYPE_GEAR import android.safetycenter.SafetyCenterEntry.SEVERITY_UNSPECIFIED_ICON_TYPE_NO_ICON import android.safetycenter.SafetyCenterEntry.SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION import android.safetycenter.SafetyCenterEntry.SEVERITY_UNSPECIFIED_ICON_TYPE_PRIVACY @@ -92,6 +94,7 @@ import android.safetycenter.cts.testing.SafetyCenterCtsConfigs.SOURCE_ID_2 import android.safetycenter.cts.testing.SafetyCenterCtsConfigs.SOURCE_ID_3 import android.safetycenter.cts.testing.SafetyCenterCtsConfigs.STATIC_BAREBONE_ID import android.safetycenter.cts.testing.SafetyCenterCtsConfigs.STATIC_IN_COLLAPSIBLE_ID +import android.safetycenter.cts.testing.SafetyCenterCtsConfigs.getLockScreenSourceConfig import android.safetycenter.cts.testing.SafetyCenterCtsData import android.safetycenter.cts.testing.SafetyCenterCtsHelper import android.safetycenter.cts.testing.SafetyCenterCtsListener @@ -116,11 +119,14 @@ import android.safetycenter.cts.testing.SafetySourceReceiver.Companion.dismissSa import android.safetycenter.cts.testing.SafetySourceReceiver.Companion.executeSafetyCenterIssueActionWithPermissionAndWait import android.safetycenter.cts.testing.SafetySourceReceiver.Companion.refreshSafetySourcesWithReceiverPermissionAndWait import android.safetycenter.cts.testing.SafetySourceReceiver.Companion.refreshSafetySourcesWithoutReceiverPermissionAndWait +import android.util.ArrayMap import androidx.test.core.app.ApplicationProvider.getApplicationContext import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.android.compatibility.common.preconditions.ScreenLockHelper import com.android.safetycenter.resources.SafetyCenterResourcesContext import com.google.common.truth.Truth.assertThat import com.google.common.util.concurrent.MoreExecutors.directExecutor +import java.util.Locale import kotlin.test.assertFailsWith import kotlinx.coroutines.TimeoutCancellationException import org.junit.After @@ -133,39 +139,55 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class SafetyCenterManagerTest { private val context: Context = getApplicationContext() - private val safetyCenterResourcesContext = SafetyCenterResourcesContext(context) + private val safetyCenterResourcesContext = SafetyCenterResourcesContext.forTests(context) private val safetyCenterCtsHelper = SafetyCenterCtsHelper(context) private val safetySourceCtsData = SafetySourceCtsData(context) private val safetyCenterManager = context.getSystemService(SafetyCenterManager::class.java)!! private val safetyCenterStatusOk = - SafetyCenterStatus.Builder("Looks good", "This device is protected") + SafetyCenterStatus.Builder( + safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), + safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_summary")) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) .build() private val safetyCenterStatusOkScanning = - SafetyCenterStatus.Builder("Scanning", "Checking device status…") + SafetyCenterStatus.Builder( + safetyCenterResourcesContext.getStringByName("scanning_title"), + safetyCenterResourcesContext.getStringByName("loading_summary")) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) .setRefreshStatus(REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS) .build() private val safetyCenterStatusOkOneAlert = - SafetyCenterStatus.Builder("Looks good", "1 alert") + SafetyCenterStatus.Builder( + safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), + getAlertString(1)) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) .build() private val safetyCenterStatusOkReviewOneAlert = - SafetyCenterStatus.Builder("Add more protection", "1 alert") + SafetyCenterStatus.Builder( + safetyCenterResourcesContext.getStringByName( + "overall_severity_level_ok_review_title"), + getAlertString(1)) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) .build() private val safetyCenterStatusOkReview = - SafetyCenterStatus.Builder("Add more protection", "Check the settings below") + SafetyCenterStatus.Builder( + safetyCenterResourcesContext.getStringByName( + "overall_severity_level_ok_review_title"), + safetyCenterResourcesContext.getStringByName( + "overall_severity_level_ok_review_summary")) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) .build() private val safetyCenterStatusRecommendationOneAlert = - SafetyCenterStatus.Builder("Device may be at risk", "1 alert") + SafetyCenterStatus.Builder( + safetyCenterResourcesContext.getStringByName( + "overall_severity_level_recommendation_title"), + getAlertString(1)) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_RECOMMENDATION) .build() @@ -173,17 +195,23 @@ class SafetyCenterManagerTest { SafetyCenterStatus.Builder( safetyCenterResourcesContext.getStringByName( "overall_severity_level_account_recommendation_title"), - "1 alert") + getAlertString(1)) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_RECOMMENDATION) .build() private val safetyCenterStatusCriticalOneAlert = - SafetyCenterStatus.Builder("Device is at risk", "1 alert") + SafetyCenterStatus.Builder( + safetyCenterResourcesContext.getStringByName( + "overall_severity_level_critical_warning_title"), + getAlertString(1)) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) .build() private val safetyCenterStatusCriticalTwoAlerts = - SafetyCenterStatus.Builder("Device is at risk", "2 alerts") + SafetyCenterStatus.Builder( + safetyCenterResourcesContext.getStringByName( + "overall_severity_level_critical_warning_title"), + getAlertString(2)) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) .build() @@ -191,12 +219,15 @@ class SafetyCenterManagerTest { SafetyCenterStatus.Builder( safetyCenterResourcesContext.getStringByName( "overall_severity_level_critical_account_warning_title"), - "1 alert") + getAlertString(1)) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) .build() private val safetyCenterStatusCriticalSixAlerts = - SafetyCenterStatus.Builder("Device is at risk", "6 alerts") + SafetyCenterStatus.Builder( + safetyCenterResourcesContext.getStringByName( + "overall_severity_level_critical_warning_title"), + getAlertString(6)) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_CRITICAL_WARNING) .build() @@ -294,6 +325,18 @@ class SafetyCenterManagerTest { listOf(SafetyCenterEntryOrGroup(safetyCenterEntryOk(SINGLE_SOURCE_ID))), emptyList()) + private val safetyCenterDataOkWithIconAction = + SafetyCenterData( + safetyCenterStatusOk, + emptyList(), + listOf( + SafetyCenterEntryOrGroup( + safetyCenterEntryOkBuilder(SINGLE_SOURCE_ID) + .setIconAction( + ICON_ACTION_TYPE_GEAR, safetySourceCtsData.redirectPendingIntent) + .build())), + emptyList()) + private val safetyCenterDataOkReviewError = SafetyCenterData( safetyCenterStatusOkReview, @@ -1194,6 +1237,31 @@ class SafetyCenterManagerTest { } @Test + fun refreshSafetySources_repliesWithWrongBroadcastId_doesntCompleteRefresh() { + SafetyCenterFlags.refreshTimeout = TIMEOUT_SHORT + safetyCenterCtsHelper.setConfig(SINGLE_SOURCE_CONFIG) + SafetySourceReceiver.safetySourceData[ + SafetySourceDataKey(REFRESH_FETCH_FRESH_DATA, SINGLE_SOURCE_ID)] = + safetySourceCtsData.information + SafetySourceReceiver.overrideBroadcastId = "invalid" + val listener = safetyCenterCtsHelper.addListener() + + safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( + REFRESH_REASON_RESCAN_BUTTON_CLICK) + + // Because wrong ID, refresh hasn't finished. Wait for timeout. + listener.receiveSafetyCenterErrorDetails() + SafetyCenterFlags.refreshTimeout = TIMEOUT_LONG + + SafetySourceReceiver.overrideBroadcastId = null + safetyCenterManager.refreshSafetySourcesWithReceiverPermissionAndWait( + REFRESH_REASON_PAGE_OPEN) + val apiSafetySourceData = + safetyCenterManager.getSafetySourceDataWithPermission(SINGLE_SOURCE_ID) + assertThat(apiSafetySourceData).isEqualTo(safetySourceCtsData.information) + } + + @Test fun refreshSafetySources_refreshAfterSuccessfulRefresh_completesSuccessfully() { safetyCenterCtsHelper.setConfig(SINGLE_SOURCE_CONFIG) SafetySourceReceiver.safetySourceData[ @@ -1291,7 +1359,9 @@ class SafetyCenterManagerTest { val safetyCenterErrorDetailsFromListener = listener.receiveSafetyCenterErrorDetails() assertThat(safetyCenterErrorDetailsFromListener) - .isEqualTo(SafetyCenterErrorDetails("Couldn’t refresh status")) + .isEqualTo( + SafetyCenterErrorDetails( + safetyCenterResourcesContext.getStringByName("refresh_timeout"))) } @Test @@ -1346,7 +1416,9 @@ class SafetyCenterManagerTest { val safetyCenterErrorDetailsFromListener = listener.receiveSafetyCenterErrorDetails() assertThat(safetyCenterErrorDetailsFromListener) - .isEqualTo(SafetyCenterErrorDetails("Couldn’t refresh status")) + .isEqualTo( + SafetyCenterErrorDetails( + safetyCenterResourcesContext.getStringByName("refresh_timeout"))) } @Test @@ -1405,8 +1477,10 @@ class SafetyCenterManagerTest { val status1 = listener.receiveSafetyCenterData().status assertThat(status1.refreshStatus).isEqualTo(REFRESH_STATUS_FULL_RESCAN_IN_PROGRESS) - assertThat(status1.title.toString()).isEqualTo("Scanning") - assertThat(status1.summary.toString()).isEqualTo("Checking device status…") + assertThat(status1.title.toString()) + .isEqualTo(safetyCenterResourcesContext.getStringByName("scanning_title")) + assertThat(status1.summary.toString()) + .isEqualTo(safetyCenterResourcesContext.getStringByName("loading_summary")) val status2 = listener.receiveSafetyCenterData().status assertThat(status2.refreshStatus).isEqualTo(REFRESH_STATUS_NONE) assertThat(status2).isEqualTo(safetyCenterStatusOk) @@ -1426,7 +1500,8 @@ class SafetyCenterManagerTest { val status1 = listener.receiveSafetyCenterData().status assertThat(status1.refreshStatus).isEqualTo(REFRESH_STATUS_DATA_FETCH_IN_PROGRESS) assertThat(status1.title.toString()).isEqualTo(safetyCenterStatusOk.title.toString()) - assertThat(status1.summary.toString()).isEqualTo("Checking device status…") + assertThat(status1.summary.toString()) + .isEqualTo(safetyCenterResourcesContext.getStringByName("loading_summary")) val status2 = listener.receiveSafetyCenterData().status assertThat(status2.refreshStatus).isEqualTo(REFRESH_STATUS_NONE) assertThat(status2).isEqualTo(safetyCenterStatusOk) @@ -1510,6 +1585,17 @@ class SafetyCenterManagerTest { } @Test + fun getSafetyCenterData_withIconAction_returnsDataWithIconAction() { + safetyCenterCtsHelper.setConfig(SINGLE_SOURCE_CONFIG) + safetyCenterCtsHelper.setData( + SINGLE_SOURCE_ID, safetySourceCtsData.informationWithIconAction) + + val apiSafetyCenterData = safetyCenterManager.getSafetyCenterDataWithPermission() + + assertThat(apiSafetyCenterData).isEqualTo(safetyCenterDataOkWithIconAction) + } + + @Test fun getSafetyCenterData_withUpdatedData_returnsUpdatedData() { safetyCenterCtsHelper.setConfig(SINGLE_SOURCE_CONFIG) safetyCenterCtsHelper.setData(SINGLE_SOURCE_ID, safetySourceCtsData.information) @@ -2029,7 +2115,10 @@ class SafetyCenterManagerTest { SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID, CRITICAL_ISSUE_ACTION_ID)) val error = listener.receiveSafetyCenterErrorDetails() - assertThat(error).isEqualTo(SafetyCenterErrorDetails("Couldn’t open page")) + assertThat(error) + .isEqualTo( + SafetyCenterErrorDetails( + safetyCenterResourcesContext.getStringByName("redirecting_error"))) } @Test @@ -2046,7 +2135,10 @@ class SafetyCenterManagerTest { SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID, CRITICAL_ISSUE_ACTION_ID)) val error = listener.receiveSafetyCenterErrorDetails() - assertThat(error).isEqualTo(SafetyCenterErrorDetails("Couldn’t resolve alert")) + assertThat(error) + .isEqualTo( + SafetyCenterErrorDetails( + safetyCenterResourcesContext.getStringByName("resolving_action_error"))) } @Test @@ -2098,7 +2190,10 @@ class SafetyCenterManagerTest { assertThat(safetyCenterDataFromListenerAfterInlineAction) .isEqualTo(safetyCenterDataCriticalOneAlert) val error = listener.receiveSafetyCenterErrorDetails() - assertThat(error).isEqualTo(SafetyCenterErrorDetails("Couldn’t resolve alert")) + assertThat(error) + .isEqualTo( + SafetyCenterErrorDetails( + safetyCenterResourcesContext.getStringByName("resolving_action_error"))) } @Test @@ -2163,7 +2258,10 @@ class SafetyCenterManagerTest { assertThat(safetyCenterDataFromListenerAfterInlineAction) .isEqualTo(safetyCenterDataCriticalOneAlert) val error = listener.receiveSafetyCenterErrorDetails() - assertThat(error).isEqualTo(SafetyCenterErrorDetails("Couldn’t resolve alert")) + assertThat(error) + .isEqualTo( + SafetyCenterErrorDetails( + safetyCenterResourcesContext.getStringByName("resolving_action_error"))) } @Test @@ -2225,7 +2323,81 @@ class SafetyCenterManagerTest { } @Test - fun executeSafetyCenterIssueAction_idsDontMatch_throwsIllegalArgumentException() { + fun executeSafetyCenterIssueAction_issueIdDoesNotMatch_throwsErrorAndDoesNotResolveIssue() { + safetyCenterCtsHelper.setConfig(SINGLE_SOURCE_CONFIG) + safetyCenterCtsHelper.setData( + SINGLE_SOURCE_ID, safetySourceCtsData.criticalWithResolvingIssue) + val listener = safetyCenterCtsHelper.addListener() + SafetySourceReceiver.safetySourceData[ + SafetySourceDataKey(RESOLVE_ACTION, SINGLE_SOURCE_ID)] = + safetySourceCtsData.information + + assertFailsWith(IllegalArgumentException::class) { + safetyCenterManager.executeSafetyCenterIssueActionWithPermissionAndWait( + SafetyCenterCtsData.issueId(SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID), + SafetyCenterCtsData.issueActionId( + SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID + "invalid", CRITICAL_ISSUE_ACTION_ID), + TIMEOUT_SHORT) + } + + assertFailsWith(TimeoutCancellationException::class) { + listener.receiveSafetyCenterData(TIMEOUT_SHORT) + } + } + + @Test + fun executeSafetyCenterIssueAction_actionIdDoesNotMatch_doesNotResolveIssue() { + safetyCenterCtsHelper.setConfig(SINGLE_SOURCE_CONFIG) + safetyCenterCtsHelper.setData( + SINGLE_SOURCE_ID, safetySourceCtsData.criticalWithResolvingIssue) + val listener = safetyCenterCtsHelper.addListener() + SafetySourceReceiver.safetySourceData[ + SafetySourceDataKey(RESOLVE_ACTION, SINGLE_SOURCE_ID)] = + safetySourceCtsData.information + + assertFailsWith(TimeoutCancellationException::class) { + safetyCenterManager.executeSafetyCenterIssueActionWithPermissionAndWait( + SafetyCenterCtsData.issueId(SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID), + SafetyCenterCtsData.issueActionId( + SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID, CRITICAL_ISSUE_ACTION_ID + "invalid"), + TIMEOUT_SHORT) + } + + assertFailsWith(TimeoutCancellationException::class) { + listener.receiveSafetyCenterData(TIMEOUT_SHORT) + } + } + + @Test + fun executeSafetyCenterIssueAction_idsDontMatch_canStillResolve() { + safetyCenterCtsHelper.setConfig(SINGLE_SOURCE_CONFIG) + safetyCenterCtsHelper.setData( + SINGLE_SOURCE_ID, safetySourceCtsData.criticalWithResolvingIssue) + val listener = safetyCenterCtsHelper.addListener() + SafetySourceReceiver.safetySourceData[ + SafetySourceDataKey(RESOLVE_ACTION, SINGLE_SOURCE_ID)] = + safetySourceCtsData.information + assertFailsWith(IllegalArgumentException::class) { + safetyCenterManager.executeSafetyCenterIssueActionWithPermissionAndWait( + SafetyCenterCtsData.issueId(SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID), + SafetyCenterCtsData.issueActionId( + SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID + "invalid", CRITICAL_ISSUE_ACTION_ID), + TIMEOUT_SHORT) + } + + safetyCenterManager.executeSafetyCenterIssueActionWithPermissionAndWait( + SafetyCenterCtsData.issueId(SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID), + SafetyCenterCtsData.issueActionId( + SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID, CRITICAL_ISSUE_ACTION_ID)) + + val safetyCenterDataFromListenerDuringInlineAction = listener.receiveSafetyCenterData() + assertThat(safetyCenterDataFromListenerDuringInlineAction) + .isEqualTo(safetyCenterDataCriticalOneAlertInFlight) + val safetyCenterDataFromListenerAfterInlineAction = listener.receiveSafetyCenterData() + assertThat(safetyCenterDataFromListenerAfterInlineAction).isEqualTo(safetyCenterDataOk) + } + @Test + fun executeSafetyCenterIssueAction_sourceIdsDontMatch_throwsIllegalArgumentException() { assertFailsWith(IllegalArgumentException::class) { safetyCenterManager.executeSafetyCenterIssueActionWithPermission( SafetyCenterCtsData.issueId(SINGLE_SOURCE_ID, CRITICAL_ISSUE_ID), @@ -2348,6 +2520,46 @@ class SafetyCenterManagerTest { } } + @Test + fun lockScreenSource_withoutReplaceLockScreenIconActionFlag_doesntReplace() { + // Must have a screen lock for the icon action to be set + assumeTrue(ScreenLockHelper.isDeviceSecure(context)) + safetyCenterCtsHelper.setConfig(context.getLockScreenSourceConfig()) + val listener = safetyCenterCtsHelper.addListener() + SafetyCenterFlags.replaceLockScreenIconAction = false + + safetyCenterManager.refreshSafetySourcesWithPermission(REFRESH_REASON_PAGE_OPEN) + // Skip loading data. + listener.receiveSafetyCenterData() + + val lockScreenSafetyCenterData = listener.receiveSafetyCenterData() + val lockScreenEntry = lockScreenSafetyCenterData.entriesOrGroups.first().entry!! + val entryPendingIntent = lockScreenEntry.pendingIntent!! + val iconActionPendingIntent = lockScreenEntry.iconAction!!.pendingIntent + // This test passes for now but will eventually start failing once we introduce the fix in + // the Settings app. This will warn if the assumption is failed rather than fail, at which + // point we can remove this test (and potentially even this magnificent hack). + assumeTrue(iconActionPendingIntent == entryPendingIntent) + } + + @Test + fun lockScreenSource_withReplaceLockScreenIconActionFlag_replaces() { + // Must have a screen lock for the icon action to be set + assumeTrue(ScreenLockHelper.isDeviceSecure(context)) + safetyCenterCtsHelper.setConfig(context.getLockScreenSourceConfig()) + val listener = safetyCenterCtsHelper.addListener() + + safetyCenterManager.refreshSafetySourcesWithPermission(REFRESH_REASON_PAGE_OPEN) + // Skip loading data. + listener.receiveSafetyCenterData() + + val lockScreenSafetyCenterData = listener.receiveSafetyCenterData() + val lockScreenEntry = lockScreenSafetyCenterData.entriesOrGroups.first().entry!! + val entryPendingIntent = lockScreenEntry.pendingIntent!! + val iconActionPendingIntent = lockScreenEntry.iconAction!!.pendingIntent + assertThat(iconActionPendingIntent).isNotEqualTo(entryPendingIntent) + } + private fun safetyCenterEntryDefaultBuilder(sourceId: String) = SafetyCenterEntry.Builder(SafetyCenterCtsData.entryId(sourceId), "OK") .setSeverityLevel(ENTRY_SEVERITY_LEVEL_UNKNOWN) @@ -2356,7 +2568,9 @@ class SafetyCenterManagerTest { .setSeverityUnspecifiedIconType(SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION) private fun safetyCenterEntryError(sourceId: String) = - safetyCenterEntryDefaultBuilder(sourceId).setSummary("Couldn’t check status").build() + safetyCenterEntryDefaultBuilder(sourceId) + .setSummary(safetyCenterResourcesContext.getStringByName("refresh_error")) + .build() private fun safetyCenterEntryUnspecified( sourceId: String, @@ -2370,13 +2584,14 @@ class SafetyCenterManagerTest { .setSeverityUnspecifiedIconType(SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION) .build() - private fun safetyCenterEntryOk(sourceId: String) = + private fun safetyCenterEntryOkBuilder(sourceId: String) = SafetyCenterEntry.Builder(SafetyCenterCtsData.entryId(sourceId), "Ok title") .setSeverityLevel(ENTRY_SEVERITY_LEVEL_OK) .setSummary("Ok summary") .setPendingIntent(safetySourceCtsData.redirectPendingIntent) .setSeverityUnspecifiedIconType(SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION) - .build() + + private fun safetyCenterEntryOk(sourceId: String) = safetyCenterEntryOkBuilder(sourceId).build() private fun safetyCenterEntryRecommendation( sourceId: String, @@ -2447,4 +2662,15 @@ class SafetyCenterManagerTest { .setIsInFlight(isActionInFlight) .build())) .build() + + private fun getAlertString(numAlerts: Int): String { + val messageFormat = + MessageFormat( + safetyCenterResourcesContext.getStringByName( + "overall_severity_n_alerts_summary", numAlerts), + Locale.getDefault()) + val arguments = ArrayMap<String, Any>() + arguments["count"] = numAlerts + return messageFormat.format(arguments) + } } |