Send subtree changed AccessibilityEvent for all alpha changes.

Changes to view.mtransformationInfo.mAlpha outside of View.java weren't triggering subtree AccessibilityEvents.
This is a problem, because that property helps determine a views visibility in accessibility, and AccessibilityServices wouldn't be informed of this change in visibility.
This results in UIs with certain animations not being accessible at all.

This seems like an oversight to begin with, so it's a pretty low risk change.

Test: Tested the reported instance of this bug in Permission Manager, CTSAccessibility*
Change-Id: I02526e5659cf95f1373811008e74954a73addd21
Fix: 127589394
This commit is contained in:
Qasid Ahmad Sadiq
2019-05-16 01:19:29 -07:00
committed by Qasid Sadiq
parent 4f09b09f62
commit 6205820579
3 changed files with 5 additions and 6 deletions

View File

@@ -213,7 +213,7 @@ public class RenderNodeAnimator extends Animator {
// it with the final value here.
if (mRenderProperty == RenderNodeAnimator.ALPHA) {
mViewTarget.ensureTransformationInfo();
mViewTarget.mTransformationInfo.mAlpha = mFinalValue;
mViewTarget.setAlphaInternal(mFinalValue);
}
moveToRunningState();

View File

@@ -4123,7 +4123,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* completely transparent and 1 means completely opaque.
*/
@ViewDebug.ExportedProperty
float mAlpha = 1f;
private float mAlpha = 1f;
/**
* The opacity of the view as manipulated by the Fade transition. This is a
@@ -16190,7 +16190,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
return false;
}
private void setAlphaInternal(float alpha) {
void setAlphaInternal(float alpha) {
float oldAlpha = mTransformationInfo.mAlpha;
mTransformationInfo.mAlpha = alpha;
// Report visibility changes, which can affect children, to accessibility

View File

@@ -972,7 +972,6 @@ public class ViewPropertyAnimator {
* @param value The value to set the property to
*/
private void setValue(int propertyConstant, float value) {
final View.TransformationInfo info = mView.mTransformationInfo;
final RenderNode renderNode = mView.mRenderNode;
switch (propertyConstant) {
case TRANSLATION_X:
@@ -1009,7 +1008,7 @@ public class ViewPropertyAnimator {
renderNode.setTranslationZ(value - renderNode.getElevation());
break;
case ALPHA:
info.mAlpha = value;
mView.setAlphaInternal(value);
renderNode.setAlpha(value);
break;
}
@@ -1047,7 +1046,7 @@ public class ViewPropertyAnimator {
case Z:
return node.getElevation() + node.getTranslationZ();
case ALPHA:
return mView.mTransformationInfo.mAlpha;
return mView.getAlpha();
}
return 0;
}