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