diff --git a/res/values/strings.xml b/res/values/strings.xml
index 783b0beb395..456371cb126 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10475,6 +10475,8 @@
Reboot with MTE
System will reboot and allow to experiment with Memory Tagging Extension (MTE). MTE may negatively impact system performance and stability. Will be reset on next subsequent reboot.
+ Try MTE for a single boot for app development.
+ MTE is enabled through Advanced memory protection.
Capturing system heap dump
diff --git a/src/com/android/settings/development/RebootWithMtePreferenceController.java b/src/com/android/settings/development/RebootWithMtePreferenceController.java
index 6c038538323..f7bd7261f4a 100644
--- a/src/com/android/settings/development/RebootWithMtePreferenceController.java
+++ b/src/com/android/settings/development/RebootWithMtePreferenceController.java
@@ -21,8 +21,10 @@ import android.text.TextUtils;
import androidx.preference.Preference;
+import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.security.MemtagHelper;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public class RebootWithMtePreferenceController extends DeveloperOptionsPreferenceController
@@ -43,6 +45,20 @@ public class RebootWithMtePreferenceController extends DeveloperOptionsPreferenc
return android.os.SystemProperties.getBoolean("ro.arm64.memtag.bootctl_supported", false);
}
+ @Override
+ public CharSequence getSummary() {
+ if (MemtagHelper.isChecked()) {
+ return mContext.getResources().getString(R.string.reboot_with_mte_already_enabled);
+ }
+ return mContext.getResources().getString(R.string.reboot_with_mte_summary);
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ preference.setEnabled(!MemtagHelper.isChecked());
+ }
+
@Override
public String getPreferenceKey() {
return KEY_REBOOT_WITH_MTE;
diff --git a/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java
index ffbf1f1cb86..d6b10319ef8 100644
--- a/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/RebootWithMtePreferenceControllerTest.java
@@ -22,6 +22,7 @@ import static junit.framework.Assert.assertTrue;
import android.content.Context;
import android.os.SystemProperties;
+import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;
import org.junit.Before;
@@ -61,4 +62,19 @@ public class RebootWithMtePreferenceControllerTest {
SystemProperties.set("ro.arm64.memtag.bootctl_supported", "1");
assertTrue(mController.isAvailable());
}
+
+ @Test
+ public void updateState_enabledByDefault() {
+ Preference preference = new Preference(mContext);
+ mController.updateState(preference);
+ assertTrue(preference.isEnabled());
+ }
+
+ @Test
+ public void updateState_disabledIfAlreadyOn() {
+ SystemProperties.set("arm64.memtag.bootctl", "memtag");
+ Preference preference = new Preference(mContext);
+ mController.updateState(preference);
+ assertFalse(preference.isEnabled());
+ }
}