174 lines
6.1 KiB
Java
174 lines
6.1 KiB
Java
package androidx.core.text;
|
|
|
|
import java.nio.CharBuffer;
|
|
import java.util.Locale;
|
|
/* loaded from: classes.dex */
|
|
public final class TextDirectionHeuristicsCompat {
|
|
public static final TextDirectionHeuristicCompat FIRSTSTRONG_LTR;
|
|
public static final TextDirectionHeuristicCompat FIRSTSTRONG_RTL;
|
|
private static final int STATE_FALSE = 1;
|
|
private static final int STATE_TRUE = 0;
|
|
private static final int STATE_UNKNOWN = 2;
|
|
public static final TextDirectionHeuristicCompat LTR = new TextDirectionHeuristicInternal(null, false);
|
|
public static final TextDirectionHeuristicCompat RTL = new TextDirectionHeuristicInternal(null, true);
|
|
public static final TextDirectionHeuristicCompat ANYRTL_LTR = new TextDirectionHeuristicInternal(AnyStrong.INSTANCE_RTL, false);
|
|
public static final TextDirectionHeuristicCompat LOCALE = TextDirectionHeuristicLocale.INSTANCE;
|
|
|
|
/* loaded from: classes.dex */
|
|
public static class AnyStrong implements TextDirectionAlgorithm {
|
|
public static final AnyStrong INSTANCE_RTL = new AnyStrong(true);
|
|
private final boolean mLookForRtl;
|
|
|
|
private AnyStrong(boolean z2) {
|
|
this.mLookForRtl = z2;
|
|
}
|
|
|
|
@Override // androidx.core.text.TextDirectionHeuristicsCompat.TextDirectionAlgorithm
|
|
public int checkRtl(CharSequence charSequence, int i, int i2) {
|
|
int i3 = i2 + i;
|
|
boolean z2 = false;
|
|
while (i < i3) {
|
|
int isRtlText = TextDirectionHeuristicsCompat.isRtlText(Character.getDirectionality(charSequence.charAt(i)));
|
|
if (isRtlText != 0) {
|
|
if (isRtlText != 1) {
|
|
continue;
|
|
i++;
|
|
} else if (!this.mLookForRtl) {
|
|
return 1;
|
|
}
|
|
} else if (this.mLookForRtl) {
|
|
return 0;
|
|
}
|
|
z2 = true;
|
|
i++;
|
|
}
|
|
if (z2) {
|
|
return this.mLookForRtl ? 1 : 0;
|
|
}
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
public static class FirstStrong implements TextDirectionAlgorithm {
|
|
public static final FirstStrong INSTANCE = new FirstStrong();
|
|
|
|
private FirstStrong() {
|
|
}
|
|
|
|
@Override // androidx.core.text.TextDirectionHeuristicsCompat.TextDirectionAlgorithm
|
|
public int checkRtl(CharSequence charSequence, int i, int i2) {
|
|
int i3 = i2 + i;
|
|
int i4 = 2;
|
|
while (i < i3 && i4 == 2) {
|
|
i4 = TextDirectionHeuristicsCompat.isRtlTextOrFormat(Character.getDirectionality(charSequence.charAt(i)));
|
|
i++;
|
|
}
|
|
return i4;
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
public interface TextDirectionAlgorithm {
|
|
int checkRtl(CharSequence charSequence, int i, int i2);
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
public static abstract class TextDirectionHeuristicImpl implements TextDirectionHeuristicCompat {
|
|
private final TextDirectionAlgorithm mAlgorithm;
|
|
|
|
public TextDirectionHeuristicImpl(TextDirectionAlgorithm textDirectionAlgorithm) {
|
|
this.mAlgorithm = textDirectionAlgorithm;
|
|
}
|
|
|
|
private boolean doCheck(CharSequence charSequence, int i, int i2) {
|
|
int checkRtl = this.mAlgorithm.checkRtl(charSequence, i, i2);
|
|
if (checkRtl == 0) {
|
|
return true;
|
|
}
|
|
if (checkRtl != 1) {
|
|
return defaultIsRtl();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public abstract boolean defaultIsRtl();
|
|
|
|
@Override // androidx.core.text.TextDirectionHeuristicCompat
|
|
public boolean isRtl(CharSequence charSequence, int i, int i2) {
|
|
if (charSequence != null && i >= 0 && i2 >= 0 && charSequence.length() - i2 >= i) {
|
|
return this.mAlgorithm == null ? defaultIsRtl() : doCheck(charSequence, i, i2);
|
|
}
|
|
throw new IllegalArgumentException();
|
|
}
|
|
|
|
@Override // androidx.core.text.TextDirectionHeuristicCompat
|
|
public boolean isRtl(char[] cArr, int i, int i2) {
|
|
return isRtl(CharBuffer.wrap(cArr), i, i2);
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
public static class TextDirectionHeuristicInternal extends TextDirectionHeuristicImpl {
|
|
private final boolean mDefaultIsRtl;
|
|
|
|
public TextDirectionHeuristicInternal(TextDirectionAlgorithm textDirectionAlgorithm, boolean z2) {
|
|
super(textDirectionAlgorithm);
|
|
this.mDefaultIsRtl = z2;
|
|
}
|
|
|
|
@Override // androidx.core.text.TextDirectionHeuristicsCompat.TextDirectionHeuristicImpl
|
|
public boolean defaultIsRtl() {
|
|
return this.mDefaultIsRtl;
|
|
}
|
|
}
|
|
|
|
/* loaded from: classes.dex */
|
|
public static class TextDirectionHeuristicLocale extends TextDirectionHeuristicImpl {
|
|
public static final TextDirectionHeuristicLocale INSTANCE = new TextDirectionHeuristicLocale();
|
|
|
|
public TextDirectionHeuristicLocale() {
|
|
super(null);
|
|
}
|
|
|
|
@Override // androidx.core.text.TextDirectionHeuristicsCompat.TextDirectionHeuristicImpl
|
|
public boolean defaultIsRtl() {
|
|
return TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == 1;
|
|
}
|
|
}
|
|
|
|
static {
|
|
FirstStrong firstStrong = FirstStrong.INSTANCE;
|
|
FIRSTSTRONG_LTR = new TextDirectionHeuristicInternal(firstStrong, false);
|
|
FIRSTSTRONG_RTL = new TextDirectionHeuristicInternal(firstStrong, true);
|
|
}
|
|
|
|
private TextDirectionHeuristicsCompat() {
|
|
}
|
|
|
|
public static int isRtlText(int i) {
|
|
if (i != 0) {
|
|
return (i == 1 || i == 2) ? 0 : 2;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
public static int isRtlTextOrFormat(int i) {
|
|
if (i != 0) {
|
|
if (i == 1 || i == 2) {
|
|
return 0;
|
|
}
|
|
switch (i) {
|
|
case 14:
|
|
case 15:
|
|
break;
|
|
case 16:
|
|
case 17:
|
|
return 0;
|
|
default:
|
|
return 2;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
}
|