Search in sources :

Example 36 with Background

use of com.android.launcher3.tapl.Background in project Neo-Launcher by NeoApplications.

the class WorkspaceAndHotseatScrim method draw.

public void draw(Canvas canvas) {
    // Draw the background below children.
    if (mScrimAlpha > 0) {
        // Update the scroll position first to ensure scrim cutout is in the right place.
        mWorkspace.computeScrollWithoutInvalidation();
        CellLayout currCellLayout = mWorkspace.getCurrentDragOverlappingLayout();
        canvas.save();
        if (currCellLayout != null && currCellLayout != mLauncher.getHotseat()) {
            // Cut a hole in the darkening scrim on the page that should be highlighted, if any.
            mLauncher.getDragLayer().getDescendantRectRelativeToSelf(currCellLayout, mHighlightRect);
            canvas.clipRect(mHighlightRect, Region.Op.DIFFERENCE);
        }
        super.draw(canvas);
        canvas.restore();
    }
    if (!mHideSysUiScrim) {
        if (mSysUiProgress <= 0) {
            mAnimateScrimOnNextDraw = false;
            return;
        }
        if (mAnimateScrimOnNextDraw) {
            mSysUiAnimMultiplier = 0;
            reapplySysUiAlphaNoInvalidate();
            animateToSysuiMultiplier(1, 600, mLauncher.getWindow().getTransitionBackgroundFadeDuration());
            mAnimateScrimOnNextDraw = false;
        }
        if (mDrawTopScrim) {
            mTopScrim.draw(canvas);
        }
        if (mDrawBottomScrim) {
            canvas.drawBitmap(mBottomMask, null, mFinalMaskRect, mBottomMaskPaint);
        }
    }
}
Also used : CellLayout(com.android.launcher3.CellLayout)

Example 37 with Background

use of com.android.launcher3.tapl.Background in project Neo-Launcher by NeoApplications.

the class PopupContainerWithArrow method populateAndShow.

@TargetApi(Build.VERSION_CODES.P)
protected void populateAndShow(final BubbleTextView originalIcon, int shortcutCount, final List<NotificationKeyData> notificationKeys, List<SystemShortcut> systemShortcuts) {
    mNumNotifications = notificationKeys.size();
    mOriginalIcon = originalIcon;
    // Add views
    if (mNumNotifications > 0) {
        // Add notification entries
        View.inflate(getContext(), R.layout.notification_content, this);
        mNotificationItemView = new NotificationItemView(this);
        if (mNumNotifications == 1) {
            mNotificationItemView.removeFooter();
        }
        updateNotificationHeader();
    }
    int viewsToFlip = getChildCount();
    mSystemShortcutContainer = this;
    if (shortcutCount > 0) {
        if (mNotificationItemView != null) {
            mNotificationItemView.addGutter();
        }
        for (int i = shortcutCount; i > 0; i--) {
            mShortcuts.add(inflateAndAdd(R.layout.deep_shortcut, this));
        }
        updateHiddenShortcuts();
        if (!systemShortcuts.isEmpty()) {
            mSystemShortcutContainer = inflateAndAdd(R.layout.system_shortcut_icons, this);
            for (SystemShortcut shortcut : systemShortcuts) {
                initializeSystemShortcut(R.layout.system_shortcut_icon_only, mSystemShortcutContainer, shortcut);
            }
        }
    } else if (!systemShortcuts.isEmpty()) {
        if (mNotificationItemView != null) {
            mNotificationItemView.addGutter();
        }
        for (SystemShortcut shortcut : systemShortcuts) {
            initializeSystemShortcut(R.layout.system_shortcut, this, shortcut);
        }
    }
    reorderAndShow(viewsToFlip);
    ItemInfo originalItemInfo = (ItemInfo) originalIcon.getTag();
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        setAccessibilityPaneTitle(getTitleForAccessibility());
    }
    mLauncher.getDragController().addDragListener(this);
    mOriginalIcon.setForceHideDot(true);
    // All views are added. Animate layout from now on.
    setLayoutTransition(new LayoutTransition());
    // Load the shortcuts on a background thread and update the container as it animates.
    MODEL_EXECUTOR.getHandler().postAtFrontOfQueue(PopupPopulator.createUpdateRunnable(mLauncher, originalItemInfo, new Handler(Looper.getMainLooper()), this, mShortcuts, notificationKeys));
}
Also used : ItemInfo(com.android.launcher3.ItemInfo) NotificationItemView(com.android.launcher3.notification.NotificationItemView) Handler(android.os.Handler) ItemClickHandler(com.android.launcher3.touch.ItemClickHandler) LayoutTransition(android.animation.LayoutTransition) Point(android.graphics.Point) TargetApi(android.annotation.TargetApi)

Example 38 with Background

use of com.android.launcher3.tapl.Background in project Neo-Launcher by NeoApplications.

the class FloatingIconView method getFloatingIconView.

/**
 * Creates a floating icon view for {@param originalView}.
 * @param originalView The view to copy
 * @param hideOriginal If true, it will hide {@param originalView} while this view is visible.
 *                     Else, we will not draw anything in this view.
 * @param positionOut Rect that will hold the size and position of v.
 * @param isOpening True if this view replaces the icon for app open animation.
 */
public static FloatingIconView getFloatingIconView(Launcher launcher, View originalView, boolean hideOriginal, RectF positionOut, boolean isOpening) {
    final DragLayer dragLayer = launcher.getDragLayer();
    ViewGroup parent = (ViewGroup) dragLayer.getParent();
    FloatingIconView view = launcher.getViewCache().getView(R.layout.floating_icon_view, launcher, parent);
    view.recycle();
    // Get the drawable on the background thread
    boolean shouldLoadIcon = originalView.getTag() instanceof ItemInfo && hideOriginal;
    if (shouldLoadIcon) {
        if (sIconLoadResult != null && sIconLoadResult.itemInfo == originalView.getTag()) {
            view.mIconLoadResult = sIconLoadResult;
        } else {
            view.mIconLoadResult = fetchIcon(launcher, originalView, (ItemInfo) originalView.getTag(), isOpening);
        }
    }
    sIconLoadResult = null;
    view.mIsVerticalBarLayout = launcher.getDeviceProfile().isVerticalBarLayout();
    view.mIsOpening = isOpening;
    view.mOriginalIcon = originalView;
    view.mPositionOut = positionOut;
    // Match the position of the original view.
    view.matchPositionOf(launcher, originalView, isOpening, positionOut);
    // We need to add it to the overlay, but keep it invisible until animation starts..
    view.setVisibility(INVISIBLE);
    parent.addView(view);
    dragLayer.addView(view.mListenerView);
    view.mListenerView.setListener(view::fastFinish);
    view.mEndRunnable = () -> {
        view.mEndRunnable = null;
        if (hideOriginal) {
            if (isOpening) {
                if (originalView instanceof BubbleTextView) {
                    ((BubbleTextView) originalView).setIconVisible(true);
                    ((BubbleTextView) originalView).setForceHideDot(false);
                } else {
                    originalView.setVisibility(VISIBLE);
                }
                view.finish(dragLayer);
            } else {
                view.mFadeAnimatorSet = view.createFadeAnimation(originalView, dragLayer);
                view.mFadeAnimatorSet.start();
            }
        } else {
            view.finish(dragLayer);
        }
    };
    // the icon is not left in a hidden state.
    if (shouldLoadIcon) {
        view.checkIconResult(originalView);
    }
    return view;
}
Also used : DragLayer(com.android.launcher3.dragndrop.DragLayer) ItemInfo(com.android.launcher3.ItemInfo) ViewGroup(android.view.ViewGroup) BubbleTextView(com.android.launcher3.BubbleTextView)

Example 39 with Background

use of com.android.launcher3.tapl.Background in project Neo-Launcher by NeoApplications.

the class FloatingIconView method setIcon.

/**
 * Sets the drawables of the {@param originalView} onto this view.
 *
 * @param originalView The View that the FloatingIconView will replace.
 * @param drawable The drawable of the original view.
 * @param badge The badge of the original view.
 * @param iconOffset The amount of offset needed to match this view with the original view.
 */
@UiThread
private void setIcon(View originalView, @Nullable Drawable drawable, @Nullable Drawable badge, int iconOffset) {
    mBadge = badge;
    mIsAdaptiveIcon = drawable instanceof AdaptiveIconDrawable;
    if (mIsAdaptiveIcon) {
        boolean isFolderIcon = drawable instanceof FolderAdaptiveIcon;
        AdaptiveIconDrawable adaptiveIcon = (AdaptiveIconDrawable) drawable;
        Drawable background = adaptiveIcon.getBackground();
        if (background == null) {
            background = new ColorDrawable(Color.TRANSPARENT);
        }
        mBackground = background;
        Drawable foreground = adaptiveIcon.getForeground();
        if (foreground == null) {
            foreground = new ColorDrawable(Color.TRANSPARENT);
        }
        mForeground = foreground;
        final LayoutParams lp = (LayoutParams) getLayoutParams();
        final int originalHeight = lp.height;
        final int originalWidth = lp.width;
        int blurMargin = mBlurSizeOutline / 2;
        mFinalDrawableBounds.set(0, 0, originalWidth, originalHeight);
        if (!isFolderIcon) {
            mFinalDrawableBounds.inset(iconOffset - blurMargin, iconOffset - blurMargin);
        }
        mForeground.setBounds(mFinalDrawableBounds);
        mBackground.setBounds(mFinalDrawableBounds);
        mStartRevealRect.set(0, 0, originalWidth, originalHeight);
        if (mBadge != null) {
            mBadge.setBounds(mStartRevealRect);
            if (!mIsOpening && !isFolderIcon) {
                DRAWABLE_ALPHA.set(mBadge, 0);
            }
        }
        if (isFolderIcon) {
            ((FolderIcon) originalView).getPreviewBounds(sTmpRect);
            float bgStroke = ((FolderIcon) originalView).getBackgroundStrokeWidth();
            if (mForeground instanceof ShiftedBitmapDrawable) {
                ShiftedBitmapDrawable sbd = (ShiftedBitmapDrawable) mForeground;
                sbd.setShiftX(sbd.getShiftX() - sTmpRect.left - bgStroke);
                sbd.setShiftY(sbd.getShiftY() - sTmpRect.top - bgStroke);
            }
            if (mBadge instanceof ShiftedBitmapDrawable) {
                ShiftedBitmapDrawable sbd = (ShiftedBitmapDrawable) mBadge;
                sbd.setShiftX(sbd.getShiftX() - sTmpRect.left - bgStroke);
                sbd.setShiftY(sbd.getShiftY() - sTmpRect.top - bgStroke);
            }
        } else {
            Utilities.scaleRectAboutCenter(mStartRevealRect, IconShape.getNormalizationScale());
        }
        float aspectRatio = mLauncher.getDeviceProfile().aspectRatio;
        if (mIsVerticalBarLayout) {
            lp.width = (int) Math.max(lp.width, lp.height * aspectRatio);
        } else {
            lp.height = (int) Math.max(lp.height, lp.width * aspectRatio);
        }
        int left = mIsRtl ? mLauncher.getDeviceProfile().widthPx - lp.getMarginStart() - lp.width : lp.leftMargin;
        layout(left, lp.topMargin, left + lp.width, lp.topMargin + lp.height);
        float scale = Math.max((float) lp.height / originalHeight, (float) lp.width / originalWidth);
        float bgDrawableStartScale;
        if (mIsOpening) {
            bgDrawableStartScale = 1f;
            mOutline.set(0, 0, originalWidth, originalHeight);
        } else {
            bgDrawableStartScale = scale;
            mOutline.set(0, 0, lp.width, lp.height);
        }
        setBackgroundDrawableBounds(bgDrawableStartScale);
        mEndRevealRect.set(0, 0, lp.width, lp.height);
        setOutlineProvider(new ViewOutlineProvider() {

            @Override
            public void getOutline(View view, Outline outline) {
                outline.setRoundRect(mOutline, mTaskCornerRadius);
            }
        });
        setClipToOutline(true);
    } else {
        setBackground(drawable);
        setClipToOutline(false);
    }
    invalidate();
    invalidateOutline();
}
Also used : FolderAdaptiveIcon(com.android.launcher3.dragndrop.FolderAdaptiveIcon) LayoutParams(com.android.launcher3.InsettableFrameLayout.LayoutParams) AdaptiveIconDrawable(android.graphics.drawable.AdaptiveIconDrawable) ColorDrawable(android.graphics.drawable.ColorDrawable) Drawable(android.graphics.drawable.Drawable) ShiftedBitmapDrawable(com.android.launcher3.graphics.ShiftedBitmapDrawable) Utilities.getFullDrawable(com.android.launcher3.Utilities.getFullDrawable) Outline(android.graphics.Outline) ViewOutlineProvider(android.view.ViewOutlineProvider) ImageView(android.widget.ImageView) BubbleTextView(com.android.launcher3.BubbleTextView) View(android.view.View) DeepShortcutView(com.android.launcher3.shortcuts.DeepShortcutView) ColorDrawable(android.graphics.drawable.ColorDrawable) FolderIcon(com.android.launcher3.folder.FolderIcon) ShiftedBitmapDrawable(com.android.launcher3.graphics.ShiftedBitmapDrawable) AdaptiveIconDrawable(android.graphics.drawable.AdaptiveIconDrawable) UiThread(androidx.annotation.UiThread)

Example 40 with Background

use of com.android.launcher3.tapl.Background in project Neo-Launcher by NeoApplications.

the class AbstractLauncherUiTest method checkLauncherIntegrity.

private static void checkLauncherIntegrity(Launcher launcher, ContainerType expectedContainerType) {
    if (launcher != null) {
        final LauncherStateManager stateManager = launcher.getStateManager();
        final LauncherState stableState = stateManager.getCurrentStableState();
        assertTrue("Stable state != state: " + stableState.getClass().getSimpleName() + ", " + stateManager.getState().getClass().getSimpleName(), stableState == stateManager.getState());
        final boolean isResumed = launcher.hasBeenResumed();
        assertTrue("hasBeenResumed() != isStarted(), hasBeenResumed(): " + isResumed, isResumed == launcher.isStarted());
        assertTrue("hasBeenResumed() != isUserActive(), hasBeenResumed(): " + isResumed, isResumed == launcher.isUserActive());
        final int ordinal = stableState.ordinal;
        switch(expectedContainerType) {
            case WORKSPACE:
            case WIDGETS:
                {
                    assertTrue("Launcher is not resumed in state: " + expectedContainerType, isResumed);
                    assertTrue(TestProtocol.stateOrdinalToString(ordinal), ordinal == TestProtocol.NORMAL_STATE_ORDINAL);
                    break;
                }
            case ALL_APPS:
                {
                    assertTrue("Launcher is not resumed in state: " + expectedContainerType, isResumed);
                    assertTrue(TestProtocol.stateOrdinalToString(ordinal), ordinal == TestProtocol.ALL_APPS_STATE_ORDINAL);
                    break;
                }
            case OVERVIEW:
                {
                    assertTrue("Launcher is not resumed in state: " + expectedContainerType, isResumed);
                    assertTrue(TestProtocol.stateOrdinalToString(ordinal), ordinal == TestProtocol.OVERVIEW_STATE_ORDINAL);
                    break;
                }
            case BACKGROUND:
                {
                    assertTrue("Launcher is resumed in state: " + expectedContainerType, !isResumed);
                    assertTrue(TestProtocol.stateOrdinalToString(ordinal), ordinal == TestProtocol.NORMAL_STATE_ORDINAL);
                    break;
                }
            default:
                throw new IllegalArgumentException("Illegal container: " + expectedContainerType);
        }
    } else {
        assertTrue("Container type is not BACKGROUND or FALLBACK_OVERVIEW: " + expectedContainerType, expectedContainerType == ContainerType.BACKGROUND || expectedContainerType == ContainerType.FALLBACK_OVERVIEW);
    }
}
Also used : LauncherState(com.android.launcher3.LauncherState) LauncherStateManager(com.android.launcher3.LauncherStateManager)

Aggregations

View (android.view.View)48 Point (android.graphics.Point)39 Rect (android.graphics.Rect)39 ItemInfo (com.android.launcher3.model.data.ItemInfo)29 WorkspaceItemInfo (com.android.launcher3.model.data.WorkspaceItemInfo)29 ObjectAnimator (android.animation.ObjectAnimator)28 Background (com.android.launcher3.tapl.Background)28 DragView (com.android.launcher3.dragndrop.DragView)26 DragLayer (com.android.launcher3.dragndrop.DragLayer)25 Animator (android.animation.Animator)24 AnimatorListenerAdapter (android.animation.AnimatorListenerAdapter)24 LauncherAppWidgetHostView (com.android.launcher3.widget.LauncherAppWidgetHostView)24 Drawable (android.graphics.drawable.Drawable)23 ArrayList (java.util.ArrayList)23 ViewGroup (android.view.ViewGroup)22 ColorDrawable (android.graphics.drawable.ColorDrawable)21 Handler (android.os.Handler)21 FolderIcon (com.android.launcher3.folder.FolderIcon)21 DeepShortcutView (com.android.launcher3.shortcuts.DeepShortcutView)21 Bitmap (android.graphics.Bitmap)20