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

Commit e80618db authored by Mykola Podolian's avatar Mykola Podolian Committed by Android (Google) Code Review
Browse files

Merge "Prepare BubbleBarViewController to support persistent task bar." into main

parents f28a059e f667c3bc
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -449,11 +449,13 @@

    <dimen name="bubblebar_icon_size_small">32dp</dimen>
    <dimen name="bubblebar_icon_size">36dp</dimen>
    <dimen name="bubblebar_icon_size_persistent_taskbar">28dp</dimen>
    <dimen name="bubblebar_badge_size">24dp</dimen>
    <dimen name="bubblebar_icon_overlap">12dp</dimen>
    <dimen name="bubblebar_overflow_inset">16dp</dimen>
    <dimen name="bubblebar_icon_spacing">6dp</dimen>
    <dimen name="bubblebar_icon_spacing_large">8dp</dimen>
    <dimen name="bubblebar_icon_spacing_persistent_taskbar">@dimen/bubblebar_icon_spacing</dimen>
    <dimen name="bubblebar_expanded_icon_spacing">12dp</dimen>
    <dimen name="bubblebar_icon_elevation">1dp</dimen>

+45 −11
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.launcher3.DeviceProfile;
import com.android.launcher3.R;
import com.android.launcher3.anim.AnimatedFloat;
import com.android.launcher3.taskbar.TaskbarActivityContext;
@@ -62,6 +63,7 @@ public class BubbleBarViewController {
    private final TaskbarActivityContext mActivity;
    private final BubbleBarView mBarView;
    private int mIconSize;
    private int mBubbleBarPadding;

    // Initialized in init.
    private BubbleStashController mBubbleStashController;
@@ -110,10 +112,9 @@ public class BubbleBarViewController {
        mTaskbarStashController = controllers.taskbarStashController;
        mTaskbarInsetsController = controllers.taskbarInsetsController;
        mBubbleBarViewAnimator = new BubbleBarViewAnimator(mBarView, mBubbleStashController);

        onBubbleBarConfigurationChanged(/* animate= */ false);
        mActivity.addOnDeviceProfileChangeListener(
                dp -> updateBubbleBarIconSize(dp.taskbarIconSize, /* animate= */ true));
        updateBubbleBarIconSize(mActivity.getDeviceProfile().taskbarIconSize, /* animate= */ false);
                dp -> onBubbleBarConfigurationChanged(/* animate= */ true));
        mBubbleBarScale.updateValue(1f);
        mBubbleClickListener = v -> onBubbleClicked((BubbleView) v);
        mBubbleBarClickListener = v -> onBubbleBarClicked();
@@ -335,27 +336,60 @@ public class BubbleBarViewController {
    // Modifying view related properties.
    //

    private void updateBubbleBarIconSize(int newIconSize, boolean animate) {
    /** Notifies controller of configuration change, so bubble bar can be adjusted */
    public void onBubbleBarConfigurationChanged(boolean animate) {
        int newIconSize;
        int newPadding;
        Resources res = mActivity.getResources();
        if (mBubbleStashController.isBubblesShowingOnHome()) {
            newIconSize = getBubbleBarIconSizeFromDeviceProfile(res);
            newPadding = getBubbleBarPaddingFromDeviceProfile(res);
        } else {
            // the bubble bar is shown inside the persistent task bar, use preset sizes
            newIconSize = res.getDimensionPixelSize(R.dimen.bubblebar_icon_size_persistent_taskbar);
            newPadding = res.getDimensionPixelSize(
                    R.dimen.bubblebar_icon_spacing_persistent_taskbar);
        }
        updateBubbleBarIconSizeAndPadding(newIconSize, newPadding, animate);
    }


    private int getBubbleBarIconSizeFromDeviceProfile(Resources res) {
        DeviceProfile deviceProfile = mActivity.getDeviceProfile();
        DisplayMetrics dm = res.getDisplayMetrics();
        float smallIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                APP_ICON_SMALL_DP, dm);
        float mediumIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                APP_ICON_MEDIUM_DP, dm);
        float largeIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                APP_ICON_LARGE_DP, dm);
        float smallMediumThreshold = (smallIconSize + mediumIconSize) / 2f;
        float mediumLargeThreshold = (mediumIconSize + largeIconSize) / 2f;
        mIconSize = newIconSize <= smallMediumThreshold
        int taskbarIconSize = deviceProfile.taskbarIconSize;
        return taskbarIconSize <= smallMediumThreshold
                ? res.getDimensionPixelSize(R.dimen.bubblebar_icon_size_small) :
                res.getDimensionPixelSize(R.dimen.bubblebar_icon_size);
        float bubbleBarPadding = newIconSize >= mediumLargeThreshold

    }

    private int getBubbleBarPaddingFromDeviceProfile(Resources res) {
        DeviceProfile deviceProfile = mActivity.getDeviceProfile();
        DisplayMetrics dm = res.getDisplayMetrics();
        float mediumIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                APP_ICON_MEDIUM_DP, dm);
        float largeIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                APP_ICON_LARGE_DP, dm);
        float mediumLargeThreshold = (mediumIconSize + largeIconSize) / 2f;
        return deviceProfile.taskbarIconSize >= mediumLargeThreshold
                ? res.getDimensionPixelSize(R.dimen.bubblebar_icon_spacing_large) :
                res.getDimensionPixelSize(R.dimen.bubblebar_icon_spacing);
    }

    private void updateBubbleBarIconSizeAndPadding(int iconSize, int padding, boolean animate) {
        if (mIconSize == iconSize && mBubbleBarPadding == padding) return;
        mIconSize = iconSize;
        mBubbleBarPadding = padding;
        if (animate) {
            mBarView.animateBubbleBarIconSize(mIconSize, bubbleBarPadding);
            mBarView.animateBubbleBarIconSize(iconSize, padding);
        } else {
            mBarView.setIconSizeAndPadding(mIconSize, bubbleBarPadding);
            mBarView.setIconSizeAndPadding(iconSize, padding);
        }
    }