package com.dayu.pipirrapp.fragment; import static androidx.core.content.ContextCompat.getSystemService; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Typeface; import android.os.Build; import android.os.Bundle; import android.os.VibrationEffect; import android.os.Vibrator; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.LinearLayoutManager; import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.R; import com.dayu.pipirrapp.activity.MainActivity; import com.dayu.pipirrapp.activity.OrderDetailActivity; import com.dayu.pipirrapp.adapter.OrderAdapter; import com.dayu.pipirrapp.bean.net.OrderDetailResult; import com.dayu.pipirrapp.bean.net.OrderListResult; import com.dayu.pipirrapp.databinding.FragmentOrderBinding; import com.dayu.pipirrapp.net.ApiManager; import com.dayu.pipirrapp.net.BaseResponse; import com.dayu.pipirrapp.net.Constants; import com.dayu.pipirrapp.net.subscribers.SubscriberListener; import com.dayu.pipirrapp.utils.CommonKeyName; import com.dayu.pipirrapp.utils.MyLog; import com.dayu.pipirrapp.utils.ToastUtil; import com.jeremyliao.liveeventbus.LiveEventBus; import com.scwang.smart.refresh.footer.ClassicsFooter; import com.scwang.smart.refresh.header.ClassicsHeader; import com.scwang.smart.refresh.layout.api.RefreshLayout; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * author: zuo * Date: 2023/12/20 * Time: 10:12 * 备注:首页 */ public class OrderFragment extends BaseFragment { public static final int RESULT_REFRESH = 1001; private final int STATE_DONE = 2; private final int STATE_UNDONE = 1; FragmentOrderBinding binding; OrderAdapter mAdapter; OrderAdapter mDoneAdapter; int page = 1; int pageSize = 10; int state = 1; List recordsListDone = new ArrayList<>(); List recordsList = new ArrayList<>(); RefreshLayout myRefreshLayout; //最后刷新的时间 long lastRefreshDate; //显示红点的时间 long showRedlotDate; private ActivityResultLauncher activityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == RESULT_REFRESH) { myRefreshLayout.autoRefresh(); } }); /** * 设置天气相关信息 * * @param */ // private void setWeatherData(WeatherResponse data) { // try { // if (data.getResults() != null) { // binding.cityName.setText(data.getResults()[0].getLocation().getName()); // binding.time.setText(data.getDate()); // int weatherImg = ImageUtils.getWeatherDrawable(data.getResults()[0].getDaily()[0].getCode_day()); // if (weatherImg != 0) { // binding.weatherImg.setImageDrawable(getResources().getDrawable(weatherImg)); // } // binding.weatherName.setText(data.getResults()[0].getDaily()[0].getText_day()); // binding.weatherTemperature.setText(data.getResults()[0].getDaily()[0].getLow() + "°C ~ " + data.getResults()[0].getDaily()[0].getHigh() + "°C"); // } // } catch (Exception e) { // e.printStackTrace(); // CrashReport.postCatchedException(e); // } // } @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = FragmentOrderBinding.inflate(inflater, container, false); initView(); //mq传来的消息 LiveEventBus.get(CommonKeyName.MQTTData).observeForever(new Observer() { @Override public void onChanged(Object o) { showRedlotDate = new Date().getTime(); // binding.redDotImg.setVisibility(View.VISIBLE); getMarkerData((String) o); } }); return binding.getRoot(); } void initView() { //未完成 binding.manageStateProgressRL.setOnClickListener(v -> { chooseStateView(true); state = STATE_UNDONE;//1 未开始 2 已完成 }); //已完成 binding.manageStateFinish.setOnClickListener(v -> { chooseStateView(false); state = STATE_DONE;//1 未开始 2 已完成 }); //未完成 myRefreshLayout = (RefreshLayout) binding.refreshLayout; myRefreshLayout.setRefreshHeader(new ClassicsHeader(this.getContext())); myRefreshLayout.setRefreshFooter(new ClassicsFooter(this.getContext())); myRefreshLayout.setOnRefreshListener(refreshlayout -> { // refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败 lastRefreshDate = new Date().getTime(); if (lastRefreshDate > showRedlotDate) { //消除红点 LiveEventBus.get(CommonKeyName.RedLotRefresh).post(true); // binding.redDotImg.setVisibility(View.GONE); } recordsList.clear(); page = 0; getMarkerData(refreshlayout, true, STATE_UNDONE); }); myRefreshLayout.setOnLoadMoreListener(refreshlayout -> { page = page + 1; getMarkerData(refreshlayout, false, STATE_UNDONE); }); mAdapter = new OrderAdapter(this.getContext(), recordsList, this); LinearLayoutManager layoutManager = new LinearLayoutManager(this.getContext()); binding.recyclerView.setLayoutManager(layoutManager); binding.recyclerView.setAdapter(mAdapter); getMarkerData(myRefreshLayout, true, STATE_UNDONE); //已完成 RefreshLayout myRefreshLayoutDone = binding.refreshLayoutDone; myRefreshLayoutDone.setRefreshHeader(new ClassicsHeader(this.getContext())); myRefreshLayoutDone.setRefreshFooter(new ClassicsFooter(this.getContext())); myRefreshLayoutDone.setOnRefreshListener(refreshlayout -> { recordsListDone.clear(); page = 0; getMarkerData(refreshlayout, true, STATE_DONE); }); myRefreshLayoutDone.setOnLoadMoreListener(refreshlayout -> { page = page + 1; getMarkerData(refreshlayout, false, STATE_DONE); }); mDoneAdapter = new OrderAdapter(this.getContext(), recordsListDone, this); LinearLayoutManager layoutManagerDone = new LinearLayoutManager(this.getContext()); binding.recyclerViewDone.setLayoutManager(layoutManagerDone); binding.recyclerViewDone.setAdapter(mDoneAdapter); getMarkerData(myRefreshLayoutDone, true, 2); } @Override public void onResume() { super.onResume(); MyLog.d("OrderFragment>>onResume"); // if (showRedlotDate > lastRefreshDate) { // binding.redDotImg.setVisibility(View.VISIBLE); // } else { // binding.redDotImg.setVisibility(View.GONE); // } } @Override public void onPause() { super.onPause(); MyLog.d("OrderFragment>>onPause"); } /** * 获取未删除工单 */ private void getMarkerData(RefreshLayout refreshlayout, boolean isRefresh, int state) { Map params = new HashMap<>(); if (isRefresh) { page = 1; if (state == STATE_UNDONE) { recordsList.clear(); } else { recordsListDone.clear(); } } params.put("pageSize", pageSize); params.put("pageCurr", page); params.put("state", state); params.put("inspectorId", MyApplication.myApplication.userId); ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + "/app/workOrder/getWorkOrders", OrderListResult.class, params, new SubscriberListener>() { @Override public void onNext(BaseResponse t) { if (t.isSuccess()) { if (t.getContent().getObj() != null && t.getContent().getObj().size() > 0) { if (state == STATE_UNDONE) { recordsList.addAll(t.getContent().getObj()); } else { recordsListDone.addAll(t.getContent().getObj()); } if (t.getContent().getPageTotal() == page) { refreshlayout.finishLoadMoreWithNoMoreData(); } } else { refreshlayout.finishLoadMoreWithNoMoreData(); } } else { ToastUtil.showToast(OrderFragment.this.getContext(), t.getMsg()); } } @Override public void onCloose() { super.onCloose(); layoutFinish(refreshlayout, isRefresh); if (state == STATE_UNDONE) { mAdapter.notifyDataSetChanged(); } else { mDoneAdapter.notifyDataSetChanged(); } } }); } public void startDetail(String workOrderId, String proResultId) { Intent intent = new Intent(this.getContext(), OrderDetailActivity.class); intent.putExtra("workOrderId", workOrderId); if (!TextUtils.isEmpty(proResultId)) { intent.putExtra("proResultId", proResultId); } activityResultLauncher.launch(intent); } /** * 修改进度状态 * * @param state true为未完成 false为已完成 */ void chooseStateView(boolean state) { if (state) { binding.manageStateProgress.setTextColor(getResources().getColor(R.color.title_color, null)); binding.manageStateProgress.setBackground(getResources().getDrawable(R.drawable.ic_choose_bg_whit, null)); binding.manageStateProgressRL.setBackground(getResources().getDrawable(R.drawable.ic_choose_bg_whit, null)); binding.manageStateProgress.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); binding.manageStateFinish.setTextColor(getResources().getColor(R.color.black, null)); binding.manageStateFinish.setBackground(getResources().getDrawable(R.color.title_choose_bg, null)); binding.manageStateFinish.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL)); binding.refreshLayout.setVisibility(View.VISIBLE); binding.refreshLayoutDone.setVisibility(View.GONE); } else { binding.manageStateFinish.setTextColor(getResources().getColor(R.color.title_color, null)); binding.manageStateFinish.setBackground(getResources().getDrawable(R.drawable.ic_choose_bg_whit, null)); binding.manageStateFinish.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); binding.manageStateProgress.setTextColor(getResources().getColor(R.color.black, null)); binding.manageStateProgress.setBackground(getResources().getDrawable(R.color.title_choose_bg, null)); binding.manageStateProgressRL.setBackground(getResources().getDrawable(R.color.title_choose_bg, null)); binding.manageStateProgress.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL)); binding.refreshLayout.setVisibility(View.GONE); binding.refreshLayoutDone.setVisibility(View.VISIBLE); } } /** * 获取工单详情 */ private void getMarkerData(String workOrderId) { Map params = new HashMap<>(); params.put("workOrderId", workOrderId); ApiManager.getInstance().requestGetHideLoading(this.getContext(), Constants.BASE_URL + "/app/workOrder/getOneWorkOrder", OrderDetailResult.class, params, new SubscriberListener>() { @Override public void onNext(BaseResponse t) { if (t.isSuccess()) { if (MainActivity.workerIddata != null) { if (!MainActivity.workerIddata.containsKey(workOrderId)) { LiveEventBus.get(CommonKeyName.CreateNotification).post(t.getContent()); recordsList.add(0, t.getContent()); mAdapter.notifyItemInserted(0); } } } } }); } }