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

Commit bfbdafa3 authored by Milton Wu's avatar Milton Wu Committed by Automerger Merge Worker
Browse files

Move color and display info into DecorProvider am: f1fc5d21

parents 0422abef f1fc5d21
Loading
Loading
Loading
Loading
+32 −21
Original line number Original line Diff line number Diff line
@@ -47,7 +47,8 @@ import com.android.systemui.animation.Interpolators
open class DisplayCutoutBaseView : View, RegionInterceptableView {
open class DisplayCutoutBaseView : View, RegionInterceptableView {


    private var shouldDrawCutout: Boolean = DisplayCutout.getFillBuiltInDisplayCutout(
    private var shouldDrawCutout: Boolean = DisplayCutout.getFillBuiltInDisplayCutout(
            context.resources, context.display?.uniqueId)
        context.resources, context.display?.uniqueId
    )
    private var displayUniqueId: String? = null
    private var displayUniqueId: String? = null
    private var displayMode: Display.Mode? = null
    private var displayMode: Display.Mode? = null
    protected val location = IntArray(2)
    protected val location = IntArray(2)
@@ -74,8 +75,8 @@ open class DisplayCutoutBaseView : View, RegionInterceptableView {


    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)


    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) :
            : super(context, attrs, defStyleAttr)
        super(context, attrs, defStyleAttr)


    override fun onAttachedToWindow() {
    override fun onAttachedToWindow() {
        super.onAttachedToWindow()
        super.onAttachedToWindow()
@@ -85,7 +86,7 @@ open class DisplayCutoutBaseView : View, RegionInterceptableView {
        onUpdate()
        onUpdate()
    }
    }


    fun onDisplayChanged(displayId: Int) {
    fun onDisplayChanged(newDisplayUniqueId: String?) {
        val oldMode: Display.Mode? = displayMode
        val oldMode: Display.Mode? = displayMode
        val display: Display? = context.display
        val display: Display? = context.display
        displayMode = display?.mode
        displayMode = display?.mode
@@ -93,7 +94,8 @@ open class DisplayCutoutBaseView : View, RegionInterceptableView {
        if (displayUniqueId != display?.uniqueId) {
        if (displayUniqueId != display?.uniqueId) {
            displayUniqueId = display?.uniqueId
            displayUniqueId = display?.uniqueId
            shouldDrawCutout = DisplayCutout.getFillBuiltInDisplayCutout(
            shouldDrawCutout = DisplayCutout.getFillBuiltInDisplayCutout(
                    context.resources, displayUniqueId)
                context.resources, displayUniqueId
            )
        }
        }


        // Skip if display mode or cutout hasn't changed.
        // Skip if display mode or cutout hasn't changed.
@@ -101,7 +103,7 @@ open class DisplayCutoutBaseView : View, RegionInterceptableView {
                display?.cutout == displayInfo.displayCutout) {
                display?.cutout == displayInfo.displayCutout) {
            return
            return
        }
        }
        if (displayId == display?.displayId) {
        if (newDisplayUniqueId == display?.uniqueId) {
            updateCutout()
            updateCutout()
            updateProtectionBoundingPath()
            updateProtectionBoundingPath()
            onUpdate()
            onUpdate()
@@ -147,8 +149,9 @@ open class DisplayCutoutBaseView : View, RegionInterceptableView {
        cutoutBounds.translate(-location[0], -location[1])
        cutoutBounds.translate(-location[0], -location[1])


        // Intersect with window's frame
        // Intersect with window's frame
        cutoutBounds.op(rootView.left, rootView.top, rootView.right, rootView.bottom,
        cutoutBounds.op(
                Region.Op.INTERSECT)
            rootView.left, rootView.top, rootView.right, rootView.bottom, Region.Op.INTERSECT
        )
        return cutoutBounds
        return cutoutBounds
    }
    }


@@ -171,9 +174,12 @@ open class DisplayCutoutBaseView : View, RegionInterceptableView {


    protected open fun drawCutoutProtection(canvas: Canvas) {
    protected open fun drawCutoutProtection(canvas: Canvas) {
        if (cameraProtectionProgress > HIDDEN_CAMERA_PROTECTION_SCALE &&
        if (cameraProtectionProgress > HIDDEN_CAMERA_PROTECTION_SCALE &&
                !protectionRect.isEmpty) {
            !protectionRect.isEmpty
            canvas.scale(cameraProtectionProgress, cameraProtectionProgress,
        ) {
                    protectionRect.centerX(), protectionRect.centerY())
            canvas.scale(
                cameraProtectionProgress, cameraProtectionProgress, protectionRect.centerX(),
                protectionRect.centerY()
            )
            canvas.drawPath(protectionPath, paint)
            canvas.drawPath(protectionPath, paint)
        }
        }
    }
    }
@@ -205,14 +211,17 @@ open class DisplayCutoutBaseView : View, RegionInterceptableView {
            requestLayout()
            requestLayout()
        }
        }
        cameraProtectionAnimator?.cancel()
        cameraProtectionAnimator?.cancel()
        cameraProtectionAnimator = ValueAnimator.ofFloat(cameraProtectionProgress,
        cameraProtectionAnimator = ValueAnimator.ofFloat(
                if (showProtection) 1.0f else HIDDEN_CAMERA_PROTECTION_SCALE).setDuration(750)
            cameraProtectionProgress,
            if (showProtection) 1.0f else HIDDEN_CAMERA_PROTECTION_SCALE
        ).setDuration(750)
        cameraProtectionAnimator?.interpolator = Interpolators.DECELERATE_QUINT
        cameraProtectionAnimator?.interpolator = Interpolators.DECELERATE_QUINT
        cameraProtectionAnimator?.addUpdateListener(ValueAnimator.AnimatorUpdateListener {
        cameraProtectionAnimator?.addUpdateListener(
            animation: ValueAnimator ->
            ValueAnimator.AnimatorUpdateListener { animation: ValueAnimator ->
                cameraProtectionProgress = animation.animatedValue as Float
                cameraProtectionProgress = animation.animatedValue as Float
                invalidate()
                invalidate()
        })
            }
        )
        cameraProtectionAnimator?.addListener(object : AnimatorListenerAdapter() {
        cameraProtectionAnimator?.addListener(object : AnimatorListenerAdapter() {
            override fun onAnimationEnd(animation: Animator) {
            override fun onAnimationEnd(animation: Animator) {
                cameraProtectionAnimator = null
                cameraProtectionAnimator = null
@@ -245,8 +254,10 @@ open class DisplayCutoutBaseView : View, RegionInterceptableView {
        // Apply rotation.
        // Apply rotation.
        val lw: Int = displayInfo.logicalWidth
        val lw: Int = displayInfo.logicalWidth
        val lh: Int = displayInfo.logicalHeight
        val lh: Int = displayInfo.logicalHeight
        val flipped = (displayInfo.rotation == Surface.ROTATION_90 ||
        val flipped = (
                displayInfo.rotation == Surface.ROTATION_270)
            displayInfo.rotation == Surface.ROTATION_90 ||
                displayInfo.rotation == Surface.ROTATION_270
            )
        val dw = if (flipped) lh else lw
        val dw = if (flipped) lh else lw
        val dh = if (flipped) lw else lh
        val dh = if (flipped) lw else lh
        transformPhysicalToLogicalCoordinates(displayInfo.rotation, dw, dh, m)
        transformPhysicalToLogicalCoordinates(displayInfo.rotation, dw, dh, m)
+27 −49
Original line number Original line Diff line number Diff line
@@ -32,7 +32,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.ActivityInfo;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Color;
@@ -92,10 +91,8 @@ import com.android.systemui.util.settings.SecureSettings;


import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.List;
import java.util.Objects;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.Executor;


import javax.inject.Inject;
import javax.inject.Inject;
@@ -448,6 +445,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
                    }
                    }
                }
                }


                boolean needToUpdateProviderViews = false;
                final String newUniqueId = mDisplayInfo.uniqueId;
                final String newUniqueId = mDisplayInfo.uniqueId;
                if (!Objects.equals(newUniqueId, mDisplayUniqueId)) {
                if (!Objects.equals(newUniqueId, mDisplayUniqueId)) {
                    mDisplayUniqueId = newUniqueId;
                    mDisplayUniqueId = newUniqueId;
@@ -470,8 +468,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
                        updateHwLayerRoundedCornerDrawable();
                        updateHwLayerRoundedCornerDrawable();
                        updateHwLayerRoundedCornerExistAndSize();
                        updateHwLayerRoundedCornerExistAndSize();
                    }
                    }

                    needToUpdateProviderViews = true;
                    updateOverlayProviderViews();
                }
                }


                final float newRatio = getPhysicalPixelDisplaySizeRatio();
                final float newRatio = getPhysicalPixelDisplaySizeRatio();
@@ -480,7 +477,13 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
                    if (mScreenDecorHwcLayer != null) {
                    if (mScreenDecorHwcLayer != null) {
                        updateHwLayerRoundedCornerExistAndSize();
                        updateHwLayerRoundedCornerExistAndSize();
                    }
                    }
                    updateOverlayProviderViews();
                    needToUpdateProviderViews = true;
                }

                if (needToUpdateProviderViews) {
                    updateOverlayProviderViews(null);
                } else {
                    updateOverlayProviderViews(new Integer[] { mFaceScanningViewId });
                }
                }


                if (mCutoutViews != null) {
                if (mCutoutViews != null) {
@@ -490,18 +493,12 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
                        if (cutoutView == null) {
                        if (cutoutView == null) {
                            continue;
                            continue;
                        }
                        }
                        cutoutView.onDisplayChanged(displayId);
                        cutoutView.onDisplayChanged(newUniqueId);
                    }
                    }
                    }

                DisplayCutoutView overlay = (DisplayCutoutView) getOverlayView(mFaceScanningViewId);
                if (overlay != null) {
                    // handle display resolution changes
                    overlay.onDisplayChanged(displayId);
                }
                }


                if (mScreenDecorHwcLayer != null) {
                if (mScreenDecorHwcLayer != null) {
                    mScreenDecorHwcLayer.onDisplayChanged(displayId);
                    mScreenDecorHwcLayer.onDisplayChanged(newUniqueId);
                }
                }
            }
            }
        };
        };
@@ -804,7 +801,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
                    return;
                    return;
                }
                }
                removeOverlayView(provider.getViewId());
                removeOverlayView(provider.getViewId());
                overlay.addDecorProvider(provider, mRotation);
                overlay.addDecorProvider(provider, mRotation, mTintColor);
            });
            });
        }
        }
        // Use visibility of privacy dot views & face scanning view to determine the overlay's
        // Use visibility of privacy dot views & face scanning view to determine the overlay's
@@ -955,24 +952,6 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
            return;
            return;
        }
        }


        // When the hwc supports screen decorations, the layer will use the A8 color mode which
        // won't be affected by the color inversion. If the composition goes the client composition
        // route, the color inversion will be handled by the RenderEngine.
        final Set<Integer> viewsMayNeedColorUpdate = new HashSet<>();
        if (mHwcScreenDecorationSupport == null) {
            ColorStateList tintList = ColorStateList.valueOf(mTintColor);
            mRoundedCornerResDelegate.setColorTintList(tintList);
            viewsMayNeedColorUpdate.add(R.id.rounded_corner_top_left);
            viewsMayNeedColorUpdate.add(R.id.rounded_corner_top_right);
            viewsMayNeedColorUpdate.add(R.id.rounded_corner_bottom_left);
            viewsMayNeedColorUpdate.add(R.id.rounded_corner_bottom_right);
            viewsMayNeedColorUpdate.add(R.id.display_cutout);
        }
        if (getOverlayView(mFaceScanningViewId) != null) {
            viewsMayNeedColorUpdate.add(mFaceScanningViewId);
        }
        final Integer[] views = new Integer[viewsMayNeedColorUpdate.size()];
        viewsMayNeedColorUpdate.toArray(views);
        for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
        for (int i = 0; i < BOUNDS_POSITION_LENGTH; i++) {
            if (mOverlays[i] == null) {
            if (mOverlays[i] == null) {
                continue;
                continue;
@@ -982,14 +961,19 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
            View child;
            View child;
            for (int j = 0; j < size; j++) {
            for (int j = 0; j < size; j++) {
                child = overlayView.getChildAt(j);
                child = overlayView.getChildAt(j);
                if (viewsMayNeedColorUpdate.contains(child.getId())
                if (child instanceof DisplayCutoutView && child.getId() == R.id.display_cutout) {
                        && child instanceof DisplayCutoutView) {
                    ((DisplayCutoutView) child).setColor(mTintColor);
                    ((DisplayCutoutView) child).setColor(mTintColor);
                }
                }
            }
            }
            mOverlays[i].onReloadResAndMeasure(views, mProviderRefreshToken,
                    mRotation, mDisplayUniqueId);
        }
        }

        updateOverlayProviderViews(new Integer[] {
                mFaceScanningViewId,
                R.id.rounded_corner_top_left,
                R.id.rounded_corner_top_right,
                R.id.rounded_corner_bottom_left,
                R.id.rounded_corner_bottom_right
        });
    }
    }


    @VisibleForTesting
    @VisibleForTesting
@@ -1120,7 +1104,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
            }
            }


            // update all provider views inside overlay
            // update all provider views inside overlay
            updateOverlayProviderViews();
            updateOverlayProviderViews(null);
        }
        }


        FaceScanningOverlay faceScanningOverlay =
        FaceScanningOverlay faceScanningOverlay =
@@ -1192,7 +1176,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
                context.getResources(), context.getDisplay().getUniqueId());
                context.getResources(), context.getDisplay().getUniqueId());
    }
    }


    private void updateOverlayProviderViews() {
    private void updateOverlayProviderViews(@Nullable Integer[] filterIds) {
        if (mOverlays == null) {
        if (mOverlays == null) {
            return;
            return;
        }
        }
@@ -1201,7 +1185,8 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
            if (overlay == null) {
            if (overlay == null) {
                continue;
                continue;
            }
            }
            overlay.onReloadResAndMeasure(null, mProviderRefreshToken, mRotation, mDisplayUniqueId);
            overlay.onReloadResAndMeasure(filterIds, mProviderRefreshToken, mRotation, mTintColor,
                    mDisplayUniqueId);
        }
        }
    }
    }


@@ -1240,19 +1225,12 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
            } catch (NumberFormatException e) {
            } catch (NumberFormatException e) {
                mRoundedCornerResDelegate.setTuningSizeFactor(null);
                mRoundedCornerResDelegate.setTuningSizeFactor(null);
            }
            }
            Integer[] filterIds = {
            updateOverlayProviderViews(new Integer[] {
                    R.id.rounded_corner_top_left,
                    R.id.rounded_corner_top_left,
                    R.id.rounded_corner_top_right,
                    R.id.rounded_corner_top_right,
                    R.id.rounded_corner_bottom_left,
                    R.id.rounded_corner_bottom_left,
                    R.id.rounded_corner_bottom_right
                    R.id.rounded_corner_bottom_right
            };
            });
            for (final OverlayWindow overlay: mOverlays) {
                if (overlay == null) {
                    continue;
                }
                overlay.onReloadResAndMeasure(filterIds, mProviderRefreshToken, mRotation,
                        mDisplayUniqueId);
            }
            updateHwLayerRoundedCornerExistAndSize();
            updateHwLayerRoundedCornerExistAndSize();
        });
        });
    }
    }
+5 −3
Original line number Original line Diff line number Diff line
@@ -46,14 +46,16 @@ abstract class DecorProvider {
        view: View,
        view: View,
        reloadToken: Int,
        reloadToken: Int,
        @Surface.Rotation rotation: Int,
        @Surface.Rotation rotation: Int,
        displayUniqueId: String? = null
        tintColor: Int,
        displayUniqueId: String?
    )
    )


    /** Inflate view into parent as current rotation */
    /** Inflate view into parent as current rotation */
    abstract fun inflateView(
    abstract fun inflateView(
        context: Context,
        context: Context,
        parent: ViewGroup,
        parent: ViewGroup,
        @Surface.Rotation rotation: Int
        @Surface.Rotation rotation: Int,
        tintColor: Int
    ): View
    ): View
}
}


+9 −2
Original line number Original line Diff line number Diff line
@@ -115,19 +115,25 @@ class FaceScanningOverlayProviderImpl(
    override fun onReloadResAndMeasure(
    override fun onReloadResAndMeasure(
        view: View,
        view: View,
        reloadToken: Int,
        reloadToken: Int,
        rotation: Int,
        @Surface.Rotation rotation: Int,
        tintColor: Int,
        displayUniqueId: String?
        displayUniqueId: String?
    ) {
    ) {
        (view.layoutParams as FrameLayout.LayoutParams).let {
        (view.layoutParams as FrameLayout.LayoutParams).let {
            updateLayoutParams(it, rotation)
            updateLayoutParams(it, rotation)
            view.layoutParams = it
            view.layoutParams = it
            (view as? FaceScanningOverlay)?.let { overlay ->
                overlay.setColor(tintColor)
                overlay.onDisplayChanged(displayUniqueId)
            }
        }
        }
    }
    }


    override fun inflateView(
    override fun inflateView(
        context: Context,
        context: Context,
        parent: ViewGroup,
        parent: ViewGroup,
        @Surface.Rotation rotation: Int
        @Surface.Rotation rotation: Int,
        tintColor: Int
    ): View {
    ): View {
        val view = FaceScanningOverlay(
        val view = FaceScanningOverlay(
                context,
                context,
@@ -137,6 +143,7 @@ class FaceScanningOverlayProviderImpl(
                mainExecutor
                mainExecutor
        )
        )
        view.id = viewId
        view.id = viewId
        view.setColor(tintColor)
        FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
        FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT).let {
                ViewGroup.LayoutParams.MATCH_PARENT).let {
            updateLayoutParams(it, rotation)
            updateLayoutParams(it, rotation)
+18 −12
Original line number Original line Diff line number Diff line
@@ -34,9 +34,10 @@ class OverlayWindow(private val context: Context) {


    fun addDecorProvider(
    fun addDecorProvider(
        decorProvider: DecorProvider,
        decorProvider: DecorProvider,
        @Surface.Rotation rotation: Int
        @Surface.Rotation rotation: Int,
        tintColor: Int
    ) {
    ) {
        val view = decorProvider.inflateView(context, rootView, rotation)
        val view = decorProvider.inflateView(context, rootView, rotation, tintColor)
        viewProviderMap[decorProvider.viewId] = Pair(view, decorProvider)
        viewProviderMap[decorProvider.viewId] = Pair(view, decorProvider)
    }
    }


@@ -82,6 +83,7 @@ class OverlayWindow(private val context: Context) {
        filterIds: Array<Int>? = null,
        filterIds: Array<Int>? = null,
        reloadToken: Int,
        reloadToken: Int,
        @Surface.Rotation rotation: Int,
        @Surface.Rotation rotation: Int,
        tintColor: Int,
        displayUniqueId: String? = null
        displayUniqueId: String? = null
    ) {
    ) {
        filterIds?.forEach { id ->
        filterIds?.forEach { id ->
@@ -89,16 +91,20 @@ class OverlayWindow(private val context: Context) {
                it.second.onReloadResAndMeasure(
                it.second.onReloadResAndMeasure(
                    view = it.first,
                    view = it.first,
                    reloadToken = reloadToken,
                    reloadToken = reloadToken,
                        displayUniqueId = displayUniqueId,
                    rotation = rotation,
                        rotation = rotation)
                    tintColor = tintColor,
                    displayUniqueId = displayUniqueId
                )
            }
            }
        } ?: run {
        } ?: run {
            viewProviderMap.values.forEach {
            viewProviderMap.values.forEach {
                it.second.onReloadResAndMeasure(
                it.second.onReloadResAndMeasure(
                    view = it.first,
                    view = it.first,
                    reloadToken = reloadToken,
                    reloadToken = reloadToken,
                        displayUniqueId = displayUniqueId,
                    rotation = rotation,
                        rotation = rotation)
                    tintColor = tintColor,
                    displayUniqueId = displayUniqueId
                )
            }
            }
        }
        }
    }
    }
Loading