summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Milton Wu <mingjuwu@google.com> 2022-04-14 21:11:24 +0800
committer Milton Wu <mingjuwu@google.com> 2022-04-19 06:41:01 +0000
commite9440ab1a07f9536a23ff014d7d4a1f1660be55a (patch)
treeea6c924dbb65410f5d98d1111428b072d2d905cc
parent174c5ebb782fc8e9472c4d461bd2af1dc481db67 (diff)
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
-rw-r--r--packages/SystemUI/src/com/android/systemui/ScreenDecorations.java35
-rw-r--r--packages/SystemUI/src/com/android/systemui/decor/DecorProviderFactory.kt1
-rw-r--r--packages/SystemUI/src/com/android/systemui/decor/PrivacyDotDecorProviderFactory.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderFactory.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/decor/RoundedCornerDecorProviderImpl.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/decor/RoundedCornerResDelegate.kt38
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/decor/RoundedCornerResDelegateTest.kt4
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)