package org.aisen.weibo.sina.ui.fragment.publish;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import com.fourmob.datetimepicker.date.DatePickerDialog;
import com.sleepbot.datetimepicker.time.RadialPickerLayout;
import com.sleepbot.datetimepicker.time.TimePickerDialog;
import org.aisen.android.common.context.GlobalContext;
import org.aisen.android.common.utils.DateUtils;
import org.aisen.android.common.utils.Logger;
import org.aisen.android.network.http.Params;
import org.aisen.android.support.inject.ViewInject;
import org.aisen.android.ui.activity.basic.BaseActivity;
import org.aisen.android.ui.fragment.ABaseFragment;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.base.AppContext;
import org.aisen.weibo.sina.sinasdk.bean.Group;
import org.aisen.weibo.sina.sinasdk.bean.Groups;
import org.aisen.weibo.sina.support.bean.PublishBean;
import org.aisen.weibo.sina.support.bean.PublishBean.PublishStatus;
import org.aisen.weibo.sina.support.bean.PublishType;
import org.aisen.weibo.sina.support.utils.AisenUtils;
import org.aisen.weibo.sina.support.utils.UMengUtil;
import org.aisen.weibo.sina.ui.fragment.base.BizFragment;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
* 新微博
*
* @author wangdan
*
*/
public class PublishStatusFragment extends APublishFragment {
public static ABaseFragment newInstance(PublishBean bean) {
PublishStatusFragment fragment = new PublishStatusFragment();
if (bean != null) {
Bundle args = new Bundle();
args.putSerializable("bean", bean);
fragment.setArguments(args);
}
return fragment;
}
@ViewInject(id = R.id.txtGroupHint)
TextView txtGroupHint;
@ViewInject(id = R.id.txtTiming)
TextView txtTiming;
@Override
public int inflateContentView() {
return R.layout.ui_publish_status;
}
@Override
protected void layoutInit(LayoutInflater inflater, Bundle savedInstanceSate) {
super.layoutInit(inflater, savedInstanceSate);
((BaseActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (getPublishBean().getExtras() != null && getPublishBean().getExtras().containsKey("feedback")) {
((BaseActivity) getActivity()).getSupportActionBar().setTitle(R.string.title_feedback);
}
else if (getPublishBean().getExtras() != null && getPublishBean().getExtras().containsKey("recommend")) {
((BaseActivity) getActivity()).getSupportActionBar().setTitle(R.string.title_recommend);
}
else if (getPublishBean().getExtras() != null && getPublishBean().getExtras().containsKey("share")) {
((BaseActivity) getActivity()).getSupportActionBar().setTitle(R.string.title_share);
}
else {
((BaseActivity) getActivity()).getSupportActionBar().setTitle(R.string.title_new_status);
}
editContent.setHint(R.string.title_status_def);
setVisiableHint();
setTimingHint();
// 如果是推荐,或者是分享图片,则不现实拍照按钮
if (getPublishBean().getExtras() != null) {
if (getPublishBean().getExtras().containsKey("share") || getPublishBean().getExtras().containsKey("recommend"))
btnCamera.setVisibility(View.GONE);
}
// 2014-09-15 解决当文字超过限制后,因为定时设置,清除掉了错误提示,这里再次刷新一下界面
refreshUI();
setHasOptionsMenu(true);
}
private void setTimingHint() {
if (getPublishBean().getTiming() > 0) {
txtTiming.setVisibility(View.VISIBLE);
txtTiming.setText(String.format(
getString(R.string.draft_timing_hint),
DateUtils.formatDate(getPublishBean().getTiming(), getString(R.string.draft_date_format))));
if (getPublishBean().getTiming() < System.currentTimeMillis()) {
txtErrorHint.setVisibility(View.VISIBLE);
txtErrorHint.setText(R.string.draft_timing_expired);
}
else {
txtErrorHint.setVisibility(View.GONE);
}
}
else {
txtErrorHint.setVisibility(View.GONE);
txtTiming.setVisibility(View.GONE);
}
}
private void setVisiableHint() {
// 所有人可见
if ("0".equals(getPublishBean().getParams().getParameter("visible"))) {
txtGroupHint.setText(R.string.publish_all_visiable);
}
// 密友可见
else if ("2".equals(getPublishBean().getParams().getParameter("visible"))) {
txtGroupHint.setText(R.string.publish_miyou_visiable);
}
// 分组可见
else if ("3".equals(getPublishBean().getParams().getParameter("visible"))) {
Groups groups = AppContext.getAccount().getGroups();
for (Group group : groups.getLists()) {
if (group.getIdstr().equals(getPublishBean().getParams().getParameter("list_id"))) {
txtGroupHint.setText(String.format(getString(R.string.publish_group_visiable), group.getName()));
break;
}
}
}
}
@Override
PublishBean newPublishBean() {
PublishBean bean = new PublishBean();
bean.setStatus(PublishStatus.create);
bean.setType(PublishType.status);
Params params = new Params();
// 默认所有人可见
params.addParameter("visible", "0");
bean.setParams(params);
return bean;
}
public static PublishBean generateBean() {
PublishBean bean = new PublishBean();
bean.setStatus(PublishStatus.create);
bean.setType(PublishType.status);
Params params = new Params();
// 默认所有人可见
params.addParameter("visible", "0");
bean.setParams(params);
return bean;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_publish, menu);
// 添加分组
if (AppContext.getAccount().getGroups() == null || AppContext.getAccount().getGroups().getLists().size() == 0) {
}
else {
SubMenu subMenu = menu.addSubMenu(R.id.publish, 333, 2,
GlobalContext.getInstance().getResources().getString(R.string.group_selected_visiable));
for (int i = 0; i < AppContext.getAccount().getGroups().getLists().size(); i++) {
Group group = AppContext.getAccount().getGroups().getLists().get(i);
subMenu.add(100, i, i, group.getName());
}
}
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// 取消定时
menu.findItem(R.id.cancel_timing).setVisible(getPublishBean().getTiming() > 0);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 所有人可见
if (item.getItemId() == R.id.group_all_visiable) {
getPublishBean().getParams().addParameter("visible", "0");
}
// 设置定时
else if (item.getItemId() == R.id.publish_timing) {
setTiming();// 定时发布
}
// 取消定时
else if (item.getItemId() == R.id.cancel_timing) {
getPublishBean().setTiming(0);
setTimingHint();
}
// 分组
else {
int groupIndex = item.getItemId();
if (groupIndex < AppContext.getAccount().getGroups().getLists().size()) {
Group group = AppContext.getAccount().getGroups().getLists().get(groupIndex);
if (group.getName().equalsIgnoreCase(item.getTitle().toString())) {
getPublishBean().getParams().addParameter("visible", "3");
getPublishBean().getParams().addParameter("list_id", group.getIdstr());
setVisiableHint();
}
}
}
setVisiableHint();
return super.onOptionsItemSelected(item);
}
private String[] overflowMenuItems;
void popOverflowMenu(final View v) {
List<String> itemList = new ArrayList<String>();
itemList.add(getString(R.string.publish_all_visiable));
if (AppContext.getAccount().getGroups() == null || AppContext.getAccount().getGroups().getLists().size() == 0)
;
else
itemList.add(getString(R.string.publish_group_visiable_menu));
// itemList.add("密友可见");
itemList.add(getString(R.string.publish_set_timing));
if (getPublishBean().getTiming() > 0)
itemList.add(getString(R.string.publish_cancel_timing));
overflowMenuItems = new String[itemList.size()];
for (int i = 0; i < itemList.size(); i++)
overflowMenuItems[i] = itemList.get(i);
AisenUtils.showMenuDialog(this, v, overflowMenuItems, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (getString(R.string.publish_all_visiable).equals(overflowMenuItems[which])) {
getPublishBean().getParams().addParameter("visible", "0");// 所有人可见
} else if (getString(R.string.publish_miyou_visiable).equals(overflowMenuItems[which])) {
getPublishBean().getParams().addParameter("visible", "2");// 密友可见
} else if (getString(R.string.publish_group_visiable_menu).equals(overflowMenuItems[which])) {
setGroupVisiable(v);// 分组可见
} else if (getString(R.string.publish_set_timing).equals(overflowMenuItems[which])) {
setTiming();// 定时发布
} else if (getString(R.string.publish_cancel_timing).equals(overflowMenuItems[which])) {
getPublishBean().setTiming(0);
setTimingHint();
}
setVisiableHint();
}
});
}
// 设置分组可见
private void setGroupVisiable(View v) {
String[] groupArr = new String[AppContext.getAccount().getGroups().getLists().size()];
for (int i = 0; i < AppContext.getAccount().getGroups().getLists().size(); i++)
groupArr[i] = AppContext.getAccount().getGroups().getLists().get(i).getName();
AisenUtils.showMenuDialog(this, v, groupArr, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getPublishBean().getParams().addParameter("visible", "3");
getPublishBean().getParams().addParameter("list_id", AppContext.getAccount().getGroups().getLists().get(which).getIdstr());
setVisiableHint();
}
});
}
// 设置定时发布
private void setTiming() {
final Calendar calendar = Calendar.getInstance();
if (getPublishBean().getTiming() > 0)
calendar.setTimeInMillis(getPublishBean().getTiming());
View contentView = View.inflate(getActivity(), R.layout.lay_publish_timing, null);
final TextView btnDate = (TextView) contentView.findViewById(R.id.txtDate);
final TextView btnTime = (TextView) contentView.findViewById(R.id.txtTime);
btnTime.setText(DateUtils.formatDate(calendar.getTimeInMillis(), getString(R.string.publish_date_format_hm)));
DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) {
Logger.v(TAG, String.format("onDateSet:yeat=%d, month = %d, day = %d", year, month, day));
if (checkTiming(year, month, day, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE))) {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
Calendar c = Calendar.getInstance();
if (month == c.get(Calendar.MONTH) && day == c.get(Calendar.DAY_OF_MONTH)) {
btnDate.setText(R.string.publish_today);
}
else {
btnDate.setText(DateUtils.formatDate(calendar.getTimeInMillis(), getString(R.string.publish_date_format_md)));
}
btnTime.performClick();
}
}
};
TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) {
Logger.v(TAG, String.format("onTimeSet:hourOfDay = %d, minute = %d", hourOfDay, minute));
if (checkTiming(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), hourOfDay, minute)) {
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
btnTime.setText(DateUtils.formatDate(calendar.getTimeInMillis(), getString(R.string.publish_date_format_hm)));
}
}
};
final DatePickerDialog datePickerDialog = DatePickerDialog.newInstance(onDateSetListener,
calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), true);
final TimePickerDialog timePickerDialog = TimePickerDialog.newInstance(onTimeSetListener,
calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), false, false);
OnClickListener timingOnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
// 设置日期
if (v.getId() == R.id.txtDate) {
datePickerDialog.setVibrate(false);
datePickerDialog.setYearRange(calendar.get(Calendar.YEAR), calendar.get(Calendar.YEAR));
datePickerDialog.setCloseOnSingleTapDay(false);
datePickerDialog.show(getFragmentManager(), "DatePickerDialog");
}
// 设置时间
else if (v.getId() == R.id.txtTime) {
timePickerDialog.setVibrate(false);
timePickerDialog.setStartTime(calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE));
timePickerDialog.setCloseOnSingleTapMinute(false);
timePickerDialog.show(getFragmentManager(), "TimePickerDialog");
}
}
};
btnDate.setOnClickListener(timingOnClickListener);
btnTime.setOnClickListener(timingOnClickListener);
new AlertDialogWrapper.Builder(getActivity()).setTitle(R.string.publish_timing_set_title)
.setView(contentView)
.setCancelable(false)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// FIXME
// getPublishBean().setTiming(System.currentTimeMillis() + 15 * 1000);
calendar.set(Calendar.SECOND, 0);
getPublishBean().setTiming(calendar.getTimeInMillis() / 1000 * 1000);
getActivity().invalidateOptionsMenu();
setTimingHint();
}
})
.show();
}
private boolean checkTiming(int year, int month, int dayOfMonth, int hourOfDay, int minute) {
final Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
if (calendar.getTimeInMillis() < Calendar.getInstance().getTimeInMillis()) {
showMessage(R.string.error_timing);
return false;
}
return true;
}
@Override
boolean checkValid(PublishBean bean) {
String content = editContent.getText().toString();
if (bean.getExtras() != null && bean.getPics() != null && TextUtils.isEmpty(content)) {
// content = getString(R.string.publish_share_pic) + " ";
}
if (TextUtils.isEmpty(content)) {
showMessage(R.string.error_none_status);
return false;
}
// status
bean.getParams().addParameter("status", content);
// visible
// params.addParameter("visible", content);
// list_id
// params.addParameter("list_id", content);
// lat
// params.addParameter("lat", content);
// long
// params.addParameter("long", content);
return true;
}
@Override
protected void send() {
// 单个图片或者没有图片,用aisen发布即可
if (getPublishBean().getPics() == null || getPublishBean().getPics().length == 1) {
super.send();
}
// 发送多个图片时,需要高级权限
else {
BizFragment.createBizFragment(this).checkProfile(new BizFragment.CheckProfileCallback() {
@Override
public void onCheckProfileSuccess() {
PublishStatusFragment.super.send();
}
@Override
public void onCheckProfileFaild() {
showMessage(R.string.publish_request_ad_auth_faild);
}
});
}
}
@Override
public void onResume() {
super.onResume();
UMengUtil.onPageStart(getActivity(), "发布新微博页");
}
@Override
public void onPause() {
super.onPause();
UMengUtil.onPageEnd(getActivity(), "发布新微博页");
}
}