diff options
7 files changed, 43 insertions, 47 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java index 7cc738a4e437..4b9288c6c56f 100644 --- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java +++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java @@ -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, diff --git a/packages/SystemUI/src/com/android/systemui/decor/DecorProviderFactory.kt b/packages/SystemUI/src/com/android/systemui/decor/DecorProviderFactory.kt index cc4096fb3b19..c60cad8419d2 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/DecorProviderFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/DecorProviderFactory.kt @@ -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 diff --git a/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt b/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt index d16d9604c002..136f135af759 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt @@ -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) { diff --git a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderFactory.kt b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderFactory.kt index 4f075da7aaa7..0ffb4fb5b456 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderFactory.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderFactory.kt @@ -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 diff --git a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderImpl.kt b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderImpl.kt index 90ff950406b4..9dbeb77ebc00 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderImpl.kt @@ -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) { diff --git a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerResDelegate.kt b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerResDelegate.kt index 3ab2f0881807..3731eca4ee86 100644 --- a/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerResDelegate.kt +++ b/packages/SystemUI/src/com/android/systemui/decor/RoundedCornerResDelegate.kt @@ -18,7 +18,9 @@ package com.android.systemui.decor import android.annotation.ArrayRes import android.annotation.DrawableRes +import android.content.res.ColorStateList import android.content.res.Resources +import android.graphics.Color import android.graphics.drawable.Drawable import android.util.DisplayUtils import android.util.Size @@ -55,6 +57,17 @@ class RoundedCornerResDelegate( var bottomRoundedSize = Size(0, 0) private set + var colorTintList = ColorStateList.valueOf(Color.BLACK) + + var tuningSizeFactor: Int? = null + set(value) { + if (field == value) { + return + } + field = value + reloadMeasures() + } + init { reloadRes() reloadMeasures() @@ -101,7 +114,7 @@ class RoundedCornerResDelegate( ) } - private fun reloadMeasures(roundedSizeFactor: Int? = null) { + private fun reloadMeasures() { topRoundedDrawable?.let { topRoundedSize = Size(it.intrinsicWidth, it.intrinsicHeight) } @@ -109,19 +122,18 @@ class RoundedCornerResDelegate( bottomRoundedSize = Size(it.intrinsicWidth, it.intrinsicHeight) } - if (roundedSizeFactor != null && roundedSizeFactor > 0) { - val length: Int = (roundedSizeFactor * density).toInt() - topRoundedSize = Size(length, length) - bottomRoundedSize = Size(length, length) - } - } - - fun updateTuningSizeFactor(factor: Int?, newReloadToken: Int) { - if (reloadToken == newReloadToken) { - return + tuningSizeFactor?.let { + if (it <= 0) { + return + } + val length: Int = (it * density).toInt() + if (topRoundedSize.width > 0) { + topRoundedSize = Size(length, length) + } + if (bottomRoundedSize.width > 0) { + bottomRoundedSize = Size(length, length) + } } - reloadToken = newReloadToken - reloadMeasures(factor) } private fun getDrawable( diff --git a/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerResDelegateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerResDelegateTest.kt index f629b3b9b97a..adb9c4d206e1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerResDelegateTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerResDelegateTest.kt @@ -121,13 +121,13 @@ class RoundedCornerResDelegateTest : SysuiTestCase() { roundedCornerResDelegate = RoundedCornerResDelegate(mContext.resources, null) val factor = 5 - roundedCornerResDelegate.updateTuningSizeFactor(factor, 1) + roundedCornerResDelegate.tuningSizeFactor = factor val length = (factor * mContext.resources.displayMetrics.density).toInt() assertEquals(Size(length, length), roundedCornerResDelegate.topRoundedSize) assertEquals(Size(length, length), roundedCornerResDelegate.bottomRoundedSize) - roundedCornerResDelegate.updateTuningSizeFactor(null, 2) + roundedCornerResDelegate.tuningSizeFactor = null assertEquals(Size(3, 3), roundedCornerResDelegate.topRoundedSize) assertEquals(Size(4, 4), roundedCornerResDelegate.bottomRoundedSize) |