From bb0cbae441f04c052dd1a73448ae58fbffaca65d Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Tue, 13 Nov 2012 20:51:24 -0800 Subject: [PATCH] Fix for bug #7417949 TextView / EditText error Drawable is not put on the left in RTL mode - keep the Error Drawable infos into the Drawables cache - reset left/right Drawable state before resolving where to put the Error Drawable - get the mirrored Drawable for the Error popup background - set the Error popup position depending on the layout direction (so that the "triangle" of the background is pointing to the middle of the Error icon) One restriction: we load the Error popup background Drawable corresponding to the layout direction of the System Locale. So if you set the Layout direction on a TextView (or an EditText) to RTL and set an error to it when you are in a RTL System Locale, then you see that the background "triangle" is not pointing to the Error icon. This is working as intended as the AssetManager load the Drawable resource depending on the configuration which is in that case the RTL one thus loading the RTL version of the background (and not the LTR one). Thus there can be a discrepancy between the "layout direction" of the TextView and the one from the Error popup background. This would happen only thru using the SDK and not in a normal case when running an App. Change-Id: I91bbfbe46ac20efe0e585c5d4c766db23b5c709d --- core/java/android/widget/Editor.java | 56 +++-- core/java/android/widget/TextView.java | 195 ++++++++++++------ .../popup_inline_error.9.png | Bin 0 -> 2388 bytes .../popup_inline_error_above.9.png | Bin 0 -> 2409 bytes .../popup_inline_error_above_holo_dark.9.png | Bin 0 -> 940 bytes .../popup_inline_error_above_holo_light.9.png | Bin 0 -> 932 bytes .../popup_inline_error_holo_dark.9.png | Bin 0 -> 915 bytes .../popup_inline_error_holo_light.9.png | Bin 0 -> 919 bytes .../popup_inline_error.9.png | Bin 0 -> 1115 bytes .../popup_inline_error_above.9.png | Bin 0 -> 1150 bytes .../popup_inline_error.9.png | Bin 0 -> 1536 bytes .../popup_inline_error_above.9.png | Bin 0 -> 1546 bytes .../popup_inline_error_above_holo_dark.9.png | Bin 0 -> 646 bytes .../popup_inline_error_above_holo_light.9.png | Bin 0 -> 636 bytes .../popup_inline_error_holo_dark.9.png | Bin 0 -> 626 bytes .../popup_inline_error_holo_light.9.png | Bin 0 -> 622 bytes .../popup_inline_error.9.png | Bin 0 -> 4334 bytes .../popup_inline_error_above.9.png | Bin 0 -> 4335 bytes .../popup_inline_error_above_holo_dark.9.png | Bin 0 -> 1264 bytes .../popup_inline_error_above_holo_light.9.png | Bin 0 -> 1255 bytes .../popup_inline_error_holo_dark.9.png | Bin 0 -> 1238 bytes .../popup_inline_error_holo_light.9.png | Bin 0 -> 1229 bytes 22 files changed, 178 insertions(+), 73 deletions(-) create mode 100644 core/res/res/drawable-ldrtl-hdpi/popup_inline_error.9.png create mode 100644 core/res/res/drawable-ldrtl-hdpi/popup_inline_error_above.9.png create mode 100644 core/res/res/drawable-ldrtl-hdpi/popup_inline_error_above_holo_dark.9.png create mode 100644 core/res/res/drawable-ldrtl-hdpi/popup_inline_error_above_holo_light.9.png create mode 100644 core/res/res/drawable-ldrtl-hdpi/popup_inline_error_holo_dark.9.png create mode 100644 core/res/res/drawable-ldrtl-hdpi/popup_inline_error_holo_light.9.png create mode 100644 core/res/res/drawable-ldrtl-ldpi/popup_inline_error.9.png create mode 100644 core/res/res/drawable-ldrtl-ldpi/popup_inline_error_above.9.png create mode 100644 core/res/res/drawable-ldrtl-mdpi/popup_inline_error.9.png create mode 100644 core/res/res/drawable-ldrtl-mdpi/popup_inline_error_above.9.png create mode 100644 core/res/res/drawable-ldrtl-mdpi/popup_inline_error_above_holo_dark.9.png create mode 100644 core/res/res/drawable-ldrtl-mdpi/popup_inline_error_above_holo_light.9.png create mode 100644 core/res/res/drawable-ldrtl-mdpi/popup_inline_error_holo_dark.9.png create mode 100644 core/res/res/drawable-ldrtl-mdpi/popup_inline_error_holo_light.9.png create mode 100644 core/res/res/drawable-ldrtl-xhdpi/popup_inline_error.9.png create mode 100644 core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_above.9.png create mode 100644 core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_above_holo_dark.9.png create mode 100644 core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_above_holo_light.9.png create mode 100644 core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_holo_dark.9.png create mode 100644 core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_holo_light.9.png diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 521e68606c671..85972c3ff6fa3 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -309,13 +309,15 @@ public class Editor { } private void setErrorIcon(Drawable icon) { - final Drawables dr = mTextView.mDrawables; - if (dr != null) { - mTextView.setCompoundDrawables(dr.mDrawableLeft, dr.mDrawableTop, icon, - dr.mDrawableBottom); - } else { - mTextView.setCompoundDrawables(null, null, icon, null); + Drawables dr = mTextView.mDrawables; + if (dr == null) { + mTextView.mDrawables = dr = new Drawables(); } + dr.setErrorDrawable(icon, mTextView); + + mTextView.resetResolvedDrawables(); + mTextView.invalidate(); + mTextView.requestLayout(); } private void hideError() { @@ -329,7 +331,7 @@ public class Editor { } /** - * Returns the Y offset to make the pointy top of the error point + * Returns the X offset to make the pointy top of the error point * at the middle of the error icon. */ private int getErrorX() { @@ -340,8 +342,23 @@ public class Editor { final float scale = mTextView.getResources().getDisplayMetrics().density; final Drawables dr = mTextView.mDrawables; - return mTextView.getWidth() - mErrorPopup.getWidth() - mTextView.getPaddingRight() - - (dr != null ? dr.mDrawableSizeRight : 0) / 2 + (int) (25 * scale + 0.5f); + + final int layoutDirection = mTextView.getLayoutDirection(); + int errorX; + int offset; + switch (layoutDirection) { + default: + case View.LAYOUT_DIRECTION_LTR: + offset = - (dr != null ? dr.mDrawableSizeRight : 0) / 2 + (int) (25 * scale + 0.5f); + errorX = mTextView.getWidth() - mErrorPopup.getWidth() - + mTextView.getPaddingRight() + offset; + break; + case View.LAYOUT_DIRECTION_RTL: + offset = (dr != null ? dr.mDrawableSizeLeft : 0) / 2 - (int) (25 * scale + 0.5f); + errorX = mTextView.getPaddingLeft() + offset; + break; + } + return errorX; } /** @@ -358,16 +375,27 @@ public class Editor { mTextView.getCompoundPaddingBottom() - compoundPaddingTop; final Drawables dr = mTextView.mDrawables; - int icontop = compoundPaddingTop + - (vspace - (dr != null ? dr.mDrawableHeightRight : 0)) / 2; + + final int layoutDirection = mTextView.getLayoutDirection(); + int height; + switch (layoutDirection) { + default: + case View.LAYOUT_DIRECTION_LTR: + height = (dr != null ? dr.mDrawableHeightRight : 0); + break; + case View.LAYOUT_DIRECTION_RTL: + height = (dr != null ? dr.mDrawableHeightLeft : 0); + break; + } + + int icontop = compoundPaddingTop + (vspace - height) / 2; /* * The "2" is the distance between the point and the top edge * of the background. */ final float scale = mTextView.getResources().getDisplayMetrics().density; - return icontop + (dr != null ? dr.mDrawableHeightRight : 0) - mTextView.getHeight() - - (int) (2 * scale + 0.5f); + return icontop + height - mTextView.getHeight() - (int) (2 * scale + 0.5f); } void createInputContentTypeIfNeeded() { @@ -3726,7 +3754,7 @@ public class Editor { super(v, width, height); mView = v; // Make sure the TextView has a background set as it will be used the first time it is - // shown and positionned. Initialized with below background, which should have + // shown and positioned. Initialized with below background, which should have // dimensions identical to the above version for this to work (and is more likely). mPopupInlineErrorBackgroundId = getResourceId(mPopupInlineErrorBackgroundId, com.android.internal.R.styleable.Theme_errorMessageBackground); diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 5d904004cf027..97c78ee630a42 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -284,15 +284,144 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private TextUtils.TruncateAt mEllipsize; static class Drawables { + final static int DRAWABLE_NONE = -1; + final static int DRAWABLE_RIGHT = 0; + final static int DRAWABLE_LEFT = 1; + final Rect mCompoundRect = new Rect(); + Drawable mDrawableTop, mDrawableBottom, mDrawableLeft, mDrawableRight, - mDrawableStart, mDrawableEnd; + mDrawableStart, mDrawableEnd, mDrawableError, mDrawableTemp; + int mDrawableSizeTop, mDrawableSizeBottom, mDrawableSizeLeft, mDrawableSizeRight, - mDrawableSizeStart, mDrawableSizeEnd; + mDrawableSizeStart, mDrawableSizeEnd, mDrawableSizeError, mDrawableSizeTemp; + int mDrawableWidthTop, mDrawableWidthBottom, mDrawableHeightLeft, mDrawableHeightRight, - mDrawableHeightStart, mDrawableHeightEnd; + mDrawableHeightStart, mDrawableHeightEnd, mDrawableHeightError, mDrawableHeightTemp; + int mDrawablePadding; + + int mDrawableSaved = DRAWABLE_NONE; + + public void resolveWithLayoutDirection(int layoutDirection) { + switch(layoutDirection) { + case LAYOUT_DIRECTION_RTL: + if (mDrawableStart != null) { + mDrawableRight = mDrawableStart; + + mDrawableSizeRight = mDrawableSizeStart; + mDrawableHeightRight = mDrawableHeightStart; + } + if (mDrawableEnd != null) { + mDrawableLeft = mDrawableEnd; + + mDrawableSizeLeft = mDrawableSizeEnd; + mDrawableHeightLeft = mDrawableHeightEnd; + } + break; + + case LAYOUT_DIRECTION_LTR: + default: + if (mDrawableStart != null) { + mDrawableLeft = mDrawableStart; + + mDrawableSizeLeft = mDrawableSizeStart; + mDrawableHeightLeft = mDrawableHeightStart; + } + if (mDrawableEnd != null) { + mDrawableRight = mDrawableEnd; + + mDrawableSizeRight = mDrawableSizeEnd; + mDrawableHeightRight = mDrawableHeightEnd; + } + break; + } + applyErrorDrawableIfNeeded(layoutDirection); + updateDrawablesLayoutDirection(layoutDirection); + } + + private void updateDrawablesLayoutDirection(int layoutDirection) { + if (mDrawableLeft != null) { + mDrawableLeft.setLayoutDirection(layoutDirection); + } + if (mDrawableRight != null) { + mDrawableRight.setLayoutDirection(layoutDirection); + } + if (mDrawableTop != null) { + mDrawableTop.setLayoutDirection(layoutDirection); + } + if (mDrawableBottom != null) { + mDrawableBottom.setLayoutDirection(layoutDirection); + } + } + + public void setErrorDrawable(Drawable dr, TextView tv) { + if (mDrawableError != dr && mDrawableError != null) { + mDrawableError.setCallback(null); + } + mDrawableError = dr; + + final Rect compoundRect = mCompoundRect; + int[] state = tv.getDrawableState(); + + if (mDrawableError != null) { + mDrawableError.setState(state); + mDrawableError.copyBounds(compoundRect); + mDrawableError.setCallback(tv); + mDrawableSizeError = compoundRect.width(); + mDrawableHeightError = compoundRect.height(); + } else { + mDrawableSizeError = mDrawableHeightError = 0; + } + } + + private void applyErrorDrawableIfNeeded(int layoutDirection) { + // first restore the initial state if needed + switch (mDrawableSaved) { + case DRAWABLE_LEFT: + mDrawableLeft = mDrawableTemp; + mDrawableSizeLeft = mDrawableSizeTemp; + mDrawableHeightLeft = mDrawableHeightTemp; + break; + case DRAWABLE_RIGHT: + mDrawableRight = mDrawableTemp; + mDrawableSizeRight = mDrawableSizeTemp; + mDrawableHeightRight = mDrawableHeightTemp; + break; + case DRAWABLE_NONE: + default: + } + // then, if needed, assign the Error drawable to the correct location + if (mDrawableError != null) { + switch(layoutDirection) { + case LAYOUT_DIRECTION_RTL: + mDrawableSaved = DRAWABLE_LEFT; + + mDrawableTemp = mDrawableLeft; + mDrawableSizeTemp = mDrawableSizeLeft; + mDrawableHeightTemp = mDrawableHeightLeft; + + mDrawableLeft = mDrawableError; + mDrawableSizeLeft = mDrawableSizeError; + mDrawableHeightLeft = mDrawableHeightError; + break; + case LAYOUT_DIRECTION_LTR: + default: + mDrawableSaved = DRAWABLE_RIGHT; + + mDrawableTemp = mDrawableRight; + mDrawableSizeTemp = mDrawableSizeRight; + mDrawableHeightTemp = mDrawableHeightRight; + + mDrawableRight = mDrawableError; + mDrawableSizeRight = mDrawableSizeError; + mDrawableHeightRight = mDrawableHeightError; + break; + } + } + } } + Drawables mDrawables; private CharWrapper mCharWrapper; @@ -8264,63 +8393,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return; } mLastLayoutDirection = layoutDirection; - // No drawable to resolve - if (mDrawables == null) { - return; - } - // No relative drawable to resolve - if (mDrawables.mDrawableStart == null && mDrawables.mDrawableEnd == null) { - return; - } - Drawables dr = mDrawables; - switch(layoutDirection) { - case LAYOUT_DIRECTION_RTL: - if (dr.mDrawableStart != null) { - dr.mDrawableRight = dr.mDrawableStart; - - dr.mDrawableSizeRight = dr.mDrawableSizeStart; - dr.mDrawableHeightRight = dr.mDrawableHeightStart; - } - if (dr.mDrawableEnd != null) { - dr.mDrawableLeft = dr.mDrawableEnd; - - dr.mDrawableSizeLeft = dr.mDrawableSizeEnd; - dr.mDrawableHeightLeft = dr.mDrawableHeightEnd; - } - break; - - case LAYOUT_DIRECTION_LTR: - default: - if (dr.mDrawableStart != null) { - dr.mDrawableLeft = dr.mDrawableStart; - - dr.mDrawableSizeLeft = dr.mDrawableSizeStart; - dr.mDrawableHeightLeft = dr.mDrawableHeightStart; - } - if (dr.mDrawableEnd != null) { - dr.mDrawableRight = dr.mDrawableEnd; - - dr.mDrawableSizeRight = dr.mDrawableSizeEnd; - dr.mDrawableHeightRight = dr.mDrawableHeightEnd; - } - break; - } - updateDrawablesLayoutDirection(dr, layoutDirection); - } - - private void updateDrawablesLayoutDirection(Drawables dr, int layoutDirection) { - if (dr.mDrawableLeft != null) { - dr.mDrawableLeft.setLayoutDirection(layoutDirection); - } - if (dr.mDrawableRight != null) { - dr.mDrawableRight.setLayoutDirection(layoutDirection); - } - if (dr.mDrawableTop != null) { - dr.mDrawableTop.setLayoutDirection(layoutDirection); - } - if (dr.mDrawableBottom != null) { - dr.mDrawableBottom.setLayoutDirection(layoutDirection); + // Resolve drawables + if (mDrawables != null) { + mDrawables.resolveWithLayoutDirection(layoutDirection); } } @@ -8328,6 +8404,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener * @hide */ protected void resetResolvedDrawables() { + super.resetResolvedDrawables(); mLastLayoutDirection = -1; } diff --git a/core/res/res/drawable-ldrtl-hdpi/popup_inline_error.9.png b/core/res/res/drawable-ldrtl-hdpi/popup_inline_error.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8b43f4ee333c0f812b0098609984dd9707e976f8 GIT binary patch literal 2388 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 b&rb4x2&V_>+TP8k00000NkvXXu0mjfCQ@d+ literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-ldrtl-hdpi/popup_inline_error_above_holo_dark.9.png b/core/res/res/drawable-ldrtl-hdpi/popup_inline_error_above_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b5f397c464116d1e62372823dd91c7c66cc6c3a6 GIT binary patch literal 940 zcmV;d15^BoP)Jl?(k5;>tfD_yy|5r7N+& zKm<`2E~+59uuu{Fs;#kUGxr`Bonn<{lC;4|?=g~0DRDD3VB#Z(-fJUDDs72<- zKvfqoZ<=c6a8s)t%Z7~D9Dxopx70#>3e=wuo4L^2TMtexZhkbqsBMo5IJH`Gn(YG6 zs^+f%^Uo*!sd2NB3Y6Uz_kd!EtFVJN?i>wwy6X=Zvgt2J!u!0h@Sa(@4cTso8m@VBSaIk|O`~!#5^NiRl;9E8-LmyY2wNhhw;(IB!{Tclp zQB`0!U!#+JjBjJ?%sIO{d;A3^!eihIu+%P_w70X7$5mkgSO&haD?DR7T+S&Wp7C&n ziSRVb_{JcK|EKcT1;A$+{F(iJni0Fc;fqJ?Cj0%vLCp9<EU*AH2UUDtll3px#mm5V#=>jH!kMhQZe+&;15EKZ@&CO9 zUAvOPGU)?1!SJXa_b0;y_GrBd8`{m_aJ7zP~b3(1#!A^F28Umv5VgDLYh?MS|me90G*FZn|9C0|Isr%&2*9z#gDxrBdV;7P`uO2V{Zb4W{>_Kb7AQfH=wE&rHX2mVh!)A6D_Lnyi0W7jFRTjQKZ=`HM++T}!TehM4rf#Q%2*`s*ZxCDMm( zf$cl_e+8j&Q5Hf7A%qY@2qC)Ya8vrP)jqhqDI`vhIFBZ9o_-3@eb64Xf$!J3*!~IQCDuf0=)`j z;?4zVjEly^kqs!6LVsp@TyzMSKs$wo4)uMKNt2l~?esa{eDj_8X^nFZV+>~ycY<|$ z{)L@$2qAxnpd+}swo;GLzjehS0lM?YcU;wZ{2vmS- zzjuI_g3r$ZV{Ce}e963L)0+jx;`v@bN50p?s5d|c$P+Tnn*WLhw^;LE6EY2q0-3m- zq4bDU0{ws^&Z!-aKpm8yq7owyw-n zw9G`~1F#P4_EQC9T8J`T?jQqXfpe72EI;g98eB=RZw6cq?=b9Ef!{za9tWhAz3YRn zU67a-5o%*unJ%TLW}c6@#P`fgLgo^$Y5B~x`XekqfgK=9srUv^KQOi2OYIRIvR8?W z$FJEg>;V=SqG%s?B)(YzU8iWDG84Xt<%cPa_&Tr+{E1&{w7Af3kC>kY#`&8277Y#f z(a2!ewlG^+Ki-N}vryZ(xRB-??r-nnmv*2~pNU84wRX{XROAoi8P6~6G~X}D$*gsd*QK@O-94(Gt!kZ+G4$EB;P)X4l=d(s7Nl|cA&aVSo^?QpuX18L9BI!(& z^nF}5OXlOdt=OUKRQ}#kd#m>3?zX8`oAPygTboggY0A&#TxRjzX1hw~Q2AzM1y?9U zz^)q|ZQz{5chCW@dEaZIk$B6bUMiIW8SR{WK7TpsQCak`BodM@`9ks~Ur2s`%hw31 zH#kMU(vIW{$(MW~`I0XrU-E_IOTLhN$rq9@`9ks~Ur4^>3&~HHd_4it8;l}fX-D#f z5`~^pY;!09q85aNm002ovPDHLkV1izx0d zU)Xz(5JCtcgb+fA9+I1(t*=yeE~-|O{9}|Jq?^&6Hb{VE&?~`mBEAHi0UQtkO<;4- zDrB8&Ckw5i!Ah_=bf0%!hA@m;gqALRwDp zdo11o!@y60f@Lm-Ms)VrN`Z%RzT1P@cQ!7N8MAqpO3l9kHTvrrZS)D_`=QB6CA&Rbs)~E_ylO}+B&vUw@-y^XCmj* z*J2M^fCJ7_cTW!_zMTQxrtY3`D|(g6k8&FEEnpS+o4#(*;X%LKXMYhmAJ^P>&XvP> zc&KMrSZppF?!-;2ZY^G^=D80KS2qY()}hk6m5$K2x<%uDkzYp> zVjL%d85YN~o3R3t_8QDgBk^tlJtw7y;#$_bvgl(`xuPK~9jmZ@G z>UJbwNWSC?$(MW~`I0XrU-E_IOTLhN$rq9@`9ks~Ur2twZj6nVq>V$3K@!rF*4PDU{P}gkku#(P(5#^t%<9nwlD={p%wlBeS!!KV?A( tA%qY@h|`Jn>Aw;4G;PtBCwbm`{sDS6;EU_haZ~^R002ovPDHLkV1lp*rak}w literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-ldrtl-ldpi/popup_inline_error.9.png b/core/res/res/drawable-ldrtl-ldpi/popup_inline_error.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d2efb6241bc7cc59198be72f72bf9f2debd1a698 GIT binary patch literal 1115 zcmV-h1f=_kP)>c6K!l3xCAsPb3vSpQLhgda;>`+{W@RsNr4M6Y$H>?E$JNGoa zZjwSQ0UGymW6xGPK7ENzTYyG;T>b4bL}Doj(NAaB-CX^KkF;e8wv16YJi<&4C~9)) zmQr{?GL7G|n{|Uh5M;714-h0%nMYawY!dGZAgMM|e@SSyk+2rgafqJhhv^L`_Z!U7Shct9fo+l*8aV&u zsk@%x%>K`chdF)!ZgcDiaL!tZVtF8{Fe;LwR7IrvrL*l$vKw0PGX}(9B;I|R$9PG+ zj&4>w*tVmuG4sj*5+wh*W4^%Hy@O1>|K;>?!WV(*1QKc1`F~5l7=R)sKT2+NkNI)L z{$OV072dWV6B%UP#G*u%7M({+G5iWJ2?0PTY z!J>($GT{;@Dz3LzMNSlM*~cPMm^gDpmBJ~dsIcCq%sxczL+zv7KJ<~M+DC<)LaPtQ zh#@tULaPt8kIG7+v2w~jq_%yiQm9f?Aca!GJz~_f4^;}+s*hSqAzFR7rV=%)5A9R9 zR*q7&Paz8@suWHs#p3lAeIVvIEiSI3sY>CxQfNu4q`0tB7y%=Q?*4SFEG4$*BTfnf z6vruq0&wyVjg|{IIZlrGvy^QFU!W8}nQ&YHbLe{wSiNH^2S-mZX$ljT6zA2V!JZNU zvrk0BKiuwRM>jt5<{IR*@07cd`uOYzs=qd{}xBOp&~KWRMA@PY0$$-Y+; zoBMC|R(H3PYSswW9|}bCznGbcr=#OX-i>}c0DKLcDG@`;lF=2w2H++j1EkOoC}{0w{toU+FjDMe}C3|tAUwx5+0^@mwt%97zv>>ko;q=+Y=`ZBZnR*NE4UOy#E hbOXh5YCZf*`~^(6^N0)#q|5*S002ovPDHLkV1h7C{vrSX literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-ldrtl-ldpi/popup_inline_error_above.9.png b/core/res/res/drawable-ldrtl-ldpi/popup_inline_error_above.9.png new file mode 100644 index 0000000000000000000000000000000000000000..04d200dcb4c951f39ef688d3b32289ddf21f462f GIT binary patch literal 1150 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 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-ldrtl-mdpi/popup_inline_error_above_holo_light.9.png b/core/res/res/drawable-ldrtl-mdpi/popup_inline_error_above_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..7a84200d72dd322e3957ff72b94ab8d237df01ff GIT binary patch literal 636 zcmV-?0)zdDP)OyAW0^WlyD;~gw?BOkpFW}O>PoP_kaZwf| zXpG9nIEgZUfNAe>VM&I`6lantjP3a)-Q3C2OHlPjtP%nQszG?@J>^WcuIzkEUmrhA zUUWq|c^^kBxL?o-6Pm-qpTV%Wr~-Wpq;Xs|OU!+a{FlURWYnAwgz*l(egV#|!TFkA zE~^SmEEcuV5MZ8`JmG8Q6^^?Dv(0zb;%yf7BhZp4nu_-k6RUKoK^+z}VkLQo(C)+B zrk?Dws1eYf7UT0+2|D0}x_ir#+XE87aog>);@$wivvTpqHUkq+y1(;?57arT>;mv0 zeh&Nqdc*RtPyqTM%mQ<1( WSe0HwV0JM80000$++_3NkU=MHL!sl@{an&db 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 literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_above.9.png b/core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_above.9.png new file mode 100644 index 0000000000000000000000000000000000000000..90820b5fa9a054fc70aab696cedc2a11085664b9 GIT binary patch literal 4335 zcmV5kDuAR;2`^6X$T!=^*eG9t1Oc)+E@ zXU0_t-fYkYKn@5q!)CrmMC4iw+*asDK%5y#TM(~H@U}uV1oA);D5b}IIuyPlvJpZz z2AV(vr~}pXcC#&juPAt1t%O_}w!P`-OOHL7@KxJEM6N|H6TGd^tpc-|F_#8$)J^z? zU4(8v4cLBQC>{O4rZkLOZHGV=uZUd36>pMOyiq22CxMAH1836Dx7rVWEx~It!P^Sm zLEt)IE3i4Ocw3Q_Blo-WXTIjo2M!H*C zPGAqP{e5QF&3_pjc*{-nUbo5QiaCr8FgC#IqMC?Y^DT!2=MubY;*)9LtR3|;BY)?9 za`2!ZKM4#2=YaFf_kAmA056$l)?V?pf;X488G4z&kkjlb(rc=Q>3;+-|#zujzpZD3zp z{Z2A+tbr>!d~3#6wy32QzCnjJLy#tR@9Rw8-aE{`x4zeGds8pDUKckLJeZIDKK$8l zVcvK>43C{?+xmMj`?tYc_G5|#c>FoMv*c`82#s+OZv2$5oSP$_VqrnWl06-= z!D}ViD0Gmo+EgtU;#^$kw0At&VSXK(&_H;G|Zwx;D9zWmTP)k=tBu&uPEHRIn zA12*4q0{2DRV!Z8irV?x9*@>Yh=?rW{h}*pejzurVcS)!;nFv^Uy4)giij+e!HY9; z+0b3J;uR5*?sVucESsZUO;1phK}2Nbd|XRT+O?ce;VU9?wI+;ROL}VSS-PMCvE7wFs z)>id)BV6@#J`=lM(JLadv@MX$$}6mR7oAr`L^|Z7UvuTVrXH^XSVW|qxw<`G5fNEh z@vb!^Z8xV}yedOPL>3pQJ`=&~Q1POwS45UJ(&lxj^lf)x#zt^2+LJcQW;N zMMPFkN!Dw3GWB>xL{^L4wa;wOUJW85R}{KH*KhjMWyO0rJMV~yY^(tGYsyK@;}sEE zhtTy`YaXwNh;-@<_%(F}YaX_ISh9&*(2B&qYKwO7i;5 z(RcNRmus8HtK1b4>5!FvQC412@V1Aqh=?rBNWJHph{!7(ylX8^*EEk;L_}80$t&Ee zVQHc(d__b$bp~Ladc0~gh=_C-yjN`=ufkVEWaX;2+u$|b=edZ8v}fcR-)Go#J&#vJ zMAj!O)oKtCxx&!BDsOhF&=nC`zl>a^)u8=&MMS!Z-*wxMcX6UCbVWouNA5yau0zF} z9R_doAd84B&Pj9i=JA48qgO0S0}>0# zLJ6%duZT#;+BEZ_fh5gPzn0+j>3@m?i~~(46A@XZ-n}&Jd~UYFcg?|@1enCPeL+M- zI)|o`-21dkMU?-WaMR&ppWS7anKq;tX+9Mx#08qqpJDDBKcsQyB!Ssv4FomZ3m0kp?9AgdwJIJ>^aRZr=JATPWONT2-=#tFe^W&ax@kxZ~Zlg94+0Zggf%%)>L*p#f&;2b& z?s>|OPcT2DAv>2hX%EYw^BEVu!GW2e8I=f64w>B99>N_t>^1|XG}MjnxCi^?4)C*e z;unXhegCJ#XGaNlT}QZWU>z#m3L}5|8K&=gi29*pBm%GTblK-m#%Gwl?+NA}e2RE{ z)Ek1(66OOF1YUgx5n25ObClr6V%%g*e6dP$>>RZpeB2*<{KrgArrDVd-DP)MFdaTN zZEXkJYCEJSF@J4tKJX?6e_;!S8%qQ`iUfNsrsr~(w)wXEVln+W%#g*Dov*u|x826z zM}CLC54{UhTKk1OUu#l%^cluJ_C@MXzX(YZI%6vl?qY(kq?=k8qgBx&(z!G=4qvI0 zoUIaH7@=|e3C4co!ifAlbh3MHw8U5TR{qe&i)T`;wUh!E+s7ack+4h2G@x`@{c@nPh!?NLP zGADEC4>8M(ZUeVd@LIs$<4=Eo$mE9((6_sU-EGME`qRh!=->PY+duo~6mHoEK^GUp zyeA%>VDjG{WcHhnVX(#+ldBT{>@?L!@AjvDJVJer&Xb)*MA{dZwU2BFJGy++;ovgv zgzMtYT;5f+w9{~oT4gK6W}gYCucP=@W2|ve!^Rh;FoisYTlNxkG0n_X8%+Gm{mkC` z7}4mcv8F(Rubrp%_3ttIzyl0l$ox(#y+qK^(Ab#6WscdAbjXda-|2m|%Cx_3zgFpIYTJg7DA|xH2R76DR5T+{?kgL9G4!iha?H`-A z&zma<-S+>Vq`~W&IGQ;3-~Q|;-_P!k43gjFT@pnjV@%!sFt%J|)9<}w*^@SY`V!;+ zbRY4>sY^5NBJV~YVdV3l;P{a==$kCex9jSeN<2 zu`oTteVMaIUq{~qx6nT@K=?L~tyc~n_O`!FZvPI7x9?wa(&ovRnYr%=%zf_=t`QLs z^j1lpKg!G(zsd0NIpSFsrphG>UJ+Si0C&pAt_4@{gS#oaucX%tz$|fGAeh`uDK|j= zrT|-V&AN?8XT6)QQGES=g1+*lm2GaO%H-V-Gj;DHMCUGI2*U_Jev!tbU*M&Czsu-Y zTInVo+6?ONYG`O&c3xfW;Jup9Anny~aFm&;U6dL-DE9Rb?hD8llNzOCf< zZ^!nQaC0^0zWodn|NK>|M~`AD8^Dj#{O)0Nqcd^z+n@p2qsT^_Zkia`suK z?*4m@e5Wy=t?lcmbwN!;HgxcIx^M?TjQ3}#HTTgoyp!Vf1%iDZAGt~uV=awi=a_xq zAk`ln#YYVcK`y~f9cKDd_i*Nk7nqw#L$=8(n-q(PY_#C*bQ{3dNc zdF(ciOXBfa8b?l3KXMv3Q^jD45&q&RjYmGsiF?1#*a!bBoouPS_6YIVB8e(lV9b+T@NyRF2ZN0jkV9$6%pC+!J7?P-ywMI zOH`-!(o^3|p`N2a>&b3v#oz_!}h$whFRKD%(2=)3QCa2!R)})tk zPl(y=@Y54S|M_i3?!SvurP=e1A3E*G_Lu1dEsaww_Fu+jl`kM8SI*;R{Rm z1@6?AQ0R(?f_I(6cctH<>rIJ8L|#e3HTrw4X;Wem5xKm|x7)9Yh=_>DMynd7Gqos0 dlxJ7P{{iPA1n!*V{NVrq002ovPDHLkV1fW@h3o(T literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_above_holo_dark.9.png b/core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_above_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..598997518833e4bf9dbab9c45db098f58efc08b5 GIT binary patch literal 1264 zcmeAS@N?(olHy`uVBq!ia0vp^bwHfP!3GjprV8S)C3(BMF#HF>1$&oI28wVNctjR6 zFmQK*Fr)d&(`$i(>?NMQuIzWX`9#gls>@RzFfg#xdb&7BiRPT%iZAp7EOCI3Y?hP++0# zs>Ms~Cx4H7S2%IDVsOsvFW2`hyU%YEmGSFSk^T2M<>&S)8kQeFvm@z;NfLDT$#PSztQYprb9_=Ddfe9v1oN^%ZKY@R5o0!{5I(Yk2!2d%1S+_S*(C^Mza?NPNlSg?Uz3*;5Yw$XFa_l@ENA?qv%BJ$6cX*FH&tAD( zReXEx?kl#pKd<$zn7Zl8^tfY(&iQNGF;qLeZ=YVheb&31CMH=EZdkr~C>_BT$yF+M z>vzdpF~8SS)bA>OuI|rovsM+cd}7DQ+TF~~QGMa2`RV%_H)WPDl2^Stz2WT6^}f!x zT6A7^KestzerGd}QCjWHvnkW=+_QVy`^G)3w({WL^D?_+H+u^DHw3gR73(kll62y> z#^c%(C)=mz{I);;`L30jiJ4$PCuCxZ^gUkfW7Bz_pRqY2<|t%dE@ENd&lo^*fVB-(Z2WB z!XRqGiVS)CnCOy5*>&yl9+d*Or#?R6S$V)Ig0;-A=>2Z3kWB}BC&n+{AAVs;_WBJI z_Z$xUbW-s8n=@_xkv#V=eTYwX-^Bezm6Y~AKjVzpW)J!78Rl6o-2W66N9I#pUXO@geCwi C!(2oF literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_above_holo_light.9.png b/core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_above_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3f87d3af102f16ec7c10bc7bab7055833d0d4d GIT binary patch literal 1255 zcmeAS@N?(olHy`uVBq!ia0vp^bwHfP!3GjprV8S)C3(BMF#HF>1$&oI28wVNctjR6 zFmQK*Fr)d&(`$i(>?NMQuIzWX`9v-FuDm_4k%57w#M8wwq~g}wxu^4`Lq*#68*fwZ zyKVDIXrYP63J$RoNk^M_g<>}*o@ASOX_)xKa{hZS(*?Vg zTLhdq6k$Zi^V18ux#Jn~b#-+^ucRDJ%*|cPT*JS|{>}So>^ARs6>i?V$(i-eX`+j{ zxY)#`(OhaT*M^&Oj=1;6bKaSIAw%N9wVZjeHB;s> zgc%+_GewTe?ZHbsGtLM1GFlv;PWPV}$Efu+NOR?kiL)Y;mNowW+*hQqWAe_+rR51y zFBs-JK9v{$C>EcpFxOLPwOZ#@m3;w^zTe&Zmd`-6{z~t?nvjowJJvHApMCSSmFv}$ zZtrxt8;rL$vRed)<{MsJo^|8UlXj)zcwHD z+PKv&HAHXYlIWcI@6%>W2S1*>S!^L|3eQIG%%4*pZDdZFtr@rL$kW?Lzx|w-UwdZt zl%w;$yxZ*j`{Ggd1bK^?%A@bE*etmmpzD|W$a` zw7yiQTzT06?v!l@@}Hi!e6m&W-gV87+S_-_8$OLbFn?pB)y{3wvv9W5)MYq9p zcEw`Bq{Zxd%lqwnBGaZ{>COBr^7QQqo=-xk>ZT8ah1?%`LT&wp~{4g{>-2Y`>)7`E|cW3#&JsW?aux8)3 z4CdW;IP8PdRQbaFloy}j`nrMZP2Z*OzFe&`500JCzZk8(;^MaOn_l;xdVV^|IsfKN z-uasZ_APz2|A^p8xq=lQ`gKR-b)$?PG-&?suBz}jbc{26)5+cs4Xg5xUYW;hyeII8 zxcaN#=4qTWSl4~DsGMCtY4?`5d(-*+YG+pMIDhtof!oi?5hq#`x#V1H1mB&Qx1sLI z_D1GciBl#2zw)TRpLlHl61lpriTCE8DDd3hBv`NV>GVfa{+Q?AKgE7~>&%c<*FSyt z_hiHEvfPK)E$O%D(+_%b{AWv^%&dboKl<{D-oE^9`*LkX&!yiM9sOU@mwjt6D^8rc z^Mi)@%ga)aIcJ^p`FdQW`e{t9P|+pPw~y8A)c612scZh_bBv?LG2cJ`?=X1mK+fG9 titCh~y>q>H@zttzYsITRp1%82{EvLC=Zr-Pj=&;`!PC{xWt~$(69A57Q6T^T literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_holo_dark.9.png b/core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_holo_dark.9.png new file mode 100644 index 0000000000000000000000000000000000000000..75baba28be9ef18d4f1f1880115893a3ac79447d GIT binary patch literal 1238 zcmeAS@N?(olHy`uVBq!ia0vp^bwHfP!3GjprV8S)C3(BMF#HF>1$&oI28wVNctjR6 zFmQK*Fr)d&(`$i(>?NMQuIzWX`9v*@emCtgV_;xO_H=O!skrrau5Z3{s7Tv_hkjt+Jeiqg~Uhfa97ZY zL$O5wMjTnZbb^2So{K-eyPC{4vON9B_>gY#JGnNs13F#&my{Q<9BDto-=H|b>mN@i z|0P|H{>GgKj2wq{JN{!RIB7p`hr)Bo)DOQ0EWLFxG{G*UQKEy-yna!_(tFap+?Q56h^Einy;S>7cOH{x zMPz^Lmte7W`@}ztZ`vkCZC?3aLR9y$@%OJBD;Pq}7KvJY^K-Lua5{c3Rk_O2XM$Hn zzvgG|X&+~Pn#VHHJLk4h_Q&ugF?LB@_aDAI=x*~Y`@sAIaT2e-a8LQTxU`BXV~$@L$_zrOuiDD*%6i^gYV z{crY%GnijH@W05OIsJXl_A^y`nXc@VUu&@8s^OCN_usScIpwxR$m*}x43}kR<|{ll zmi)0{m9val+B}9=f8^>9t*do7^{M6ZPS>mZpWZwu?!dm|eDmGCk*~kFUpEeP-E1hO zb2?|ijVbC0H35&Rzlm&rtS|ZL5~tmD&5zROdF_@xDtA8lzWpH2$#S`zh@UFGYh;!8 z%DCw&tIk^V=dWI!ZB=jC7e(9Z*CFmYpKZl2=SRr=oAB~ex@(oxujz~%CeOT)e6s)e zj_YbOf2Wpq&CGvjEM&HL`^(#}R`y#w5H-u4?3&lAaJK75;Ij8^uchQ-KGwomGDh8R&kUHm^n_d}_&mtJNRQY)-#kB|UxJ*`(%acQ^~PzQl9vJtLQFx4fhO z4W6^GZ?yT4_-OBo?Nc@G*^BQ&rd^^66)tw{v zflQX1O-X0$+uA4d@-jaC(J`u1*|&Vhvw0Uc>B)xI)ts>^WS4mN=g(KGz4IcsXD`uw zvD`#XH%-8`V(BB5&g*%1GW;)H{6GIk;7WOhXIp1QPudZ#)wcV{bH_cBQ%+aNR8P2f zzQTHDMYh>TH)URS=^w4!D|aUg&C{+iVf<$Ot8-gUzs^_5pKdbpQy3?D2c3JR=sV4C z`Q@OT&)$3E_Sb}+wk-6!{?X}C>k;lwaUp$`IFCIODkl1Wywz!2zr!eQDVVQ_t^lXN z^a_yF(Vp(>{8#7M`$(=2f*J|eVW}?nxitDf&FZUKnkhdI-7R0PxsNj@b8A$m(_HOK zZ{NP%y0UZq_1Ev2*Q{G-w>V<{`XKv7YbS6b=jAO1<;Qil$FJ3Y_5bwAulKcfSpR33 YzraJ{!0%62fh7=wr>mdKI;Vst0BX=iZU6uP literal 0 HcmV?d00001 diff --git a/core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_holo_light.9.png b/core/res/res/drawable-ldrtl-xhdpi/popup_inline_error_holo_light.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6c0203da995e2b03745ba2bedb5ab3c60778b582 GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0vp^bwHfP!3GjprV8S)C3(BMF#HF>1$&oI28wVNctjR6 zFmQK*Fr)d&(`$i(>?NMQuIzWX`9v)_gD0f~Gcd43dAc};RNQ(y*Ee4}RHSWwvF*0U z6FQWfu7n82YiXR2b_wAWQxLlw!1;oyQ&&hj>_hkj0c*3n8=W56E2vD^wB?78sLKjh z-$G}hN9#Yzi0$-i?-1DCdAjGb-KD!XAJ6=Jr})_&>%Qc7eKQNseK59*Tgmj|9fx9z zfD@c}^nd9T|MWdK|2%iy5@lq0`cd&A-ST&G?P>>fy816M2QW@jeiWR*kuu5N`O)H% z?nA-}dVUOxKIBcA&!qQLee#qiHqJ7i9h&VAZ@$Bu&%9wu?a9SA&uY~3pLiso&ay>E z)s9i>0MqSz`Ta(%A?c2 zbW-Iv+58cEY`#F)J#Fo@eaRu)dd}ay&K$rlwdJtX?r&*+Rt~+f)!k(kihdKSYWg)l zdr$kg^HW^6QuvS4VK;s9CKSG$p;n!GeMk&# zSIIkL!>04e`xB#Vb$icM&gGwVrT(${FQ3n}`+)7c_wUX|Ew|q_uTyJQ@5O}3Jm#az zY#1jW7P`M(eaFn2V-udsKPaBdW&hddmtE<8Vefwmd}$v0it7)bQqN3z%kuK7#k1m| zLn2S*OFl+FOx<>P_m{U{gJn0K3XeHqmtOg!blvIsqAw%g#0MqVn{PZmX?{=P`n6Br zP4CrA+jsQ*ijBhe5)xi7w@W(J{pJSW=^FWF6YWRtGw*d?H?`UGsM+FIbC-PTADayp zIjZ(y8@%eDerzua-TF>GU34C6RoUA6`zmt9q_^C9E3y39gQ7R7RXsoFC|N2puXZ?_ zT)F;Dsh8w}P4m916f5lFS$?+Sbmx3)o(J#hERRnAvPV5ZZ`$9D`3D&n^3G8{+k9Ma z<7)Sq*5%T(ZS1>yOMcW zZ};~*f7$i&{V!eoKmAAGN`J=NXN}(P`n~UnxL3{nxnCZz=T>dB`n}TVUX<>hn`a&! zy!5SL#>|;k2b(4q{&04aRlBpvcH5QbPi`NGjf}hU#$I54VHkgAUxBxxp2_rcS(fVO zURuR@?3qxZ_|fT6>k;lwaUuOK&A9&C=jGS+gs%khRM4gI2&jV98a{sX)jRDufAF!@ zSHK1$bhsY$JXUj8ZbQKO>)KqA4_|z#+PktdpE3N^*DBvaJ(0+zK{smzJ_^6Ryng+9 z`=t@${k^@t@yn-vRNf|