Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 22afab63 authored by Selim Cinek's avatar Selim Cinek
Browse files

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
parent 9fa3a870
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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());
        }
    }

    /**
+19 −0
Original line number Diff line number Diff line
@@ -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