public void hideToFromView() {
   if (vFrom != null) {
     AlphaAnimation animAlpha = new AlphaAnimation(1, 0);
     animAlpha.setDuration(AnimationDuration);
     vMask.startAnimation(animAlpha);
     int x = 0;
     int y = (screenHeight - statusBarHeight - screenWidth) / 2 + statusBarHeight;
     int[] location = new int[2];
     vFrom.getLocationInWindow(location);
     int toX = location[0];
     int toY = location[1];
     float scale = (float) vFrom.getWidth() / (float) UIUtil.getScreenWidth();
     ScaleAnimation animScale = new ScaleAnimation(1, scale, 1, scale);
     animScale.setDuration(AnimationDuration);
     TranslateAnimation animTrans = new TranslateAnimation(0, toX - x, 0, toY - y);
     animTrans.setDuration(AnimationDuration);
     AnimationSet animSet = new AnimationSet(true);
     animSet.addAnimation(animScale);
     animSet.addAnimation(animTrans);
     flImages.startAnimation(animSet);
     postDelayed(
         new Runnable() {
           @Override
           public void run() {
             setVisibility(View.GONE);
           }
         },
         AnimationDuration);
   } else {
     setVisibility(View.GONE);
   }
 }
 public void showPicFromPosition(
     final String content, final Bitmap placeHolder, final int x, final int y, final int width) {
   initView();
   setVisibility(View.VISIBLE);
   iv.setVisibility(View.INVISIBLE);
   ivPlaceHolder.setImageBitmap(placeHolder);
   final int size = Math.min(screenHeight, screenWidth);
   new Thread() {
     public void run() {
       final Bitmap bmp = Qr.bitmap(content, size);
       post(
           new Runnable() {
             @Override
             public void run() {
               iv.setImageBitmap(bmp);
               iv.setVisibility(View.VISIBLE);
             }
           });
     };
   }.start();
   AlphaAnimation animAlpha = new AlphaAnimation(0, 1);
   animAlpha.setDuration(AnimationDuration);
   vMask.startAnimation(animAlpha);
   int toX = 0;
   int toY = (screenHeight - statusBarHeight - screenWidth) / 2 + statusBarHeight;
   int toWidth = UIUtil.getScreenWidth();
   float scale = (float) width / (float) toWidth;
   ScaleAnimation animScale = new ScaleAnimation(scale, 1, scale, 1);
   animScale.setDuration(AnimationDuration);
   TranslateAnimation animTrans = new TranslateAnimation(x - toX, 0, y - toY, 0);
   animTrans.setDuration(AnimationDuration);
   AnimationSet animSet = new AnimationSet(true);
   animSet.setFillBefore(true);
   animSet.setDuration(AnimationDuration);
   animSet.addAnimation(animScale);
   animSet.addAnimation(animTrans);
   flImages.startAnimation(animSet);
 }
 private void configureTopBarSize() {
   int sideBarSize = UIUtil.getScreenWidth() / 3 - UIUtil.getScreenWidth() / 18;
   tbtnMessage.getLayoutParams().width = sideBarSize;
   tbtnMe.getLayoutParams().width = sideBarSize;
 }
 private void firstInit() {
   statusBarHeight = ImageManageUtil.getStatusBarHeight(BitherApplication.hotActivity.getWindow());
   screenHeight = UIUtil.getScreenHeight();
   screenWidth = UIUtil.getScreenWidth();
 }
public class DialogDonate extends CenterDialog implements OnDismissListener, OnShowListener {
  private static final int ListItemHeight = UIUtil.dip2pix(45);
  private static final int MinListHeight = UIUtil.dip2pix(100);
  private static final int MaxListHeight =
      Math.min(UIUtil.dip2pix(360), UIUtil.getScreenHeight() - UIUtil.dip2pix(70));

  private ListView lv;
  private ProgressBar pb;
  private TextView tvNoAddress;
  private FrameLayout fl;
  private ArrayList<AddressBalance> addresses = new ArrayList<AddressBalance>();
  private Intent intent;

  public DialogDonate(Context context) {
    super(context);
    setContentView(R.layout.dialog_donate);
    setOnDismissListener(this);
    setOnShowListener(this);
    tvNoAddress = (TextView) findViewById(R.id.tv_no_address);
    lv = (ListView) findViewById(R.id.lv);
    pb = (ProgressBar) findViewById(R.id.pb);
    fl = (FrameLayout) findViewById(R.id.fl);
    lv.setAdapter(adapter);
  }

  @Override
  public void onShow(DialogInterface dialog) {
    loadData();
  }

  @Override
  public void onDismiss(DialogInterface dialog) {
    if (intent != null) {
      if (getContext() instanceof Activity) {
        Activity a = (Activity) getContext();
        a.startActivityForResult(intent, SelectAddressToSendActivity.SEND_REQUEST_CODE);
      } else {
        getContext().startActivity(intent);
      }
    }
  }

  private void loadData() {
    pb.setVisibility(View.VISIBLE);
    lv.setVisibility(View.INVISIBLE);
    tvNoAddress.setVisibility(View.GONE);
    addresses.clear();
    new Thread() {
      public void run() {
        List<Address> as = AddressManager.getInstance().getAllAddresses();
        ArrayList<AddressBalance> availableAddresses = new ArrayList<AddressBalance>();
        for (Address a : as) {
          long balance = a.getBalance();
          if (balance > 0) {
            availableAddresses.add(new AddressBalance(a, balance));
          }
        }
        addresses.addAll(availableAddresses);
        lv.post(
            new Runnable() {
              @Override
              public void run() {
                fl.getLayoutParams().height = getFlHeight();
                adapter.notifyDataSetChanged();
                if (addresses.size() > 0) {
                  lv.setVisibility(View.VISIBLE);
                  tvNoAddress.setVisibility(View.GONE);
                } else {
                  lv.setVisibility(View.GONE);
                  tvNoAddress.setVisibility(View.VISIBLE);
                }
                pb.setVisibility(View.GONE);
              }
            });
      }
    }.start();
  }

  private BaseAdapter adapter =
      new BaseAdapter() {
        private LayoutInflater inflater;

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
          if (inflater == null) {
            inflater = LayoutInflater.from(getContext());
          }
          ViewHolder h;
          if (convertView != null
              && convertView.getTag() != null
              && convertView.getTag() instanceof ViewHolder) {
            h = (ViewHolder) convertView.getTag();
          } else {
            convertView = inflater.inflate(R.layout.list_item_select_address_to_send, null);
            h = new ViewHolder(convertView);
            convertView.setTag(h);
          }
          AddressBalance a = getItem(position);
          h.tvAddress.setText(a.address.getShortAddress());
          h.tvBalance.setText(GenericUtils.formatValueWithBold(a.balance));
          if (a.address.hasPrivKey()) {
            h.ivType.setImageResource(R.drawable.address_type_private);
          } else {
            h.ivType.setImageResource(R.drawable.address_type_watchonly);
          }
          h.ibtnAddressFull.setVisibility(View.GONE);
          convertView.setOnClickListener(new ListItemClick(a));
          return convertView;
        }

        @Override
        public long getItemId(int position) {
          return position;
        }

        @Override
        public AddressBalance getItem(int position) {
          return addresses.get(position);
        }

        @Override
        public int getCount() {
          return addresses.size();
        }

        class ViewHolder {
          TextView tvAddress;
          TextView tvBalance;
          ImageView ivType;
          ImageButton ibtnAddressFull;

          public ViewHolder(View v) {
            tvAddress = (TextView) v.findViewById(R.id.tv_address);
            tvBalance = (TextView) v.findViewById(R.id.tv_balance);
            ivType = (ImageView) v.findViewById(R.id.iv_type);
            ibtnAddressFull = (ImageButton) v.findViewById(R.id.ibtn_address_full);
            tvAddress.setTextColor(Color.WHITE);
            tvBalance.setTextColor(Color.WHITE);
          }
        }
      };

  private class ListItemClick implements View.OnClickListener {
    private AddressBalance address;

    public ListItemClick(AddressBalance address) {
      this.address = address;
    }

    @Override
    public void onClick(View v) {
      int position;
      Class<?> target;
      if (address.address.hasPrivKey()) {
        position = AddressManager.getInstance().getPrivKeyAddresses().indexOf(address.address);
        target = SendActivity.class;
      } else {
        position = AddressManager.getInstance().getWatchOnlyAddresses().indexOf(address.address);
        target = GenerateUnsignedTxActivity.class;
      }
      intent = new Intent(getContext(), target);
      intent.putExtra(BitherSetting.INTENT_REF.ADDRESS_POSITION_PASS_VALUE_TAG, position);
      intent.putExtra(
          SelectAddressToSendActivity.INTENT_EXTRA_ADDRESS, BitherSetting.DONATE_ADDRESS);
      if (address.balance > BitherSetting.DONATE_AMOUNT) {
        intent.putExtra(
            SelectAddressToSendActivity.INTENT_EXTRA_AMOUNT, BitherSetting.DONATE_AMOUNT);
      } else {
        intent.putExtra(SelectAddressToSendActivity.INTENT_EXTRA_AMOUNT, address.balance);
      }
      dismiss();
    }
  }

  private static final class AddressBalance implements Comparable<AddressBalance> {
    public Address address;
    public long balance;

    public AddressBalance(Address address, long balance) {
      this.address = address;
      this.balance = balance;
    }

    @Override
    public int compareTo(AddressBalance another) {
      if (address.hasPrivKey() && !another.address.hasPrivKey()) {
        return 1;
      }
      if (!address.hasPrivKey() && another.address.hasPrivKey()) {
        return -1;
      }
      long gap = balance - another.balance;
      return gap == 0 ? 0 : (int) (gap / Math.abs(gap));
    }
  }

  private int getFlHeight() {
    int listHeight =
        addresses.size() * ListItemHeight + (addresses.size() - 1) * lv.getDividerHeight();
    return Math.min(MaxListHeight, Math.max(listHeight, MinListHeight));
  }
}
 @Override
 public int getSuggestHeight() {
   return UIUtil.dip2pix(200);
 }
public class FancyQrCodeThread extends Thread {
  public static interface FancyQrCodeListener {
    public void generated(Bitmap bmp);
  }

  public static final float AvatarSizeRate = 0.24f;
  public static final int MarginSize = UIUtil.dip2pix(16);
  private FancyQrCodeListener listener;
  private String content;
  private int size;
  private int fgColor = Color.BLACK;
  private int bgColor = Color.WHITE;
  private boolean addAvatar;

  public FancyQrCodeThread(
      String content, int size, int fgColor, int bgColor, FancyQrCodeListener listener) {
    this(content, size, fgColor, bgColor, listener, true);
  }

  public FancyQrCodeThread(
      String content,
      int size,
      int fgColor,
      int bgColor,
      FancyQrCodeListener listener,
      boolean addAvatar) {
    this.content = content;
    this.listener = listener;
    this.size = size;
    this.fgColor = fgColor;
    this.bgColor = bgColor;
    this.addAvatar = addAvatar;
  }

  @Override
  public void run() {
    final Bitmap qrCode = Qr.bitmap(content, size, fgColor, bgColor, MarginSize);
    final int qrCodeSize = Math.min(qrCode.getWidth(), qrCode.getHeight());
    if (addAvatar && AppSharedPreference.getInstance().hasUserAvatar()) {
      ImageManageUtil.getAvatarForFancyQrCode(
          new IGetAvatarListener() {
            @Override
            public void success(Bitmap bit) {
              if (bit != null) {
                Canvas c = new Canvas(qrCode);
                int avatarSize = (int) (qrCodeSize * AvatarSizeRate);
                int avaterOffset = (qrCodeSize - avatarSize) / 2;
                Paint paint = new Paint();
                paint.setAntiAlias(true);
                c.drawBitmap(
                    bit,
                    null,
                    new Rect(
                        avaterOffset,
                        avaterOffset,
                        avaterOffset + avatarSize,
                        avaterOffset + avatarSize),
                    paint);
              }
            }

            @Override
            public void fileNoExist() {}
          });
    }

    if (listener != null) {
      ThreadUtil.runOnMainThread(
          new Runnable() {
            @Override
            public void run() {
              listener.generated(qrCode);
            }
          });
    }
  }
}