content: /*
   * Created by LuaView.
   * Copyright (c) 2017, Alibaba Group. All rights reserved.
   *
   * This source code is licensed under the MIT.
   * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
   */
  
  package com.taobao.luaview.userdata.ui;
  
  import android.annotation.TargetApi;
  import android.os.Build;
  import android.text.TextUtils;
  import android.widget.TextView;
  
  import com.taobao.luaview.util.TextUtil;
  import com.taobao.luaview.util.TypefaceUtil;
  
  import org.luaj.vm2.Globals;
  import org.luaj.vm2.LuaValue;
  import org.luaj.vm2.Varargs;
  
  /**
   * Label 数据封装
   *
   * @param <T>
   * @author song
   */
  public class UDTextView<T extends TextView> extends UDView<T> {
      private int mMaxLines = 1;
      private int mMinLines = 1;
      private int mTextAlignment = TextView.TEXT_ALIGNMENT_GRAVITY;
  
      public UDTextView(T view, Globals globals, LuaValue metatable, Varargs initParams) {
          super(view, globals, metatable, initParams);
      }
  
      /**
       * 设置显示文字
       *
       * @param text String
       */
      public UDTextView setText(CharSequence text) {
          final T view = getView();
          if (view != null) {
              view.setText(text);
          }
          return this;
      }
  
      /**
       * get text
       *
       * @return
       */
      public CharSequence getText() {
          return getView() != null ? getView().getText() : "";
      }
  
      /**
       * 设置显示文字颜色
       *
       * @param color int
       */
      public UDView setTextColor(Integer color) {
          if (color != null) {
              final T view = getView();
              if (view != null) {
                  view.setTextColor(color);
              }
          }
          return this;
      }
  
      /**
       * 获取文字颜色
       *
       * @return
       */
      public int getTextColor() {
          return getView() != null ? getView().getTextColors().getDefaultColor() : 0;
      }
  
      /**
       * 设置字体和大小
       *
       * @param fontName
       * @param fontSize
       * @return
       */
      public UDTextView setFont(String fontName, float fontSize) {
          setFont(fontName);
          setTextSize(fontSize);
          return this;
      }
  
      /**
       * 设置字体
       *
       * @param fontName
       * @return
       */
      public UDTextView setFont(String fontName) {
          if (fontName != null) {
              final T view = getView();
              if (view != null && getLuaResourceFinder() != null) {
                  view.setTypeface(getLuaResourceFinder().findTypeface(fontName));
              }
          }
          return this;
      }
  
      /**
       * 获取字体
       *
       * @return
       */
      public String getFont() {
          return getView() != null ? TypefaceUtil.getTypefaceName(getView().getTypeface()) : "";
      }
  
      /**
       * 设置字体
       *
       * @param textSize
       * @return
       */
      public UDTextView setTextSize(float textSize) {
          if (textSize > -1) {
              final T view = getView();
              if (view != null) {
                  view.setTextSize(textSize);
              }
          }
          return this;
      }
  
      /**
       * 获取文字大小
       *
       * @return
       */
      public float getTextSize() {
          return getView() != null ? getView().getTextSize() : 0f;
      }
  
  
      /**
       * 设置文字的对齐
       *
       * @param gravity
       * @return
       */
      public UDTextView setGravity(int gravity) {
          final T view = getView();
          if (gravity > 0 && view != null) {
              view.setGravity(gravity);
          }
          return this;
      }
  
      /**
       * 文字对齐
       *
       * @return
       */
      public int getGravity() {
          return getView() != null ? getView().getGravity() : -1;
      }
  
  
      /**
       * 设置文字的对齐
       *
       * @param gravity
       * @return
       */
      public UDTextView setTextAlign(int gravity) {
          return setGravity(gravity);
      }
  
      /**
       * 获得文字的对齐方式
       *
       * @return
       */
      public int getTextAlign() {
          return getGravity();
      }
  
  
      /**
       * 设置文字的绘制
       *
       * @param alignment
       * @return
       */
      @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
      public UDTextView setTextAlignment(int alignment) {
          mTextAlignment = alignment;
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
              final T view = getView();
              if (alignment > 0 && view != null) {
                  view.setTextAlignment(alignment);
              }
          }
          return this;
      }
  
      /**
       * 获得文字的对齐方式
       *
       * @return
       */
      @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
      public int getTextAlignment() {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
              return getView() != null ? getView().getTextAlignment() : TextView.TEXT_ALIGNMENT_GRAVITY;
          } else {
              return mTextAlignment;
          }
      }
  
      /**
       * 设置文字的行数
       *
       * @param lines
       * @return
       */
      public UDTextView setLines(int lines) {
          if (lines > 0) {
              final T view = getView();
              if (view != null) {
                  view.setLines(lines);
              }
          }
          return this;
      }
  
      /**
       * 获得行数
       *
       * @return
       */
      public int getLines() {
          return getView() != null ? getView().getLineCount() : 0;
      }
  
      /**
       * 设置文字的最小行数
       *
       * @param lines
       * @return
       */
      public UDTextView setMinLines(int lines) {
          if (lines > 0) {
              final T view = getView();
              if (view != null) {
                  mMinLines = lines;
                  view.setMinLines(lines);
              }
          }
          return this;
      }
  
      /**
       * 获得最小行数
       *
       * @return
       */
      @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
      public int getMinLines() {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
              return getView() != null ? getView().getMinLines() : 1;
          } else {
              return mMinLines;
          }
      }
  
      /**
       * 设置文字的最大行数
       *
       * @param lines
       * @return
       */
      public UDTextView setMaxLines(int lines) {
          final T view = getView();
          if (view != null) {
              this.mMaxLines = lines <= 0 ? Integer.MAX_VALUE : lines;
              view.setMaxLines(mMaxLines);
          }
  
          return this;
      }
  
      /**
       * 获得最大行数
       *
       * @return
       */
      @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
      public int getMaxLines() {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
              return getView() != null ? getView().getMaxLines() : 1;
          } else {
              return mMaxLines;
          }
      }
  
  
      /**
       * 设置超出部分的显示方式
       *
       * @param truncateAt
       * @return
       */
      public UDTextView setEllipsize(TextUtils.TruncateAt truncateAt) {
          final T view = getView();
          if (view != null) {
              view.setEllipsize(truncateAt);
          }
          return this;
      }
  
      public String getEllipsize() {
          return getView() != null ? getView().getEllipsize().name() : TextUtils.TruncateAt.END.name();
      }
  
      /**
       * 修改文字大小
       *
       * @return
       */
      public UDTextView adjustTextSize() {
          final T view = getView();
          if (view != null) {
              TextUtil.adjustTextSize(view);
          }
          return this;
      }
  
      /**
       * 修改文字的frame
       *
       * @return
       */
      @Override
      public UDTextView adjustSize() {
          final T view = getView();
          if (view != null) {
              TextUtil.adjustSize(view);
          }
          return this;
      }
  }
  