diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterActivityTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterActivityTest.kt
index 67c21e6..0e68966 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterActivityTest.kt
+++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterActivityTest.kt
@@ -22,6 +22,7 @@
 import android.os.Build.VERSION_CODES.TIRAMISU
 import android.safetycenter.cts.testing.SafetyCenterFlags
 import android.safetycenter.cts.testing.SafetyCenterFlags.deviceSupportsSafetyCenter
+import android.safetycenter.cts.testing.SettingsPackage.getSettingsPackageName
 import android.support.test.uiautomator.By
 import androidx.test.core.app.ApplicationProvider.getApplicationContext
 import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -56,12 +57,12 @@
     }
 
     @Test
-    fun launchActivity_withFlagDisabled_showsSettingsTitle() {
+    fun launchActivity_withFlagDisabled_opensSettings() {
         SafetyCenterFlags.setSafetyCenterEnabled(false)
 
         startSafetyCenterActivity()
 
-        waitFindObject(By.text("Settings"))
+        waitFindObject(By.pkg(context.getSettingsPackageName()))
     }
 
     private fun startSafetyCenterActivity() {
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt
index 0d166b1..1ae0e03 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt
+++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt
@@ -38,6 +38,7 @@
 import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_UNSPECIFIED
 import android.safetycenter.SafetySourceErrorDetails
 import android.safetycenter.SafetySourceIssue
+import android.safetycenter.SafetySourceIssue.ISSUE_CATEGORY_DEVICE
 import android.safetycenter.SafetySourceStatus
 import android.safetycenter.config.SafetyCenterConfig
 import android.safetycenter.config.SafetySource
@@ -118,6 +119,7 @@
                         SafetySourceIssue.Action.Builder(
                                 "critical_action_id", "Solve issue", somePendingIntent)
                             .build())
+                    .setIssueCategory(ISSUE_CATEGORY_DEVICE)
                     .build())
             .build()
     private val listener =
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterUnsupportedTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterUnsupportedTest.kt
index d8f7e39..542dc14 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterUnsupportedTest.kt
+++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterUnsupportedTest.kt
@@ -19,13 +19,12 @@
 import android.content.Context
 import android.content.Intent
 import android.content.Intent.ACTION_SAFETY_CENTER
-import android.content.pm.PackageManager.FEATURE_AUTOMOTIVE
-import android.content.pm.PackageManager.FEATURE_LEANBACK
 import android.os.Build.VERSION_CODES.TIRAMISU
 import android.safetycenter.SafetyCenterManager
 import android.safetycenter.cts.testing.SafetyCenterApisWithShellPermissions.isSafetyCenterEnabledWithPermission
 import android.safetycenter.cts.testing.SafetyCenterFlags
 import android.safetycenter.cts.testing.SafetyCenterFlags.deviceSupportsSafetyCenter
+import android.safetycenter.cts.testing.SettingsPackage.getSettingsPackageName
 import android.support.test.uiautomator.By
 import androidx.test.core.app.ApplicationProvider.getApplicationContext
 import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -50,14 +49,10 @@
     }
 
     @Test
-    fun launchActivity_showsSecurityTitle() {
-        // TODO(b/232284056): Check if we can remove these test restrictions
-        assumeFalse(packageManager.hasSystemFeature(FEATURE_AUTOMOTIVE))
-        assumeFalse(packageManager.hasSystemFeature(FEATURE_LEANBACK))
-
+    fun launchActivity_opensSettings() {
         startSafetyCenterActivity()
 
-        waitFindObject(By.text("Settings"))
+        waitFindObject(By.pkg(context.getSettingsPackageName()))
     }
 
     @Test
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt
index 5f26cb9..328a96f 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt
+++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetySourceIssueTest.kt
@@ -633,7 +633,7 @@
                 SafetySourceIssue.Builder(
                         "Issue id",
                         "Issue title",
-                        "Other issue summary",
+                        "Different issue summary",
                         SEVERITY_LEVEL_INFORMATION,
                         "issue_type_id")
                     .addAction(action1)
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/testing/EqualsHashCodeToStringTester.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/testing/EqualsHashCodeToStringTester.kt
index 487109b..0b32f2a 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/testing/EqualsHashCodeToStringTester.kt
+++ b/tests/cts/safetycenter/src/android/safetycenter/cts/testing/EqualsHashCodeToStringTester.kt
@@ -33,14 +33,22 @@
     private val hashCodeTester = EquivalenceTester.of(HASH_CODE_EQUIVALENCE)
 
     fun addEqualityGroup(vararg groups: Any): EqualsHashCodeToStringTester {
-        equalsTester.addEqualityGroup(groups)
-        toStringTester.addEquivalenceGroup(groups)
+        equalsTester.addEqualityGroup(*groups)
+        toStringTester.addEquivalenceGroupAsArray(groups)
         if (!hashCodeCanCollide) {
-            hashCodeTester.addEquivalenceGroup(groups)
+            hashCodeTester.addEquivalenceGroupAsArray(groups)
         }
         return this
     }
 
+    private fun EquivalenceTester<Any>.addEquivalenceGroupAsArray(input: Array<out Any>) {
+        when (val size = input.size) {
+            0 -> return
+            1 -> addEquivalenceGroup(input[0])
+            else -> addEquivalenceGroup(input[0], *input.copyOfRange(1, size))
+        }
+    }
+
     fun test() {
         equalsTester.testEquals()
         toStringTester.test()
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SettingsPackage.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SettingsPackage.kt
new file mode 100644
index 0000000..03c6d90
--- /dev/null
+++ b/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SettingsPackage.kt
@@ -0,0 +1,37 @@
+/*
+ * 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 android.safetycenter.cts.testing
+
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.provider.Settings
+
+/** A class that knows the Settings app package name. */
+object SettingsPackage {
+
+    /** Returns the Settings app package name. */
+    fun Context.getSettingsPackageName() =
+            packageManager
+                    .resolveActivity(
+                            Intent(Settings.ACTION_SETTINGS),
+                            PackageManager.MATCH_DEFAULT_ONLY or
+                                    PackageManager.MATCH_DIRECT_BOOT_AWARE or
+                                    PackageManager.MATCH_DIRECT_BOOT_UNAWARE)!!
+                    .activityInfo
+                    .packageName
+}
