package org.aisen.weibo.sina.ui.fragment.draft; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.TextView; import com.afollestad.materialdialogs.AlertDialogWrapper; import org.aisen.android.common.context.GlobalContext; import org.aisen.android.common.utils.DateUtils; import org.aisen.android.common.utils.SystemUtils; import org.aisen.android.common.utils.ViewUtils; import org.aisen.android.network.task.TaskException; import org.aisen.android.network.task.WorkTask; import org.aisen.android.support.inject.ViewInject; import org.aisen.android.ui.fragment.ABaseFragment; import org.aisen.android.ui.fragment.ARecycleViewFragment; import org.aisen.android.ui.fragment.adapter.ARecycleViewItemView; import org.aisen.android.ui.fragment.itemview.IITemView; import org.aisen.android.ui.fragment.itemview.IItemViewCreator; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.base.AppContext; import org.aisen.weibo.sina.base.MyApplication; import org.aisen.weibo.sina.service.PublishService; import org.aisen.weibo.sina.service.publisher.PublishManager; import org.aisen.weibo.sina.support.bean.PublishBean; import org.aisen.weibo.sina.support.bean.PublishType; import org.aisen.weibo.sina.support.sqlit.PublishDB; import org.aisen.weibo.sina.support.utils.ThemeUtils; import org.aisen.weibo.sina.support.utils.UMengUtil; import org.aisen.weibo.sina.ui.activity.publish.PublishActivity; import org.aisen.weibo.sina.ui.fragment.base.BizFragment; import org.aisen.weibo.sina.ui.widget.AisenTextView; import java.util.ArrayList; import java.util.List; /** * 草稿箱 * * @author wangdan */ public class DraftFragment extends ARecycleViewFragment<PublishBean, ArrayList<PublishBean>> implements View.OnClickListener { public static ABaseFragment newInstance() { return new DraftFragment(); } @Override public int inflateContentView() { return R.layout.ui_draft; } private void setViewPadding(View viewGroup) { viewGroup.setPadding(viewGroup.getPaddingLeft(), viewGroup.getPaddingTop(), viewGroup.getPaddingRight(), SystemUtils.getNavigationBarHeight(getActivity())); } @Override protected void setupRefreshConfig(RefreshConfig config) { super.setupRefreshConfig(config); config.emptyHint = getString(R.string.empty_draft); config.footerMoreEnable = false; } @Override protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) { super.layoutInit(inflater, savedInstanceSate); setViewPadding(getEmptyLayout()); setViewPadding(getLoadingLayout()); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { PublishBean bean = getAdapterItems().get(position); switch (bean.getType()) { case status: PublishActivity.publishStatus(getActivity(), bean); break; case statusRepost: PublishActivity.publishStatusRepost(getActivity(), bean, bean.getStatusContent()); break; case commentReply: PublishActivity.publishCommentReply(getActivity(), bean, bean.getStatusComment(), false); break; case commentCreate: PublishActivity.publishStatusComment(getActivity(), bean, bean.getStatusContent()); break; default: break; } } @Override public IItemViewCreator<PublishBean> configItemViewCreator() { return new IItemViewCreator<PublishBean>() { @Override public View newContentView(LayoutInflater inflater, ViewGroup parent, int viewType) { return inflater.inflate(R.layout.item_draft, parent, false); } @Override public IITemView<PublishBean> newItemView(View convertView, int viewType) { return new DraftboxItemView(convertView); } }; } @Override public void onResume() { super.onResume(); UMengUtil.onPageStart(getActivity(), "草稿箱页"); IntentFilter filter = new IntentFilter(); filter.addAction(PublishManager.ACTION_PUBLISH_CHANNGED); getActivity().registerReceiver(receiver, filter); new DraftTask(RefreshMode.reset).execute(); } @Override public void onPause() { super.onPause(); UMengUtil.onPageEnd(getActivity(), "草稿箱页"); getActivity().unregisterReceiver(receiver); } BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent != null && PublishManager.ACTION_PUBLISH_CHANNGED.equals(intent.getAction())) new DraftTask(RefreshMode.reset).execute(); } }; @Override public void requestData(RefreshMode mode) { } class DraftTask extends APagingTask<Void, Void, ArrayList<PublishBean>> { public DraftTask(RefreshMode mode) { super(mode); } @Override protected List<PublishBean> parseResult(ArrayList<PublishBean> result) { return result; } @Override protected ArrayList<PublishBean> workInBackground(RefreshMode mode, String previousPage, String nextPage, Void... params) throws TaskException { return PublishDB.getPublishList(AppContext.getAccount().getUser()); } } class DraftboxItemView extends ARecycleViewItemView<PublishBean> { @ViewInject(id = R.id.txtType) TextView txtType; @ViewInject(id = R.id.txtTiming) TextView txtTiming; @ViewInject(id = R.id.txtContent) AisenTextView txtContent; @ViewInject(id = R.id.txtError) TextView txtError; @ViewInject(id = R.id.container) View container; @ViewInject(id = R.id.btnDel) View btnDel; @ViewInject(id = R.id.btnResend) View btnResend; public DraftboxItemView(View itemView) { super(getActivity(), itemView); } @Override public void onBindData(View convertView, PublishBean data, int position) { txtTiming.setVisibility(View.GONE); PublishType type = data.getType(); if (type == PublishType.status) { txtType.setText(R.string.draft_type_status); if (data.getTiming() > 0) { txtTiming.setText(String.format( getString(R.string.draft_timing_hint), DateUtils.formatDate(data.getTiming(), getString(R.string.draft_date_format)))); txtTiming.setVisibility(View.VISIBLE); } } else if (type == PublishType.commentCreate) txtType.setText(R.string.draft_type_create_cmt); else if (type == PublishType.commentReply) txtType.setText(R.string.draft_type_reply_cmt); else if (type == PublishType.statusRepost) txtType.setText(R.string.draft_type_repost_status); txtContent.setContent(data.getText()); if (data.getTiming() > 0 && data.getTiming() < System.currentTimeMillis()) { txtError.setVisibility(View.VISIBLE); txtError.setText(R.string.draft_timing_expired); } else { if (!TextUtils.isEmpty(data.getErrorMsg())) txtError.setText(data.getErrorMsg()); txtError.setVisibility(TextUtils.isEmpty(data.getErrorMsg()) ? View.GONE : View.VISIBLE); } BizFragment.createBizFragment(DraftFragment.this).bindOnTouchListener(txtContent); btnDel.setTag(data); btnDel.setOnClickListener(DraftFragment.this); btnResend.setTag(data); btnResend.setOnClickListener(DraftFragment.this); } } @Override public void onClick(View v) { final PublishBean bean = (PublishBean) v.getTag(); // 删除 if (v.getId() == R.id.btnDel) { deleteDraft(bean); } // 重新发送 else if (v.getId() == R.id.btnResend) { BizFragment.createBizFragment(this).checkProfile(new BizFragment.CheckProfileCallback() { @Override public void onCheckProfileSuccess() { PublishService.publish(getActivity(), bean); } @Override public void onCheckProfileFaild() { showMessage(R.string.publish_request_ad_auth_faild); } }); } } private void deleteDraft(final PublishBean bean) { new AlertDialogWrapper.Builder(getActivity()) .setMessage(R.string.draft_del_confirm) .setNegativeButton(R.string.cancel, null) .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { new WorkTask<Void, Void, Void>() { @Override protected void onPrepare() { ViewUtils.createProgressDialog(getActivity(), getString(R.string.draft_del_draft_loading), ThemeUtils.getThemeColor()).show(); } @Override protected void onSuccess(Void result) { getAdapterItems().remove(bean); getAdapter().notifyDataSetChanged(); showMessage(R.string.draft_del_draft_hint); Intent intent = new Intent(); intent.setAction(PublishManager.ACTION_PUBLISH_CHANNGED); GlobalContext.getInstance().sendBroadcast(intent); } @Override protected void onFinished() { ViewUtils.dismissProgressDialog(); new DraftTask(RefreshMode.reset).execute(); } ; @Override public Void workInBackground(Void... params) throws TaskException { try { Thread.sleep(500); } catch (Exception e) { } if (bean.getTiming() > 0) MyApplication.removePublishAlarm(bean); PublishDB.deletePublish(bean, AppContext.getAccount().getUser()); return null; } }.execute(); } }) .show(); } }