package com.kitty.poclient.util;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Looper;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.kitty.poclient.R;
import com.kitty.poclient.common.Constant;
import com.kitty.poclient.common.UpnpApp;
import com.kitty.poclient.common.WatchDog;
import com.kitty.poclient.domain.Music;
import com.kitty.poclient.http.HttpGetter;
import com.kitty.poclient.http.HttpPoster;
import com.kitty.poclient.thread.Pools;
import com.kitty.poclient.upnp.BoxControl;
import com.kitty.poclient.widget.StandardCustomDialog;
public class Buyer {
private static final String TAG = "Buyer";
private Context context;
private double balance;
private Music musicToBuy;
private StandardCustomDialog dialog = null;
public Buyer(Context context) {
this.context = context;
}
public Music getMusicToBuy() {
return musicToBuy;
}
public void setMusicToBuy(Music musicToBuy) {
this.musicToBuy = musicToBuy;
}
public void getBalanceNLanunchBuy() {
Pools.executorService1.submit(new Runnable() {
@Override
public void run() {
String json = new HttpGetter(context).getBalance();
balance = new JsonUtil().getBalance(json);
UpnpApp.mainHandler.post(new Runnable() {
@Override
public void run() {
launchWebBuy(musicToBuy);
}
});
}
});
}
private void launchWebBuy(Music musicToBuy) {
if (balance != -1L) {
String msg = musicToBuy.getName() + " \n价格:" + musicToBuy.getPrice() + "\t当前余额:" + balance + " 元\n\n确认购买吗?";
Log.e(TAG, "musicToBuy.getPrice()="+musicToBuy.getPrice());
Log.e(TAG, "musicToBuy.getId()="+musicToBuy.getId());
if (musicToBuy.getId() != -1 && Double.parseDouble(musicToBuy.getPrice()) != 0) {// Invalid double: ""
showPurchaseReassureDialog(Constant.ordertype_audio, msg);
} else if (musicToBuy.getId() != -1 && Double.parseDouble(musicToBuy.getPrice()) == 0) {
buy(Constant.ordertype_audio, musicToBuy.getId());
} else {
// CustomToast.makeText(context, "未能获取商品信息", Toast.LENGTH_SHORT).show();
UpnpApp.mainHandler.showAlert(R.string.get_commodity_info_failure);
}
balance = -1L;// 归零余额以备下一次查询
} else {
UpnpApp.mainHandler.showAlert(R.string.get_balance_failure);
}
}
private void showPurchaseReassureDialog(final String ordertype, String msg) {
clearDialog();
final StandardCustomDialog.Builder builder = new StandardCustomDialog.Builder(context);
builder.setTitle("确认购买");
builder.setMessage(msg);
builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showBuyingDialog();
buy(ordertype, musicToBuy.getId());
}
});
builder.setPositiveButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Buyer.this.dialog != null && Buyer.this.dialog.isShowing()) {
Buyer.this.dialog.dismiss();
}
}
});
try {
dialog = builder.create();
dialog.show();
} catch (Exception e) {
System.out.println("e=" + e);
e.printStackTrace();
}
}
private void clearDialog() {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
dialog = null;
}
}
private void showBuyingDialog() {
clearDialog();
final StandardCustomDialog.Builder builder = new StandardCustomDialog.Builder(context);
builder.setTitle("正在购买");
builder.setMessage(null);
AnimationDrawable ad = (AnimationDrawable) context.getResources().getDrawable(R.anim.animatior_searchbox_list);
String str = "正在购买...";
LinearLayout llContent = createDialogContent(ad, str);
builder.setContentView(llContent);
dialog = builder.create();
dialog.show();
}
protected LinearLayout createDialogContent(Drawable drawable, String str) {
LinearLayout llContent = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.common_dialog_content, null);
ImageView iv = (ImageView) llContent.findViewById(R.id.iv_common);
TextView tv = (TextView) llContent.findViewById(R.id.tv_common);
iv.setBackgroundDrawable(drawable);
if (drawable instanceof AnimationDrawable) {
((AnimationDrawable) drawable).start();
}
tv.setText(str);
return llContent;
}
protected void buy(final String ordertype, final long id) {
Pools.executorService1.submit(new Runnable() {
@Override
public void run() {
Looper.prepare();
String json = new HttpPoster().buyAlbumOrMusic(ordertype, id);
String resultcode = new JsonUtil().getOrderFeedback(json);
finishThisBuy(ordertype, id, resultcode);
Looper.loop();
}
});
}
protected void finishThisBuy(String ordertype, long id, String resultcode) {
Log.e(TAG, "resultcode="+resultcode);
if ("30".equals(resultcode)) {
// showBuyResultDialog("操作成功\n\n即将为您缓存曲目");
if (ordertype.equals(Constant.ordertype_album)) {
} else if (ordertype.equals(Constant.ordertype_audio)) {
WatchDog.purchasingMusics.put(id, 0);
WatchDog.hasNewBought = true;// 本地数据更新标记
new BoxControl().notifyBoxToSyn();
if (musicToBuy != null) {
musicToBuy.setPurchaseState("已购买");
musicToBuy = null;
}
}
} else if ("1".equals(resultcode)) {
// 提示余额不足
showBuyResultDialog("购买失败:余额不足");
} else if ("5".equals(resultcode)) {
// 提示已购买
showBuyResultDialog("购买失败:您已经购买了该商品");
if (ordertype.equals(Constant.ordertype_album)) {
} else if (ordertype.equals(Constant.ordertype_audio)) {
WatchDog.hasNewBought = true;// 本地数据更新标记
if (musicToBuy != null) {
musicToBuy.setPurchaseState("已购买");
musicToBuy = null;
}
}
} else if ("10".equals(resultcode)) {
// 不是在售商品
showBuyResultDialog("购买失败:不是在售商品");
} else if ("15".equals(resultcode)) {
// 绑定用户无效
showBuyResultDialog("购买失败:不是有效用户");
} else if ("20".equals(resultcode)) {
// 密码错误
showBuyResultDialog("购买失败:密码错误");
} else if ("25".equals(resultcode)) {
// 未知错误
showBuyResultDialog("购买失败:未知错误");
} else if ("-1".equals(resultcode)) {
// 通信失败
showBuyResultDialog("购买失败:通信失败");
}
WatchDog.currentListeningMusic = null;
}
private void showBuyResultDialog(String msg) {
Log.e(TAG, "showBuyResultDialog");
clearDialog();
final StandardCustomDialog.Builder builder = new StandardCustomDialog.Builder(context);
builder.setTitle("完成购买");
builder.setMessage(msg);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialog = builder.create();
dialog.show();
}
}