package com.emop.client.fragment; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.provider.SyncStateContract.Columns; import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; import com.baidu.mobstat.StatService; import com.emop.client.Constants; import com.emop.client.LoginActivity; import com.emop.client.MyFavoriteActivity; import com.emop.client.R; import com.emop.client.ShareToWeiboActivity; import com.emop.client.WebViewActivity; import com.emop.client.io.ApiResult; import com.emop.client.io.FmeiClient; import com.emop.client.provider.Schema; import com.emop.client.provider.model.Shop; import com.emop.client.wxapi.Util; 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; public class ItemActionBar extends Fragment { private View root = null; private boolean fromMobile = false; private String shortKey = ""; private String logoPic = ""; private String title = ""; protected Handler handler = new Handler(); private Button myFavBtn = null; private boolean isFav = true; private String shopId = ""; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState){ root = inflater.inflate(R.layout.item_action_bar, container, false); myFavBtn = (Button) root.findViewById(R.id.nav_btn_myfav); View v = root.findViewById(R.id.nav_btn_buy); v.setOnClickListener(clickListener); myFavBtn.setOnClickListener(clickListener); v = root.findViewById(R.id.nav_btn_friends); v.setOnClickListener(clickListener); v = root.findViewById(R.id.nav_btn_share); v.setOnClickListener(clickListener); return root; } public void onActivityCreated(Bundle savedState){ super.onActivityCreated(savedState); shopId = this.getActivity().getIntent().getStringExtra("shop_id"); if(shopId != null){ getLoaderManager().initLoader(0, null, new LoaderCallbacks<Cursor>() { @Override public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { Uri dataUri = Uri.parse("content://" + Schema.AUTHORITY + "/shop/" + shopId); return new CursorLoader(getActivity(), dataUri, new String[] {Columns._ID, Shop.SHOP_ID, Shop.SHORT_KEY, Shop.SHOP_LOGO, Shop.SHOP_TITLE }, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { Log.d("xx", "onLoad finishied, count:" + cursor.getCount()); if(cursor.getCount() > 0){ showShopInfo(cursor); } } @Override public void onLoaderReset(Loader<Cursor> arg0) { //adapter.swapCursor(null); } } ); } } private void showShopInfo(Cursor cursor){ cursor.moveToFirst(); int shortKeyIndex = cursor.getColumnIndex(Shop.SHORT_KEY); shortKey = cursor.getString(shortKeyIndex); shortKeyIndex = cursor.getColumnIndex(Shop.SHOP_LOGO); logoPic = cursor.getString(shortKeyIndex); shortKeyIndex = cursor.getColumnIndex(Shop.SHOP_TITLE); title = cursor.getString(shortKeyIndex); Log.d("emop", "short index:" + shortKeyIndex + ", short key:" + shortKey); } protected OnClickListener clickListener = new OnClickListener(){ @Override public void onClick(View v) { if(v.getId() == R.id.nav_btn_buy){ goBuy(); }else 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 goBuy(){ if(shortKey != null && shortKey.length() > 0){ String url = "http://c.emop.cn/c/" + shortKey + "?from=app"; if(fromMobile){ url += "&auto_mobile=n"; }else { url += "&auto_mobile=y"; } StatService.onEvent(getActivity(), "go_shop", shopId + "_" + shortKey, 1); Intent intent = new Intent().setClass(getActivity(), WebViewActivity.class); intent.putExtra("http_url", url); this.startActivity(intent); }else { showToast("链接出错无法购买。"); } } public void onClickAddFavorite(View v){ final FmeiClient client = FmeiClient.getInstance(getActivity(), false); final String weiboId = ""; if(client.isLogined()){ if(true){ new Thread(){ public void run(){ ApiResult r = null; String msg = ""; if(isFav){ r = client.removeFavorite(weiboId); msg = "取消收藏"; MyFavoriteActivity.removedList.add(0); }else { r = client.addFavorite(shopId, title, logoPic, "0", shopId, shortKey, "shop"); 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(getActivity(), LoginActivity.class); this.startActivity(intent); } } public void onShareToWeibo(View v){ String trackId = "0"; FmeiClient client = FmeiClient.getInstance(null); if(client.trackUserId != null && client.trackUserId.trim().length() > 0){ trackId = client.trackUserId; } String link = String.format(Constants.WEB_SHOP_LINK, trackId, shopId, shortKey); Intent intent = new Intent(); intent.setClass(getActivity(), ShareToWeiboActivity.class); intent.putExtra("text", title); intent.putExtra("link", link); intent.putExtra("picUrl", logoPic); startActivity(intent); } public void onShareToWX(View v){ FmeiClient client = FmeiClient.getInstance(null); IWXAPI api = WXAPIFactory.createWXAPI(getActivity(), com.emop.client.wxapi.Constants.APP_ID, false); if(api.isWXAppInstalled() && api.isWXAppSupportAPI()){ String trackId = "0"; if(client.trackUserId != null && client.trackUserId.trim().length() > 0){ trackId = client.trackUserId; } String imageURL = String.format(Constants.WEB_SHOP_LINK, trackId, shopId, shortKey); try{ WXWebpageObject webObj = new WXWebpageObject(imageURL); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = webObj; msg.title = "推荐你一个好店"; msg.description = title; msg.thumbData = getThumbData(); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img"); req.message = msg; api.sendReq(req); Log.i(Constants.TAG_EMOP, "sendReq"); } catch(Exception e) { e.printStackTrace(); } }else { showToast("没有安装微信应用,不能分享到朋友圈."); } } protected void showToast(final String msg){ handler.post(new Runnable(){ public void run(){ Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show(); } }); } private byte[] getThumbData(){ FmeiClient client = FmeiClient.getInstance(null); Bitmap bmp = client.tmpImgLoader.cache.get(logoPic, 0, false,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(); } }