@@ -9864,6 +9864,13 @@ void dispatchScreenStateChanged(int screenState) {
98649864 public void onScreenStateChanged(int screenState) {
98659865 }
98669866
9867+ /**
9868+ * Return true if the application tag in the AndroidManifest has set "supportRtl" to true
9869+ */
9870+ private boolean hasRtlSupport() {
9871+ return mContext.getApplicationInfo().hasRtlSupport();
9872+ }
9873+
98679874 /**
98689875 * Resolve and cache the layout direction. LTR is set initially. This is implicitly supposing
98699876 * that the parent directionality can and will be resolved before its children.
@@ -9873,30 +9880,32 @@ public void resolveLayoutDirection() {
98739880 // Clear any previous layout direction resolution
98749881 mPrivateFlags2 &= ~LAYOUT_DIRECTION_RESOLVED_MASK;
98759882
9876- // Set resolved depending on layout direction
9877- switch (getLayoutDirection()) {
9878- case LAYOUT_DIRECTION_INHERIT:
9879- // If this is root view, no need to look at parent's layout dir.
9880- if (canResolveLayoutDirection()) {
9881- ViewGroup viewGroup = ((ViewGroup) mParent);
9883+ if (hasRtlSupport()) {
9884+ // Set resolved depending on layout direction
9885+ switch (getLayoutDirection()) {
9886+ case LAYOUT_DIRECTION_INHERIT:
9887+ // If this is root view, no need to look at parent's layout dir.
9888+ if (canResolveLayoutDirection()) {
9889+ ViewGroup viewGroup = ((ViewGroup) mParent);
98829890
9883- if (viewGroup.getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL) {
9891+ if (viewGroup.getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL) {
9892+ mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
9893+ }
9894+ } else {
9895+ // Nothing to do, LTR by default
9896+ }
9897+ break;
9898+ case LAYOUT_DIRECTION_RTL:
9899+ mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
9900+ break;
9901+ case LAYOUT_DIRECTION_LOCALE:
9902+ if(isLayoutDirectionRtl(Locale.getDefault())) {
98849903 mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
98859904 }
9886- } else {
9905+ break;
9906+ default:
98879907 // Nothing to do, LTR by default
9888- }
9889- break;
9890- case LAYOUT_DIRECTION_RTL:
9891- mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
9892- break;
9893- case LAYOUT_DIRECTION_LOCALE:
9894- if(isLayoutDirectionRtl(Locale.getDefault())) {
9895- mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
9896- }
9897- break;
9898- default:
9899- // Nothing to do, LTR by default
9908+ }
99009909 }
99019910
99029911 // Set to resolved
@@ -14603,44 +14612,49 @@ public void resolveTextDirection() {
1460314612 // Reset any previous text direction resolution
1460414613 mPrivateFlags2 &= ~(TEXT_DIRECTION_RESOLVED | TEXT_DIRECTION_RESOLVED_MASK);
1460514614
14606- // Set resolved text direction flag depending on text direction flag
14607- final int textDirection = getTextDirection();
14608- switch(textDirection) {
14609- case TEXT_DIRECTION_INHERIT:
14610- if (canResolveTextDirection()) {
14611- ViewGroup viewGroup = ((ViewGroup) mParent);
14612-
14613- // Set current resolved direction to the same value as the parent's one
14614- final int parentResolvedDirection = viewGroup.getResolvedTextDirection();
14615- switch (parentResolvedDirection) {
14616- case TEXT_DIRECTION_FIRST_STRONG:
14617- case TEXT_DIRECTION_ANY_RTL:
14618- case TEXT_DIRECTION_LTR:
14619- case TEXT_DIRECTION_RTL:
14620- case TEXT_DIRECTION_LOCALE:
14621- mPrivateFlags2 |=
14622- (parentResolvedDirection << TEXT_DIRECTION_RESOLVED_MASK_SHIFT);
14623- break;
14624- default:
14625- // Default resolved direction is "first strong" heuristic
14626- mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
14615+ if (hasRtlSupport()) {
14616+ // Set resolved text direction flag depending on text direction flag
14617+ final int textDirection = getTextDirection();
14618+ switch(textDirection) {
14619+ case TEXT_DIRECTION_INHERIT:
14620+ if (canResolveTextDirection()) {
14621+ ViewGroup viewGroup = ((ViewGroup) mParent);
14622+
14623+ // Set current resolved direction to the same value as the parent's one
14624+ final int parentResolvedDirection = viewGroup.getResolvedTextDirection();
14625+ switch (parentResolvedDirection) {
14626+ case TEXT_DIRECTION_FIRST_STRONG:
14627+ case TEXT_DIRECTION_ANY_RTL:
14628+ case TEXT_DIRECTION_LTR:
14629+ case TEXT_DIRECTION_RTL:
14630+ case TEXT_DIRECTION_LOCALE:
14631+ mPrivateFlags2 |=
14632+ (parentResolvedDirection << TEXT_DIRECTION_RESOLVED_MASK_SHIFT);
14633+ break;
14634+ default:
14635+ // Default resolved direction is "first strong" heuristic
14636+ mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
14637+ }
14638+ } else {
14639+ // We cannot do the resolution if there is no parent, so use the default one
14640+ mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
1462714641 }
14628- } else {
14629- // We cannot do the resolution if there is no parent, so use the default one
14642+ break;
14643+ case TEXT_DIRECTION_FIRST_STRONG:
14644+ case TEXT_DIRECTION_ANY_RTL:
14645+ case TEXT_DIRECTION_LTR:
14646+ case TEXT_DIRECTION_RTL:
14647+ case TEXT_DIRECTION_LOCALE:
14648+ // Resolved direction is the same as text direction
14649+ mPrivateFlags2 |= (textDirection << TEXT_DIRECTION_RESOLVED_MASK_SHIFT);
14650+ break;
14651+ default:
14652+ // Default resolved direction is "first strong" heuristic
1463014653 mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
14631- }
14632- break;
14633- case TEXT_DIRECTION_FIRST_STRONG:
14634- case TEXT_DIRECTION_ANY_RTL:
14635- case TEXT_DIRECTION_LTR:
14636- case TEXT_DIRECTION_RTL:
14637- case TEXT_DIRECTION_LOCALE:
14638- // Resolved direction is the same as text direction
14639- mPrivateFlags2 |= (textDirection << TEXT_DIRECTION_RESOLVED_MASK_SHIFT);
14640- break;
14641- default:
14642- // Default resolved direction is "first strong" heuristic
14643- mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
14654+ }
14655+ } else {
14656+ // Default resolved direction is "first strong" heuristic
14657+ mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
1464414658 }
1464514659
1464614660 // Set to resolved
0 commit comments