/* * 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.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; 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.util.GlobalContext; import com.suan.weclient.util.Util; import com.suan.weclient.util.data.DataManager; import com.suan.weclient.util.data.bean.AppItemBean; import com.suan.weclient.util.data.bean.MaterialBean; import com.suan.weclient.util.data.bean.MultiItemBean; import com.suan.weclient.util.data.bean.UserBean; import com.suan.weclient.util.data.holder.resultHolder.MaterialResultHolder; import com.suan.weclient.util.net.WechatManager; import com.suan.weclient.util.net.images.ImageCacheManager; import com.suan.weclient.view.ptr.PTRListview; import java.io.File; public class MassAPPFragment extends BaseFragment implements PTRListview.OnRefreshListener, PTRListview.OnLoadListener { private DataManager mDataManager; private Dialog popDialog; private View view; private LinearLayout editLayout; /* about app msg */ private RelativeLayout coverLayout; private RelativeLayout[] itemLayout; private ImageView coverImageView; private ImageView[] itemImageView; private TextView timeTextView; private TextView titleTextView; private TextView coverTextView; private TextView[] itemTextView; /* total */ private TextView massLeftNumTextView; private Button sendButton; private PTRListview ptrListview; private MaterialListAdapter materialListAdapter; private MaterialListAdapter.ItemViewHolder selectedHolder; private MaterialBean selectedBean; private MaterialHandler mHandler; public static final int REQUEST_CODE_SELECT_PHOTO = 5; public static final int REQUEST_CODE_TAKE_PHOTO = 6; 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_app_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_APP) { Message notifyMessage = new Message(); notifyMessage.arg1 = MESSAGE_NOTIFY_TYPE_REFRESH_WITH_NEW_DATA; notifyMessage.obj = materialResultHolder; mHandler.sendMessage(notifyMessage); } } }); } private void initWidgets() { titleTextView = (TextView) view.findViewById(R.id.mass_app_text_title); timeTextView = (TextView) view.findViewById(R.id.material_item_text_time); coverLayout = (RelativeLayout) view.findViewById(R.id.mass_app_layout_cover); itemLayout = new RelativeLayout[3]; itemImageView = new ImageView[3]; itemTextView = new TextView[3]; itemLayout[0] = (RelativeLayout) view.findViewById(R.id.mass_app_layout_first_item); itemLayout[1] = (RelativeLayout) view.findViewById(R.id.mass_app_layout_second_item); itemLayout[2] = (RelativeLayout) view.findViewById(R.id.mass_app_layout_third_item); coverImageView = (ImageView) view.findViewById(R.id.mass_app_img_cover); itemImageView[0] = (ImageView) view.findViewById(R.id.mass_app_img_first); itemImageView[1] = (ImageView) view.findViewById(R.id.mass_app_img_second); itemImageView[2] = (ImageView) view.findViewById(R.id.mass_app_img_third); coverTextView = (TextView) view.findViewById(R.id.mass_app_text_cover_title); itemTextView[0] = (TextView) view.findViewById(R.id.mass_app_text_first_title); itemTextView[1] = (TextView) view.findViewById(R.id.mass_app_text_second_title); itemTextView[2] = (TextView) view.findViewById(R.id.mass_app_text_third_title); editLayout = (LinearLayout) view.findViewById(R.id.mass_app_layout_edit); editLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { popMaterialList(); } }); 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(); } } } ; }); } 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(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { super.onActivityResult(requestCode, resultCode, imageReturnedIntent); switch (requestCode) { case REQUEST_CODE_SELECT_PHOTO: break; case REQUEST_CODE_TAKE_PHOTO: break; } } 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(); setAPPMessageContent(selectedHolder); 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(); } public void setAPPMessageContent(MaterialListAdapter.ItemViewHolder holder) { AppItemBean appItemBean = holder.getMaterialBean().getAppItemBean(); int itemCount = appItemBean.getMulti_item().size(); coverTextView.setText(appItemBean.getDigest()); titleTextView.setText(appItemBean.getTitle()); Bitmap contentBitmap = mDataManager.getCacheManager().getBitmap( ImageCacheManager.CACHE_MESSAGE_CONTENT + holder.getMaterialBean().getAppItemBean().getFile_id()); if (contentBitmap == null) { mDataManager.getWechatManager().getNormalImg(mDataManager.getCurrentPosition(), Util.checkImgUrl(holder.getMaterialBean().getAppItemBean().getImg_url()), coverImageView, new WechatManager.OnActionFinishListener() { @Override public void onFinish(int code, Object object) { if (code == WechatManager.ACTION_SUCCESS) { if (object != null) { Bitmap bitmap = (Bitmap) object; coverImageView.setImageBitmap(bitmap); } } } }); } else { coverImageView.setImageBitmap(contentBitmap); } for (int i = 0; i < 3; i++) { if (i < itemCount - 1) { itemLayout[i].setVisibility(View.VISIBLE); itemTextView[i].setText(appItemBean.getMulti_item().get(i + 1).getDigest()); setAppItemImg(i, holder); } else { itemLayout[i].setVisibility(View.GONE); } } } private void setAppItemImg(final int index, MaterialListAdapter.ItemViewHolder holder) { MultiItemBean multiItemBean = holder.getMaterialBean().getAppItemBean().getMulti_item().get(index); Bitmap contentBitmap = mDataManager.getCacheManager().getBitmap( ImageCacheManager.CACHE_MESSAGE_CONTENT + multiItemBean.getFile_id()); if (contentBitmap == null) { mDataManager.getWechatManager().getNormalImg(mDataManager.getCurrentPosition(), Util.checkImgUrl(multiItemBean.getCover()), itemImageView[index], new WechatManager.OnActionFinishListener() { @Override public void onFinish(int code, Object object) { if (code == WechatManager.ACTION_SUCCESS) { if (object != null) { Bitmap bitmap = (Bitmap) object; itemImageView[index].setImageBitmap(bitmap); } } } }); } else { itemImageView[index].setImageBitmap(contentBitmap); } } 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().getAppMsgList(mDataManager.getCurrentPosition(), size, new WechatManager.OnActionFinishListener() { @Override public void onFinish(int code, Object object) { switch (code) { case WechatManager.ACTION_SUCCESS: mDataManager.doMaterialGet(MaterialBean.MATERIAL_TYPE_APP, (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().getAppMsgList(mDataManager.getCurrentPosition(), 0, new WechatManager.OnActionFinishListener() { @Override public void onFinish(int code, Object object) { switch (code) { case WechatManager.ACTION_SUCCESS: mDataManager.doMaterialGet(MaterialBean.MATERIAL_TYPE_APP, (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; } } } }