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

Commit e9440ab1 authored by Milton Wu's avatar Milton Wu
Browse files

Passing info to RoundedCornerResDelegate directly

1. Move rounded corners tint color into RoundedCornerResDelegate, and
   RoundedCornerDecorProviderImpl uses it to draw image.
2. After display changed, pass display unique id to
   RoundedCornerResDelegate directly.
3. Cache tuning size inside RoundedCornerResDelegate

Bug: 229234279
Bug: 218951516
Test: atest ScreenDecorationsTest PrivacyDotDecorProviderFactoryTest \
      RoundedCornerDecorProviderFactoryTest RoundedCornerResDelegateTest
Change-Id: I7edd16db06f6023a3c3dfd10b430a5002b9ee942
parent 174c5ebb
Loading
Loading
Loading
Loading
+15 −20
Original line number Original line Diff line number Diff line
@@ -64,7 +64,6 @@ import android.view.ViewGroup.LayoutParams;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.FrameLayout;
import android.widget.ImageView;


import androidx.annotation.VisibleForTesting;
import androidx.annotation.VisibleForTesting;


@@ -292,11 +291,6 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
        return decorProviders;
        return decorProviders;
    }
    }


    private void updateDisplayIdToProviderFactories() {
        mDotFactory.onDisplayUniqueIdChanged(mDisplayUniqueId);
        mRoundedCornerFactory.onDisplayUniqueIdChanged(mDisplayUniqueId);
    }

    /**
    /**
     * Check that newProviders is the same list with decorProviders inside mOverlay.
     * Check that newProviders is the same list with decorProviders inside mOverlay.
     * @param newProviders expected comparing DecorProviders
     * @param newProviders expected comparing DecorProviders
@@ -389,7 +383,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
                    final DisplayDecorationSupport newScreenDecorationSupport =
                    final DisplayDecorationSupport newScreenDecorationSupport =
                            mContext.getDisplay().getDisplayDecorationSupport();
                            mContext.getDisplay().getDisplayDecorationSupport();


                    updateDisplayIdToProviderFactories();
                    mRoundedCornerResDelegate.updateDisplayUniqueId(newUniqueId, null);


                    // When providers or the value of mSupportHwcScreenDecoration is changed,
                    // When providers or the value of mSupportHwcScreenDecoration is changed,
                    // re-setup the whole screen decoration.
                    // re-setup the whole screen decoration.
@@ -857,6 +851,15 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
        }
        }


        ColorStateList tintList = ColorStateList.valueOf(mTintColor);
        ColorStateList tintList = ColorStateList.valueOf(mTintColor);
        mRoundedCornerResDelegate.setColorTintList(tintList);

        Integer[] roundedCornerIds = {
                R.id.rounded_corner_top_left,
                R.id.rounded_corner_top_right,
                R.id.rounded_corner_bottom_left,
                R.id.rounded_corner_bottom_right
        };

        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;
@@ -866,19 +869,12 @@ 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 (child.getId() == R.id.privacy_dot_top_left_container
                if (child instanceof DisplayCutoutView) {
                        || child.getId() == R.id.privacy_dot_top_right_container
                        || child.getId() == R.id.privacy_dot_bottom_left_container
                        || child.getId() == R.id.privacy_dot_bottom_right_container) {
                    // Exclude privacy dot from color inversion (for now?)
                    continue;
                }
                if (child instanceof ImageView) {
                    ((ImageView) child).setImageTintList(tintList);
                } else if (child instanceof DisplayCutoutView) {
                    ((DisplayCutoutView) child).setColor(mTintColor);
                    ((DisplayCutoutView) child).setColor(mTintColor);
                }
                }
            }
            }
            mOverlays[i].onReloadResAndMeasure(roundedCornerIds, mProviderRefreshToken, mRotation,
                    mDisplayUniqueId);
        }
        }
    }
    }


@@ -1067,12 +1063,11 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
            if (mOverlays == null || !SIZE.equals(key)) {
            if (mOverlays == null || !SIZE.equals(key)) {
                return;
                return;
            }
            }
            ++mProviderRefreshToken;
            try {
            try {
                final int sizeFactor = Integer.parseInt(newValue);
                final int sizeFactor = Integer.parseInt(newValue);
                mRoundedCornerResDelegate.updateTuningSizeFactor(sizeFactor, mProviderRefreshToken);
                mRoundedCornerResDelegate.setTuningSizeFactor(sizeFactor);
            } catch (NumberFormatException e) {
            } catch (NumberFormatException e) {
                mRoundedCornerResDelegate.updateTuningSizeFactor(null, mProviderRefreshToken);
                mRoundedCornerResDelegate.setTuningSizeFactor(null);
            }
            }
            Integer[] filterIds = {
            Integer[] filterIds = {
                    R.id.rounded_corner_top_left,
                    R.id.rounded_corner_top_left,
+0 −1
Original line number Original line Diff line number Diff line
@@ -19,5 +19,4 @@ package com.android.systemui.decor
abstract class DecorProviderFactory {
abstract class DecorProviderFactory {
    abstract val providers: List<DecorProvider>
    abstract val providers: List<DecorProvider>
    abstract val hasProviders: Boolean
    abstract val hasProviders: Boolean
    abstract fun onDisplayUniqueIdChanged(displayUniqueId: String?)
}
}
 No newline at end of file
+0 −4
Original line number Original line Diff line number Diff line
@@ -39,10 +39,6 @@ class PrivacyDotDecorProviderFactory @Inject constructor(
    override val hasProviders: Boolean
    override val hasProviders: Boolean
        get() = isPrivacyDotEnabled
        get() = isPrivacyDotEnabled


    override fun onDisplayUniqueIdChanged(displayUniqueId: String?) {
        // Do nothing for privacy dot
    }

    override val providers: List<DecorProvider>
    override val providers: List<DecorProvider>
        get() {
        get() {
            return if (hasProviders) {
            return if (hasProviders) {
+0 −4
Original line number Original line Diff line number Diff line
@@ -28,10 +28,6 @@ class RoundedCornerDecorProviderFactory(
            hasTop || hasBottom
            hasTop || hasBottom
        }
        }


    override fun onDisplayUniqueIdChanged(displayUniqueId: String?) {
        roundedCornerResDelegate.updateDisplayUniqueId(displayUniqueId, null)
    }

    override val providers: List<DecorProvider>
    override val providers: List<DecorProvider>
    get() {
    get() {
        val hasTop = roundedCornerResDelegate.hasTop
        val hasTop = roundedCornerResDelegate.hasTop
+1 −3
Original line number Original line Diff line number Diff line
@@ -65,7 +65,7 @@ class RoundedCornerDecorProviderImpl(
    private fun initView(view: ImageView, @Surface.Rotation rotation: Int) {
    private fun initView(view: ImageView, @Surface.Rotation rotation: Int) {
        view.setRoundedCornerImage(roundedCornerResDelegate, isTop)
        view.setRoundedCornerImage(roundedCornerResDelegate, isTop)
        view.adjustRotation(alignedBounds, rotation)
        view.adjustRotation(alignedBounds, rotation)
        view.setColorFilter(IMAGE_TINT_COLOR)
        view.imageTintList = roundedCornerResDelegate.colorTintList
    }
    }


    override fun onReloadResAndMeasure(
    override fun onReloadResAndMeasure(
@@ -93,8 +93,6 @@ class RoundedCornerDecorProviderImpl(
    }
    }
}
}


private const val IMAGE_TINT_COLOR: Int = 0xFF000000.toInt()

@DisplayCutout.BoundsPosition
@DisplayCutout.BoundsPosition
private fun Int.toLayoutGravity(@Surface.Rotation rotation: Int): Int = when (rotation) {
private fun Int.toLayoutGravity(@Surface.Rotation rotation: Int): Int = when (rotation) {
    Surface.ROTATION_0 -> when (this) {
    Surface.ROTATION_0 -> when (this) {
Loading