|
|
@@ -0,0 +1,452 @@
|
|
|
+package com.sjkj.appthreefloor_tsgz.activity;
|
|
|
+
|
|
|
+import android.content.Intent;
|
|
|
+import android.graphics.Color;
|
|
|
+import android.graphics.drawable.Drawable;
|
|
|
+import android.os.Build;
|
|
|
+import android.text.TextUtils;
|
|
|
+import android.view.Gravity;
|
|
|
+import android.view.View;
|
|
|
+import android.widget.ImageView;
|
|
|
+import android.widget.TextView;
|
|
|
+
|
|
|
+import androidx.annotation.RequiresApi;
|
|
|
+import androidx.core.content.ContextCompat;
|
|
|
+import androidx.lifecycle.ViewModelProvider;
|
|
|
+import androidx.recyclerview.widget.LinearLayoutManager;
|
|
|
+import androidx.recyclerview.widget.RecyclerView;
|
|
|
+
|
|
|
+import com.bigkoo.pickerview.builder.TimePickerBuilder;
|
|
|
+import com.bigkoo.pickerview.listener.CustomListener;
|
|
|
+import com.bigkoo.pickerview.listener.OnTimeSelectListener;
|
|
|
+import com.bigkoo.pickerview.view.TimePickerView;
|
|
|
+import com.gyf.immersionbar.ImmersionBar;
|
|
|
+import com.hjq.window.EasyWindow;
|
|
|
+import com.hjq.window.draggable.SpringBackDraggable;
|
|
|
+import com.scwang.smartrefresh.layout.api.RefreshLayout;
|
|
|
+import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
|
|
|
+import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
|
|
|
+import com.sjkj.appthreefloor_tsgz.R;
|
|
|
+import com.sjkj.appthreefloor_tsgz.activity.viewModel.ImageryViewModel;
|
|
|
+import com.sjkj.appthreefloor_tsgz.adapter.CameraAdapter;
|
|
|
+import com.sjkj.appthreefloor_tsgz.app.App;
|
|
|
+import com.sjkj.appthreefloor_tsgz.bean.AllCameraBean;
|
|
|
+import com.sjkj.appthreefloor_tsgz.bean.CameraTypeBean;
|
|
|
+import com.sjkj.appthreefloor_tsgz.databinding.ActivityImageryBinding;
|
|
|
+import com.sjkj.appthreefloor_tsgz.net.CameraAllListRequest;
|
|
|
+import com.sjkj.appthreefloor_tsgz.net.GetDictTypeRequest;
|
|
|
+import com.sjkj.appthreefloor_tsgz.utils.Method;
|
|
|
+import com.sjkj.base_lib.entity.Params;
|
|
|
+import com.sjkj.base_lib.net.domain.interactor.ProcessErrorSubscriber;
|
|
|
+import com.sjkj.base_lib.utils.ToastUtils;
|
|
|
+import com.sjkj.base_lib.view.BaseActivity;
|
|
|
+import com.sjkj.base_lib.weight.LoadingDialog;
|
|
|
+
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+public class ImageryActivity extends BaseActivity {
|
|
|
+ private ImageryViewModel viewModel;
|
|
|
+ private ActivityImageryBinding binding;
|
|
|
+ TimePickerView pvTime;
|
|
|
+ TimePickerView pvTimeEnd;
|
|
|
+ private CameraAdapter adapter;
|
|
|
+ private List<AllCameraBean.Rows> list = new ArrayList<>();
|
|
|
+ private int currentPage = 1;
|
|
|
+
|
|
|
+ public GetDictTypeRequest getDictTypeRequest = new GetDictTypeRequest(App.getInstance());
|
|
|
+ private CameraAllListRequest cameraListRequest = new CameraAllListRequest(App.getInstance());
|
|
|
+ private List<CameraTypeBean> cameraTypeList = new ArrayList<>();
|
|
|
+ private List<CameraTypeBean> cameraTypeList2 = new ArrayList<>();
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected int initLayout() {
|
|
|
+ return R.layout.activity_imagery;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void initBinding() {
|
|
|
+ binding = (ActivityImageryBinding) getViewDataBinding();
|
|
|
+ viewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(ImageryViewModel.class);
|
|
|
+ binding.setViewModel(viewModel);
|
|
|
+ binding.setLifecycleOwner(this);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void initView() {
|
|
|
+ super.initView();
|
|
|
+ ImmersionBar.with(ImageryActivity.this)
|
|
|
+ .statusBarDarkFont(true, 0.2f)
|
|
|
+ .titleBar(binding.toolbar)
|
|
|
+ .statusBarColor(R.color.white)
|
|
|
+ .init();
|
|
|
+ getTitleView().setTextColor(getResources().getColor(R.color.black));
|
|
|
+ int drawableLeft = R.drawable.icon_back; // 替换为你的drawable资源ID
|
|
|
+ Drawable drawable1 = ContextCompat.getDrawable(ImageryActivity.this, drawableLeft);
|
|
|
+ if (drawable1 != null) {
|
|
|
+ getBackView().setCompoundDrawablesRelativeWithIntrinsicBounds(drawable1, null, null, null); // 使用Relative版本以支持RTL布局方向
|
|
|
+ }
|
|
|
+ getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.color.white));
|
|
|
+ getTitleView().setText("映像实录");
|
|
|
+ initPickViewTime();
|
|
|
+ initPickViewTime2();
|
|
|
+
|
|
|
+ LinearLayoutManager manager = new LinearLayoutManager(ImageryActivity.this);
|
|
|
+ manager.setOrientation(RecyclerView.VERTICAL);
|
|
|
+ binding.recyclerView.setLayoutManager(manager);
|
|
|
+ adapter = new CameraAdapter(ImageryActivity.this);
|
|
|
+ binding.recyclerView.setAdapter(adapter);
|
|
|
+ binding.smartRefreshLayout.setEnableRefresh(true);
|
|
|
+ binding.smartRefreshLayout.setEnableLoadMore(true);
|
|
|
+ binding.smartRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
|
|
|
+ @Override
|
|
|
+ public void onRefresh(RefreshLayout refreshLayout) {
|
|
|
+ currentPage = 1;
|
|
|
+ requestListRefresh();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ binding.smartRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
|
|
|
+ @Override
|
|
|
+ public void onLoadMore(RefreshLayout refreshLayout) {
|
|
|
+ requestListLoadMore();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ showGlobalWindow();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 显示全局弹窗
|
|
|
+ */
|
|
|
+ public void showGlobalWindow() {
|
|
|
+ SpringBackDraggable springBackDraggable = new SpringBackDraggable(SpringBackDraggable.ORIENTATION_HORIZONTAL);
|
|
|
+ springBackDraggable.setAllowMoveToScreenNotch(false);
|
|
|
+ EasyWindow.with(ImageryActivity.this)
|
|
|
+ .setContentView(R.layout.window_report)
|
|
|
+ .setGravity(Gravity.END | Gravity.BOTTOM)
|
|
|
+ .setYOffset(500)
|
|
|
+ .setXOffset(10)
|
|
|
+ // 设置指定的拖拽规则
|
|
|
+ .setDraggable(springBackDraggable)
|
|
|
+ .setOnClickListener(android.R.id.icon, new EasyWindow.OnClickListener<ImageView>() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onClick(EasyWindow<?> easyWindow, ImageView view) {
|
|
|
+ startActivity(new Intent(ImageryActivity.this, ImageryReportActivity.class));
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .show();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void requestListRefresh() {
|
|
|
+
|
|
|
+
|
|
|
+ showLoadingDialog();
|
|
|
+ currentPage = 1;
|
|
|
+ Params params = new Params();
|
|
|
+ //params.put("cameraName", viewModel.keyword.get());
|
|
|
+ params.put("pageNum", currentPage);
|
|
|
+ params.put("reasonable", false);
|
|
|
+ params.put("pageSize", 10);
|
|
|
+ cameraListRequest.setParams(params);
|
|
|
+ cameraListRequest.execute(new ProcessErrorSubscriber<AllCameraBean>() {
|
|
|
+ @Override
|
|
|
+ public void onError(Throwable e) {
|
|
|
+ super.onError(e);
|
|
|
+ hideLoadingDialog(LoadingDialog.LOADING_FAILED);
|
|
|
+ finishRefreshOrLoadMore(binding.smartRefreshLayout);
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequiresApi(api = Build.VERSION_CODES.N)
|
|
|
+ @Override
|
|
|
+ public void onNext(AllCameraBean beanList) {
|
|
|
+ super.onNext(beanList);
|
|
|
+ list.clear();
|
|
|
+ hideLoadingDialog(LoadingDialog.LOADING_SUCCESS);
|
|
|
+ if (beanList != null && beanList.getRows().size() > 0) {
|
|
|
+
|
|
|
+ list.addAll(beanList.getRows());
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ for (int j = 0; j < cameraTypeList.size(); j++) {
|
|
|
+
|
|
|
+ if (!TextUtils.isEmpty(list.get(i).getCameraType()) && null != list.get(i).getCameraType())
|
|
|
+ if (list.get(i).getCameraType().equals(cameraTypeList.get(j).getValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
|
|
|
+ list.get(i).setCameraType(cameraTypeList.get(j).getLabel()); // 修改value属性
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ for (int j = 0; j < cameraTypeList2.size(); j++) {
|
|
|
+
|
|
|
+
|
|
|
+ if (!TextUtils.isEmpty(list.get(i).getCameraActuality()) && null != list.get(i).getCameraActuality())
|
|
|
+ if (list.get(i).getCameraActuality().equals(cameraTypeList2.get(j).getValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
|
|
|
+ list.get(i).setCameraActuality(cameraTypeList2.get(j).getLabel()); // 修改value属性
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ adapter.refreshList(list);
|
|
|
+ finishRefreshOrLoadMore(binding.smartRefreshLayout);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private void requestListLoadMore() {
|
|
|
+ showLoadingDialog();
|
|
|
+ Params params = new Params();
|
|
|
+ // params.put("cameraName", viewModel.keyword.get());
|
|
|
+ params.put("pageSize", 10);
|
|
|
+ params.put("reasonable", false);
|
|
|
+ params.put("pageNum", currentPage + 1);
|
|
|
+ cameraListRequest.setParams(params);
|
|
|
+ cameraListRequest.execute(new ProcessErrorSubscriber<AllCameraBean>() {
|
|
|
+ @Override
|
|
|
+ public void onError(Throwable e) {
|
|
|
+ super.onError(e);
|
|
|
+ hideLoadingDialog(LoadingDialog.LOADING_FAILED);
|
|
|
+ finishRefreshOrLoadMore(binding.smartRefreshLayout);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onNext(AllCameraBean beanList) {
|
|
|
+ super.onNext(beanList);
|
|
|
+ hideLoadingDialog(LoadingDialog.LOADING_SUCCESS);
|
|
|
+ if (beanList != null && beanList.getRows().size() > 0) {
|
|
|
+ currentPage = currentPage + 1;
|
|
|
+ list.addAll(beanList.getRows());
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ for (int j = 0; j < cameraTypeList.size(); j++) {
|
|
|
+
|
|
|
+ if (!TextUtils.isEmpty(list.get(i).getCameraType()) && null != list.get(i).getCameraType())
|
|
|
+ if (list.get(i).getCameraType().equals(cameraTypeList.get(j).getValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
|
|
|
+ list.get(i).setCameraType(cameraTypeList.get(j).getLabel()); // 修改value属性
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ for (int j = 0; j < cameraTypeList2.size(); j++) {
|
|
|
+
|
|
|
+
|
|
|
+ if (!TextUtils.isEmpty(list.get(i).getCameraActuality()) && null != list.get(i).getCameraActuality())
|
|
|
+ if (list.get(i).getCameraActuality().equals(cameraTypeList2.get(j).getValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
|
|
|
+ list.get(i).setCameraActuality(cameraTypeList2.get(j).getLabel()); // 修改value属性
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ adapter.refreshList(list);
|
|
|
+ }
|
|
|
+ finishRefreshOrLoadMore(binding.smartRefreshLayout);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private void initPickViewTime2() {
|
|
|
+ SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
|
|
|
+
|
|
|
+ Calendar selectedDate = Calendar.getInstance();//系统当前时间
|
|
|
+ pvTimeEnd = new TimePickerBuilder(ImageryActivity.this, new OnTimeSelectListener() {
|
|
|
+
|
|
|
+ public void onTimeSelect(final Date date, View v) {
|
|
|
+
|
|
|
+ String choiceTime = formatter.format(date);//日期 String
|
|
|
+
|
|
|
+
|
|
|
+ if (Method.compareDate(binding.tvStartTime.getText().toString(), choiceTime) > 0) {
|
|
|
+ ToastUtils.show("请选择大于开始时间");
|
|
|
+ } else {
|
|
|
+ viewModel.endTime.set(choiceTime);
|
|
|
+ binding.tvEndTime.setText(choiceTime);
|
|
|
+ binding.tvEndTime.setTextColor(Color.rgb(0, 0, 0));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ .setDate(selectedDate)
|
|
|
+ .setLineSpacingMultiplier(1.8f)
|
|
|
+ .setOutSideCancelable(false)//点击屏幕,点在控件外部范围时,是否取消显示
|
|
|
+ .setLayoutRes(R.layout.include_picker_time, new CustomListener() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void customLayout(View v) {
|
|
|
+ TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
|
|
|
+ TextView ivCancel = (TextView) v.findViewById(R.id.tv_cancel);
|
|
|
+ TextView title = (TextView) v.findViewById(R.id.tv_title);
|
|
|
+//
|
|
|
+ title.setText("请选择结束时间");
|
|
|
+ tvSubmit.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ pvTimeEnd.returnData();
|
|
|
+ pvTimeEnd.dismiss();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ ivCancel.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+
|
|
|
+ pvTimeEnd.dismiss();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // .setDate(selectedDate)//设置系统时间为当前时间
|
|
|
+
|
|
|
+ // .setRangDate(startDate, endDate)//设置控件日期范围 也可以不设置默认1900年到2100年
|
|
|
+
|
|
|
+ .setType(new boolean[]{false, false, false, true, true, true})//设置年月日时分秒是否显示 true:显示 false:隐藏
|
|
|
+ .setLabel("年", "月", "日", "时", "分", "秒")
|
|
|
+
|
|
|
+ .isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
|
|
|
+
|
|
|
+ .setDividerColor(0xFFD2D2D2)//设置分割线颜色
|
|
|
+
|
|
|
+ .isCyclic(false)//是否循环显示日期 例如滑动到31日自动转到1日 有个问题:不能实现日期和月份联动
|
|
|
+
|
|
|
+ .build();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void initPickViewTime() {
|
|
|
+ SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
|
|
|
+
|
|
|
+ Calendar selectedDate = Calendar.getInstance();//系统当前时间
|
|
|
+ pvTime = new TimePickerBuilder(ImageryActivity.this, new OnTimeSelectListener() {
|
|
|
+
|
|
|
+ public void onTimeSelect(final Date date, View v) {
|
|
|
+
|
|
|
+ String choiceTime = formatter.format(date);//日期 String
|
|
|
+
|
|
|
+
|
|
|
+ //开始时间
|
|
|
+ viewModel.satrtTime.set(choiceTime);
|
|
|
+ viewModel.endTime.set("");
|
|
|
+ binding.tvStartTime.setText(choiceTime);
|
|
|
+ binding.tvStartTime.setTextColor(Color.rgb(0, 0, 0));
|
|
|
+ binding.tvEndTime.setHint("结束时间");
|
|
|
+ binding.tvEndTime.setText("");
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ .setDate(selectedDate)
|
|
|
+ .setLineSpacingMultiplier(1.8f)
|
|
|
+ .setOutSideCancelable(false)//点击屏幕,点在控件外部范围时,是否取消显示
|
|
|
+ .setLayoutRes(R.layout.include_picker_time, new CustomListener() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void customLayout(View v) {
|
|
|
+ TextView tvSubmit = (TextView) v.findViewById(R.id.tv_finish);
|
|
|
+ TextView ivCancel = (TextView) v.findViewById(R.id.tv_cancel);
|
|
|
+ TextView title = (TextView) v.findViewById(R.id.tv_title);
|
|
|
+//
|
|
|
+ title.setText("请选择开始时间");
|
|
|
+ tvSubmit.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ pvTime.returnData();
|
|
|
+ pvTime.dismiss();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ ivCancel.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+
|
|
|
+ pvTime.dismiss();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // .setDate(selectedDate)//设置系统时间为当前时间
|
|
|
+
|
|
|
+ // .setRangDate(startDate, endDate)//设置控件日期范围 也可以不设置默认1900年到2100年
|
|
|
+
|
|
|
+ .setType(new boolean[]{false, false, false, true, true, true})//设置年月日时分秒是否显示 true:显示 false:隐藏
|
|
|
+ .setLabel("年", "月", "日", "时", "分", "秒")
|
|
|
+
|
|
|
+ .isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
|
|
|
+
|
|
|
+ .setDividerColor(0xFFD2D2D2)//设置分割线颜色
|
|
|
+
|
|
|
+ .isCyclic(false)//是否循环显示日期 例如滑动到31日自动转到1日 有个问题:不能实现日期和月份联动
|
|
|
+
|
|
|
+ .build();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void initListener() {
|
|
|
+ super.initListener();
|
|
|
+ binding.tvStartTime.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View view) {
|
|
|
+ pvTime.show();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ binding.tvEndTime.setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View view) {
|
|
|
+ if (TextUtils.isEmpty(viewModel.satrtTime.get())) {
|
|
|
+ ToastUtils.show("请先选择开始时间");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ pvTimeEnd.show();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void loadData() {
|
|
|
+ super.loadData();
|
|
|
+ Params params = new Params();
|
|
|
+ params.put("dictType", "camera_type");
|
|
|
+ getDictTypeRequest.setParams(params);
|
|
|
+ getDictTypeRequest.execute(new ProcessErrorSubscriber<List<CameraTypeBean>>() {
|
|
|
+ @Override
|
|
|
+ public void onError(Throwable e) {
|
|
|
+ super.onError(e);
|
|
|
+ if (!TextUtils.isEmpty(e.getMessage())) {
|
|
|
+ ToastUtils.show(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onNext(List<CameraTypeBean> list) {
|
|
|
+ super.onNext(list);
|
|
|
+ cameraTypeList.clear();
|
|
|
+ cameraTypeList.addAll(list);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ Params params1 = new Params();
|
|
|
+ params1.put("dictType", "camera_actuality");
|
|
|
+ getDictTypeRequest.setParams(params1);
|
|
|
+ getDictTypeRequest.execute(new ProcessErrorSubscriber<List<CameraTypeBean>>() {
|
|
|
+ @Override
|
|
|
+ public void onError(Throwable e) {
|
|
|
+ super.onError(e);
|
|
|
+ if (!TextUtils.isEmpty(e.getMessage())) {
|
|
|
+ ToastUtils.show(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onNext(List<CameraTypeBean> list) {
|
|
|
+ super.onNext(list);
|
|
|
+ cameraTypeList2.clear();
|
|
|
+ cameraTypeList2.addAll(list);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ requestListRefresh();
|
|
|
+ }
|
|
|
+}
|