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

Commit 36d090df authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Adding a round rect background for the self in Overview

Bug: 78771910
Change-Id: I71460a284ed185e82d66fe65104402fb99d6b312
parent 1ea6d9cb
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -48,4 +48,7 @@

    <!-- Width of the space behind the last task in Overview. In the center of it, there is "Clear all" button. -->
    <dimen name="clear_all_container_width">168dp</dimen>

    <dimen name="shelf_surface_radius">16dp</dimen>
    <dimen name="shelf_surface_top_padding">4dp</dimen>
</resources>
+154 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.launcher3.uioverrides;

import static com.android.launcher3.anim.Interpolators.ACCEL_2;
import static com.android.launcher3.anim.Interpolators.DEACCEL_2;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.v4.graphics.ColorUtils;

import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.allapps.AllAppsContainerView;
import com.android.launcher3.graphics.ViewScrim;
import com.android.launcher3.util.Themes;

/**
 * Scrim used for all-apps and shelf in Overview
 * In transposed layout, it behaves as a simple color scrim.
 * In portrait layout, it draws a rounded rect such that
 *    From normal state to overview state, the shelf just fades in and does not move
 *    From overview state to all-apps state the self moves up and fades in to cover the screen
 */
public class AllAppsScrim extends ViewScrim<AllAppsContainerView> {

    private static final int THRESHOLD_ALPHA_DARK = 102;
    private static final int THRESHOLD_ALPHA_LIGHT = 46;

    private final Launcher mLauncher;
    private final int mEndColor;

    private int mProgressColor;

    // In transposed layout, we simply draw a flat color.
    private boolean mDrawingFlatColor;

    private final Paint mVerticalPaint;
    private float mVerticalProgress;

    private final int mEndAlpha;
    private final int mThresholdAlpha;
    private final float mRadius;
    private final float mTopPadding;

    // Max vertical progress after which the scrim stops moving.
    private float mMoveThreshold;
    // Minimum visible size of the scrim.
    private int mMinSize;
    private float mDrawFactor = 0;

    public AllAppsScrim(AllAppsContainerView view) {
        super(view);
        mLauncher = Launcher.getLauncher(view.getContext());
        mEndColor = Themes.getAttrColor(mLauncher, R.attr.allAppsScrimColor);
        mProgressColor = mEndColor;

        mEndAlpha = Color.alpha(mEndColor);
        mThresholdAlpha = Themes.getAttrBoolean(mLauncher, R.attr.isMainColorDark)
                ? THRESHOLD_ALPHA_DARK : THRESHOLD_ALPHA_LIGHT;
        mRadius = mLauncher.getResources().getDimension(R.dimen.shelf_surface_radius);
        mTopPadding = mLauncher.getResources().getDimension(R.dimen.shelf_surface_top_padding);

        mVerticalPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mVerticalPaint.setColor(ColorUtils.setAlphaComponent(mEndColor, 255));

        // Just assume the easiest UI for now, until we have the proper layout information.
        mDrawingFlatColor = true;
    }

    @Override
    protected void onProgressChanged() {
        mProgressColor = ColorUtils.setAlphaComponent(mEndColor,
                Math.round(DEACCEL_2.getInterpolation(mProgress) * Color.alpha(mEndColor)));
    }

    @Override
    public void draw(Canvas canvas, int width, int height) {
        if (mDrawingFlatColor) {
            if (mProgress > 0) {
                canvas.drawColor(mProgressColor);
            }
            return;
        }

        if (mVerticalPaint.getAlpha() == 0) {
            return;
        } else if (mDrawFactor <= 0) {
            canvas.drawPaint(mVerticalPaint);
        } else {
            float top = (height - mMinSize) * mDrawFactor - mTopPadding;
            canvas.drawRoundRect(0, top - mRadius, width, height + mRadius,
                    mRadius, mRadius, mVerticalPaint);
        }
    }

    public void reInitUi() {
        DeviceProfile dp = mLauncher.getDeviceProfile();
        mDrawingFlatColor = dp.isVerticalBarLayout();

        if (!mDrawingFlatColor) {
            float swipeLength = OverviewState.getDefaultSwipeHeight(mLauncher);
            mMoveThreshold = 1 - swipeLength / mLauncher.getAllAppsController().getShiftRange();
            mMinSize = dp.hotseatBarSizePx + dp.getInsets().bottom;
            onVerticalProgress(mVerticalProgress);
        }
        invalidate();
    }

    public void onVerticalProgress(float progress) {
        mVerticalProgress = progress;
        if (mDrawingFlatColor) {
            return;
        }

        float drawFactor;
        int alpha;
        if (mVerticalProgress >= mMoveThreshold) {
            drawFactor = 1;
            alpha = mVerticalProgress >= 1 ? 0 : Math.round(mThresholdAlpha
                    * ACCEL_2.getInterpolation((1 - mVerticalProgress) / (1 - mMoveThreshold)));
        } else if (mVerticalProgress <= 0) {
            drawFactor = 0;
            alpha = mEndAlpha;
        } else {
            drawFactor = mVerticalProgress / mMoveThreshold;
            alpha = mEndAlpha - Math.round((mEndAlpha - mThresholdAlpha) * drawFactor);
        }
        alpha = Utilities.boundToRange(alpha, 0, 255);
        if (alpha != mVerticalPaint.getAlpha() || drawFactor != mDrawFactor) {
            mVerticalPaint.setAlpha(alpha);
            mDrawFactor = drawFactor;
            invalidate();
        }
    }

}
+8 −1
Original line number Diff line number Diff line
@@ -38,7 +38,14 @@ public class LayoutUtils {
    private @interface MultiWindowStrategy {}

    public static void calculateLauncherTaskSize(Context context, DeviceProfile dp, Rect outRect) {
        float extraSpace = dp.isVerticalBarLayout() ? 0 : dp.hotseatBarSizePx;
        float extraSpace;
        if (dp.isVerticalBarLayout()) {
            extraSpace = 0;
        } else {
            Resources res = context.getResources();
            extraSpace = dp.hotseatBarSizePx + res.getDimension(R.dimen.shelf_surface_top_padding)
                    + res.getDimension(R.dimen.shelf_surface_radius);
        }
        calculateTaskSize(context, dp, extraSpace, MULTI_WINDOW_STRATEGY_HALF_SCREEN, outRect);
    }

+2 −2
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@
    </style>

    <style name="BaseLauncherThemeWithCustomAttrs" parent="@style/BaseLauncherTheme">
        <item name="allAppsScrimColor">#CCFFFFFF</item>
        <item name="allAppsScrimColor">#EAFFFFFF</item>
        <item name="allAppsNavBarScrimColor">#66FFFFFF</item>
        <item name="popupColorPrimary">#FFF</item>
        <item name="popupColorSecondary">#F5F5F5</item> <!-- Gray 100 -->
@@ -61,7 +61,7 @@
        <item name="android:textColorHint">#A0FFFFFF</item>
        <item name="android:colorControlHighlight">#A0FFFFFF</item>
        <item name="android:colorPrimary">#FF333333</item>
        <item name="allAppsScrimColor">#7A212121</item>
        <item name="allAppsScrimColor">#EA212121</item>
        <item name="allAppsNavBarScrimColor">#80000000</item>
        <item name="popupColorPrimary">?android:attr/colorPrimary</item>
        <item name="popupColorSecondary">#424242</item> <!-- Gray 800 -->
+2 −5
Original line number Diff line number Diff line
@@ -15,8 +15,6 @@
 */
package com.android.launcher3.allapps;

import static com.android.launcher3.anim.Interpolators.DEACCEL_2;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
@@ -48,7 +46,7 @@ import com.android.launcher3.ItemInfo;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.graphics.ColorScrim;
import com.android.launcher3.uioverrides.AllAppsScrim;
import com.android.launcher3.keyboard.FocusedItemDecorator;
import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
import com.android.launcher3.util.ItemInfoMatcher;
@@ -112,8 +110,7 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo
        mAllAppsStore.addUpdateListener(this::onAppsUpdated);

        // Attach a scrim to be drawn behind all-apps and hotseat
        new ColorScrim(this, Themes.getAttrColor(context, R.attr.allAppsScrimColor), DEACCEL_2)
                .attach();
        new AllAppsScrim(this).attach();

        addSpringView(R.id.all_apps_header);
        addSpringView(R.id.apps_list_view);
Loading