Add onRtlPropertiesChanged if layoutDirection changes during

resolveLayoutDirection

ImageView passes layout direction to the drawable in two cases:
1) when the new one is set
2) in onRtlPropertiesChanged.

The problem with `onRtlPropertiesChanged` is that in some cases it might
not be called (ex. when the view is detached from window). Therefore the
view would get an updated state with `resolveLayoutDirection` that doesn't
invoke `onRtlPropertiesChanged` though.

Test: manual on phone: enable for RTL in Developer settings -> open QS
Fixes: 286508181
Change-Id: Id2b62f905197b1abc7130b259a5ebcfc3ff2a2d0
This commit is contained in:
Anton Potapov
2023-07-12 16:58:26 +01:00
parent 1672c54654
commit 328168993c
2 changed files with 34 additions and 2 deletions

View File

@@ -30,12 +30,11 @@
android:visibility="gone"
/>
<ImageView
<com.android.systemui.qs.tileimpl.ChevronImageView
android:id="@+id/chevron"
android:layout_width="@dimen/qs_icon_size"
android:layout_height="@dimen/qs_icon_size"
android:src="@*android:drawable/ic_chevron_end"
android:autoMirrored="true"
android:visibility="gone"
android:importantForAccessibility="no"
/>

View File

@@ -0,0 +1,33 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.qs.tileimpl
import android.content.Context
import android.util.AttributeSet
import android.widget.ImageView
class ChevronImageView(context: Context, attrs: AttributeSet?) : ImageView(context, attrs) {
override fun resolveLayoutDirection(): Boolean {
val previousLayoutDirection = layoutDirection
return super.resolveLayoutDirection().also { resolved ->
if (resolved && layoutDirection != previousLayoutDirection) {
onRtlPropertiesChanged(layoutDirection)
}
}
}
}