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);
+ }
}