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

Commit d0ae492e authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Changing the FolderIcon shape based on AdpativeIcon

> Creating an abstract interface to represent a folderIcon shape
> Defined few common folder shapes
> Picking the folder shape closest to the AdaptiveIcon shape

Bug: 111433118
Change-Id: Ib35eddbdd6692767aa9dbe6aae1a379a68cc456a
parent 7b457510
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.launcher3;
import android.content.Context;

import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.folder.FolderShape;
import com.android.launcher3.graphics.IconShapeOverride;
import com.android.launcher3.logging.FileLog;
import com.android.launcher3.util.ResourceBasedOverride;
@@ -39,5 +40,6 @@ public class MainProcessInitializer implements ResourceBasedOverride {
        FeatureFlags.initialize(context);
        IconShapeOverride.apply(context);
        SessionCommitReceiver.applyDefaultUserPrefs(context);
        FolderShape.init();
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -127,8 +127,8 @@ public class Workspace extends PagedView<WorkspacePageIndicator>

    private static final int DEFAULT_PAGE = 0;

    private static final boolean MAP_NO_RECURSE = false;
    private static final boolean MAP_RECURSE = true;
    public static final boolean MAP_NO_RECURSE = false;
    public static final boolean MAP_RECURSE = true;

    // The screen id used for the empty screen always present to the right.
    public static final int EXTRA_EMPTY_SCREEN_ID = -201;
@@ -3121,7 +3121,7 @@ public class Workspace extends PagedView<WorkspacePageIndicator>
     * @param recurse true: iterate over folder children. false: op get the folders themselves.
     * @param op the operator to map over the shortcuts
     */
    void mapOverItems(boolean recurse, ItemOperator op) {
    public void mapOverItems(boolean recurse, ItemOperator op) {
        ArrayList<ShortcutAndWidgetContainer> containers = getAllShortcutAndWidgetContainers();
        final int containerCount = containers.size();
        for (int containerIdx = 0; containerIdx < containerCount; containerIdx++) {
+25 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ import android.animation.AnimatorSet;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Path;
import android.graphics.Rect;
import android.text.InputType;
import android.text.Selection;
@@ -151,6 +153,8 @@ public class Folder extends AbstractFloatingView implements DragSource,
    // Cell ranks used for drag and drop
    @Thunk int mTargetRank, mPrevTargetRank, mEmptyCellRank;

    private Path mClipPath;

    @ViewDebug.ExportedProperty(category = "launcher",
            mapping = {
                    @ViewDebug.IntToString(from = STATE_NONE, to = "STATE_NONE"),
@@ -1476,4 +1480,25 @@ public class Folder extends AbstractFloatingView implements DragSource,
            sHintText = res.getString(R.string.folder_hint_text);
        }
    }

    /**
     * Alternative to using {@link #getClipToOutline()} as it only works with derivatives of
     * rounded rect.
     */
    public void setClipPath(Path clipPath) {
        mClipPath = clipPath;
        invalidate();
    }

    @Override
    public void draw(Canvas canvas) {
        if (mClipPath != null) {
            int count = canvas.save();
            canvas.clipPath(mClipPath);
            super.draw(canvas);
            canvas.restoreToCount(count);
        } else {
            super.draw(canvas);
        }
    }
}
+3 −10
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.launcher3.folder;
import static com.android.launcher3.BubbleTextView.TEXT_ALPHA_PROPERTY;
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW;
import static com.android.launcher3.folder.FolderShape.getShape;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -40,7 +41,6 @@ import com.android.launcher3.R;
import com.android.launcher3.ShortcutAndWidgetContainer;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.PropertyResetListener;
import com.android.launcher3.anim.RoundedRectRevealOutlineProvider;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.util.Themes;

@@ -166,7 +166,6 @@ public class FolderAnimationManager {
                Math.round((totalOffsetX + initialSize) / initialScale),
                Math.round((paddingOffsetY + initialSize) / initialScale));
        Rect endRect = new Rect(0, 0, lp.width, lp.height);
        float initialRadius = initialSize / initialScale / 2f;
        float finalRadius = Utilities.pxFromDp(2, mContext.getResources().getDisplayMetrics());

        // Create the animators.
@@ -189,14 +188,8 @@ public class FolderAnimationManager {
        play(a, getAnimator(mFolder, SCALE_PROPERTY, initialScale, finalScale));
        play(a, getAnimator(mFolderBackground, "color", initialColor, finalColor));
        play(a, mFolderIcon.mFolderName.createTextAlphaAnimator(!mIsOpening));
        RoundedRectRevealOutlineProvider outlineProvider = new RoundedRectRevealOutlineProvider(
                initialRadius, finalRadius, startRect, endRect) {
            @Override
            public boolean shouldRemoveElevationDuringAnimation() {
                return true;
            }
        };
        play(a, outlineProvider.createRevealAnimator(mFolder, !mIsOpening));
        play(a, getShape().createRevealAnimator(
                mFolder, startRect, endRect, finalRadius, !mIsOpening));

        // Animate the elevation midway so that the shadow is not noticeable in the background.
        int midDuration = mDuration / 2;
+3 −13
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ import androidx.annotation.NonNull;
 * An icon that can appear on in the workspace representing an {@link Folder}.
 */
public class FolderIcon extends FrameLayout implements FolderListener {

    @Thunk Launcher mLauncher;
    @Thunk Folder mFolder;
    private FolderInfo mInfo;
@@ -477,20 +478,9 @@ public class FolderIcon extends FrameLayout implements FolderListener {
        if (mFolder == null) return;
        if (mFolder.getItemCount() == 0 && !mAnimating) return;

        final int saveCount;

        if (canvas.isHardwareAccelerated()) {
            saveCount = canvas.saveLayer(0, 0, getWidth(), getHeight(), null);
        } else {
            saveCount = canvas.save();
        final int saveCount = canvas.save();
        canvas.clipPath(mBackground.getClipPath());
        }

        mPreviewItemManager.draw(canvas);

        if (canvas.isHardwareAccelerated()) {
            mBackground.clipCanvasHardware(canvas);
        }
        canvas.restoreToCount(saveCount);

        if (!mBackground.drawingDelegated()) {
Loading