Don't mutate shared AppInfo instance in RtlContext

In RtlEnabledContext, we force-enable RtL support, since our
notification templates are known to support Rtl, even if the app doesn't
necessarily. We do this by updating a flag on the ApplicationInfo
returned by Context#getApplicationInfo().

Because updating this flag is a mutation, other callers to
Context#getApplicationInfo() after
RtlEnabledContext#getApplicationInfo() has been called will see that RTL
support is enabled, even if it's not true, and even if they are not
using RtlEnabledContext.

The solution is to copy the ApplicationInfo object returned from the
wrapped Context inside of RtlEnabledContext, so that we can mutate the
copy without affecting the shared ApplicationInfo.

Test: atest SystemUITests
Bug: 193213399
Change-Id: Ic2dd0479d60dc9c27cc448685ec83588037a69c7
This commit is contained in:
Steve Elliott
2023-05-02 09:25:35 -04:00
parent cf97449a39
commit 8c4326541a

View File

@@ -966,7 +966,7 @@ public class NotificationContentInflater implements NotificationRowContentBinder
@Override
public ApplicationInfo getApplicationInfo() {
ApplicationInfo applicationInfo = super.getApplicationInfo();
ApplicationInfo applicationInfo = new ApplicationInfo(super.getApplicationInfo());
applicationInfo.flags |= ApplicationInfo.FLAG_SUPPORTS_RTL;
return applicationInfo;
}