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

Commit 6dabfbdb authored by Hongwei Wang's avatar Hongwei Wang Committed by Automerger Merge Worker
Browse files

Merge "VisD update for the PipAppIconOverlay" into tm-qpr-dev am: 103b84b2...

Merge "VisD update for the PipAppIconOverlay" into tm-qpr-dev am: 103b84b2 am: 2c3753f6 am: 91e10a09

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



Change-Id: Id4c12d210dd3488cd10588b1cadee698431f55d5
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents b84cb3bf 91e10a09
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.window.TaskSnapshot;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.graphics.SfVsyncFrameCallbackProvider;
import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.animation.Interpolators;
import com.android.wm.shell.transition.Transitions;

@@ -372,7 +373,8 @@ public class PipAnimationController {

        void setAppIconContentOverlay(Context context, Rect bounds, ActivityInfo activityInfo) {
            reattachContentOverlay(
                    new PipContentOverlay.PipAppIconOverlay(context, bounds, activityInfo));
                    new PipContentOverlay.PipAppIconOverlay(context, bounds,
                            () -> new IconProvider(context).getIcon(activityInfo)));
        }

        private void reattachContentOverlay(PipContentOverlay overlay) {
+9 −28
Original line number Diff line number Diff line
@@ -20,9 +20,6 @@ import static android.util.TypedValue.COMPLEX_UNIT_DIP;

import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
@@ -35,6 +32,8 @@ import android.view.SurfaceControl;
import android.view.SurfaceSession;
import android.window.TaskSnapshot;

import java.util.function.Supplier;

/**
 * Represents the content overlay used during the entering PiP animation.
 */
@@ -177,7 +176,9 @@ public abstract class PipContentOverlay {
    /** A {@link PipContentOverlay} shows app icon on solid color background. */
    public static final class PipAppIconOverlay extends PipContentOverlay {
        private static final String TAG = PipAppIconOverlay.class.getSimpleName();
        private static final int APP_ICON_SIZE_DP = 48;
        // Align with the practical / reasonable launcher:iconImageSize as in
        // vendor/unbundled_google/packages/NexusLauncher/res/xml/device_profiles.xml
        private static final int APP_ICON_SIZE_DP = 66;

        private final Context mContext;
        private final int mAppIconSizePx;
@@ -187,14 +188,14 @@ public abstract class PipContentOverlay {

        private Bitmap mBitmap;

        public PipAppIconOverlay(Context context, Rect appBounds, ActivityInfo activityInfo) {
        public PipAppIconOverlay(Context context, Rect appBounds, Supplier<Drawable> iconSupplier) {
            mContext = context;
            mAppIconSizePx = (int) TypedValue.applyDimension(COMPLEX_UNIT_DIP, APP_ICON_SIZE_DP,
                    context.getResources().getDisplayMetrics());
            mAppBounds = new Rect(appBounds);
            mBitmap = Bitmap.createBitmap(appBounds.width(), appBounds.height(),
                    Bitmap.Config.ARGB_8888);
            prepareAppIconOverlay(activityInfo);
            prepareAppIconOverlay(iconSupplier);
            mLeash = new SurfaceControl.Builder(new SurfaceSession())
                    .setCallsite(TAG)
                    .setName(LAYER_NAME)
@@ -237,7 +238,7 @@ public abstract class PipContentOverlay {
            }
        }

        private void prepareAppIconOverlay(ActivityInfo activityInfo) {
        private void prepareAppIconOverlay(Supplier<Drawable> iconSupplier) {
            final Canvas canvas = new Canvas();
            canvas.setBitmap(mBitmap);
            final TypedArray ta = mContext.obtainStyledAttributes(new int[] {
@@ -251,8 +252,7 @@ public abstract class PipContentOverlay {
            } finally {
                ta.recycle();
            }
            final Drawable appIcon = loadActivityInfoIcon(activityInfo,
                    mContext.getResources().getConfiguration().densityDpi);
            final Drawable appIcon = iconSupplier.get();
            final Rect appIconBounds = new Rect(
                    mAppBounds.centerX() - mAppIconSizePx / 2,
                    mAppBounds.centerY() - mAppIconSizePx / 2,
@@ -262,24 +262,5 @@ public abstract class PipContentOverlay {
            appIcon.draw(canvas);
            mBitmap = mBitmap.copy(Bitmap.Config.HARDWARE, false /* mutable */);
        }

        // Copied from com.android.launcher3.icons.IconProvider#loadActivityInfoIcon
        private Drawable loadActivityInfoIcon(ActivityInfo ai, int density) {
            final int iconRes = ai.getIconResource();
            Drawable icon = null;
            // Get the preferred density icon from the app's resources
            if (density != 0 && iconRes != 0) {
                try {
                    final Resources resources = mContext.getPackageManager()
                            .getResourcesForApplication(ai.applicationInfo);
                    icon = resources.getDrawableForDensity(iconRes, density);
                } catch (PackageManager.NameNotFoundException | Resources.NotFoundException exc) { }
            }
            // Get the default density icon
            if (icon == null) {
                icon = ai.loadIcon(mContext.getPackageManager());
            }
            return icon;
        }
    }
}