Merge "[MTE] disable dev option if security setting is on"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 74b7dab..f7d7e94 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10486,6 +10486,8 @@
     <!-- Title for the button to reboot with MTE enabled. [CHAR LIMIT=NONE] -->
     <string name="reboot_with_mte_title">Reboot with MTE</string>
     <string name="reboot_with_mte_message">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.</string>
+    <string name="reboot_with_mte_summary">Try MTE for a single boot for app development.</string>
+    <string name="reboot_with_mte_already_enabled">MTE is enabled through Advanced memory protection.</string>
     <!-- Toast that is shown when the user initiates capturing a heap dump for the system server. [CHAR LIMIT=NONE] -->
     <string name="capturing_system_heap_dump_message">Capturing system heap dump</string>
     <!-- Toast that is shown if there's an error capturing the user initiated heap dump. [CHAR LIMIT=NONE] -->
diff --git a/src/com/android/settings/development/RebootWithMtePreferenceController.java b/src/com/android/settings/development/RebootWithMtePreferenceController.java
index 6c03853..f7bd726 100644
--- a/src/com/android/settings/development/RebootWithMtePreferenceController.java
+++ b/src/com/android/settings/development/RebootWithMtePreferenceController.java
@@ -21,8 +21,10 @@
 
 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
@@ -44,6 +46,20 @@
     }
 
     @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 ffbf1f1..d6b1031 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 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 @@
         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());
+    }
 }