Merge "Fix RegionSampler crashes" into tm-qpr-dev

This commit is contained in:
Florence Yang
2023-03-07 23:08:49 +00:00
committed by Android (Google) Code Review
3 changed files with 29 additions and 31 deletions

View File

@@ -91,6 +91,22 @@ constructor(
val sampledRegion = calculateSampledRegion(sampledView)
val regions = ArrayList<RectF>()
val sampledRegionWithOffset = convertBounds(sampledRegion)
if (
sampledRegionWithOffset.left < 0.0 ||
sampledRegionWithOffset.right > 1.0 ||
sampledRegionWithOffset.top < 0.0 ||
sampledRegionWithOffset.bottom > 1.0
) {
android.util.Log.e(
"RegionSampler",
"view out of bounds: $sampledRegion | " +
"screen width: ${displaySize.x}, screen height: ${displaySize.y}",
Exception()
)
return
}
regions.add(sampledRegionWithOffset)
wallpaperManager?.removeOnColorsChangedListener(this)

View File

@@ -21,6 +21,7 @@ import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.res.Resources
import android.graphics.Rect
import android.text.format.DateFormat
import android.util.TypedValue
import android.view.View
@@ -119,10 +120,6 @@ constructor(
private val mLayoutChangedListener =
object : View.OnLayoutChangeListener {
private var currentSmallClockView: View? = null
private var currentLargeClockView: View? = null
private var currentSmallClockLocation = IntArray(2)
private var currentLargeClockLocation = IntArray(2)
override fun onLayoutChange(
view: View?,
@@ -135,6 +132,8 @@ constructor(
oldRight: Int,
oldBottom: Int
) {
view?.removeOnLayoutChangeListener(this)
val parent = (view?.parent) as FrameLayout
// don't pass in negative bounds when clocks are in transition state
@@ -142,31 +141,12 @@ constructor(
return
}
// SMALL CLOCK
if (parent.id == R.id.lockscreen_clock_view) {
// view bounds have changed due to clock size changing (i.e. different character
// widths)
// AND/OR the view has been translated when transitioning between small and
// large clock
if (
view != currentSmallClockView ||
!view.locationOnScreen.contentEquals(currentSmallClockLocation)
) {
currentSmallClockView = view
currentSmallClockLocation = view.locationOnScreen
updateRegionSampler(view)
}
}
// LARGE CLOCK
else if (parent.id == R.id.lockscreen_clock_view_large) {
if (
view != currentLargeClockView ||
!view.locationOnScreen.contentEquals(currentLargeClockLocation)
) {
currentLargeClockView = view
currentLargeClockLocation = view.locationOnScreen
updateRegionSampler(view)
}
val currentViewRect = Rect(left, top, right, bottom)
val oldViewRect = Rect(oldLeft, oldTop, oldRight, oldBottom)
if (currentViewRect.width() != oldViewRect.width() ||
currentViewRect.height() != oldViewRect.height()) {
updateRegionSampler(view)
}
}
}

View File

@@ -500,8 +500,10 @@ constructor(
private fun updateTextColorFromRegionSampler() {
smartspaceViews.forEach {
val textColor = regionSamplers.getValue(it).currentForegroundColor()
it.setPrimaryTextColor(textColor)
val textColor = regionSamplers.get(it)?.currentForegroundColor()
if (textColor != null) {
it.setPrimaryTextColor(textColor)
}
}
}