/*
* Copyright (C) 2012 yueyueniao
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.suan.weclient.fragment.mass;
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.suan.weclient.R;
import com.suan.weclient.activity.MainActivity;
import com.suan.weclient.adapter.MaterialListAdapter;
import com.suan.weclient.fragment.BaseFragment;
import com.suan.weclient.fragment.MassFragment;
import com.suan.weclient.util.GlobalContext;
import com.suan.weclient.util.Util;
import com.suan.weclient.util.data.DataManager;
import com.suan.weclient.util.data.bean.MaterialBean;
import com.suan.weclient.util.data.bean.UserBean;
import com.suan.weclient.util.data.holder.resultHolder.MaterialResultHolder;
import com.suan.weclient.util.net.UploadHelper;
import com.suan.weclient.util.net.WechatManager;
import com.suan.weclient.util.voice.ImgUtil;
import com.suan.weclient.view.ptr.PTRListview;
import java.io.File;
public class MassImgFragment extends BaseFragment implements PTRListview.OnRefreshListener, PTRListview.OnLoadListener {
private DataManager mDataManager;
private Dialog popDialog;
private View view;
private RelativeLayout contentLayout;
private ImageView contentImageView;
private LinearLayout editContentLayout;
private TextView clickToUploadTextView;
private RelativeLayout uploadLayout;
private ImageView uploadLoadingView;
private Animation uploadCircleAnimation;
private boolean uploading = false;
private MassFragment.SelectPhotoListener selectPhotoListener;
/*
total
*/
private TextView massLeftNumTextView;
private Button sendButton;
private PTRListview ptrListview;
private MaterialListAdapter materialListAdapter;
private MaterialListAdapter.ItemViewHolder selectedHolder;
private MaterialBean selectedBean;
private MaterialHandler mHandler;
private String capturedImageName = "";
private static final int PAGE_MESSAGE_AMOUNT = 10;
/*
about adapter list change
*/
public static final int MESSAGE_NOTIFY_TYPE_ONLY_REFRESH = 2;
public static final int MESSAGE_NOTIFY_TYPE_REFRESH_WITH_NEW_DATA = 3;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.mass_img_layout, null);
/*
init data
*/
MainActivity mainActivity = (MainActivity) getActivity();
mDataManager = ((GlobalContext) mainActivity.getApplicationContext()).getDataManager();
initWidgets();
initWidgetsEvent();
initListener();
return view;
}
private void initListener() {
mHandler = new MaterialHandler();
mDataManager.addLoginListener(new DataManager.LoginListener() {
@Override
public void onLogin(final UserBean userBean) {
// TODO Auto-generated method stub
setMassLeft();
}
});
mDataManager.addMassDataGetListener(new DataManager.MassDataGetListener() {
@Override
public void onGet(UserBean userBean) {
setMassLeft();
}
});
mDataManager.addMaterialChangeListener(new DataManager.MaterialGetListener() {
@Override
public void onMaterialGet(int type, MaterialResultHolder materialResultHolder) {
if (type == MaterialBean.MATERIAL_TYPE_IMG) {
Message notifyMessage = new Message();
notifyMessage.arg1 = MESSAGE_NOTIFY_TYPE_REFRESH_WITH_NEW_DATA;
notifyMessage.obj = materialResultHolder;
mHandler.sendMessage(notifyMessage);
}
}
});
}
private void setUploadingView(boolean uploading) {
this.uploading = uploading;
if (uploading) {
clickToUploadTextView.setVisibility(View.INVISIBLE);
uploadLoadingView.setVisibility(View.VISIBLE);
uploadLoadingView.startAnimation(uploadCircleAnimation);
} else {
clickToUploadTextView.setVisibility(View.VISIBLE);
uploadLoadingView.clearAnimation();
uploadLoadingView.setVisibility(View.GONE);
}
}
private void initWidgets() {
clickToUploadTextView = (TextView)view.findViewById(R.id.mass_img_text_click_to_upload);
uploadLayout = (RelativeLayout) view.findViewById(R.id.mass_img_layout_upload);
uploadLoadingView = (ImageView) view.findViewById(R.id.mass_img_img_upload_circle);
uploadCircleAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.loading_animation);
uploadLayout.setVisibility(View.GONE);
uploadLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (uploading) {
Toast.makeText(getActivity(), "正在上传,请稍后再点击", Toast.LENGTH_SHORT).show();
return;
}
if (capturedImageName.length() > 1) {
setUploadingView(true);
mDataManager.getWechatManager().getUploadInfo(mDataManager.getCurrentPosition(), new WechatManager.OnActionFinishListener() {
@Override
public void onFinish(int code, Object object) {
switch (code) {
case WechatManager.ACTION_SUCCESS:
Toast.makeText(getActivity(), "准备完成", Toast.LENGTH_SHORT).show();
mDataManager.getWechatManager().uploadImg(mDataManager.getCurrentPosition(), capturedImageName, new WechatManager.OnActionFinishListener() {
@Override
public void onFinish(int code, Object object) {
setUploadingView(false);
switch (code) {
case WechatManager.ACTION_SUCCESS:
Toast.makeText(getActivity(), "上传成功", Toast.LENGTH_SHORT).show();
UploadHelper.NowUploadBean uploadBean = (UploadHelper.NowUploadBean) object;
selectedBean = new MaterialBean(uploadBean.getContent(), MaterialBean.MATERIAL_TYPE_IMG);
uploadLayout.setVisibility(View.GONE);
break;
case WechatManager.ACTION_TIME_OUT:
Toast.makeText(getActivity(), "上传失败,请求超时", Toast.LENGTH_SHORT).show();
break;
case WechatManager.ACTION_OTHER:
Toast.makeText(getActivity(), "上传失败,网路错误", Toast.LENGTH_SHORT).show();
break;
case WechatManager.ACTION_SPECIFICED_ERROR:
Toast.makeText(getActivity(), "上传失败", Toast.LENGTH_SHORT).show();
break;
}
}
});
break;
case WechatManager.ACTION_TIME_OUT:
setUploadingView(false);
Toast.makeText(getActivity(), "上传准备失败,请求超时", Toast.LENGTH_SHORT).show();
break;
case WechatManager.ACTION_OTHER:
setUploadingView(false);
Toast.makeText(getActivity(), "上传准备失败,网路错误", Toast.LENGTH_SHORT).show();
break;
case WechatManager.ACTION_SPECIFICED_ERROR:
setUploadingView(false);
Toast.makeText(getActivity(), "上传准备失败", Toast.LENGTH_SHORT).show();
break;
}
}
});
} else {
Toast.makeText(getActivity(), "请选择图片", Toast.LENGTH_SHORT).show();
}
}
});
contentLayout = (RelativeLayout) view.findViewById(R.id.mass_img_layout_content);
contentImageView = (ImageView) view.findViewById(R.id.mass_img_img_content);
editContentLayout = (LinearLayout) view.findViewById(R.id.mass_img_layout_edit);
contentImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialogChoose();
}
});
editContentLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialogChoose();
}
});
massLeftNumTextView = (TextView) view
.findViewById(R.id.mass_text_left_num);
sendButton = (Button) view.findViewById(R.id.mass_button_send);
setMassLeft();
sendButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (mDataManager.getUserGroup().size() == 0) {
sendButton.setSelected(true);
} else {
if (mDataManager.getCurrentUser().getMassLeft() <= 0) {
sendButton.setSelected(true);
} else {
sendButton.setSelected(false);
dialogEnsureMass();
}
}
}
;
});
}
public void setSelectPhotoListener(MassFragment.SelectPhotoListener selectPhotoListener) {
this.selectPhotoListener = selectPhotoListener;
}
public void setCapturedImageName(String imagePath) {
this.capturedImageName = imagePath;
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap selectedImageBitmap = BitmapFactory.decodeFile(capturedImageName, options);
ImgUtil.prepareBitmap(capturedImageName, new ImgUtil.OnImgPrepareListener() {
@Override
public void onPrepareFinished(ImgUtil.ImgPrepareResuleHolder imgPrepareResuleHolder) {
Log.e("fuck", "" + imgPrepareResuleHolder);
if (imgPrepareResuleHolder != null) {
contentImageView.setImageBitmap(imgPrepareResuleHolder.getBitmap());
capturedImageName = imgPrepareResuleHolder.getFilePath();
}
}
});
contentImageView.setImageBitmap(selectedImageBitmap);
uploadLayout.setVisibility(View.VISIBLE);
} catch (Exception e) {
Log.e("parse selected photo error", "" + e);
}
}
private void dialogChoose() {
popDialog = Util.createImgSelectDialog(getActivity(), new OnClickListener() {
@Override
public void onClick(View v) {
if (selectPhotoListener != null) {
selectPhotoListener.onSelectFromAlbum();
}
popDialog.dismiss();
}
}, new OnClickListener() {
@Override
public void onClick(View v) {
if (selectPhotoListener != null) {
selectPhotoListener.onTakePhoto();
}
popDialog.dismiss();
}
},
new OnClickListener() {
@Override
public void onClick(View v) {
popDialog.dismiss();
popMaterialList();
}
}
);
popDialog.show();
}
private void dialogEnsureMass() {
if (selectedBean == null) {
Toast.makeText(getActivity(), "请输入内容", Toast.LENGTH_SHORT).show();
return;
}
popDialog = Util.createEnsureDialog(new OnClickListener() {
@Override
public void onClick(View v) {
mass();
popDialog.dismiss();
}
}, true, getActivity(), "群发确认", "确认群发此消息", true);
popDialog.show();
}
private void mass() {
mDataManager.doLoadingStart("发送中", WechatManager.DIALOG_POP_CANCELABLE);
mDataManager.getWechatManager().mass(mDataManager.getCurrentPosition(),
selectedBean, new WechatManager.OnActionFinishListener() {
@Override
public void onFinish(int code, Object object) {
// TODO Auto-generated method stub
mDataManager.doPopEnsureDialog(false, true, "恭喜", "群发成功",
new DataManager.DialogSureClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mDataManager.doDismissAllDialog();
}
});
mDataManager.getCurrentUser().setMassLeft(mDataManager.getCurrentUser().getMassLeft() - 1);
setMassLeft();
}
});
}
public void setMassLeft() {
String typeString = "";
switch (mDataManager.getCurrentUser().getUserType()) {
case UserBean.USER_TYPE_SUBSTRICTION:
typeString = "今天";
break;
case UserBean.USER_TYPE_SERVICE:
typeString = "本月";
break;
}
if (mDataManager.getUserGroup().size() == 0) {
massLeftNumTextView.setText("你" + typeString + "还能群发 " + 0 + " 条消息");
} else {
massLeftNumTextView.setText("你" + typeString + "还能群发 "
+ mDataManager.getCurrentUser().getMassLeft() + " 条消息");
}
if (mDataManager.getUserGroup().size() == 0) {
sendButton.setSelected(true);
} else {
if (mDataManager.getCurrentUser().getMassLeft() <= 0) {
sendButton.setSelected(true);
} else {
sendButton.setSelected(false);
}
}
}
private void initWidgetsEvent() {
}
private void popMaterialList() {
mDataManager.createMaterialHolder(mDataManager.getCurrentUser());
popDialog = Util.createMaterialListDialog(getActivity(), "图片素材", new OnClickListener() {
@Override
public void onClick(View v) {
MaterialListAdapter.ItemViewHolder holder = materialListAdapter.getSelectedHolder();
if (holder != null) {
selectedHolder = holder;
selectedBean = holder.getMaterialBean();
setContentImg();
uploadLayout.setVisibility(View.GONE);
popDialog.dismiss();
} else {
Toast.makeText(getActivity(), "请选择内容", Toast.LENGTH_LONG).show();
}
}
}, new OnClickListener() {
@Override
public void onClick(View v) {
popDialog.dismiss();
}
}
);
ptrListview = (PTRListview) popDialog.findViewById(R.id.dialog_material_list_content);
materialListAdapter = new MaterialListAdapter(getActivity(), mDataManager);
ptrListview.setonRefreshListener(this);
ptrListview.setOnLoadListener(this);
ptrListview.setAdapter(materialListAdapter);
ptrListview.setOnScrollListener(materialListAdapter);
ptrListview.onRefreshStart();
new GetDataTask(ptrListview, PTRListview.PTR_MODE_REFRESH).execute();
popDialog.show();
}
private void setContentImg() {
if (selectedHolder.getDataLoaded()) {
Bitmap contentBitmap = (Bitmap) selectedHolder.getData();
contentImageView.setImageBitmap(contentBitmap);
} else {
}
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
private class MaterialHandler extends Handler {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.arg1) {
case MESSAGE_NOTIFY_TYPE_ONLY_REFRESH:
break;
case MESSAGE_NOTIFY_TYPE_REFRESH_WITH_NEW_DATA:
MaterialResultHolder materialResultHolder = (MaterialResultHolder) msg.obj;
mDataManager.getMaterialHolder().mergeMaterialResult(materialResultHolder);
if (materialResultHolder != null) {
switch (materialResultHolder.getResultMode()) {
case MaterialResultHolder.RESULT_MODE_ADD:
try {
ptrListview.onLoadComplete();
} catch (Exception e) {
}
break;
case MaterialResultHolder.RESULT_MODE_REFRESH:
try {
materialListAdapter.updateCache();
ptrListview.onRefreshComplete();
ptrListview.setSelection(1);
} catch (Exception e) {
}
break;
}
}
break;
}
try {
int size = mDataManager.getMaterialHolder().getMaterialCount();
ptrListview.setLoadEnable(size % PAGE_MESSAGE_AMOUNT == 0);
ptrListview.requestLayout();
materialListAdapter.notifyDataSetChanged();
} catch (Exception e) {
}
}
}
@Override
public void onRefresh() {
new GetDataTask(ptrListview, PTRListview.PTR_MODE_REFRESH).execute();
}
@Override
public void onLoad() {
new GetDataTask(ptrListview, PTRListview.PTR_MODE_LOAD).execute();
}
private class GetDataTask extends AsyncTask<Void, Void, Void> {
private PTRListview mRefreshedView;
private boolean end = false;
private int mode;
public GetDataTask(PTRListview refreshedView, int mode) {
mRefreshedView = refreshedView;
this.mode = mode;
end = false;
if (mDataManager.getCurrentMessageHolder() == null) {
end = true;
mRefreshedView.onLoadComplete();
return;
}
try {
if (mode == PTRListview.PTR_MODE_LOAD) {
int size = mDataManager.getMaterialHolder().getMaterialCount();
// must be fuul amount of page
if (size % PAGE_MESSAGE_AMOUNT == 0) {
mDataManager.getWechatManager().getMaterialList(MaterialBean.MATERIAL_TYPE_IMG, size, mDataManager.getCurrentPosition(), new WechatManager.OnActionFinishListener() {
@Override
public void onFinish(int code, Object object) {
switch (code) {
case WechatManager.ACTION_SUCCESS:
mDataManager.doMaterialGet(MaterialBean.MATERIAL_TYPE_IMG, (MaterialResultHolder) object);
break;
case WechatManager.ACTION_TIME_OUT:
break;
case WechatManager.ACTION_OTHER:
break;
case WechatManager.ACTION_SPECIFICED_ERROR:
mDataManager.doPopEnsureDialog(true, true, "登录超时", "登录超时", new DataManager.DialogSureClickListener() {
@Override
public void onClick(View v) {
mDataManager.doAutoLogin();
}
});
break;
}
try {
ptrListview.onLoadComplete();
} catch (Exception e) {
}
end = true;
}
});
} else {
try {
ptrListview.onLoadComplete();
} catch (Exception e) {
}
end = true;
}
} else if (mode == PTRListview.PTR_MODE_REFRESH) {
mDataManager.getWechatManager().getMaterialList(MaterialBean.MATERIAL_TYPE_IMG, 0, mDataManager.getCurrentPosition(), new WechatManager.OnActionFinishListener() {
@Override
public void onFinish(int code, Object object) {
switch (code) {
case WechatManager.ACTION_SUCCESS:
mDataManager.doMaterialGet(MaterialBean.MATERIAL_TYPE_IMG, (MaterialResultHolder) object);
break;
case WechatManager.ACTION_TIME_OUT:
break;
case WechatManager.ACTION_OTHER:
break;
case WechatManager.ACTION_SPECIFICED_ERROR:
mDataManager.doPopEnsureDialog(true, true, "登录超时", "登录超时", new DataManager.DialogSureClickListener() {
@Override
public void onClick(View v) {
mDataManager.doAutoLogin();
}
});
break;
}
try {
ptrListview.onRefreshComplete();
} catch (Exception e) {
}
end = true;
}
});
}
} catch (Exception e) {
}
}
@Override
protected Void doInBackground(Void... params) {
// Simulates a background job.
try {
while (!end) {
Thread.sleep(50);
}
} catch (Exception exception) {
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
switch (mode) {
case PTRListview.PTR_MODE_LOAD:
try {
mRefreshedView.onLoadComplete();
} catch (Exception e) {
}
break;
case PTRListview.PTR_MODE_REFRESH:
try {
mRefreshedView.onRefreshComplete();
} catch (Exception e) {
}
break;
}
}
}
}