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

Commit e13a4a44 authored by Tony Wickham's avatar Tony Wickham
Browse files

Cleanup taskbar touchableInsets

- Remove obsolete visibleInsets hack and isDraggingItem() check
- Have TaskbarController determine whether taskbar is touchable,
  rather than TaskbarContainerView.
- Disallow touches during transition to home (can potentially
  improve this later)

Test: Swupe home, tap taskbar folder during transition, ensure
don't end up in broken state with the uninteractable folder open
Bug: 182512211

Change-Id: Id625ce8b9b876a8a1b450b7d6fb771540e23bc08
parent 2e0eee4d
Loading
Loading
Loading
Loading
+5 −11
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.launcher3.R;
import com.android.launcher3.anim.AlphaUpdateListener;
import com.android.launcher3.util.TouchController;
import com.android.launcher3.views.BaseDragLayer;
import com.android.systemui.shared.system.ViewTreeObserverWrapper;
@@ -83,18 +82,13 @@ public class TaskbarContainerView extends BaseDragLayer<TaskbarActivityContext>

    private ViewTreeObserverWrapper.OnComputeInsetsListener createTaskbarInsetsComputer() {
        return insetsInfo -> {
            if (getAlpha() < AlphaUpdateListener.ALPHA_CUTOFF_THRESHOLD
                    || mTaskbarView.getVisibility() != VISIBLE || mTaskbarView.isDraggingItem()) {
                // We're invisible or dragging out of taskbar, let touches pass through us.
            if (mControllerCallbacks.isTaskbarTouchable()) {
                 // Accept touches anywhere in our bounds.
                insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_FRAME);
            } else {
                // Let touches pass through us.
                insetsInfo.touchableRegion.setEmpty();
                insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_REGION);
                // TODO(b/182234653): Shouldn't need to do this, but for the meantime, reporting
                // that visibleInsets is empty allows DragEvents through. Setting them as completely
                // empty reverts to default behavior, so set 1 px instead.
                insetsInfo.visibleInsets.set(0, 0, 0, 1);
            } else {
                 // We're visible again, accept touches anywhere in our bounds.
                insetsInfo.setTouchableInsets(TOUCHABLE_INSETS_FRAME);
            }

            // TaskbarContainerView provides insets to other apps based on contentInsets. These
+9 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.launcher3.DeviceProfile;
import com.android.launcher3.LauncherState;
import com.android.launcher3.QuickstepTransitionManager;
import com.android.launcher3.R;
import com.android.launcher3.anim.AlphaUpdateListener;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.folder.Folder;
import com.android.launcher3.folder.FolderIcon;
@@ -141,6 +142,13 @@ public class TaskbarController {
                    setTaskbarWindowFullscreen(false);
                }
            }

            @Override
            public boolean isTaskbarTouchable() {
                return mTaskbarContainerView.getAlpha() > AlphaUpdateListener.ALPHA_CUTOFF_THRESHOLD
                        && mTaskbarViewInApp.getVisibility() == View.VISIBLE
                        && !mIsAnimatingToLauncher;
            }
        };
    }

@@ -549,6 +557,7 @@ public class TaskbarController {
     */
    protected interface TaskbarContainerViewCallbacks {
        void onViewRemoved();
        boolean isTaskbarTouchable();
    }

    /**