diff --git a/res/values/strings.xml b/res/values/strings.xml index d91cb88c499..8bc87dfbc85 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -8037,7 +8037,9 @@ Off after restart - Currently unavailable for your device. + Currently unavailable for your device + + Always on for your device You\u0027ll have to restart your device to turn Advanced memory protection on or off. When it\u0027s on, you may notice slower device performance. diff --git a/src/com/android/settings/security/MemtagHelper.java b/src/com/android/settings/security/MemtagHelper.java index c891eb24c27..b3e24e493e3 100644 --- a/src/com/android/settings/security/MemtagHelper.java +++ b/src/com/android/settings/security/MemtagHelper.java @@ -32,6 +32,13 @@ public class MemtagHelper { "persist.device_config.memory_safety_native.bootloader_override")); } + private static boolean isForcedOn() { + return "force_on" + .equals( + SystemProperties.get( + "persist.device_config.memory_safety_native.bootloader_override")); + } + public static boolean isChecked() { String modes[] = SystemProperties.get("arm64.memtag.bootctl", "").split(","); return Arrays.asList(modes).contains("memtag"); @@ -43,7 +50,7 @@ public class MemtagHelper { } public static int getAvailabilityStatus() { - if (MemtagHelper.isForcedOff()) { + if (MemtagHelper.isForcedOff() || MemtagHelper.isForcedOn()) { return BasePreferenceController.DISABLED_DEPENDENT_SETTING; } return SystemProperties.getBoolean("ro.arm64.memtag.bootctl_settings_toggle", false) @@ -65,6 +72,9 @@ public class MemtagHelper { if (isForcedOff()) { return R.string.memtag_force_off; } + if (isForcedOn()) { + return R.string.memtag_force_on; + } if (isOn()) { if (isChecked()) { return R.string.memtag_on; diff --git a/tests/robotests/src/com/android/settings/security/MemtagHelperTest.java b/tests/robotests/src/com/android/settings/security/MemtagHelperTest.java index 207fa617193..2b9ecf707d6 100644 --- a/tests/robotests/src/com/android/settings/security/MemtagHelperTest.java +++ b/tests/robotests/src/com/android/settings/security/MemtagHelperTest.java @@ -86,6 +86,14 @@ public class MemtagHelperTest { .isEqualTo(BasePreferenceController.DISABLED_DEPENDENT_SETTING); } + @Test + public void getAvailabilityStatus_isForcedOn_isDISABLED_DEPENDENT_SETTING() { + ShadowSystemProperties.override(mDeviceConfigOverride, "force_on"); + ShadowSystemProperties.override(mMemtagSupportedProperty, "true"); + assertThat(MemtagHelper.getAvailabilityStatus()) + .isEqualTo(BasePreferenceController.DISABLED_DEPENDENT_SETTING); + } + @Test public void getAvailabilityStatus_isUnsupported_isUNSUPPORTED_ON_DEVICE() { ShadowSystemProperties.override(mDeviceConfigOverride, ""); @@ -159,4 +167,13 @@ public class MemtagHelperTest { ShadowSystemProperties.override(mMemtagProperty, "memtag"); assertThat(MemtagHelper.getSummary()).isEqualTo(R.string.memtag_force_off); } + + @Test + @Config(shadows = {ZygoteShadow.class}) + public void getSummary_forceOffOverride_memtag_force_on() { + ZygoteShadow.setSupportsMemoryTagging(false); + ShadowSystemProperties.override(mDeviceConfigOverride, "force_on"); + ShadowSystemProperties.override(mMemtagProperty, "memtag"); + assertThat(MemtagHelper.getSummary()).isEqualTo(R.string.memtag_force_on); + } }