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 Diff line number Diff line
@@ -64,7 +64,6 @@ import android.view.ViewGroup.LayoutParams;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;

import androidx.annotation.VisibleForTesting;

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

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

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

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

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

        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++) {
            if (mOverlays[i] == null) {
                continue;
@@ -866,19 +869,12 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
            View child;
            for (int j = 0; j < size; j++) {
                child = overlayView.getChildAt(j);
                if (child.getId() == R.id.privacy_dot_top_left_container
                        || 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) {
                if (child instanceof DisplayCutoutView) {
                    ((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)) {
                return;
            }
            ++mProviderRefreshToken;
            try {
                final int sizeFactor = Integer.parseInt(newValue);
                mRoundedCornerResDelegate.updateTuningSizeFactor(sizeFactor, mProviderRefreshToken);
                mRoundedCornerResDelegate.setTuningSizeFactor(sizeFactor);
            } catch (NumberFormatException e) {
                mRoundedCornerResDelegate.updateTuningSizeFactor(null, mProviderRefreshToken);
                mRoundedCornerResDelegate.setTuningSizeFactor(null);
            }
            Integer[] filterIds = {
                    R.id.rounded_corner_top_left,
+0 −1
Original line number Diff line number Diff line
@@ -19,5 +19,4 @@ package com.android.systemui.decor
abstract class DecorProviderFactory {
    abstract val providers: List<DecorProvider>
    abstract val hasProviders: Boolean
    abstract fun onDisplayUniqueIdChanged(displayUniqueId: String?)
}
 No newline at end of file
+0 −4
Original line number Diff line number Diff line
@@ -39,10 +39,6 @@ class PrivacyDotDecorProviderFactory @Inject constructor(
    override val hasProviders: Boolean
        get() = isPrivacyDotEnabled

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

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

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

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

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

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

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