From 22afab63bd1eb4621851baa24663b0135850ffbd Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Mon, 9 Mar 2020 18:16:03 -0700 Subject: [PATCH] Made sure that templated views support RTL Previously templated views would not support RTL if the underlying app doesn't. We're now supporting it. Fixes: 151117132 Test: add notification from app that doesn't support RTL, observe normal template Change-Id: Iec7e3b854989100977efba87c9c2cd98a2759ff9 --- core/java/android/app/Notification.java | 11 +++++++++++ .../row/NotificationContentInflater.java | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 32e7d84e6083e..f59ccfb136365 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -6221,6 +6221,17 @@ public class Notification implements Parcelable } return loadHeaderAppName(); } + + /** + * @return if this builder uses a template + * + * @hide + */ + public boolean usesTemplate() { + return (mN.contentView == null && mN.headsUpContentView == null + && mN.bigContentView == null) + || (mStyle != null && mStyle.displayCustomViewInline()); + } } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java index e3ca283d13ad3..39eb7b50fb952 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java @@ -24,6 +24,8 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Notification; import android.content.Context; +import android.content.ContextWrapper; +import android.content.pm.ApplicationInfo; import android.os.AsyncTask; import android.os.CancellationSignal; import android.service.notification.StatusBarNotification; @@ -705,6 +707,10 @@ public class NotificationContentInflater implements NotificationRowContentBinder sbn.getNotification()); Context packageContext = sbn.getPackageContext(mContext); + if (recoveredBuilder.usesTemplate()) { + // For all of our templates, we want it to be RTL + packageContext = new RtlEnabledContext(packageContext); + } Notification notification = sbn.getNotification(); if (notification.isMediaNotification()) { MediaNotificationProcessor processor = new MediaNotificationProcessor(mContext, @@ -771,6 +777,19 @@ public class NotificationContentInflater implements NotificationRowContentBinder // try to purge unnecessary cached entries. mRow.getImageResolver().purgeCache(); } + + private class RtlEnabledContext extends ContextWrapper { + private RtlEnabledContext(Context packageContext) { + super(packageContext); + } + + @Override + public ApplicationInfo getApplicationInfo() { + ApplicationInfo applicationInfo = super.getApplicationInfo(); + applicationInfo.flags |= ApplicationInfo.FLAG_SUPPORTS_RTL; + return applicationInfo; + } + } } @VisibleForTesting