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
This commit is contained in:
Selim Cinek
2020-03-09 18:16:03 -07:00
parent 9fa3a870c6
commit 22afab63bd
2 changed files with 30 additions and 0 deletions

View File

@@ -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());
}
}
/**

View File

@@ -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