diff options
author | 2024-08-21 15:27:35 +0000 | |
---|---|---|
committer | 2024-08-21 17:43:05 +0000 | |
commit | 04eb98b1a8bf93dac7482a5a51110c4e13f5a238 (patch) | |
tree | affe624cc1fc2ab5bd602f93317793a4007a4205 | |
parent | 774de14fcd52ce1f9f2faeb0682ca9ae7cb7e1a6 (diff) |
Fix SafetyCenterEnabledChanged broadcasts tests when device config flag not in use.
Bug: 361281194
Bug: 354670125
Test: atest CtsSafetyCenterTestCases
Relnote: Fixing tests after removing Safety Center device config flag
Flag: com.android.permission.flags.safety_center_enabled_no_device_config
LOW_COVERAGE_REASON=b/360423897
Change-Id: I491977e7499ab5d42688a375de0f3afb301286de
3 files changed, 70 insertions, 21 deletions
diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index c9a5e1c03..250be5f25 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -244,6 +244,9 @@ public final class SafetyCenterService extends SystemService { @GuardedBy("mApiLock") private void registerSafetyCenterEnabledListenerLocked() { + if (Flags.safetyCenterEnabledNoDeviceConfig() && SdkLevel.isAtLeastU()) { + return; + } SafetyCenterEnabledListener safetyCenterEnabledListener = new SafetyCenterEnabledListener(); DeviceConfig.addOnPropertiesChangedListener( DeviceConfig.NAMESPACE_PRIVACY, @@ -1151,9 +1154,7 @@ public final class SafetyCenterService extends SystemService { if (!UserProfileGroup.isSupported(userId, context)) { Log.i( TAG, - "Received broadcast for user id: " - + userId - + ", which is an unsupported user"); + "Received broadcast for user id: " + userId + ", which is an unsupported user"); return false; } if (Intent.ACTION_USER_SWITCHED.equals(action) @@ -1166,11 +1167,7 @@ public final class SafetyCenterService extends SystemService { return false; } if (isProfileAddedOrAvailable(action) && !UserUtils.isUserExistent(userId, context)) { - Log.w( - TAG, - "Received broadcast for user id: " - + userId - + ", which does not exist"); + Log.w(TAG, "Received broadcast for user id: " + userId + ", which does not exist"); return false; } return true; diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt index 298d7643c..8fd45efb8 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/SafetyCenterManagerTest.kt @@ -95,6 +95,7 @@ import com.google.common.util.concurrent.MoreExecutors.directExecutor import kotlin.test.assertFails import kotlin.test.assertFailsWith import kotlinx.coroutines.TimeoutCancellationException +import org.junit.Assume.assumeFalse import org.junit.Assume.assumeTrue import org.junit.Rule import org.junit.Test @@ -788,6 +789,10 @@ class SafetyCenterManagerTest { @Test fun safetyCenterEnabledChanged_whenImplicitReceiverHasPermission_receiverCalled() { + assumeTrue( + "Cannot toggle SafetyCenter using DeviceConfig", + SafetyCenterTestHelper.safetyCenterCanBeToggledUsingDeviceConfig() + ) // Implicit broadcast is only sent to system user. assumeTrue(context.getSystemService(UserManager::class.java)!!.isSystemUser) val enabledChangedReceiver = SafetyCenterEnabledChangedReceiver(context) @@ -806,6 +811,10 @@ class SafetyCenterManagerTest { @Test fun safetyCenterEnabledChanged_whenImplicitReceiverDoesntHavePermission_receiverNotCalled() { + assumeTrue( + "Cannot toggle SafetyCenter using DeviceConfig", + SafetyCenterTestHelper.safetyCenterCanBeToggledUsingDeviceConfig() + ) // Implicit broadcast is only sent to system user. assumeTrue(context.getSystemService(UserManager::class.java)!!.isSystemUser) val enabledChangedReceiver = SafetyCenterEnabledChangedReceiver(context) @@ -818,6 +827,10 @@ class SafetyCenterManagerTest { @Test fun safetyCenterEnabledChanged_whenSourceReceiverHasPermission_receiverCalled() { + assumeTrue( + "Cannot toggle SafetyCenter using DeviceConfig", + SafetyCenterTestHelper.safetyCenterCanBeToggledUsingDeviceConfig() + ) safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) val receiverValue = @@ -833,6 +846,10 @@ class SafetyCenterManagerTest { @Test fun safetyCenterEnabledChanged_valueDoesntChange_receiverNotCalled() { + assumeTrue( + "Cannot toggle SafetyCenter using DeviceConfig", + SafetyCenterTestHelper.safetyCenterCanBeToggledUsingDeviceConfig() + ) safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) assertFailsWith(TimeoutCancellationException::class) { @@ -845,6 +862,10 @@ class SafetyCenterManagerTest { @Test fun safetyCenterEnabledChanged_whenSourceReceiverDoesntHavePermission_receiverNotCalled() { + assumeTrue( + "Cannot toggle SafetyCenter using DeviceConfig", + SafetyCenterTestHelper.safetyCenterCanBeToggledUsingDeviceConfig() + ) safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) assertFailsWith(TimeoutCancellationException::class) { @@ -854,6 +875,26 @@ class SafetyCenterManagerTest { @Test fun safetyCenterEnabledChanged_whenSourceReceiverNotInConfig_receiverNotCalled() { + assumeTrue( + "Cannot toggle SafetyCenter using DeviceConfig", + SafetyCenterTestHelper.safetyCenterCanBeToggledUsingDeviceConfig() + ) + assertFailsWith(TimeoutCancellationException::class) { + SafetySourceReceiver.setSafetyCenterEnabledWithReceiverPermissionAndWait( + false, + TIMEOUT_SHORT + ) + } + } + + @Test + fun safetyCenterEnabledChanged_whenNoDeviceConfigFlag_receiverNotCalled() { + assumeFalse( + "SafetyCenter DeviceConfig flag is in use", + SafetyCenterTestHelper.safetyCenterCanBeToggledUsingDeviceConfig() + ) + safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) + assertFailsWith(TimeoutCancellationException::class) { SafetySourceReceiver.setSafetyCenterEnabledWithReceiverPermissionAndWait( false, diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestHelper.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestHelper.kt index 559a4b7e9..a138675d3 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestHelper.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestHelper.kt @@ -32,6 +32,7 @@ import android.safetycenter.config.SafetySource.SAFETY_SOURCE_TYPE_STATIC import android.util.Log import androidx.annotation.RequiresApi import com.android.modules.utils.build.SdkLevel +import com.android.permission.flags.Flags import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.addOnSafetyCenterDataChangedListenerWithPermission import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.clearAllSafetySourceDataForTestsWithPermission import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.clearSafetyCenterConfigForTestsWithPermission @@ -54,7 +55,6 @@ class SafetyCenterTestHelper(val context: Context) { private val safetyCenterManager = context.getSystemService(SafetyCenterManager::class.java)!! private val userManager = context.getSystemService(UserManager::class.java)!! private val listeners = mutableListOf<SafetyCenterTestListener>() - private val deviceFlagsValueProvider = DeviceFlagsValueProvider() /** * Sets up the state of Safety Center by enabling it on the device and setting default flag @@ -66,13 +66,17 @@ class SafetyCenterTestHelper(val context: Context) { SafetySourceReceiver.setup() TestActivity.enableHighPriorityAlias() SafetyCenterFlags.setup() - setEnabled(true) + if (safetyCenterCanBeToggledUsingDeviceConfig()) { + setEnabled(true) + } } /** Resets the state of Safety Center. To be called after each test. */ fun reset() { Log.d(TAG, "reset") - setEnabled(true) + if (safetyCenterCanBeToggledUsingDeviceConfig()) { + setEnabled(true) + } listeners.forEach { safetyCenterManager.removeOnSafetyCenterDataChangedListenerWithPermission(it) it.cancel() @@ -109,13 +113,6 @@ class SafetyCenterTestHelper(val context: Context) { setEnabledWaitingForSafetyCenterBroadcastIdle(value, safetyCenterConfig) } - private fun safetyCenterCanBeToggledUsingDeviceConfig() = - !callWithShellPermissionIdentity(READ_DEVICE_CONFIG) { - deviceFlagsValueProvider.getBoolean( - "com.android.permission.flags.safety_center_enabled_no_device_config" - ) - } || !SdkLevel.isAtLeastU() - /** Sets the given [SafetyCenterConfig]. */ fun setConfig(config: SafetyCenterConfig) { Log.d(TAG, "setConfig") @@ -168,7 +165,9 @@ class SafetyCenterTestHelper(val context: Context) { } private fun resetFlags() { - setEnabled(SafetyCenterFlags.snapshot.isSafetyCenterEnabled()) + if (safetyCenterCanBeToggledUsingDeviceConfig()) { + setEnabled(SafetyCenterFlags.snapshot.isSafetyCenterEnabled()) + } SafetyCenterFlags.reset() } @@ -218,7 +217,19 @@ class SafetyCenterTestHelper(val context: Context) { private fun isEnabled() = safetyCenterManager.isSafetyCenterEnabledWithPermission() - private companion object { - const val TAG: String = "SafetyCenterTestHelper" + companion object { + private const val TAG: String = "SafetyCenterTestHelper" + + /** Returns whether Safety Center can be enabled / disabled using a DeviceConfig flag. */ + fun safetyCenterCanBeToggledUsingDeviceConfig(): Boolean { + val deviceFlagsValueProvider = DeviceFlagsValueProvider() + val safetyCenterEnabledNoDeviceConfig = + callWithShellPermissionIdentity(READ_DEVICE_CONFIG) { + deviceFlagsValueProvider.getBoolean( + Flags.FLAG_SAFETY_CENTER_ENABLED_NO_DEVICE_CONFIG + ) + } + return !safetyCenterEnabledNoDeviceConfig || !SdkLevel.isAtLeastU() + } } } |