package com.emop.client;
import java.util.List;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.view.Display;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import com.baidu.mobstat.StatService;
import com.emop.client.fragment.ShopSummaryFragment;
import com.emop.client.io.ApiResult;
import com.emop.client.io.FmeiClient;
import com.emop.client.provider.model.Item;
import com.emop.client.widget.DialogBuilder;
import com.emop.client.wxapi.DensityUtil;
import com.emop.client.wxapi.Util;
import com.taobao.top.android.TopAndroidClient;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.SendMessageToWX;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.tencent.mm.sdk.openapi.WXMediaMessage;
import com.tencent.mm.sdk.openapi.WXWebpageObject;
import com.tencent.mm.sdk.platformtools.Log;
public class TaokeItemDetailActivity extends BaseActivity {
private ProgressDialog loading = null;
private SimpleCursorAdapter adapter = null;
// private Cursor cursor = null;
private TextView taokeDesc = null;
private TextView taokePrice = null;
private ImageView taokePic = null;
private TextView favCountView = null;
private TextView volumeView = null;
private Button myFavBtn = null;
//recent_volme_info
private String shortKey = null;
private String weiboId = null;
private String shopId = null;
private String numId = null;
private String picUrl = null;
private String text = null;
private String price = null;
private String volume = null;
private String favCount = null;
private boolean isFav = false;
private int curId = 0;
private ProgressBar progress = null;
private Dialog taobaoLoginDialog = null;
private static long lastShowTaoboLogin = 0;
/*
* 用于在短地址跳转的时候,是否需要再次转换为移到设备连接。
* 如果已经是手机里面的链接,就不需要再次转换。
*/
private boolean fromMobile = false;
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.taoke_item_detail);
taokeDesc = (TextView) findViewById(R.id.taoke_message);
taokePrice = (TextView) findViewById(R.id.taoke_price);
taokePic = (ImageView) findViewById(R.id.taoke_pic);
favCountView = (TextView) findViewById(R.id.fav_count);
volumeView = (TextView) findViewById(R.id.recent_volme_info);
myFavBtn = (Button) findViewById(R.id.nav_btn_myfav);
favCountView.setText("0");
volumeView.setText("最近销量0件");
taokeDesc.setText("加载中...");
taokePrice.setText("0");
taokePic.setImageResource(R.drawable.loading);
progress = (ProgressBar) findViewById(R.id.progressbar_loading);
progress.setIndeterminate(true);
client = FmeiClient.getInstance(this.getApplicationContext(), false);
TextView v = (TextView)findViewById(R.id.nav_btn_myfav);
v.setOnClickListener(navListener);
v = (TextView)findViewById(R.id.nav_btn_share);
v.setOnClickListener(navListener);
v = (TextView)findViewById(R.id.nav_btn_friends);
v.setOnClickListener(navListener);
if(taokePic != null && false){
taokePic.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
Intent intent = new Intent().setClass(TaokeItemDetailActivity.this,
TaokeItemImageActivity.class);
intent.setData(getIntent().getData());
startActivity(intent);
}
});
}
View picFrame = findViewById(R.id.taoke_pic_frame);
if(picFrame != null){
LayoutParams lp = picFrame.getLayoutParams();
if(lp != null){
Rect displayRectangle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);
int height = displayRectangle.height();
int paddingHeight = DensityUtil.dip2px(this, 244);
if(height > paddingHeight){
height -= paddingHeight;
}
lp.height = height;
Log.d("emop", "update pic height to:" + lp.height);
}else {
Log.d("emop", "no layout params in detail picture.");
}
}
}
private BitmapDrawable createRepeater(int width, int height){
Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.detail_info_bg);
Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
Paint mPaint = new Paint();
mPaint.setColor(getResources().getColor(R.color.color_hot_item));
mPaint.setStrokeWidth(2);
int count = (width + src.getWidth() - 1) / src.getWidth();
int bgheight = height - src.getHeight();
if(bgheight < 0) bgheight = 0;
for(int idx = 0; idx < count; ++ idx){
canvas.drawBitmap(src, idx * src.getWidth(), bgheight, null);
}
canvas.drawLine(0, 0, 0, height, mPaint);
canvas.drawLine(width-2, 0, width-2, height, mPaint);
BitmapDrawable bd = new BitmapDrawable(bitmap);
return bd;
}
protected void onResume (){
super.onResume();
if(loading != null && loading.isShowing()){
loading.dismiss();
}
/*
handler.postDelayed(new Runnable(){
public void run(){
View info = findViewById(R.id.taoke_info);
if(info.getMeasuredHeight() > 0){
info.setBackgroundDrawable(createRepeater(info.getMeasuredWidth(), info.getMeasuredHeight()));
}
}
}, 100);
*/
myFavBtn.setPressed(isFav);
Intent intent = this.getIntent();
Uri dataUri = intent.getData();
if(dataUri != null && weiboId == null){
if(!intent.getBooleanExtra("FromWeb", false)){
fromMobile = true;
String[] projection = new String[]{BaseColumns._ID, Item.PIC_URL,
Item.MESSAGE, Item.PRICE, Item.SHORT_KEY,
Item.WEIBO_ID, Item.NUM_IID, Item.SHOP_ID,
};
Cursor cursor = getContentResolver().query(dataUri, projection, null, null, null);
if(cursor != null && cursor.getCount() > 0){
initLayout(cursor);
}
if(cursor != null){
cursor.close();
}
}else if(intent.getStringExtra("uuid") != null){
progress.setVisibility(View.VISIBLE);
fromMobile = true;
new DetailLoadTask(intent.getStringExtra("uuid"), true).start();
}else {
progress.setVisibility(View.VISIBLE);
fromMobile = false;
new DetailLoadTask(null, true).start();
}
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
weiboId = null;
}
protected void onStop(){
super.onStop();
}
public void onFinish(View v){
finish();
}
public void onClickGoBuy(View v){
/*
if(!checkTaobaoLogin()) {
return;
}*/
goBuy();
}
private void goBuy(){
StatService.onEvent(this, "go_taobao", numId + "_" + shortKey + "_" + client.userId, 1);
String url = "http://c.emop.cn/c/" + shortKey + "?from=app";
if(fromMobile){
url += "&auto_mobile=n";
}else {
url += "&auto_mobile=y";
}
Intent intent = new Intent().setClass(this, WebViewActivity.class);
intent.putExtra("http_url", url);
intent.putExtra("taoke_num_iid", numId);
this.startActivity(intent);
}
private void showShop(String shopId, String numIId){
ShopSummaryFragment shop = (ShopSummaryFragment)getSupportFragmentManager().findFragmentById(R.id.shop_summary);
if(shop != null){
shop.loadShop(shopId, numIId);
}
}
private boolean checkTaobaoLogin(){
String u = client.getSettings(Constants.PREFS_TAOBAO_UID);
if(u == null || u.trim().length() == 0){
if(taobaoLoginDialog == null){
taobaoLoginDialog = DialogBuilder.showTaobaoLogin(this, new OnClickListener(){
@Override
public void onClick(View v) {
if(v.getId() == R.id.login_now){
TopAndroidClient topClient = TopAndroidClient.getAndroidClientByAppKey(Constants.TAOBAO_APPID);
if(topClient != null){
String authLink = topClient.getAuthorizeLink();
Intent intent = new Intent().setClass(TaokeItemDetailActivity.this,
WebViewActivity.class);
Log.d(Constants.TAG_EMOP, "taobao auth link:" + authLink);
intent.putExtra("http_url", authLink);
intent.putExtra("title", "淘宝登陆");
intent.putExtra("taobaoLogin", true);
startActivity(intent);
}else {
showToast("啊哦,网速不给力啊~");
}
}else {
goBuy();
}
taobaoLoginDialog.dismiss();
}
});
}
if(System.currentTimeMillis() - lastShowTaoboLogin > 1000 * 120 && taobaoLoginDialog != null){
lastShowTaoboLogin = System.currentTimeMillis();
taobaoLoginDialog.show();
return false;
}else {
Log.d("xx", "taobaoLoginDialog is null");
}
}else {
Log.d("xx", "taobaoLoginDialog uid:" + u);
}
return true;
}
public void onClickAddFavorite(View v){
if(client.isLogined()){
if(this.weiboId != null && this.weiboId.length() > 0){
new Thread(){
public void run(){
ApiResult r = null;
String msg = "";
if(isFav){
r = client.removeFavorite(weiboId);
msg = "取消收藏";
MyFavoriteActivity.removedList.add(curId);
}else {
r = client.addFavorite(weiboId, text, picUrl, numId, shopId, shortKey);
msg = "添加收藏";
}
isFav = !isFav;
if(r == null){
msg += "失败";
}else if(r.isOK){
msg += "成功";
}else if(!r.isOK){
msg += "失败, 原因:" + r.errorMsg();
}
showToast(msg);
handler.post(new Runnable(){
public void run(){
if(isFav){
myFavBtn.setText("已收藏");
}else {
myFavBtn.setText("收藏");
}
myFavBtn.setPressed(isFav);
}
});
}
}.start();
}else {
showToast("不能收藏来自网页的内容");
}
}else {
Intent intent = new Intent();
intent.setClass(this, LoginActivity.class);
this.startActivity(intent);
}
}
protected void initLayout(Cursor cursor){
if(cursor != null && cursor.moveToFirst()){
int index = cursor.getColumnIndex(Item.PRICE);
float price = cursor.getFloat(index);
String text = String.format("¥%1$1.2f", price);
this.taokePrice.setText(text);
index = cursor.getColumnIndex(Item.MESSAGE);
text = cursor.getString(index);
this.text = text;
if(text != null && text.trim().length() > 0){
this.taokeDesc.setText(text);
}
index = cursor.getColumnIndex(Item.SHORT_KEY);
this.shortKey = cursor.getString(index);
index = cursor.getColumnIndex(Item.NUM_IID);
text = cursor.getString(index);
this.numId = text;
index = cursor.getColumnIndex(Item.SHOP_ID);
text = cursor.getString(index);
this.shopId = text;
showShop(shopId, numId);
index = cursor.getColumnIndex(Item.WEIBO_ID);
text = cursor.getString(index);
this.weiboId = text;
index = cursor.getColumnIndex(Item.PIC_URL);
text = cursor.getString(index);
this.picUrl = text;
loadPicUrl(text);
index = cursor.getColumnIndex(BaseColumns._ID);
curId = cursor.getInt(index);
new DetailLoadTask("taodianhuo_" + weiboId + "_" + shortKey, false).start();
}
}
private void loadPicUrl(String text){
Display display = null;
display = getWindowManager().getDefaultDisplay();
Bitmap bm = client.tmpImgLoader.cache.get(text, display.getWidth(), true, false);
if(bm != null && !bm.isRecycled()){
progress.setVisibility(View.GONE);
taokePic.setImageBitmap(bm);
}else {
progress.setVisibility(View.VISIBLE);
taokePic.setImageResource(R.drawable.loading);
final String picUrl = text;
final int disWidth = display.getWidth();
client.tmpImgLoader.runTask(new Runnable(){
@Override
public void run() {
final Bitmap bm = client.tmpImgLoader.cache.get(picUrl, disWidth, true,true);
handler.post(new Runnable(){
@Override
public void run() {
progress.setVisibility(View.GONE);
if(bm != null){
taokePic.setImageBitmap(bm);
}
}});
}
});
}
}
private OnClickListener navListener = new OnClickListener(){
@Override
public void onClick(View v) {
if(v.getId() == R.id.nav_btn_myfav){
onClickAddFavorite(v);
}else if(v.getId() == R.id.nav_btn_share){
onShareToWeibo(v);
}else if(v.getId() == R.id.nav_btn_friends){
onShareToWX(v);
}
}
};
public void onShareToWeibo(View v){
String trackId = "0";
if(client.trackUserId != null && client.trackUserId.trim().length() > 0){
trackId = client.trackUserId;
}
String link = String.format(Constants.WEB_LINK, trackId, weiboId, shortKey);
StatService.onEvent(TaokeItemDetailActivity.this, "share_to_wx", numId + "_" + shortKey + "_" + client.userId, 1);
Intent intent = new Intent();
intent.setClass(this, ShareToWeiboActivity.class);
intent.putExtra("text", text);
intent.putExtra("link", link);
intent.putExtra("picUrl", this.picUrl);
startActivity(intent);
}
public void onShareToWX(View v){
if(api == null){
api = WXAPIFactory.createWXAPI(this, com.emop.client.wxapi.Constants.APP_ID,
false);
}
if(weiboId == null){
showToast("不能分享来自外部应用商品.");
return;
}
if(!api.isWXAppInstalled() || !api.isWXAppSupportAPI()){
showToast("没有安装微信应用,不能分享到朋友圈.");
return;
}
if(loading == null){
loading = new ProgressDialog(this);
loading.requestWindowFeature(Window.FEATURE_NO_TITLE);
}
loading.setMessage("正在加载微信...");
loading.show();
String trackId = "0";
if(client.trackUserId != null && client.trackUserId.trim().length() > 0){
trackId = client.trackUserId;
}
String imageURL = String.format(Constants.WEB_LINK, trackId, weiboId, shortKey);
try{
//WXImageObject imgObj = new WXImageObject();
//imgObj.imageUrl = imageURL;
WXWebpageObject webObj = new WXWebpageObject(imageURL);
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = webObj;
msg.title = "亲,帮忙给点建议";
msg.description = text;
msg.thumbData = getThumbData(taokePic);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
if(api.sendReq(req)){
StatService.onEvent(TaokeItemDetailActivity.this, "share_to_wx", numId + "_" + shortKey + "_" + client.userId, 1);
}else {
showToast("微信分享失败,确认微信已经打开。");
}
} catch(Exception e) {
e.printStackTrace();
}
}
private byte[] getThumbData(View v){
//v.setDrawingCacheEnabled(true);
//Bitmap bmp = Bitmap.createBitmap(v.getDrawingCache());
//v.setDrawingCacheEnabled(false);
Display display = getWindowManager().getDefaultDisplay();
final int disWidth = display.getWidth();
Bitmap bmp = client.tmpImgLoader.cache.get(this.picUrl, disWidth, true,true);
int w = bmp.getWidth(), h = bmp.getHeight();
double rate = 200 * 1.0 / w;
rate = rate > 0.5 ? rate : 0.5;
w = (int)(w * rate);
h = (int)(h * rate);
bmp = Bitmap.createScaledBitmap(bmp, w, h, true);
int maxSize = 1024 * 32;
byte[] buffer = null;
buffer = Util.bmpToByteArray(bmp, false, 95);
//double rate = 1;
Bitmap thumbBmp = null;
while(buffer.length > maxSize){
rate = Math.sqrt(maxSize * 1.0f / buffer.length);
Log.d(Constants.TAG_EMOP, "cureate image size:" + buffer.length + ", scaled rate:" + rate);
w = (int)(w * rate);
h = (int)(h * rate);
thumbBmp = bmp;
bmp = Bitmap.createScaledBitmap(bmp, w, h, true);
thumbBmp.recycle();
buffer = Util.bmpToByteArray(bmp, false, 95);
}
bmp.recycle();
Log.d(Constants.TAG_EMOP, "final image size:" + buffer.length + ", w:" + w + ", h:" + h);
return buffer;
}
private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
class DetailLoadTask extends Thread{
String uuid = null;
boolean loadPic = true;
DetailLoadTask(String uuid, boolean loadPic){
this.uuid = uuid;
this.loadPic = loadPic;
}
public void run(){
Uri dataUri = getIntent().getData();
if(uuid == null){
List<String> seg = dataUri.getPathSegments();
if(seg.size() >= 2){
uuid = seg.get(1);
}
}
if(uuid == null)return;
Log.d(Constants.TAG_EMOP, "load weibo with uuid:" + uuid + ", uri:" + dataUri.toString());
final ApiResult r = client.getWeiboInfo(uuid);
if(r != null && r.isOK){
text = r.getString("data.message");
shortKey = r.getString("data.short_url_key");
weiboId = r.getString("data.lib_id");
numId = r.getString("data.num_iid");
price = r.getString("data.price");
picUrl = r.getString("data.pic_url");
volume = r.getString("data.volume");
favCount = r.getString("data.fav_count");
isFav = (r.getString("data.is_fav") + "").equals("1");
handler.post(new Runnable(){
public void run(){
if(text != null){
taokeDesc.setText(text);
}
if(price != null){
price = String.format("¥%1$1.2f", Float.parseFloat(price));
taokePrice.setText(price);
}
if(favCount != null){
favCountView.setText(favCount);
}
if(volume != null){
volumeView.setText("最近销量" + volume + "件");
}
if(isFav){
myFavBtn.setText("已收藏");
}else {
myFavBtn.setText("收藏");
}
myFavBtn.setPressed(isFav);
if(loadPic){
loadPicUrl(picUrl);
}
}
});
}else if(loadPic){
Log.d(Constants.TAG_EMOP, "failed to load weibo with uuid:" + uuid + ", uri:" + dataUri.toString());
handler.post(new Runnable(){
public void run(){
String error = "";
if(r != null){
error = "啊哦,网速不给力啊~";
}else {
error = "啊哦,网速不给力啊~";
}
showToast(error);
finish();
}
});
}
}
}
}