180 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.google.android.material.internal;
 | |
| 
 | |
| import android.os.Build;
 | |
| import android.text.Layout;
 | |
| import android.text.StaticLayout;
 | |
| import android.text.TextDirectionHeuristic;
 | |
| import android.text.TextDirectionHeuristics;
 | |
| import android.text.TextPaint;
 | |
| import android.text.TextUtils;
 | |
| import androidx.core.util.Preconditions;
 | |
| import java.lang.reflect.Constructor;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| final class StaticLayoutBuilderCompat {
 | |
|     static final int DEFAULT_HYPHENATION_FREQUENCY;
 | |
|     static final float DEFAULT_LINE_SPACING_ADD = 0.0f;
 | |
|     static final float DEFAULT_LINE_SPACING_MULTIPLIER = 1.0f;
 | |
|     private static final String TEXT_DIRS_CLASS = "android.text.TextDirectionHeuristics";
 | |
|     private static final String TEXT_DIR_CLASS = "android.text.TextDirectionHeuristic";
 | |
|     private static final String TEXT_DIR_CLASS_LTR = "LTR";
 | |
|     private static final String TEXT_DIR_CLASS_RTL = "RTL";
 | |
|     private static Constructor<StaticLayout> constructor;
 | |
|     private static boolean initialized;
 | |
|     private static Object textDirection;
 | |
|     private int end;
 | |
|     private boolean isRtl;
 | |
|     private final TextPaint paint;
 | |
|     private CharSequence source;
 | |
|     private StaticLayoutBuilderConfigurer staticLayoutBuilderConfigurer;
 | |
|     private final int width;
 | |
|     private int start = 0;
 | |
|     private Layout.Alignment alignment = Layout.Alignment.ALIGN_NORMAL;
 | |
|     private int maxLines = Integer.MAX_VALUE;
 | |
|     private float lineSpacingAdd = 0.0f;
 | |
|     private float lineSpacingMultiplier = 1.0f;
 | |
|     private int hyphenationFrequency = DEFAULT_HYPHENATION_FREQUENCY;
 | |
|     private boolean includePad = true;
 | |
|     private TextUtils.TruncateAt ellipsize = null;
 | |
| 
 | |
|     static {
 | |
|         DEFAULT_HYPHENATION_FREQUENCY = Build.VERSION.SDK_INT >= 23 ? 1 : 0;
 | |
|     }
 | |
| 
 | |
|     public StaticLayoutBuilderCompat setAlignment(Layout.Alignment alignment) {
 | |
|         this.alignment = alignment;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public StaticLayoutBuilderCompat setEllipsize(TextUtils.TruncateAt truncateAt) {
 | |
|         this.ellipsize = truncateAt;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public StaticLayoutBuilderCompat setEnd(int i) {
 | |
|         this.end = i;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public StaticLayoutBuilderCompat setHyphenationFrequency(int i) {
 | |
|         this.hyphenationFrequency = i;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public StaticLayoutBuilderCompat setIncludePad(boolean z) {
 | |
|         this.includePad = z;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public StaticLayoutBuilderCompat setIsRtl(boolean z) {
 | |
|         this.isRtl = z;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public StaticLayoutBuilderCompat setLineSpacing(float f, float f2) {
 | |
|         this.lineSpacingAdd = f;
 | |
|         this.lineSpacingMultiplier = f2;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public StaticLayoutBuilderCompat setMaxLines(int i) {
 | |
|         this.maxLines = i;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public StaticLayoutBuilderCompat setStart(int i) {
 | |
|         this.start = i;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     public StaticLayoutBuilderCompat setStaticLayoutBuilderConfigurer(StaticLayoutBuilderConfigurer staticLayoutBuilderConfigurer) {
 | |
|         this.staticLayoutBuilderConfigurer = staticLayoutBuilderConfigurer;
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     private StaticLayoutBuilderCompat(CharSequence charSequence, TextPaint textPaint, int i) {
 | |
|         this.source = charSequence;
 | |
|         this.paint = textPaint;
 | |
|         this.width = i;
 | |
|         this.end = charSequence.length();
 | |
|     }
 | |
| 
 | |
|     public static StaticLayoutBuilderCompat obtain(CharSequence charSequence, TextPaint textPaint, int i) {
 | |
|         return new StaticLayoutBuilderCompat(charSequence, textPaint, i);
 | |
|     }
 | |
| 
 | |
|     public StaticLayout build() throws StaticLayoutBuilderCompatException {
 | |
|         StaticLayout.Builder obtain;
 | |
|         TextDirectionHeuristic textDirectionHeuristic;
 | |
|         StaticLayout build;
 | |
|         if (this.source == null) {
 | |
|             this.source = "";
 | |
|         }
 | |
|         int max = Math.max(0, this.width);
 | |
|         CharSequence charSequence = this.source;
 | |
|         if (this.maxLines == 1) {
 | |
|             charSequence = TextUtils.ellipsize(charSequence, this.paint, max, this.ellipsize);
 | |
|         }
 | |
|         this.end = Math.min(charSequence.length(), this.end);
 | |
|         if (Build.VERSION.SDK_INT >= 23) {
 | |
|             if (this.isRtl && this.maxLines == 1) {
 | |
|                 this.alignment = Layout.Alignment.ALIGN_OPPOSITE;
 | |
|             }
 | |
|             obtain = StaticLayout.Builder.obtain(charSequence, this.start, this.end, this.paint, max);
 | |
|             obtain.setAlignment(this.alignment);
 | |
|             obtain.setIncludePad(this.includePad);
 | |
|             if (this.isRtl) {
 | |
|                 textDirectionHeuristic = TextDirectionHeuristics.RTL;
 | |
|             } else {
 | |
|                 textDirectionHeuristic = TextDirectionHeuristics.LTR;
 | |
|             }
 | |
|             obtain.setTextDirection(textDirectionHeuristic);
 | |
|             TextUtils.TruncateAt truncateAt = this.ellipsize;
 | |
|             if (truncateAt != null) {
 | |
|                 obtain.setEllipsize(truncateAt);
 | |
|             }
 | |
|             obtain.setMaxLines(this.maxLines);
 | |
|             float f = this.lineSpacingAdd;
 | |
|             if (f != 0.0f || this.lineSpacingMultiplier != 1.0f) {
 | |
|                 obtain.setLineSpacing(f, this.lineSpacingMultiplier);
 | |
|             }
 | |
|             if (this.maxLines > 1) {
 | |
|                 obtain.setHyphenationFrequency(this.hyphenationFrequency);
 | |
|             }
 | |
|             StaticLayoutBuilderConfigurer staticLayoutBuilderConfigurer = this.staticLayoutBuilderConfigurer;
 | |
|             if (staticLayoutBuilderConfigurer != null) {
 | |
|                 staticLayoutBuilderConfigurer.configure(obtain);
 | |
|             }
 | |
|             build = obtain.build();
 | |
|             return build;
 | |
|         }
 | |
|         createConstructorWithReflection();
 | |
|         try {
 | |
|             return (StaticLayout) ((Constructor) Preconditions.checkNotNull(constructor)).newInstance(charSequence, Integer.valueOf(this.start), Integer.valueOf(this.end), this.paint, Integer.valueOf(max), this.alignment, Preconditions.checkNotNull(textDirection), Float.valueOf(1.0f), Float.valueOf(0.0f), Boolean.valueOf(this.includePad), null, Integer.valueOf(max), Integer.valueOf(this.maxLines));
 | |
|         } catch (Exception e) {
 | |
|             throw new StaticLayoutBuilderCompatException(e);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void createConstructorWithReflection() throws StaticLayoutBuilderCompatException {
 | |
|         if (initialized) {
 | |
|             return;
 | |
|         }
 | |
|         try {
 | |
|             textDirection = this.isRtl && Build.VERSION.SDK_INT >= 23 ? TextDirectionHeuristics.RTL : TextDirectionHeuristics.LTR;
 | |
|             Constructor<StaticLayout> declaredConstructor = StaticLayout.class.getDeclaredConstructor(CharSequence.class, Integer.TYPE, Integer.TYPE, TextPaint.class, Integer.TYPE, Layout.Alignment.class, TextDirectionHeuristic.class, Float.TYPE, Float.TYPE, Boolean.TYPE, TextUtils.TruncateAt.class, Integer.TYPE, Integer.TYPE);
 | |
|             constructor = declaredConstructor;
 | |
|             declaredConstructor.setAccessible(true);
 | |
|             initialized = true;
 | |
|         } catch (Exception e) {
 | |
|             throw new StaticLayoutBuilderCompatException(e);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static class StaticLayoutBuilderCompatException extends Exception {
 | |
|         StaticLayoutBuilderCompatException(Throwable th) {
 | |
|             super("Error thrown initializing StaticLayout " + th.getMessage(), th);
 | |
|         }
 | |
|     }
 | |
| }
 |