package com.flightfeather.ducha.module.task; import android.app.AlertDialog; import android.arch.lifecycle.ViewModelProviders; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.flightfeather.ducha.R; import com.flightfeather.ducha.module.common.ExportedFileActivity; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import cn.flightfeather.thirdappmodule.activity.NewMonthTaskActivity; import cn.flightfeather.thirdappmodule.activity.ScenseMapActivity; import cn.flightfeather.thirdappmodule.activity.TaskActivity; import cn.flightfeather.thirdappmodule.adapter.RecyclerItemClickListener; import cn.flightfeather.thirdappmodule.adapter.TaskListAdapter; import cn.flightfeather.thirdappmodule.bean.entity.Subtask; import cn.flightfeather.thirdappmodule.bean.vo.TaskVo; import cn.flightfeather.thirdappmodule.common.net.ResultCallBack; import cn.flightfeather.thirdappmodule.model.event.NewTaskEvent; import cn.flightfeather.thirdappmodule.module.task.MonthTaskManagementActivity; import cn.flightfeather.thirdappmodule.module.task.NewSubTaskActivity; import cn.flightfeather.thirdappmodule.module.task.SceneDetailActivity; import cn.flightfeather.thirdappmodule.util.CommonUtils; import cn.flightfeather.thirdappmodule.util.Constant; import cn.flightfeather.thirdappmodule.util.DateFormatter; import cn.flightfeather.thirdappmodule.util.Domain; import cn.flightfeather.thirdappmodule.view.CircleProgressView; /** * */ public class DCTaskFragment extends Fragment implements RecyclerItemClickListener.OnItemClickListener , View.OnClickListener { private int taskKindChoice = 1; private boolean requestAgain; private Map> taskAllMapList = new HashMap<>(); private boolean firstLoad = true; private String mCurYearMonth; private String mToday; private ArrayList mTopClassTaskList = new ArrayList<>(); private ArrayList mSubtaskList = new ArrayList<>(); private ArrayList mDayTaskList = new ArrayList<>(); private CircleProgressView daytask_circleprogress; private CircleProgressView weektask_circleprogress; private CircleProgressView monthtask_circleprogress; private TaskListAdapter mAdapter; private View tv_no_task; private View view_waiting; private AlertDialog mCreateUnfixedScenseTaskDialog; private int mTopClassTaskChoice; private DCTaskViewModel taskViewModel; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { EventBus.getDefault().register(this); taskViewModel = ViewModelProviders.of(this).get(DCTaskViewModel.class); return inflater.inflate(R.layout.fragment_task, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initUI(view); initData(); // view.findViewById(R.id.ll_container_todytask).setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // try { // int a = 0 / 0; // } catch (Exception e) { // MyCrashHandler c = MyCrashHandler.Companion.getInstance(); // if (c != null) { // c.catchException(e); // } // } // } // }); } @Override public void onDestroy() { EventBus.getDefault().unregister(this); super.onDestroy(); } /** * 获取数据 */ private void initData() { Date now = Calendar.getInstance().getTime(); mCurYearMonth = DateFormatter.YearMonthFormat.format(now); mToday = DateFormatter.dateFormat2.format(now); getTodaySubTask(); } private void initUI(View view) { ViewGroup rl_addTask = view.findViewById(R.id.rl_add_task); view.findViewById(R.id.rl_scense_map).setOnClickListener(this); view.findViewById(R.id.cl_add_subTask).setOnClickListener(this); view.findViewById(R.id.rl_add_scense).setOnClickListener(this); view.findViewById(R.id.day_task).setOnClickListener(this); view.findViewById(R.id.week_task).setOnClickListener(this); view.findViewById(R.id.month_task).setOnClickListener(this); view.findViewById(R.id.ll_container_taskadjust).setOnClickListener(this); view.findViewById(R.id.rl_container_task_export).setOnClickListener(this); view_waiting = view.findViewById(R.id.view_waiting); tv_no_task = view.findViewById(R.id.tv_no_task); RecyclerView mRecyclerView = view.findViewById(R.id.rv_container); LinearLayoutManager manager = new LinearLayoutManager(getActivity()); mRecyclerView.setLayoutManager(manager); mAdapter = new TaskListAdapter(getActivity(), mSubtaskList); mAdapter.setShowDate(false); mRecyclerView.setAdapter(mAdapter); mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), mRecyclerView, this)); daytask_circleprogress = view.findViewById(R.id.daytask_circleprogress); weektask_circleprogress = view.findViewById(R.id.weektask_circleprogress); monthtask_circleprogress = view.findViewById(R.id.monthtask_circleprogress); daytask_circleprogress.setRGB(83, 230, 149); weektask_circleprogress.setRGB(107, 191, 245); monthtask_circleprogress.setRGB(236, 120, 101); daytask_circleprogress.setProgress(0, 0); weektask_circleprogress.setProgress(0, 0); monthtask_circleprogress.setProgress(0, 0); rl_addTask.setOnClickListener(this); } private void getTodaySubTask() { view_waiting.setVisibility(View.VISIBLE); taskViewModel.getSubTaskByDate(new Date(), new ResultCallBack>() { @Override public void onPage(int current, int total) { } @Override public void onCacheSuccess(@org.jetbrains.annotations.Nullable List result) { } @Override public void onSuccess(@org.jetbrains.annotations.Nullable List result) { view_waiting.setVisibility(View.GONE); if (result != null) { refreshUI(result); } } @Override public void onFailure() { view_waiting.setVisibility(View.GONE); } }); } private void refreshUI(List subTaskList) { mSubtaskList.clear(); int subTaskTotalNumToday = 0; int subTaskFinishedNumToday = 0; for (Subtask subTask : subTaskList) { subTaskTotalNumToday++; if (subTask.getStatus().equals(Domain.TASK_STATUS_FINISHED)) { subTaskFinishedNumToday++; } mSubtaskList.add(subTask); } Subtask subtask = new Subtask(); subtask.setPlanstarttime(new Date()); subtask.setExtension1(String.valueOf(subTaskTotalNumToday)); subtask.setExtension2(String.valueOf(subTaskFinishedNumToday)); mSubtaskList.add(0, subtask); if (mSubtaskList.size() > 0) { mAdapter.notifyDataSetChanged(); tv_no_task.setVisibility(View.GONE); } } /** * 遍历获取的数据,更新界面 */ private void invalidate() { mTopClassTaskList.clear(); mDayTaskList.clear(); mSubtaskList.clear(); int daytaskTotalNumThisWeek = 0; int daytaskFinishedNumThisWeek = 0; int daytaskTotalNumThisMonth = 0; int daytaskFinishedNumThisMonth = 0; int subtaskTotalNumToday = 0; int subtaskFinishedNumToday = 0; for (TaskVo taskVo : taskAllMapList.get(mCurYearMonth)) { mTopClassTaskList.add(taskVo); for (TaskVo dayTaskVo : taskVo.getDaytaskList()) { daytaskTotalNumThisMonth++; mDayTaskList.add(dayTaskVo); long taskTime = dayTaskVo.getStarttime().getTime(); long monday = CommonUtils.getTimesWeekmorning().getTime(); long sunday = CommonUtils.getTimesWeeknight().getTime(); if (taskTime >= monday && taskTime <= sunday) { daytaskTotalNumThisWeek++; if (dayTaskVo.getRuningstatus().equals(Domain.TASK_STATUS_FINISHED)) { daytaskFinishedNumThisWeek++; } } if (dayTaskVo.getRuningstatus().equals(Domain.TASK_STATUS_FINISHED)) { daytaskFinishedNumThisMonth++; } List subTaskList = dayTaskVo.getSubtaskList(); for (Subtask subtask : subTaskList) { String subtaskStartTime = DateFormatter.dateFormat2.format(subtask.getPlanstarttime()); if (subtaskStartTime.equals(mToday)) { subtaskTotalNumToday++; if (subtask.getStatus().equals(Domain.TASK_STATUS_FINISHED)) { subtaskFinishedNumToday++; } mSubtaskList.add(subtask); } } } } Subtask subtask = new Subtask(); subtask.setPlanstarttime(new Date()); subtask.setExtension1(String.valueOf(subtaskTotalNumToday)); subtask.setExtension2(String.valueOf(subtaskFinishedNumToday)); mSubtaskList.add(0, subtask); daytask_circleprogress.setProgress(subtaskFinishedNumToday, subtaskTotalNumToday); weektask_circleprogress.setProgress(daytaskFinishedNumThisWeek, daytaskTotalNumThisWeek); monthtask_circleprogress.setProgress(daytaskFinishedNumThisMonth, daytaskTotalNumThisMonth); if (mSubtaskList.size() > 0) { mAdapter.notifyDataSetChanged(); tv_no_task.setVisibility(View.GONE); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.rl_add_task: Intent intent = new Intent(getActivity(), NewMonthTaskActivity.class); startActivity(intent); break; case R.id.rl_scense_map: Intent intent1 = new Intent(getActivity(), ScenseMapActivity.class); intent1.putExtra(Constant.KEY_INTENT_TODAY_TASKLIST, mSubtaskList); getActivity().startActivityForResult(intent1, Constant.REQUESTCODE_FROM_TASKFRAGMENT); break; case R.id.cl_add_subTask: showTaskKindDialog(); break; case R.id.rl_add_scense: startActivity(new Intent(getActivity(), SceneDetailActivity.class)); break; case R.id.day_task: case R.id.week_task: case R.id.month_task: Intent intent2 = new Intent(getActivity(), TaskActivity.class); intent2.putExtra(Constant.KEY_INTENT_TASK_PERIOD, v.getId()); startActivity(intent2); break; case R.id.rl_container_task_export: Intent intent4 = new Intent(getActivity(), ExportedFileActivity.class); startActivity(intent4); break; case R.id.ll_container_taskadjust: Intent intent3 = new Intent(getActivity(), MonthTaskManagementActivity.class); startActivity(intent3); break; } } /** * 显示新增子任务类型:预定任务、临时任务 */ private void showTaskKindDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); final String[] items = {"预定任务", "临时任务"}; builder.setTitle("选择任务类型"); builder.setSingleChoiceItems(items, taskKindChoice, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { taskKindChoice = which; } }); builder.setPositiveButton("确定", (dialog, which) -> { dialog.dismiss(); Intent intent = new Intent(getActivity(), NewSubTaskActivity.class); switch (taskKindChoice) { case 0: intent = new Intent(getActivity(), NewSubTaskActivity.class); break; case 1: intent = new Intent(getActivity(), DCNewTempTaskActivity.class); break; } startActivity(intent); }); builder.create().show(); } private void showCreateUnfixedScenseTaskDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); final ArrayList list = new ArrayList<>(); for (TaskVo taskVo : mTopClassTaskList) { if (taskVo.getExtension2() != null && taskVo.getExtension2().equals(Domain.UNFIXED_SCNESE_ALLOWED)) { list.add(taskVo); } } final String[] items = new String[list.size()]; for (int i = 0; i < items.length; i++) { TaskVo taskVo = list.get(i); items[i] = taskVo.getName(); } builder.setSingleChoiceItems(items, mTopClassTaskChoice, (dialog, which) -> mTopClassTaskChoice = which); builder.setPositiveButton("确定", (dialog, which) -> showCheckTaskInfoDialog(list.get(mTopClassTaskChoice))); mCreateUnfixedScenseTaskDialog = builder.create(); mCreateUnfixedScenseTaskDialog.show(); } private void showCheckTaskInfoDialog(final TaskVo taskVo) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle("提示"); builder.setMessage("当前选中的顶层任务为" + taskVo.getName()); builder.setPositiveButton("确定", (dialog, which) -> { // taskViewModel.crea; }); builder.create().show(); } private void showTurnToInspectionDialog(final Subtask subtask) { new AlertDialog.Builder(getActivity()).setTitle("提示") .setMessage("子任务创建成功,前往执行?") .setNegativeButton(R.string.cancel, null) .setPositiveButton(R.string.yes, (dialog, which) -> { dialog.cancel(); if (subtask != null) { Intent intent = new Intent("cn.flightfeather.thirdapp.broadcasereceiver.MainReceiver"); try { intent.putExtra("subtask", subtask); // Log.e("数据!!", intent.getStringExtra("subtask")); intent.setAction(Constant.GOTOSUBTASK); // getActivity().switchSelectedFragment(ll_inspection); getActivity().sendBroadcast(intent); } catch (NullPointerException e) { e.printStackTrace(); } } }).show(); } @Override public void onItemClick(View view, int position) { } @Override public void onItemLongClick(View view, int position) { } // FIXME: 2020/6/9 此处更新方式依旧使用的是老的获取三个月数据的接口,之后替换为当前月的所有任务或当日的所有任务接口 @Subscribe(threadMode = ThreadMode.MAIN) public void onNewTaskCreated(NewTaskEvent event) { getTodaySubTask(); } }