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

Commit d6687e54 authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Automerger Merge Worker
Browse files

Merge "Monitor package change to update AttributeCache for non-system server."...

Merge "Monitor package change to update AttributeCache for non-system server." into udc-qpr-dev am: 05f6991e am: 9b8a2d16

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24795649



Change-Id: I76be62ca808e737252861533aa8e5db129586cbf
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 361a649d 9b8a2d16
Loading
Loading
Loading
Loading
+36 −0
Original line number Original line Diff line number Diff line
@@ -16,12 +16,18 @@


package com.android.internal.policy;
package com.android.internal.policy;


import android.annotation.RequiresPermission;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.net.Uri;
import android.os.Handler;
import android.os.UserHandle;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.LruCache;
import android.util.LruCache;
@@ -46,6 +52,8 @@ public final class AttributeCache {
    @GuardedBy("this")
    @GuardedBy("this")
    private final Configuration mConfiguration = new Configuration();
    private final Configuration mConfiguration = new Configuration();


    private PackageMonitor mPackageMonitor;

    public final static class Package {
    public final static class Package {
        public final Context context;
        public final Context context;
        private final SparseArray<ArrayMap<int[], Entry>> mMap = new SparseArray<>();
        private final SparseArray<ArrayMap<int[], Entry>> mMap = new SparseArray<>();
@@ -77,6 +85,34 @@ public final class AttributeCache {
        }
        }
    }
    }


    /**
     * Start monitor package change, so the resources can be loaded correctly.
     */
    void monitorPackageRemove(Handler handler) {
        if (mPackageMonitor == null) {
            mPackageMonitor = new PackageMonitor(mContext, handler);
        }
    }

    static class PackageMonitor extends BroadcastReceiver {
        @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
        PackageMonitor(Context context, Handler handler) {
            final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REMOVED);
            filter.addDataScheme(IntentFilter.SCHEME_PACKAGE);
            context.registerReceiverAsUser(this, UserHandle.ALL, filter,
                    null /* broadcastPermission */, handler);
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            final Uri packageUri = intent.getData();
            if (packageUri != null) {
                final String packageName = packageUri.getEncodedSchemeSpecificPart();
                AttributeCache.instance().removePackage(packageName);
            }
        }
    }

    public static AttributeCache instance() {
    public static AttributeCache instance() {
        return sInstance;
        return sInstance;
    }
    }
+11 −0
Original line number Original line Diff line number Diff line
@@ -48,6 +48,7 @@ import android.graphics.drawable.Drawable;
import android.hardware.HardwareBuffer;
import android.hardware.HardwareBuffer;
import android.media.Image;
import android.media.Image;
import android.media.ImageReader;
import android.media.ImageReader;
import android.os.Handler;
import android.os.SystemProperties;
import android.os.SystemProperties;
import android.util.Slog;
import android.util.Slog;
import android.view.InflateException;
import android.view.InflateException;
@@ -1399,4 +1400,14 @@ public class TransitionAnimation {
        // Approximation of WCAG 2.0 relative luminance.
        // Approximation of WCAG 2.0 relative luminance.
        return ((r * 8) + (g * 22) + (b * 2)) >> 5;
        return ((r * 8) + (g * 22) + (b * 2)) >> 5;
    }
    }

    /**
     * For non-system server process, it must call this method to initialize the AttributeCache and
     * start monitor package change, so the resources can be loaded correctly.
     */
    public static void initAttributeCache(Context context, Handler handler) {
        AttributeCache.init(context);
        AttributeCache.instance().monitorPackageRemove(handler);
    }

}
}
+1 −2
Original line number Original line Diff line number Diff line
@@ -99,7 +99,6 @@ import android.window.WindowContainerTransaction;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.policy.AttributeCache;
import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.policy.ScreenDecorationsUtils;
import com.android.internal.policy.TransitionAnimation;
import com.android.internal.policy.TransitionAnimation;
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.protolog.common.ProtoLog;
@@ -182,7 +181,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
                /* broadcastPermission = */ null,
                /* broadcastPermission = */ null,
                mMainHandler);
                mMainHandler);


        AttributeCache.init(mContext);
        TransitionAnimation.initAttributeCache(mContext, mMainHandler);
    }
    }


    private void updateEnterpriseThumbnailDrawable() {
    private void updateEnterpriseThumbnailDrawable() {