@SuppressLint("UseSparseArrays")
  public AlphabetWavesView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    final Resources res = context.getResources();

    TypedArray a =
        context.obtainStyledAttributes(attrs, R.styleable.AlphabetWavesView, defStyle, 0);
    mMaxOffset = a.getDimensionPixelSize(R.styleable.AlphabetWavesView_leMaxOffset, 54);
    mMoveCount = a.getInteger(R.styleable.AlphabetWavesView_leMoveCount, 7);
    mPopAnimTime = a.getInteger(R.styleable.AlphabetWavesView_lePopAnimTime, 120);

    mToastBg = a.getDrawable(R.styleable.AlphabetWavesView_leAlphabetToastBg);
    mSelectedBg = a.getDrawable(R.styleable.AlphabetWavesView_leSelectedBg);

    mToastOffset =
        a.getDimensionPixelSize(
            R.styleable.AlphabetWavesView_leToastOffset,
            res.getDimensionPixelSize(R.dimen.le_awv_toast_offset));
    mToastTextSize =
        a.getDimensionPixelSize(
            R.styleable.AlphabetWavesView_leToastTextSize,
            res.getDimensionPixelSize(R.dimen.le_awv_toast_text_size));
    mAlphabetTextSize =
        a.getDimensionPixelSize(
            R.styleable.AlphabetWavesView_leAlphabetTextSize,
            res.getDimensionPixelSize(R.dimen.le_awv_alphabet_text_size));
    mAlphabetMaxOffset =
        a.getDimensionPixelSize(
            R.styleable.AlphabetWavesView_leAlphabetMaxOffset,
            res.getDimensionPixelSize(R.dimen.le_awv_alphabet_max_offset));
    mPaddingTopBottom =
        a.getDimensionPixelSize(
            R.styleable.AlphabetWavesView_lePaddingTopBottom,
            res.getDimensionPixelSize(R.dimen.le_awv_padding_top_bottom));
    mAlphabetLeftMargin =
        a.getDimensionPixelSize(
            R.styleable.AlphabetWavesView_leAlphabetLeftMargin,
            res.getDimensionPixelSize(R.dimen.le_awv_alphabet_left_margin));
    a.recycle();

    if (mToastBg == null) {
      mToastBg = res.getDrawable(R.drawable.le_alphabet_toast_bg);
    }
    if (mSelectedBg == null) {
      mSelectedBg = res.getDrawable(R.drawable.le_alphabet_selected_bg);
    }

    mViewWidth = res.getDimensionPixelSize(R.dimen.le_awv_width);

    mHandler = new GestureHandler();
    mAlphabetList = new ArrayList<Alphabet>();
    mAnimMap = new HashMap<Integer, ValueAnimator>();

    mSelectedRect.set(0, 0, mSelectedBg.getIntrinsicWidth(), mSelectedBg.getIntrinsicHeight());
    isShowSelected = true;

    mPreviewImage = new ImageView(context);
    mPreviewImage.setMinimumWidth(mToastBg.getIntrinsicWidth());
    mPreviewImage.setMinimumHeight(mToastBg.getIntrinsicHeight());
    mPreviewImage.setBackground(mToastBg);
    mPreviewImage.setAlpha(0f);

    final int textMinSize = Math.max(0, mToastBg.getIntrinsicHeight() - 0);
    mPrimaryText = createPreviewTextView();
    mPrimaryText.setMinimumWidth(textMinSize);
    mPrimaryText.setMinimumHeight(textMinSize);

    mSecondaryText = createPreviewTextView();
    mSecondaryText.setMinimumWidth(textMinSize);
    mSecondaryText.setMinimumHeight(textMinSize);

    setGravity(Gravity.CENTER);
    setPadding(0, mPaddingTopBottom, 0, mPaddingTopBottom);
  }
  @Override
  public View onCreateView(
      LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mContentView = inflater.inflate(R.layout.fragment_read_reply, container, false);

    post = ParseObject.createWithoutData(Post.class, postId);
    post.fetchFromLocalDatastoreInBackground(
        new GetCallback<ParseObject>() {
          @Override
          public void done(ParseObject parseObject, ParseException e) {
            Log.e("", "post fetch from local done");
            if (e == null) {
              refresh("");
              if (adapter != null) {
                adapter.setPostId(post.getObjectId());
              } else if (data != null) {
                adapter = new ReplyAdapter(getActivity(), data);
                adapter.setPostId(post.getObjectId());
              } else {
                data = new ArrayList<>();
                adapter = new ReplyAdapter(getActivity(), data);
                adapter.setPostId(post.getObjectId());
              }
            }
          }
        });

    data = new ArrayList<>();
    adapter = new ReplyAdapter(getActivity(), data);
    holder = new ViewHolder();
    holder.lv_replies = (ListView) mContentView.findViewById(R.id.replies);
    holder.lv_replies.setAdapter(adapter);
    setListViewHeightBasedOnChildren(holder.lv_replies);

    LinearLayout ll = new LinearLayout(getActivity());
    LinearLayout.LayoutParams lp =
        new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            Gravity.CENTER);
    lp.setMargins(
        0, Util.convertDpToPixel(10, getActivity()), 0, Util.convertDpToPixel(10, getActivity()));
    ll.setLayoutParams(lp);
    ll.setOrientation(LinearLayout.HORIZONTAL);
    TextView tv = new TextView(getActivity());
    tv.setLayoutParams(
        new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    tv.setMinimumHeight(Util.convertDpToPixel(120, getActivity()));
    tv.setHint("  There is no reply!");
    tv.setGravity(Gravity.CENTER);

    ImageView imageView = new ImageView(getActivity());
    LinearLayout.LayoutParams lp1 =
        new LinearLayout.LayoutParams(
            Util.convertDpToPixel(135, getActivity()), Util.convertDpToPixel(100, getActivity()));
    imageView.setLayoutParams(lp1);
    imageView.setBackgroundResource(R.drawable.empty_box);
    imageView.setAdjustViewBounds(true);
    ll.addView(imageView);
    ll.addView(tv);

    holder.empty_Overlay = (FrameLayout) mContentView.findViewById(R.id.empty_layout);
    holder.empty_Overlay.addView(
        ll,
        new FrameLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            Gravity.CENTER));
    holder.empty_Overlay.setVisibility(View.INVISIBLE);
    holder.lv_replies.setEmptyView(holder.empty_Overlay);
    //        holder.lv_replies.setOnItemClickListener(new OnItemClickListener() {
    //
    //            @Override
    //            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    //                                    long arg3) {
    //
    //            }
    //        });

    return mContentView;
  }