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

Commit e6f349b3 authored by Jagrut Desai's avatar Jagrut Desai
Browse files

Adjusting Taskbar Icons for larger display size

Bug: 323948193
Test: Manual
Flag: NONE

Change-Id: I0bdfcaebf3de050ac850fe42c061c82ffebdb7c2
parent 9f0042b2
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.DisplayCutout;
import android.view.InputDevice;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -134,7 +135,7 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar

        int actualMargin = resources.getDimensionPixelSize(R.dimen.taskbar_icon_spacing);
        int actualIconSize = mActivityContext.getDeviceProfile().taskbarIconSize;
        if (enableTaskbarPinning()) {
        if (enableTaskbarPinning() && !mActivityContext.isThreeButtonNav()) {
            DeviceProfile deviceProfile = mActivityContext.getTransientTaskbarDeviceProfile();
            actualIconSize = deviceProfile.taskbarIconSize;
        }
@@ -472,6 +473,29 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar
            iconEnd = centerAlignIconEnd + offset;
        }

        // Currently, we support only one device with display cutout and we only are concern about
        // it when the bottom rect is present and non empty
        DisplayCutout displayCutout = getDisplay().getCutout();
        if (displayCutout != null && !displayCutout.getBoundingRectBottom().isEmpty()) {
            Rect cutoutBottomRect = displayCutout.getBoundingRectBottom();
            // when cutout present at the bottom of screen align taskbar icons to cutout offset
            // if taskbar icon overlaps with cutout
            int taskbarIconLeftBound = iconEnd - spaceNeeded;
            int taskbarIconRightBound = iconEnd;

            boolean doesTaskbarIconsOverlapWithCutout =
                    taskbarIconLeftBound <= cutoutBottomRect.centerX()
                            && cutoutBottomRect.centerX() <= taskbarIconRightBound;

            if (doesTaskbarIconsOverlapWithCutout) {
                if (!layoutRtl) {
                    iconEnd = spaceNeeded + cutoutBottomRect.width();
                } else {
                    iconEnd = right - cutoutBottomRect.width();
                }
            }
        }

        sTmpRect.set(mIconLayoutBounds);

        // Layout the children
+11 −5
Original line number Diff line number Diff line
@@ -337,11 +337,6 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
    private void updateTaskbarIconTranslationXForPinning() {
        View[] iconViews = mTaskbarView.getIconViews();
        float scale = mTaskbarIconTranslationXForPinning.value;
        float taskbarCenterX =
                mTaskbarView.getLeft() + (mTaskbarView.getRight() - mTaskbarView.getLeft()) / 2.0f;

        float finalMarginScale = mapRange(scale, 0f, mTransientIconSize - mPersistentIconSize);

        float transientTaskbarAllAppsOffset = mActivity.getResources().getDimension(
                mTaskbarView.getAllAppsButtonTranslationXOffset(true));
        float persistentTaskbarAllAppsOffset = mActivity.getResources().getDimension(
@@ -354,6 +349,17 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
            allAppIconTranslateRange *= -1;
        }

        if (mActivity.isThreeButtonNav()) {
            ((IconButtonView) mTaskbarView.getAllAppsButtonView())
                    .setTranslationXForTaskbarAllAppsIcon(allAppIconTranslateRange);
            return;
        }

        float taskbarCenterX =
                mTaskbarView.getLeft() + (mTaskbarView.getRight() - mTaskbarView.getLeft()) / 2.0f;

        float finalMarginScale = mapRange(scale, 0f, mTransientIconSize - mPersistentIconSize);

        float halfIconCount = iconViews.length / 2.0f;
        for (int iconIndex = 0; iconIndex < iconViews.length; iconIndex++) {
            View iconView = iconViews[iconIndex];
+49 −32
Original line number Diff line number Diff line
@@ -28,9 +28,7 @@ import com.android.launcher3.R
import com.android.launcher3.taskbar.TaskbarActivityContext
import com.android.systemui.shared.rotation.RotationButton

/**
 * Layoutter for rendering task bar in large screen, both in 3-button and gesture nav mode.
 */
/** Layoutter for rendering task bar in large screen, both in 3-button and gesture nav mode. */
class TaskbarNavLayoutter(
    resources: Resources,
    navBarContainer: LinearLayout,
@@ -54,9 +52,15 @@ class TaskbarNavLayoutter(

    override fun layoutButtons(context: TaskbarActivityContext, isA11yButtonPersistent: Boolean) {
        // Add spacing after the end of the last nav button
        var navMarginEnd = resources
                .getDimension(context.deviceProfile.inv.inlineNavButtonsEndSpacing)
                .toInt()
        var navMarginEnd =
            resources.getDimension(context.deviceProfile.inv.inlineNavButtonsEndSpacing).toInt()

        val cutout = context.display.cutout
        val bottomRect = cutout?.boundingRectBottom
        if (bottomRect != null && !bottomRect.isEmpty) {
            navMarginEnd = bottomRect.width()
        }

        val contextualWidth = endContextualContainer.width
        // If contextual buttons are showing, we check if the end margin is enough for the
        // contextual button to be showing - if not, move the nav buttons over a smidge
@@ -65,8 +69,11 @@ class TaskbarNavLayoutter(
            navMarginEnd += resources.getDimensionPixelSize(R.dimen.taskbar_hotseat_nav_spacing) / 2
        }

        val navButtonParams = FrameLayout.LayoutParams(
                FrameLayout.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT)
        val navButtonParams =
            FrameLayout.LayoutParams(
                FrameLayout.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.MATCH_PARENT
            )
        navButtonParams.apply {
            gravity = Gravity.END or Gravity.CENTER_VERTICAL
            marginEnd = navMarginEnd
@@ -98,18 +105,28 @@ class TaskbarNavLayoutter(
        startContextualContainer.removeAllViews()

        if (!context.deviceProfile.isGestureMode) {
            val contextualMargin = resources.getDimensionPixelSize(
                    R.dimen.taskbar_contextual_button_padding)
            val contextualMargin =
                resources.getDimensionPixelSize(R.dimen.taskbar_contextual_button_padding)
            repositionContextualContainer(endContextualContainer, WRAP_CONTENT, 0, 0, Gravity.END)
            repositionContextualContainer(startContextualContainer, WRAP_CONTENT, contextualMargin,
                    contextualMargin, Gravity.START)
            repositionContextualContainer(
                startContextualContainer,
                WRAP_CONTENT,
                contextualMargin,
                contextualMargin,
                Gravity.START
            )

            if (imeSwitcher != null) {
                val imeStartMargin = resources.getDimensionPixelSize(
                        R.dimen.taskbar_ime_switcher_button_margin_start)
                val imeStartMargin =
                    resources.getDimensionPixelSize(
                        R.dimen.taskbar_ime_switcher_button_margin_start
                    )
                startContextualContainer.addView(imeSwitcher)
                val imeSwitcherButtonParams = FrameLayout.LayoutParams(
                        FrameLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
                val imeSwitcherButtonParams =
                    FrameLayout.LayoutParams(
                        FrameLayout.LayoutParams.MATCH_PARENT,
                        ViewGroup.LayoutParams.MATCH_PARENT
                    )
                imeSwitcherButtonParams.apply {
                    marginStart = imeStartMargin
                    gravity = Gravity.CENTER_VERTICAL