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

Commit 02e5480a authored by Bryce Lee's avatar Bryce Lee Committed by Automerger Merge Worker
Browse files

Merge "Correct display dimensions considered." into udc-dev am: c583707c

parents b8a57ee7 c583707c
Loading
Loading
Loading
Loading
+11 −15
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.graphics.Rect;
import android.graphics.Region;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.InputEvent;
@@ -89,8 +88,6 @@ public class BouncerSwipeTouchHandler implements DreamTouchHandler {
    private final FlingAnimationUtils mFlingAnimationUtils;
    private final FlingAnimationUtils mFlingAnimationUtilsClosing;

    private final DisplayMetrics mDisplayMetrics;

    private Boolean mCapture;
    private Boolean mExpanded;

@@ -161,7 +158,7 @@ public class BouncerSwipeTouchHandler implements DreamTouchHandler {
                    // (0).
                    final float dragDownAmount = e2.getY() - e1.getY();
                    final float screenTravelPercentage = Math.abs(e1.getY() - e2.getY())
                            / mCentralSurfaces.get().getDisplayHeight();
                            / mTouchSession.getBounds().height();
                    setPanelExpansion(mBouncerInitiallyShowing
                            ? screenTravelPercentage : 1 - screenTravelPercentage, dragDownAmount);
                    return true;
@@ -202,7 +199,6 @@ public class BouncerSwipeTouchHandler implements DreamTouchHandler {

    @Inject
    public BouncerSwipeTouchHandler(
            DisplayMetrics displayMetrics,
            ScrimManager scrimManager,
            Optional<CentralSurfaces> centralSurfaces,
            NotificationShadeWindowController notificationShadeWindowController,
@@ -214,7 +210,6 @@ public class BouncerSwipeTouchHandler implements DreamTouchHandler {
                    FlingAnimationUtils flingAnimationUtilsClosing,
            @Named(SWIPE_TO_BOUNCER_START_REGION) float swipeRegionPercentage,
            UiEventLogger uiEventLogger) {
        mDisplayMetrics = displayMetrics;
        mCentralSurfaces = centralSurfaces;
        mScrimManager = scrimManager;
        mNotificationShadeWindowController = notificationShadeWindowController;
@@ -227,19 +222,20 @@ public class BouncerSwipeTouchHandler implements DreamTouchHandler {
    }

    @Override
    public void getTouchInitiationRegion(Region region) {
    public void getTouchInitiationRegion(Rect bounds, Region region) {
        final int width = bounds.width();
        final int height = bounds.height();

        if (mCentralSurfaces.map(CentralSurfaces::isBouncerShowing).orElse(false)) {
            region.op(new Rect(0, 0, mDisplayMetrics.widthPixels,
            region.op(new Rect(0, 0, width,
                            Math.round(
                                    mDisplayMetrics.heightPixels * mBouncerZoneScreenPercentage)),
                                    height * mBouncerZoneScreenPercentage)),
                    Region.Op.UNION);
        } else {
            region.op(new Rect(0,
                            Math.round(
                                    mDisplayMetrics.heightPixels
                                            * (1 - mBouncerZoneScreenPercentage)),
                            mDisplayMetrics.widthPixels,
                            mDisplayMetrics.heightPixels),
                            Math.round(height * (1 - mBouncerZoneScreenPercentage)),
                            width,
                            height),
                    Region.Op.UNION);
        }
    }
@@ -356,7 +352,7 @@ public class BouncerSwipeTouchHandler implements DreamTouchHandler {
        }

        // The animation utils deal in pixel units, rather than expansion height.
        final float viewHeight = mCentralSurfaces.get().getDisplayHeight();
        final float viewHeight = mTouchSession.getBounds().height();
        final float currentHeight = viewHeight * mCurrentExpansion;
        final float targetHeight = viewHeight * expansion;
        final float expansionHeight = targetHeight - currentHeight;
+24 −5
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.systemui.dreams.touch;

import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;

import android.graphics.Rect;
import android.graphics.Region;
import android.view.GestureDetector;
import android.view.InputEvent;
@@ -31,6 +34,7 @@ import androidx.lifecycle.LifecycleOwner;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.touch.dagger.InputSessionComponent;
import com.android.systemui.shared.system.InputChannelCompat;
import com.android.systemui.util.display.DisplayHelper;

import com.google.common.util.concurrent.ListenableFuture;

@@ -69,7 +73,8 @@ public class DreamOverlayTouchMonitor {
                }

                final TouchSessionImpl touchSession =
                        new TouchSessionImpl(this, touchSessionImpl);
                        new TouchSessionImpl(this, touchSessionImpl.getBounds(),
                                touchSessionImpl);
                mActiveTouchSessions.add(touchSession);
                completer.set(touchSession);
            });
@@ -120,10 +125,13 @@ public class DreamOverlayTouchMonitor {

        private final TouchSessionImpl mPredecessor;
        private final DreamOverlayTouchMonitor mTouchMonitor;
        private final Rect mBounds;

        TouchSessionImpl(DreamOverlayTouchMonitor touchMonitor, TouchSessionImpl predecessor) {
        TouchSessionImpl(DreamOverlayTouchMonitor touchMonitor, Rect bounds,
                TouchSessionImpl predecessor) {
            mPredecessor = predecessor;
            mTouchMonitor = touchMonitor;
            mBounds = bounds;
        }

        @Override
@@ -185,6 +193,11 @@ public class DreamOverlayTouchMonitor {
        private void onRemoved() {
            mCallbacks.forEach(callback -> callback.onRemoved());
        }

        @Override
        public Rect getBounds() {
            return mBounds;
        }
    }

    /**
@@ -242,6 +255,7 @@ public class DreamOverlayTouchMonitor {

    private final HashSet<TouchSessionImpl> mActiveTouchSessions = new HashSet<>();
    private final Collection<DreamTouchHandler> mHandlers;
    private final DisplayHelper mDisplayHelper;

    private InputChannelCompat.InputEventListener mInputEventListener =
            new InputChannelCompat.InputEventListener() {
@@ -253,8 +267,11 @@ public class DreamOverlayTouchMonitor {
                        new HashMap<>();

                for (DreamTouchHandler handler : mHandlers) {
                    final Rect maxBounds = mDisplayHelper.getMaxBounds(ev.getDisplayId(),
                            TYPE_APPLICATION_OVERLAY);

                    final Region initiationRegion = Region.obtain();
                    handler.getTouchInitiationRegion(initiationRegion);
                    handler.getTouchInitiationRegion(maxBounds, initiationRegion);

                    if (!initiationRegion.isEmpty()) {
                        // Initiation regions require a motion event to determine pointer location
@@ -272,8 +289,8 @@ public class DreamOverlayTouchMonitor {
                        }
                    }

                    final TouchSessionImpl sessionStack =
                            new TouchSessionImpl(DreamOverlayTouchMonitor.this, null);
                    final TouchSessionImpl sessionStack = new TouchSessionImpl(
                            DreamOverlayTouchMonitor.this, maxBounds, null);
                    mActiveTouchSessions.add(sessionStack);
                    sessionMap.put(handler, sessionStack);
                }
@@ -389,11 +406,13 @@ public class DreamOverlayTouchMonitor {
            @Main Executor executor,
            Lifecycle lifecycle,
            InputSessionComponent.Factory inputSessionFactory,
            DisplayHelper displayHelper,
            Set<DreamTouchHandler> handlers) {
        mHandlers = handlers;
        mInputSessionFactory = inputSessionFactory;
        mExecutor = executor;
        mLifecycle = lifecycle;
        mDisplayHelper = displayHelper;
    }

    /**
+7 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.dreams.touch;

import android.graphics.Rect;
import android.graphics.Region;
import android.view.GestureDetector;

@@ -77,6 +78,11 @@ public interface DreamTouchHandler {
         * Returns the number of currently active sessions.
         */
        int getActiveSessionCount();

        /**
         * Returns the bounds of the display the touch region.
         */
        Rect getBounds();
    }

    /**
@@ -84,7 +90,7 @@ public interface DreamTouchHandler {
     * indicating the entire screen should be considered.
     * @param region A {@link Region} that is passed in to the target entry touch region.
     */
    default void getTouchInitiationRegion(Region region) {
    default void getTouchInitiationRegion(Rect bounds, Region region) {
    }

    /**
+4 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.graphics.Region;
import android.util.Log;
import android.view.AttachedSurfaceControl;
import android.view.View;
import android.view.ViewGroup;

import androidx.concurrent.futures.CallbackToFutureAdapter;

@@ -118,7 +119,9 @@ public class TouchInsetManager {
                        affectedSurfaces.put(surface, Region.obtain());
                    }
                    final Rect boundaries = new Rect();
                    view.getBoundsOnScreen(boundaries);
                    view.getDrawingRect(boundaries);
                    ((ViewGroup) view.getRootView())
                            .offsetDescendantRectToMyCoords(view, boundaries);
                    affectedSurfaces.get(surface).op(boundaries, Region.Op.UNION);
                });
                mManager.setTouchRegions(this, affectedSurfaces);
+53 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 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.systemui.util.display;

import android.content.Context;
import android.graphics.Rect;
import android.hardware.display.DisplayManager;
import android.view.Display;
import android.view.WindowManager;

import javax.inject.Inject;

/**
 * Utility class for working with displays.
 */
public class DisplayHelper {
    private final Context mContext;
    private final DisplayManager mDisplayManager;

    /**
     * Default constructor.
     */
    @Inject
    public DisplayHelper(Context context, DisplayManager displayManager) {
        mContext = context;
        mDisplayManager = displayManager;
    }


    /**
     * Returns the maximum display bounds for the given window context type.
     */
    public Rect getMaxBounds(int displayId, int windowContextType) {
        final Display display = mDisplayManager.getDisplay(displayId);
        WindowManager windowManager = mContext.createDisplayContext(display)
                .createWindowContext(windowContextType, null)
                .getSystemService(WindowManager.class);
        return windowManager.getMaximumWindowMetrics().getBounds();
    }
}
Loading