diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java index 4b6dacd95e..d35b0f6c1a 100644 --- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java @@ -234,6 +234,14 @@ public class NavbarButtonsViewController { mPropertyHolders.forEach(StatePropertyHolder::endAnimation); } + public void onDestroy() { + mPropertyHolders.clear(); + mControllers.rotationButtonController.unregisterListeners(); + if (mFloatingRotationButton != null) { + mFloatingRotationButton.hide(); + } + } + private void initButtons(ViewGroup navContainer, ViewGroup endContainer, TaskbarNavButtonController navButtonController) { @@ -430,14 +438,6 @@ public class NavbarButtonsViewController { return mFloatingRotationButtonBounds.contains((int) ev.getX(), (int) ev.getY()); } - public void onDestroy() { - mPropertyHolders.clear(); - mControllers.rotationButtonController.unregisterListeners(); - if (mFloatingRotationButton != null) { - mFloatingRotationButton.hide(); - } - } - private class RotationButtonListener implements RotationButton.RotationButtonUpdatesCallback { @Override public void onVisibilityChanged(boolean isVisible) { diff --git a/quickstep/src/com/android/quickstep/RemoteTargetGluer.java b/quickstep/src/com/android/quickstep/RemoteTargetGluer.java index 825abedead..5f2b49d07f 100644 --- a/quickstep/src/com/android/quickstep/RemoteTargetGluer.java +++ b/quickstep/src/com/android/quickstep/RemoteTargetGluer.java @@ -17,7 +17,6 @@ package com.android.quickstep; import android.content.Context; -import android.util.Log; import androidx.annotation.Nullable; @@ -33,8 +32,6 @@ import com.android.systemui.shared.system.RemoteAnimationTargetCompat; * {@link TaskViewSimulator} */ public class RemoteTargetGluer { - private static final String TAG = "RemoteTargetGluer"; - private RemoteTargetHandle[] mRemoteTargetHandles; private SplitConfigurationOptions.StagedSplitBounds mStagedSplitBounds; @@ -94,25 +91,18 @@ public class RemoteTargetGluer { public RemoteTargetHandle[] assignTargetsForSplitScreen(RemoteAnimationTargets targets) { int[] splitIds = LauncherSplitScreenListener.INSTANCE.getNoCreate() .getRunningSplitTaskIds(); - Log.d(TAG, "splitIds length: " + splitIds.length - + " targetAppsLength: " + targets.apps.length - + " remoteHandlesLength: " + mRemoteTargetHandles.length); - if (splitIds.length == 0 && mRemoteTargetHandles.length > 1) { - // There's a chance that between the creation of this class and assigning targets, - // LauncherSplitScreenListener may have received callback that removes split - mRemoteTargetHandles = new RemoteTargetHandle[]{mRemoteTargetHandles[0]}; - Log.w(TAG, "splitTaskIds changed between creation and assignment"); - } RemoteAnimationTargetCompat primaryTaskTarget; RemoteAnimationTargetCompat secondaryTaskTarget; if (mRemoteTargetHandles.length == 1) { // If we're not in split screen, the splitIds count doesn't really matter since we - // should always hit this case. Right now there's no use case for multiple app targets - // without being in split screen - primaryTaskTarget = targets.apps[0]; + // should always hit this case. mRemoteTargetHandles[0].mTransformParams.setTargetSet(targets); - mRemoteTargetHandles[0].mTaskViewSimulator.setPreview(primaryTaskTarget, null); + if (targets.apps.length > 0) { + // Unclear why/when target.apps length == 0, but it sure does happen :( + primaryTaskTarget = targets.apps[0]; + mRemoteTargetHandles[0].mTaskViewSimulator.setPreview(primaryTaskTarget, null); + } } else { // split screen primaryTaskTarget = targets.findTask(splitIds[0]); diff --git a/quickstep/src/com/android/quickstep/views/OverviewActionsView.java b/quickstep/src/com/android/quickstep/views/OverviewActionsView.java index 76d3591325..16c3c7f9e9 100644 --- a/quickstep/src/com/android/quickstep/views/OverviewActionsView.java +++ b/quickstep/src/com/android/quickstep/views/OverviewActionsView.java @@ -16,6 +16,8 @@ package com.android.quickstep.views; +import static com.android.quickstep.SysUINavigationMode.Mode.THREE_BUTTONS; + import android.content.Context; import android.content.res.Configuration; import android.graphics.Rect; @@ -30,6 +32,7 @@ import androidx.annotation.Nullable; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Insettable; import com.android.launcher3.R; +import com.android.launcher3.uioverrides.ApiWrapper; import com.android.launcher3.util.MultiValueAlpha; import com.android.launcher3.util.MultiValueAlpha.AlphaProperty; import com.android.quickstep.SysUINavigationMode; @@ -146,7 +149,7 @@ public class OverviewActionsView extends FrameLayo public void setInsets(Rect insets) { mInsets.set(insets); updateVerticalMargin(SysUINavigationMode.getMode(getContext())); - updateHorizontalPadding(); + updatePaddingAndTranslations(); } public void updateHiddenFlags(@ActionsHiddenFlags int visibilityFlags, boolean enable) { @@ -189,8 +192,37 @@ public class OverviewActionsView extends FrameLayo return mMultiValueAlpha.getProperty(INDEX_FULLSCREEN_ALPHA); } - private void updateHorizontalPadding() { - setPadding(mInsets.left, 0, mInsets.right, 0); + /** + * Aligns OverviewActionsView vertically with and offsets horizontal position based on + * 3 button nav container in taskbar. + */ + private void updatePaddingAndTranslations() { + boolean alignFor3ButtonTaskbar = mDp.isTaskbarPresent && + SysUINavigationMode.getMode(getContext()) == THREE_BUTTONS; + if (alignFor3ButtonTaskbar) { + // Add extra horizontal spacing + int additionalPadding = ApiWrapper.getHotseatEndOffset(getContext()); + if (isLayoutRtl()) { + setPadding(mInsets.left + additionalPadding, 0, mInsets.right, 0); + } else { + setPadding(mInsets.left, 0, mInsets.right + additionalPadding, 0); + } + + // Align vertically, using taskbar height + mDp.taskbarOffsetY() to guestimate + // where the button nav top is + View startActionView = findViewById(R.id.action_buttons); + int marginBottom = getOverviewActionsBottomMarginPx( + SysUINavigationMode.getMode(getContext()), mDp); + int actionsTop = (mDp.heightPx - marginBottom - mInsets.bottom); + int navTop = mDp.heightPx - (mDp.taskbarSize + mDp.getTaskbarOffsetY()); + int transY = navTop - actionsTop + + ((mDp.taskbarSize - startActionView.getHeight()) / 2); + setTranslationY(transY); + } else { + setPadding(mInsets.left, 0, mInsets.right, 0); + setTranslationX(0); + setTranslationY(0); + } } /** Updates vertical margins for different navigation mode or configuration changes. */ diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 1a3bfa9958..d825fada57 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -1094,7 +1094,7 @@ public abstract class RecentsView