|
package ai.pai.client.activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.android.common.executors.ThreadExecutor;
import com.android.common.utils.DeviceUtils;
import com.android.common.utils.JSONParseUtils;
import com.android.common.utils.LogHelper;
import com.android.common.utils.NetworkUtil;
import com.android.common.utils.TimeUtils;
import com.android.views.popup.InputMethodUtils;
import com.android.views.roundrect.RoundedImageView;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.modelpay.PayReq;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.umeng.analytics.MobclickAgent;
import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import ai.pai.client.R;
import ai.pai.client.adapter.CommentListAdapter;
import ai.pai.client.adapter.DetailPhotoPageAdapter;
import ai.pai.client.beans.CommentBean;
import ai.pai.client.beans.GroupInfo;
import ai.pai.client.beans.GroupPhotoItem;
import ai.pai.client.db.DBService;
import ai.pai.client.db.Preferences;
import ai.pai.client.utils.GroupCreateUtils;
import ai.pai.client.utils.HttpPostTask;
import ai.pai.client.utils.PhotoLoader;
import ai.pai.client.utils.SystemUtils;
import ai.pai.client.utils.UmengEvent;
import ai.pai.client.utils.UrlContainer;
import ai.pai.client.views.CountView;
import ai.pai.client.views.InputPopup;
import ai.pai.client.views.NestedListView;
import ai.pai.client.views.PhotoSharePopup;
import ai.pai.client.wxapi.PayListenerManager;
import ai.pai.client.wxapi.PayResultListener;
public class PhotoDetailsActivity extends BaseActivity implements View.OnClickListener,ViewPager.OnPageChangeListener,PayResultListener {
private ImageView groupAvatarImg;
private TextView groupNameText;
private ViewPager photoPager;
private DetailPhotoPageAdapter photoPageAdapter;
private ImageView uploaderAvatarImg;
private TextView uploaderNameText;
private TextView uploadTimeText;
private TextView photoCommentText;
private TextView photoThumbupText;
private View groupInfoLayout;
private View uploaderInfoLayout;
private ImageView thumbArrowImg;
private ImageView commentArrowImg;
private LinearLayout thumbAvatarsLayout;
private NestedListView commentListView;
private View bottomLayout;
private View functionalPanel;
private View getHDPhotoLayout;
private View bottomLayoutForPaid;
private CountView buyHDPhotoTextView;
private View getWipeWaterPrintLayout;
private CountView buyWipeWaterPrintTextView;
private TextView getHDPhotoText;
private TextView getWipeWaterPrintText;
private View hdWrapperLayout;
private UMShareAPI mShareAPI;
private PhotoSharePopup sharePop;
private InputPopup inputPopup;
private HttpPostTask fetchThumbUpListTask;
private HttpPostTask fetchCommentListTask;
private HttpPostTask submitCommentTask;
private HttpPostTask submitThumbUpTask;
private HttpPostTask wxPayTask;
private HttpPostTask getPriceTask;
private HttpPostTask checkOrderTask;
private HttpPostTask getPhotoOrderInfoTask;
private HttpPostTask fetchPhotosTask;
private ArrayList<GroupPhotoItem> photoList;
private GroupPhotoItem currentPhotoItem;
private IWXAPI wxAPI;
private boolean fromGroupPage;
private String orderId;
private boolean isPayListenerRegistered;
private static final String PAY_TYPE_NO_MARK = "nomark";
private static final String PAY_TYPE_ORIGIN = "origin";
private static final String APP_ID = "wx4e22a0c8ae6d766d";
private int currentGroupPhotoId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo_details);
SystemUtils.setImmerseLayout(this, findViewById(R.id.title_layout));
currentPhotoItem = (GroupPhotoItem) getIntent().getSerializableExtra("photo_item");
if (currentPhotoItem == null) {
finish();
return;
}
if(getIntent().getSerializableExtra("list")!=null){
photoList = (ArrayList<GroupPhotoItem>)getIntent().getSerializableExtra("list");
}
if(photoList==null){
photoList = new ArrayList<>();
photoList.add(currentPhotoItem);
}
fromGroupPage = getIntent().getBooleanExtra("fromGroup",false);
if(fromGroupPage){
currentGroupPhotoId= DBService.getInstance(this).getCurrentIdByGroupId(currentPhotoItem.groupId);
}
if(photoList.size()>=300){
currentGroupPhotoId = 0;
}
initViews();
photoPageAdapter = new DetailPhotoPageAdapter(this,photoList);
photoPager.setAdapter(photoPageAdapter);
photoPageAdapter.setFromGroup(fromGroupPage);
photoPager.addOnPageChangeListener(this);
photoPager.setCurrentItem(photoList.indexOf(currentPhotoItem));
updateDetailHead();
updateDetailBottom();
wxAPI = WXAPIFactory.createWXAPI(this, APP_ID,false);
wxAPI.registerApp(APP_ID);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (isPayListenerRegistered) {
PayListenerManager.getInstance().removePayResultListener("play");
isPayListenerRegistered = false;
}
if(fetchPhotosTask!=null){
fetchPhotosTask.cancel(true);
fetchPhotosTask = null;
}
if (fetchThumbUpListTask != null) {
fetchThumbUpListTask.cancel(true);
fetchThumbUpListTask = null;
}
if (fetchCommentListTask != null) {
fetchCommentListTask.cancel(true);
fetchCommentListTask = null;
}
if (submitCommentTask != null) {
submitCommentTask.cancel(true);
submitCommentTask = null;
}
if (submitThumbUpTask != null) {
submitThumbUpTask.cancel(true);
submitThumbUpTask = null;
}
if(wxPayTask!=null){
wxPayTask.cancel(true);
wxPayTask = null;
}
if(checkOrderTask!=null){
checkOrderTask.cancel(true);
checkOrderTask = null;
}
if(getPriceTask!=null){
getPriceTask.cancel(true);
getPriceTask = null;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mShareAPI != null) {
mShareAPI.onActivityResult(requestCode, resultCode, data);
}
}
private void initViews() {
groupAvatarImg = (ImageView) findViewById(R.id.iv_group_avatar);
groupNameText = (TextView) findViewById(R.id.tv_group_name);
uploaderAvatarImg = (ImageView) findViewById(R.id.iv_uploader_avatar);
uploaderNameText = (TextView) findViewById(R.id.tv_uploader_name);
uploadTimeText = (TextView) findViewById(R.id.tv_create_time);
photoPager = (ViewPager) findViewById(R.id.pager_photos);
photoCommentText = (TextView)findViewById(R.id.tv_detail_comment_count);
photoThumbupText = (TextView)findViewById(R.id.tv_detail_thumb_count);
getWipeWaterPrintText = (TextView)findViewById(R.id.tv_wipe_water_print);
getHDPhotoText = (TextView)findViewById(R.id.tv_get_hd_photo);
thumbAvatarsLayout = (LinearLayout)findViewById(R.id.layout_thumb_avatars);
commentListView = (NestedListView) findViewById(R.id.list_detail_comments);
groupInfoLayout = findViewById(R.id.layout_detail_header);
uploaderInfoLayout = findViewById(R.id.layout_uploader_info);
bottomLayout = findViewById(R.id.layout_detail_bottom);
bottomLayoutForPaid = findViewById(R.id.layout_detail_bottom_for_paid);
getHDPhotoLayout = findViewById(R.id.layout_get_hd_photo);
getWipeWaterPrintLayout = findViewById(R.id.layout_wipe_water_print);
buyHDPhotoTextView = (CountView) findViewById(R.id.tv_buy_hd_photo);
buyWipeWaterPrintTextView = (CountView)findViewById(R.id.tv_buy_wipe_water_print);
functionalPanel = findViewById(R.id.layout_functional_panel);
thumbArrowImg = (ImageView)findViewById(R.id.iv_thumbup_arrow);
commentArrowImg = (ImageView)findViewById(R.id.iv_comment_arrow);
hdWrapperLayout = findViewById(R.id.layout_hd_wrapper);
((TextView) findViewById(R.id.title_bar_middle_txt)).setText(R.string.photo_details);
findViewById(R.id.title_bar_back_layout).setOnClickListener(this);
findViewById(R.id.title_bar_option_layout).setVisibility(View.INVISIBLE);
findViewById(R.id.layout_enter_group).setOnClickListener(this);
findViewById(R.id.floating_btn_thumbup).setOnClickListener(this);
findViewById(R.id.floating_btn_comment).setOnClickListener(this);
findViewById(R.id.floating_btn_share).setOnClickListener(this);
findViewById(R.id.layout_detail_comment).setOnClickListener(this);
findViewById(R.id.layout_detail_thumb).setOnClickListener(this);
findViewById(R.id.iv_share_paid_photo).setOnClickListener(this);
getHDPhotoLayout.setOnClickListener(this);
getWipeWaterPrintLayout.setOnClickListener(this);
buyHDPhotoTextView.setOnClickListener(this);
buyWipeWaterPrintTextView.setOnClickListener(this);
}
private void updateDetailHead() {
if(TextUtils.isEmpty(currentPhotoItem.groupName)){
groupInfoLayout.setVisibility(View.GONE);
return;
}else{
groupInfoLayout.setVisibility(View.VISIBLE);
}
groupNameText.setText(currentPhotoItem.groupName);
if (currentPhotoItem.groupDefaultAvatar >= 0) {
groupAvatarImg.setImageResource(GroupCreateUtils.getDrawableIdForAvatar(currentPhotoItem.groupDefaultAvatar));
} else {
PhotoLoader.getInstance(this).displayImage(currentPhotoItem.groupAvatar, groupAvatarImg,PhotoLoader.getPhotoOptions());
}
}
private void updateDetailBottom() {
if(TextUtils.isEmpty(currentPhotoItem.uploaderName)){
uploaderInfoLayout.setVisibility(View.GONE);
}else{
uploaderInfoLayout.setVisibility(View.VISIBLE);
uploaderNameText.setText(currentPhotoItem.uploaderName);
uploadTimeText.setText(TimeUtils.getFormattedTime(currentPhotoItem.captureTime));
PhotoLoader.getInstance(this).displayImage(currentPhotoItem.uploaderAvatar, uploaderAvatarImg,PhotoLoader.getUserAvatarOptions());
}
if(currentPhotoItem.photoFrom ==0){
bottomLayoutForPaid.setVisibility(View.GONE);
bottomLayout.setVisibility(View.VISIBLE);
functionalPanel.setVisibility(View.VISIBLE);
photoCommentText.setText("("+String.valueOf(currentPhotoItem.commentNum)+")");
photoThumbupText.setText("("+String.valueOf(currentPhotoItem.thumbupNum)+")");
thumbAvatarsLayout.setVisibility(View.GONE);
commentListView.setVisibility(View.GONE);
thumbArrowImg.setImageResource(R.drawable.arrow_down);
commentArrowImg.setImageResource(R.drawable.arrow_down);
doFetchThumbListTask();
doFetchCommentListTask();
}else{
bottomLayoutForPaid.setVisibility(View.VISIBLE);
if(currentPhotoItem.originExpiredStamps<System.currentTimeMillis()){
hdWrapperLayout.setVisibility(View.GONE);
}else{
hdWrapperLayout.setVisibility(View.VISIBLE);
}
bottomLayout.setVisibility(View.VISIBLE);
functionalPanel.setVisibility(View.VISIBLE);
photoCommentText.setText("("+String.valueOf(currentPhotoItem.commentNum)+")");
photoThumbupText.setText("("+String.valueOf(currentPhotoItem.thumbupNum)+")");
thumbAvatarsLayout.setVisibility(View.GONE);
commentListView.setVisibility(View.GONE);
thumbArrowImg.setImageResource(R.drawable.arrow_down);
commentArrowImg.setImageResource(R.drawable.arrow_down);
doFetchThumbListTask();
doFetchCommentListTask();
if(TextUtils.isEmpty(currentPhotoItem.mediumPhotoUrl)
||(TextUtils.isEmpty(currentPhotoItem.rawPhotoUrl)&¤tPhotoItem.originExpiredStamps>System.currentTimeMillis() )){
doGetPhotoOrderInfo();
}
updatePhotoPaidUI();
}
}
private void updatePhotoPaidUI(){
if(TextUtils.isEmpty(currentPhotoItem.mediumPhotoUrl)){
getWipeWaterPrintText.setText(R.string.wipe_water_print_str);
}else{
getWipeWaterPrintText.setText(R.string.can_wipe_water_print_str);
}
if(TextUtils.isEmpty(currentPhotoItem.rawPhotoUrl)){
getHDPhotoText.setText(R.string.get_hd_photo_str);
}else{
getHDPhotoText.setText(R.string.can_get_hd_photo_str);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.title_bar_back_layout:
finish();
break;
case R.id.floating_btn_comment:
MobclickAgent.onEvent(this, UmengEvent.detail_comment_btn_click);
inputPopup = new InputPopup(this,this);
inputPopup.showPopupWindow();
break;
case R.id.btn_comment_send:
MobclickAgent.onEvent(this, UmengEvent.detail_comment_send_btn_click);
if(inputPopup!=null){
InputMethodUtils.hideInputMethod(inputPopup.getInputView());
inputPopup.dismiss();
doPhotoCommentTask(inputPopup.getInputContent());
}
break;
case R.id.iv_share_paid_photo:
case R.id.floating_btn_share:
MobclickAgent.onEvent(this, UmengEvent.detail_share_btn_click);
sharePhoto();
break;
case R.id.floating_btn_thumbup:
MobclickAgent.onEvent(this, UmengEvent.detail_thumb_btn_click);
doPhotoThumbUpTask();
break;
case R.id.layout_enter_group:
MobclickAgent.onEvent(this, UmengEvent.detail_enter_group_btn_click);
if(fromGroupPage){
finish();
}else{
GroupInfo info = new GroupInfo();
info.groupAvatarId = currentPhotoItem.groupDefaultAvatar;
info.groupId = currentPhotoItem.groupId;
info.groupName = currentPhotoItem.groupName;
Intent intent = new Intent(this,GroupActivity.class);
intent.putExtra("group",info);
startActivity(intent);
finish();
}
break;
case R.id.layout_detail_comment:
if(commentListView.getVisibility()==View.VISIBLE){
commentListView.setVisibility(View.GONE);
commentArrowImg.setImageResource(R.drawable.arrow_down);
}else{
doFetchCommentListTask();
}
break;
case R.id.layout_detail_thumb:
if(thumbAvatarsLayout.getVisibility()==View.VISIBLE){
thumbArrowImg.setImageResource(R.drawable.arrow_down);
thumbAvatarsLayout.setVisibility(View.GONE);
}else{
doFetchThumbListTask();
}
break;
case R.id.layout_share_qq:
sharePhotoTo(SHARE_MEDIA.QQ);
break;
case R.id.layout_share_weibo:
sharePhotoTo(SHARE_MEDIA.SINA);
break;
case R.id.layout_share_wechat:
sharePhotoTo(SHARE_MEDIA.WEIXIN);
break;
case R.id.layout_share_friend_circle:
sharePhotoTo(SHARE_MEDIA.WEIXIN_CIRCLE);
break;
case R.id.layout_get_hd_photo:
clickGetPhoto(PAY_TYPE_ORIGIN);
break;
case R.id.tv_buy_hd_photo:
MobclickAgent.onEvent(this, UmengEvent.detail_buy_origin_btn_click);
clickPay(buyHDPhotoTextView.getNumber(),PAY_TYPE_ORIGIN);
break;
case R.id.layout_wipe_water_print:
clickGetPhoto(PAY_TYPE_NO_MARK);
break;
case R.id.tv_buy_wipe_water_print:
MobclickAgent.onEvent(this, UmengEvent.detail_waterprint_btn_click);
clickPay(buyWipeWaterPrintTextView.getNumber(),PAY_TYPE_NO_MARK);
break;
default:
break;
}
}
private void clickPay(float fee,String type){
if(!NetworkUtil.isNetworkConnected(this)){
Toast.makeText(this,R.string.network_disconnect,Toast.LENGTH_SHORT).show();
return;
}
if (!isPayListenerRegistered) {
PayListenerManager.getInstance().putPayResultListener("play",this);
isPayListenerRegistered = true;
}
Toast.makeText(this,R.string.pay_create_order,Toast.LENGTH_SHORT).show();
doWXPayTask(fee,type);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(position==photoList.size()-1){
if(fetchPhotosTask!=null && fetchPhotosTask.getStatus()== AsyncTask.Status.RUNNING){
Toast.makeText(this,R.string.please_wait,Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onPageSelected(int position) {
currentPhotoItem = photoList.get(position);
updateDetailHead();
updateDetailBottom();
if(!fromGroupPage){
return;
}
if(position>=photoList.size()-1){
Bundle bundle = new Bundle();
bundle.putString("group_id",currentPhotoItem.groupId);
bundle.putString("current_id",String.valueOf(currentGroupPhotoId));
loadMoreGroupPhotos(bundle);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
private synchronized void loadMoreGroupPhotos(final Bundle bundle){
if(fetchPhotosTask!=null && fetchPhotosTask.getStatus()== AsyncTask.Status.RUNNING){
return;
}
HashMap<String,String> params = new HashMap<>();
params.put("group_id",bundle.getString("group_id"));
params.put("user_id",Preferences.getInstance(this).getUserId());
params.put("current_id",bundle.getString("current_id"));
LogHelper.d(TAG,"loadMoreGroupPhotos with local currentId = "+bundle.getString("current_id"));
fetchPhotosTask = new HttpPostTask(this,params) {
ArrayList<GroupPhotoItem> photoItems;
String groupId = bundle.getString("group_id");
@Override
protected boolean parseResponse(Context context, String response) {
try{
JSONObject json = new JSONObject(response);
int status = json.getInt("status");
if(status == 200){
LogHelper.d(TAG,"group service loadMoreGroupPhotos parseResponse status 200");
JSONObject info = json.getJSONObject("data");
if(currentGroupPhotoId==info.getInt("current_id")){
return false;
}
JSONArray sessionArray = info.getJSONArray("photos");
if(sessionArray!=null && sessionArray.length()>0) {
photoItems = new ArrayList<>();
for(int k = 0; k<sessionArray.length();k++){
JSONObject sessionObj = sessionArray.getJSONObject(k);
String sessionId = sessionObj.getString("session_id");
JSONArray photoArray = sessionObj.getJSONArray("photos");
if(photoArray!=null && photoArray.length()>0){
for(int m = 0; m<photoArray.length();m++){
JSONObject photoObj = photoArray.getJSONObject(m);
GroupPhotoItem groupPhotoItem = GroupPhotoItem.parseFromJSON(photoObj);
groupPhotoItem.sessionId = sessionId;
photoItems.add(groupPhotoItem);
}
}
}
LogHelper.d(TAG,"group service loadMoreGroupPhotos get new photos ,count="+photoItems.size());
}
currentGroupPhotoId = info.getInt("current_id");
LogHelper.d(TAG,"loadMoreGroupPhotos with server currentId = "+currentGroupPhotoId+"groupId="+groupId);
return true;
}
}catch (Exception e){
LogHelper.e(TAG,"group service loadMoreGroupPhotos error happen "+e);
}
return false;
}
@Override
protected void onPostFail(Context context) {
super.onPostFail(context);
}
@Override
protected void onPostSuccess(Context context) {
super.onPostSuccess(context);
if(photoItems!=null && photoItems.size()>0){
ArrayList<GroupPhotoItem> newPhotos = new ArrayList<>();
for(GroupPhotoItem photoItem : photoItems){
if(!photoList.contains(photoItem)){
newPhotos.add(photoItem);
}
}
if(newPhotos.size()==0){
return;
}
photoList.addAll(newPhotos);
photoPageAdapter.addPhotos(newPhotos);
}
}
};
fetchPhotosTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.GROUP_PHOTO_LIST_URL);
}
private void sharePhoto() {
sharePop = new PhotoSharePopup(this,this);
sharePop.showPopupWindow();
}
private void sharePhotoTo(SHARE_MEDIA media){
mShareAPI = UMShareAPI.get(this);
String shareUrl = currentPhotoItem.shareUrl;
if(TextUtils.isEmpty(shareUrl)){
shareUrl = currentPhotoItem.photoUrl;
}
new ShareAction(this)
.setPlatform(media)
.setCallback(new UMShareListener() {
@Override
public void onResult(SHARE_MEDIA share_media) {
}
@Override
public void onError(SHARE_MEDIA share_media, Throwable throwable) {
}
@Override
public void onCancel(SHARE_MEDIA share_media) {
}
}).withTitle(getString(R.string.app_name))
.withText(getString(R.string.default_share_text)).withTargetUrl(shareUrl)
.withMedia(new UMImage(this, currentPhotoItem.thumbnailUrl))
.share();
if(sharePop!=null){
sharePop.dismiss();
}
}
private void doCheckOrder(String transaction) {
if (checkOrderTask != null && checkOrderTask.getStatus() == AsyncTask.Status.RUNNING) {
checkOrderTask.cancel(true);
}
HashMap<String, String> params = new HashMap<>();
params.put("order_id", orderId);
if(!TextUtils.isEmpty(transaction)){
params.put("transaction_id", transaction);
}
checkOrderTask = new HttpPostTask(this, params) {
String toastMsg = "";
@Override
protected boolean parseResponse(Context context, String response) {
try {
JSONObject json = new JSONObject(response);
int status = json.getInt("status");
toastMsg = json.getString("description");
if (status == 200) {
LogHelper.d(TAG, " doCheckOrder parseResponse status ok");
return true;
}
} catch (Exception e) {
LogHelper.d(TAG, " doCheckOrder parseResponse error :" + e);
}
return false;
}
@Override
protected void onPostFail(Context context) {
super.onPostFail(context);
if(!TextUtils.isEmpty(toastMsg)){
Toast.makeText(context,toastMsg,Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onPostSuccess(Context context) {
super.onPostSuccess(context);
if(!TextUtils.isEmpty(toastMsg)){
Toast.makeText(context,toastMsg,Toast.LENGTH_SHORT).show();
}
jumpWhenPaid();
}
};
checkOrderTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(),UrlContainer.QUERY_ORDER_URL);
}
private void doWXPayTask(float fee,String type) {
if (wxPayTask != null && wxPayTask.getStatus() == AsyncTask.Status.RUNNING) {
wxPayTask.cancel(true);
}
int feeInteger =(int)(fee *100);
HashMap<String, String> params = new HashMap<>();
params.put("photo_id", currentPhotoItem.photoId);
params.put("user_id", Preferences.getInstance(this).getUserId());
params.put("total_fee",String.valueOf(feeInteger));
// params.put("total_fee","1");
params.put("body",getString(R.string.order_body_buy_from,currentPhotoItem.uploaderName));
params.put("trade_type","APP");
params.put("photo_type",type);
params.put("group_id",currentPhotoItem.groupId);
wxPayTask = new HttpPostTask(this, params) {
PayReq req = null;
@Override
protected boolean parseResponse(Context context, String response) {
try {
JSONObject json = new JSONObject(response);
int status = json.getInt("status");
if (status == 200) {
LogHelper.d(TAG, " wxPayTask parseResponse status ok");
JSONObject info = json.getJSONObject("data");
orderId = info.getString("order_id");
req = new PayReq();
JSONObject wxParams = info.getJSONObject("wxpay_params");
req.appId = wxParams.getString("appid");
req.partnerId = wxParams.getString("partnerid");
req.packageValue =wxParams.getString("package");
req.prepayId = wxParams.getString("prepayid");
req.nonceStr = wxParams.getString("noncestr");
req.timeStamp = wxParams.getString("timestamp");
req.sign = wxParams.getString("sign");
return true;
}
} catch (Exception e) {
LogHelper.d(TAG, " wxPayTask parseResponse error :" + e);
}
return false;
}
@Override
protected void onPostFail(Context context) {
super.onPostFail(context);
Toast.makeText(getApplicationContext(), R.string.create_order_fail, Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostSuccess(Context context) {
super.onPostSuccess(context);
if(req!=null){
wxAPI.sendReq(req);
}
}
};
wxPayTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(),UrlContainer.CREATE_ORDER_URL);
}
private void doGetPhotoOrderInfo() {
if(!TextUtils.isEmpty(currentPhotoItem.mediumPhotoUrl)&&!TextUtils.isEmpty(currentPhotoItem.rawPhotoUrl)){
return;
}
if (getPhotoOrderInfoTask != null && getPhotoOrderInfoTask.getStatus() == AsyncTask.Status.RUNNING) {
getPhotoOrderInfoTask.cancel(true);
}
HashMap<String, String> params = new HashMap<>();
params.put("user_id", Preferences.getInstance(this).getUserId());
params.put("photo_id", currentPhotoItem.photoId);
getPhotoOrderInfoTask = new HttpPostTask(this, params) {
@Override
protected boolean parseResponse(Context context, String response) {
try {
JSONObject json = new JSONObject(response);
int status = json.getInt("status");
if (status == 200) {
LogHelper.d(TAG, " getPhotoOrderInfoTask parseResponse status ok");
JSONObject data = json.getJSONObject("data");
JSONObject porder = data.getJSONObject("porder");
if(porder.has("r_photo_url")){
currentPhotoItem.rawPhotoUrl = JSONParseUtils.getJSONString(porder.getString("r_photo_url"));
}
if(porder.has("m_photo_url")){
currentPhotoItem.mediumPhotoUrl = JSONParseUtils.getJSONString(porder.getString("m_photo_url"));
}
return true;
}
} catch (Exception e) {
LogHelper.d(TAG, " getPhotoOrderInfoTask parseResponse error :" + e);
}
return false;
}
@Override
protected void onPostFail(Context context) {
super.onPostFail(context);
}
@Override
protected void onPostSuccess(Context context) {
super.onPostSuccess(context);
ArrayList<GroupPhotoItem> photos = new ArrayList<>();
photos.add(currentPhotoItem);
updatePhotoPaidUI();
DBService.getInstance(getApplicationContext()).addGroupPhotoList(photos);
}
};
getPhotoOrderInfoTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.BOUGHT_PHOTO_URL);
}
private void clickGetPhoto(String type){
if(type.equals(PAY_TYPE_NO_MARK)){
if(!TextUtils.isEmpty(currentPhotoItem.mediumPhotoUrl)){
jumpWhenPaid();
return;
}
}else if(type.equals(PAY_TYPE_ORIGIN)){
if(!TextUtils.isEmpty(currentPhotoItem.rawPhotoUrl)){
jumpWhenPaid();
return;
}
}
doGetPrice(type);
}
private void doGetPrice(final String type) {
if (getPriceTask != null && getPriceTask.getStatus() == AsyncTask.Status.RUNNING) {
getPriceTask.cancel(true);
}
HashMap<String, String> params = new HashMap<>();
params.put("photo_id", currentPhotoItem.photoId);
params.put("user_id", Preferences.getInstance(this).getUserId());
params.put("photo_type",type);
getPriceTask = new HttpPostTask(this, params) {
int price = 0;
@Override
protected boolean parseResponse(Context context, String response) {
try {
JSONObject json = new JSONObject(response);
int status = json.getInt("status");
if (status == 200) {
JSONObject info = json.getJSONObject("data");
price = info.getInt("price");
LogHelper.d(TAG, " doGetPrice parseResponse status ok and price="+price);
return true;
}
} catch (Exception e) {
LogHelper.d(TAG, " doGetPrice parseResponse error :" + e);
}
return false;
}
@Override
protected void onPostFail(Context context) {
super.onPostFail(context);
Toast.makeText(context,R.string.get_price_fail,Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostSuccess(Context context) {
super.onPostSuccess(context);
if(type.equals(PAY_TYPE_NO_MARK)){
getWipeWaterPrintLayout.setVisibility(View.GONE);
buyWipeWaterPrintTextView.setVisibility(View.VISIBLE);
buyWipeWaterPrintTextView.setNumber(price/100.0f);
}else if(type.equals(PAY_TYPE_ORIGIN)){
getHDPhotoLayout.setVisibility(View.GONE);
buyHDPhotoTextView.setVisibility(View.VISIBLE);
buyHDPhotoTextView.setNumber(price/100.0f);
}
}
};
getPriceTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(),UrlContainer.GET_PRICE_URL);
}
private void doFetchCommentListTask() {
if (fetchCommentListTask != null && fetchCommentListTask.getStatus() == AsyncTask.Status.RUNNING) {
fetchCommentListTask.cancel(true);
}
HashMap<String, String> params = new HashMap<>();
params.put("user_id", Preferences.getInstance(this).getUserId());
params.put("group_id", currentPhotoItem.groupId);
params.put("photo_id", currentPhotoItem.photoId);
fetchCommentListTask = new HttpPostTask(this, params) {
private ArrayList<CommentBean> commentsList;
@Override
protected boolean parseResponse(Context context, String response) {
try {
JSONObject json = new JSONObject(response);
int status = json.getInt("status");
if (status == 200) {
LogHelper.d(TAG, " fetchCommentListTask parseResponse status ok");
JSONObject info = json.getJSONObject("data");
JSONArray commentArray = info.getJSONArray("comments");
if (commentArray != null && commentArray.length() > 0) {
int len = commentArray.length();
commentsList = new ArrayList<>();
for (int k = 0; k < len; k++) {
JSONObject obj = commentArray.getJSONObject(k);
CommentBean bean = new CommentBean();
bean.avatarUrl = obj.getString("avatar");
bean.comment = obj.getString("comment");
bean.nickname = obj.getString("nickname");
bean.time = obj.getString("created_at");
bean.userId = obj.getString("user_id");
commentsList.add(bean);
}
}
return true;
}
} catch (Exception e) {
LogHelper.d(TAG, " fetchCommentListTask parseResponse error :" + e);
}
return false;
}
@Override
protected void onPostFail(Context context) {
super.onPostFail(context);
// Toast.makeText(getApplicationContext(), R.string.fetch_photo_comment_fail, Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostSuccess(Context context) {
super.onPostSuccess(context);
if (commentsList != null) {
photoCommentText.setText("("+String.valueOf(commentsList.size())+")");
commentListView.setVisibility(View.VISIBLE);
commentArrowImg.setImageResource(R.drawable.arrow_up);
CommentListAdapter adapter = new CommentListAdapter(PhotoDetailsActivity.this, commentsList);
commentListView.setAdapter(adapter);
}
}
};
fetchCommentListTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(),UrlContainer.PHOTO_COMMENT_LIST_URL);
}
private void doFetchThumbListTask() {
if (fetchThumbUpListTask != null && fetchThumbUpListTask.getStatus() == AsyncTask.Status.RUNNING) {
fetchThumbUpListTask.cancel(true);
}
HashMap<String, String> params = new HashMap<>();
params.put("user_id", Preferences.getInstance(this).getUserId());
params.put("group_id", currentPhotoItem.groupId);
params.put("photo_id", currentPhotoItem.photoId);
fetchThumbUpListTask = new HttpPostTask(this, params) {
private ArrayList<CommentBean> thumbupList;
@Override
protected boolean parseResponse(Context context, String response) {
try {
JSONObject json = new JSONObject(response);
int status = json.getInt("status");
if (status == 200) {
LogHelper.d(TAG, " fetchThumbUpListTask parseResponse status ok");
JSONObject info = json.getJSONObject("data");
thumbupList = new ArrayList<>();
JSONArray commentArray = info.getJSONArray("thumbups");
if (commentArray != null && commentArray.length() > 0) {
int len = commentArray.length();
for (int k = 0; k < len; k++) {
JSONObject obj = commentArray.getJSONObject(k);
CommentBean bean = new CommentBean();
bean.avatarUrl = obj.getString("avatar");
bean.nickname = obj.getString("nickname");
bean.userId = obj.getString("user_id");
thumbupList.add(bean);
}
}
return true;
}
} catch (Exception e) {
LogHelper.d(TAG, " fetchThumbUpListTask parseResponse error :" + e);
}
return false;
}
@Override
protected void onPostFail(Context context) {
super.onPostFail(context);
// Toast.makeText(getApplicationContext(), R.string.fetch_photo_like_fail, Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostSuccess(Context context) {
super.onPostSuccess(context);
if(thumbupList.size()>0){
photoThumbupText.setText("("+String.valueOf(thumbupList.size())+")");
thumbAvatarsLayout.setVisibility(View.VISIBLE);
thumbArrowImg.setImageResource(R.drawable.arrow_up);
thumbAvatarsLayout.removeAllViews();
for(CommentBean bean : thumbupList){
RoundedImageView avatar = new RoundedImageView(context);
avatar.setBorderWidth((float)DeviceUtils.dip2px(context, 1));
avatar.setBorderColor(Color.parseColor("#F7F7F7"));
avatar.setCornerRadius(DeviceUtils.dip2px(context, 5));
thumbAvatarsLayout.addView(avatar);
PhotoLoader.getInstance(context).displayImage(bean.avatarUrl, avatar,PhotoLoader.getUserAvatarOptions());
ViewGroup.LayoutParams params = avatar.getLayoutParams();
params.width = DeviceUtils.dip2px(context,40);
params.height = DeviceUtils.dip2px(context,40);
avatar.setLayoutParams(params);
avatar.setPadding(DeviceUtils.dip2px(context, 6),0,DeviceUtils.dip2px(context, 6),DeviceUtils.dip2px(context, 12));
}
}
}
};
fetchThumbUpListTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.PHOTO_LIKE_LIST_URL);
}
private String processingThumbPhotoId;
private void doPhotoThumbUpTask() {
if(currentPhotoItem.thumbUp){
Toast.makeText(this,R.string.already_thumb_up,Toast.LENGTH_SHORT).show();
return;
}
if(currentPhotoItem.photoId.equals(processingThumbPhotoId)){
return;
}
if (submitThumbUpTask != null && submitThumbUpTask.getStatus() == AsyncTask.Status.RUNNING) {
submitThumbUpTask.cancel(true);
}
HashMap<String, String> params = new HashMap<>();
params.put("user_id", Preferences.getInstance(this).getUserId());
params.put("group_id", currentPhotoItem.groupId);
params.put("photo_id", currentPhotoItem.photoId);
processingThumbPhotoId = currentPhotoItem.photoId;
submitThumbUpTask = new HttpPostTask(this, params) {
@Override
protected boolean parseResponse(Context context, String response) {
try {
JSONObject json = new JSONObject(response);
int status = json.getInt("status");
if (status == 200) {
LogHelper.d(TAG, " submitThumbUpTask parseResponse status ok");
return true;
}
} catch (Exception e) {
LogHelper.d(TAG, " submitThumbUpTask parseResponse error :" + e);
}
return false;
}
@Override
protected void onPostFail(Context context) {
super.onPostFail(context);
processingThumbPhotoId = null;
Toast.makeText(getApplicationContext(), R.string.photo_like_fail, Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostSuccess(Context context) {
super.onPostSuccess(context);
photoThumbupText.setText("("+String.valueOf(currentPhotoItem.commentNum+1)+")");
if(processingThumbPhotoId!=null && currentPhotoItem!=null && processingThumbPhotoId.equals(currentPhotoItem.photoId)){
currentPhotoItem.thumbUp = true;
}
processingThumbPhotoId = null;
doFetchThumbListTask();
}
};
submitThumbUpTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.PHOTO_LIKE_URL);
}
private void doPhotoCommentTask(String comment) {
if(TextUtils.isEmpty(comment)){
return;
}
if (submitCommentTask != null && submitCommentTask.getStatus() == AsyncTask.Status.RUNNING) {
submitCommentTask.cancel(true);
}
HashMap<String, String> params = new HashMap<>();
params.put("user_id", Preferences.getInstance(this).getUserId());
params.put("group_id", currentPhotoItem.groupId);
params.put("photo_id", currentPhotoItem.photoId);
params.put("comment", comment);
submitCommentTask = new HttpPostTask(this, params) {
@Override
protected boolean parseResponse(Context context, String response) {
try {
JSONObject json = new JSONObject(response);
int status = json.getInt("status");
if (status == 200) {
LogHelper.d(TAG, " submitCommentTask parseResponse status ok");
return true;
}
} catch (Exception e) {
LogHelper.d(TAG, " submitCommentTask parseResponse error :" + e);
}
return false;
}
@Override
protected void onPostFail(Context context) {
super.onPostFail(context);
Toast.makeText(getApplicationContext(), R.string.photo_comment_fail, Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostSuccess(Context context) {
super.onPostSuccess(context);
photoCommentText.setText("("+String.valueOf(currentPhotoItem.commentNum+1)+")");
doFetchCommentListTask();
}
};
submitCommentTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(),UrlContainer.PHOTO_COMMENT_URL);
}
@Override
public void onResult(String transaction,int code) {
switch (code){
case BaseResp.ErrCode.ERR_OK:
jumpWhenPaid();
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
case BaseResp.ErrCode.ERR_COMM:
case BaseResp.ErrCode.ERR_SENT_FAILED:
case BaseResp.ErrCode.ERR_UNSUPPORT:
Toast.makeText(this,R.string.wx_pay_check,Toast.LENGTH_SHORT).show();
doCheckOrder(transaction);
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
break;
}
}
private void jumpWhenPaid(){
Intent intent = new Intent(this, PaidPhotoActivity.class);
intent.putExtra("photo_item",currentPhotoItem);
startActivity(intent);
}
}
|