From c3d0e6a8d265f1c131eefe0ac4c077b49c93598c Mon Sep 17 00:00:00 2001 From: Florian Mayer <fmayer@google.com> Date: Fri, 21 Jan 2022 15:14:23 -0800 Subject: [PATCH] [MTE] show notification if using MTE bootloader switch. ro.arm64.memtag.bootctl_supported can be set by OEMs that do not want to enable MTE by default yet but want to offer users a preview that can be enabled in the Developer Options. This developer option will reboot the phone and enable MTE. In that case we want to show a notification to make sure the user does not forget that it is enabled. Bug: 206895651 Change-Id: Iaebc16d4b8d0da302f18709e23062f4a5bd58fe3 --- core/res/res/values/strings.xml | 5 ++++ core/res/res/values/symbols.xml | 2 ++ proto/src/system_messages.proto | 4 +++ .../server/am/ActivityManagerService.java | 30 +++++++++++++++++++ 4 files changed, 41 insertions(+) diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 6577ebc8cd3f..bbbd88ddb67f 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -3838,6 +3838,11 @@ <!-- Message of notification shown when serial console is enabled. [CHAR LIMIT=NONE] --> <string name="console_running_notification_message">Performance is impacted. To disable, check bootloader.</string> + <!-- Title of notification shown when MTE status override is enabled. [CHAR LIMIT=NONE] --> + <string name="mte_override_notification_title">Experimental MTE enabled</string> + <!-- Message of notification shown when MTE status override is enabled. [CHAR LIMIT=NONE] --> + <string name="mte_override_notification_message">Performance and stability might be impacted. Reboot to disable. If enabled using arm64.memtag.bootctl, set it to "none" beforehand.</string> + <!-- Title of notification shown when contaminant is detected on the USB port. [CHAR LIMIT=NONE] --> <string name="usb_contaminant_detected_title">Liquid or debris in USB port</string> <!-- Message of notification shown when contaminant is detected on the USB port. [CHAR LIMIT=NONE] --> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 5e8851976556..b1a4206d3b9d 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2091,6 +2091,8 @@ <java-symbol type="string" name="test_harness_mode_notification_message" /> <java-symbol type="string" name="console_running_notification_title" /> <java-symbol type="string" name="console_running_notification_message" /> + <java-symbol type="string" name="mte_override_notification_title" /> + <java-symbol type="string" name="mte_override_notification_message" /> <java-symbol type="string" name="taking_remote_bugreport_notification_title" /> <java-symbol type="string" name="share_remote_bugreport_notification_title" /> <java-symbol type="string" name="sharing_remote_bugreport_notification_title" /> diff --git a/proto/src/system_messages.proto b/proto/src/system_messages.proto index 196c6aaa7fcb..3648593e5dd5 100644 --- a/proto/src/system_messages.proto +++ b/proto/src/system_messages.proto @@ -282,6 +282,10 @@ message SystemMessage { // Notify the user to set up dream NOTE_SETUP_DREAM = 68; + // Inform the user that MTE override is active. + // Package: android + NOTE_MTE_OVERRIDE_ENABLED = 69; + // ADD_NEW_IDS_ABOVE_THIS_LINE // Legacy IDs with arbitrary values appear below // Legacy IDs existed as stable non-conflicting constants prior to the O release diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index f67e732b47dd..5a49fb2c0504 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -4948,6 +4948,7 @@ public class ActivityManagerService extends IActivityManager.Stub } // UART is on if init's console service is running, send a warning notification. showConsoleNotificationIfActive(); + showMteOverrideNotificationIfActive(); t.traceEnd(); } @@ -4982,6 +4983,35 @@ public class ActivityManagerService extends IActivityManager.Stub } + private void showMteOverrideNotificationIfActive() { + if (!SystemProperties.getBoolean("ro.arm64.memtag.bootctl_supported", false) + || !com.android.internal.os.Zygote.nativeSupportsMemoryTagging()) { + return; + } + String title = mContext + .getString(com.android.internal.R.string.mte_override_notification_title); + String message = mContext + .getString(com.android.internal.R.string.mte_override_notification_message); + Notification notification = + new Notification.Builder(mContext, SystemNotificationChannels.DEVELOPER) + .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb) + .setOngoing(true) + .setTicker(title) + .setDefaults(0) // please be quiet + .setColor(mContext.getColor( + com.android.internal.R.color + .system_notification_accent_color)) + .setContentTitle(title) + .setContentText(message) + .setVisibility(Notification.VISIBILITY_PUBLIC) + .build(); + + NotificationManager notificationManager = + mContext.getSystemService(NotificationManager.class); + notificationManager.notifyAsUser( + null, SystemMessage.NOTE_MTE_OVERRIDE_ENABLED, notification, UserHandle.ALL); + } + @Override public void bootAnimationComplete() { if (DEBUG_ALL) Slog.d(TAG, "bootAnimationComplete: Callers=" + Debug.getCallers(4)); -- GitLab