@@ -9997,6 +9997,13 @@ void dispatchScreenStateChanged(int screenState) {
99979997 public void onScreenStateChanged(int screenState) {
99989998 }
99999999
10000+ /**
10001+ * Return true if the application tag in the AndroidManifest has set "supportRtl" to true
10002+ */
10003+ private boolean hasRtlSupport() {
10004+ return mContext.getApplicationInfo().hasRtlSupport();
10005+ }
10006+
1000010007 /**
1000110008 * Resolve and cache the layout direction. LTR is set initially. This is implicitly supposing
1000210009 * that the parent directionality can and will be resolved before its children.
@@ -10006,30 +10013,32 @@ public void resolveLayoutDirection() {
1000610013 // Clear any previous layout direction resolution
1000710014 mPrivateFlags2 &= ~LAYOUT_DIRECTION_RESOLVED_MASK;
1000810015
10009- // Set resolved depending on layout direction
10010- switch (getLayoutDirection()) {
10011- case LAYOUT_DIRECTION_INHERIT:
10012- // If this is root view, no need to look at parent's layout dir.
10013- if (canResolveLayoutDirection()) {
10014- ViewGroup viewGroup = ((ViewGroup) mParent);
10016+ if (hasRtlSupport()) {
10017+ // Set resolved depending on layout direction
10018+ switch (getLayoutDirection()) {
10019+ case LAYOUT_DIRECTION_INHERIT:
10020+ // If this is root view, no need to look at parent's layout dir.
10021+ if (canResolveLayoutDirection()) {
10022+ ViewGroup viewGroup = ((ViewGroup) mParent);
1001510023
10016- if (viewGroup.getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL) {
10024+ if (viewGroup.getResolvedLayoutDirection() == LAYOUT_DIRECTION_RTL) {
10025+ mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
10026+ }
10027+ } else {
10028+ // Nothing to do, LTR by default
10029+ }
10030+ break;
10031+ case LAYOUT_DIRECTION_RTL:
10032+ mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
10033+ break;
10034+ case LAYOUT_DIRECTION_LOCALE:
10035+ if(isLayoutDirectionRtl(Locale.getDefault())) {
1001710036 mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
1001810037 }
10019- } else {
10038+ break;
10039+ default:
1002010040 // Nothing to do, LTR by default
10021- }
10022- break;
10023- case LAYOUT_DIRECTION_RTL:
10024- mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
10025- break;
10026- case LAYOUT_DIRECTION_LOCALE:
10027- if(isLayoutDirectionRtl(Locale.getDefault())) {
10028- mPrivateFlags2 |= LAYOUT_DIRECTION_RESOLVED_RTL;
10029- }
10030- break;
10031- default:
10032- // Nothing to do, LTR by default
10041+ }
1003310042 }
1003410043
1003510044 // Set to resolved
@@ -14809,44 +14818,49 @@ public void resolveTextDirection() {
1480914818 // Reset any previous text direction resolution
1481014819 mPrivateFlags2 &= ~(TEXT_DIRECTION_RESOLVED | TEXT_DIRECTION_RESOLVED_MASK);
1481114820
14812- // Set resolved text direction flag depending on text direction flag
14813- final int textDirection = getTextDirection();
14814- switch(textDirection) {
14815- case TEXT_DIRECTION_INHERIT:
14816- if (canResolveTextDirection()) {
14817- ViewGroup viewGroup = ((ViewGroup) mParent);
14818-
14819- // Set current resolved direction to the same value as the parent's one
14820- final int parentResolvedDirection = viewGroup.getResolvedTextDirection();
14821- switch (parentResolvedDirection) {
14822- case TEXT_DIRECTION_FIRST_STRONG:
14823- case TEXT_DIRECTION_ANY_RTL:
14824- case TEXT_DIRECTION_LTR:
14825- case TEXT_DIRECTION_RTL:
14826- case TEXT_DIRECTION_LOCALE:
14827- mPrivateFlags2 |=
14828- (parentResolvedDirection << TEXT_DIRECTION_RESOLVED_MASK_SHIFT);
14829- break;
14830- default:
14831- // Default resolved direction is "first strong" heuristic
14832- mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
14821+ if (hasRtlSupport()) {
14822+ // Set resolved text direction flag depending on text direction flag
14823+ final int textDirection = getTextDirection();
14824+ switch(textDirection) {
14825+ case TEXT_DIRECTION_INHERIT:
14826+ if (canResolveTextDirection()) {
14827+ ViewGroup viewGroup = ((ViewGroup) mParent);
14828+
14829+ // Set current resolved direction to the same value as the parent's one
14830+ final int parentResolvedDirection = viewGroup.getResolvedTextDirection();
14831+ switch (parentResolvedDirection) {
14832+ case TEXT_DIRECTION_FIRST_STRONG:
14833+ case TEXT_DIRECTION_ANY_RTL:
14834+ case TEXT_DIRECTION_LTR:
14835+ case TEXT_DIRECTION_RTL:
14836+ case TEXT_DIRECTION_LOCALE:
14837+ mPrivateFlags2 |=
14838+ (parentResolvedDirection << TEXT_DIRECTION_RESOLVED_MASK_SHIFT);
14839+ break;
14840+ default:
14841+ // Default resolved direction is "first strong" heuristic
14842+ mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
14843+ }
14844+ } else {
14845+ // We cannot do the resolution if there is no parent, so use the default one
14846+ mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
1483314847 }
14834- } else {
14835- // We cannot do the resolution if there is no parent, so use the default one
14848+ break;
14849+ case TEXT_DIRECTION_FIRST_STRONG:
14850+ case TEXT_DIRECTION_ANY_RTL:
14851+ case TEXT_DIRECTION_LTR:
14852+ case TEXT_DIRECTION_RTL:
14853+ case TEXT_DIRECTION_LOCALE:
14854+ // Resolved direction is the same as text direction
14855+ mPrivateFlags2 |= (textDirection << TEXT_DIRECTION_RESOLVED_MASK_SHIFT);
14856+ break;
14857+ default:
14858+ // Default resolved direction is "first strong" heuristic
1483614859 mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
14837- }
14838- break;
14839- case TEXT_DIRECTION_FIRST_STRONG:
14840- case TEXT_DIRECTION_ANY_RTL:
14841- case TEXT_DIRECTION_LTR:
14842- case TEXT_DIRECTION_RTL:
14843- case TEXT_DIRECTION_LOCALE:
14844- // Resolved direction is the same as text direction
14845- mPrivateFlags2 |= (textDirection << TEXT_DIRECTION_RESOLVED_MASK_SHIFT);
14846- break;
14847- default:
14848- // Default resolved direction is "first strong" heuristic
14849- mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
14860+ }
14861+ } else {
14862+ // Default resolved direction is "first strong" heuristic
14863+ mPrivateFlags2 |= TEXT_DIRECTION_RESOLVED_DEFAULT;
1485014864 }
1485114865
1485214866 // Set to resolved
0 commit comments