zhanghongrui 1 місяць тому
батько
коміт
9cefb2dc58
52 змінених файлів з 3231 додано та 48 видалено
  1. 12 0
      app/src/main/AndroidManifest.xml
  2. 452 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/ImageryActivity.java
  3. 420 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/ImageryReportActivity.java
  4. 8 8
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/MonitoringCenterActivity.java
  5. 285 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/SlowLiveActivity.java
  6. 252 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/YunWeiRecordActivity.java
  7. 17 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/viewModel/ImageryViewModel.java
  8. 14 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/viewModel/RecordViewModel.java
  9. 31 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/viewModel/SlowLiveViewModel.java
  10. 93 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/adapter/ImageVideo2Adapter.java
  11. 10 10
      app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/CameraTypeBean.java
  12. 145 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/CameraListFragment.java
  13. 370 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/DeviceMapFragment.java
  14. 2 2
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventDetailsFragment.java
  15. 41 3
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/MainFragment.java
  16. 0 1
      app/src/main/java/com/sjkj/appthreefloor_tsgz/login/LoginActivity.java
  17. 2 2
      app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/DictValueTools.java
  18. 1 1
      app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/Method.java
  19. 72 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/weight/CustomBottomDialog.java
  20. 10 0
      app/src/main/res/anim/dialog_animation_enter.xml
  21. 8 0
      app/src/main/res/anim/dialog_animation_out.xml
  22. BIN
      app/src/main/res/drawable-xxhdpi/icon_c.png
  23. BIN
      app/src/main/res/drawable-xxhdpi/icon_calendar.png
  24. BIN
      app/src/main/res/drawable-xxhdpi/icon_del.png
  25. BIN
      app/src/main/res/drawable-xxhdpi/icon_edit.png
  26. BIN
      app/src/main/res/drawable-xxhdpi/icon_image.png
  27. BIN
      app/src/main/res/drawable-xxhdpi/icon_map.png
  28. BIN
      app/src/main/res/drawable-xxhdpi/icon_report.png
  29. BIN
      app/src/main/res/drawable-xxhdpi/icon_type.png
  30. BIN
      app/src/main/res/drawable-xxhdpi/icon_video.png
  31. 6 0
      app/src/main/res/drawable/bg_blue.xml
  32. 9 0
      app/src/main/res/drawable/bg_camera_list.xml
  33. 6 0
      app/src/main/res/drawable/bg_hui.xml
  34. 9 0
      app/src/main/res/drawable/dialog_bg.xml
  35. 22 0
      app/src/main/res/drawable/tab_indicator.xml
  36. 150 0
      app/src/main/res/layout/activity_imagery.xml
  37. 197 0
      app/src/main/res/layout/activity_imagery_report.xml
  38. 10 13
      app/src/main/res/layout/activity_login.xml
  39. 1 1
      app/src/main/res/layout/activity_new_event.xml
  40. 64 0
      app/src/main/res/layout/activity_slow_live.xml
  41. 184 0
      app/src/main/res/layout/activity_yunwei_record.xml
  42. 75 0
      app/src/main/res/layout/dialog_layout.xml
  43. 85 0
      app/src/main/res/layout/fragment_camera_list.xml
  44. 71 0
      app/src/main/res/layout/fragment_device_map.xml
  45. 5 1
      app/src/main/res/layout/fragment_main.xml
  46. 59 0
      app/src/main/res/layout/item_image_video_list2.xml
  47. 6 0
      app/src/main/res/layout/window_report.xml
  48. 1 0
      app/src/main/res/values/colors.xml
  49. 13 0
      app/src/main/res/values/styles.xml
  50. 1 0
      base-lib/src/main/java/com/sjkj/base_lib/net/domain/interactor/ProcessErrorSubscriber.java
  51. 2 1
      base-lib/src/main/java/com/sjkj/base_lib/utils/AppTools.java
  52. 10 5
      base-lib/src/main/res/layout/include_picker_time.xml

+ 12 - 0
app/src/main/AndroidManifest.xml

@@ -161,6 +161,18 @@
             android:name="com.sjkj.appthreefloor_tsgz.activity.DisposalResultsActivity"
             android:screenOrientation="portrait" />
         <activity
+            android:name="com.sjkj.appthreefloor_tsgz.activity.SlowLiveActivity"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name="com.sjkj.appthreefloor_tsgz.activity.ImageryActivity"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name="com.sjkj.appthreefloor_tsgz.activity.ImageryReportActivity"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name="com.sjkj.appthreefloor_tsgz.activity.YunWeiRecordActivity"
+            android:screenOrientation="portrait" />
+        <activity
             android:screenOrientation="landscape"
             android:name="com.sjkj.appthreefloor_tsgz.activity.ExoPlayerActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"

+ 452 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/ImageryActivity.java

@@ -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();
+    }
+}

+ 420 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/ImageryReportActivity.java

@@ -0,0 +1,420 @@
+package com.sjkj.appthreefloor_tsgz.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.hardware.camera2.CameraAccessException;
+import android.hardware.camera2.CameraManager;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
+import androidx.core.content.FileProvider;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.gyf.immersionbar.ImmersionBar;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.activity.viewModel.ImageryViewModel;
+import com.sjkj.appthreefloor_tsgz.adapter.ImageVideo2Adapter;
+import com.sjkj.appthreefloor_tsgz.adapter.ImageVideoAdapter;
+import com.sjkj.appthreefloor_tsgz.adapter.OnDeleteClick;
+import com.sjkj.appthreefloor_tsgz.app.App;
+import com.sjkj.appthreefloor_tsgz.bean.ImageBean;
+import com.sjkj.appthreefloor_tsgz.bean.ImageEventFilesBean;
+import com.sjkj.appthreefloor_tsgz.databinding.ActivityImageryReportBinding;
+import com.sjkj.appthreefloor_tsgz.net.UploadFileRequest;
+import com.sjkj.appthreefloor_tsgz.weight.CustomBottomDialog;
+import com.sjkj.base_lib.app.AppManager;
+import com.sjkj.base_lib.net.domain.interactor.ProcessErrorSubscriber;
+import com.sjkj.base_lib.net.utils.RealPathFromUriUtils;
+import com.sjkj.base_lib.utils.AppTools;
+import com.sjkj.base_lib.utils.Constants;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseActivity;
+import com.sjkj.base_lib.weight.LoadingDialog;
+import com.sjkj.base_lib.weight.silicompressor.SiliCompressor;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import top.zibin.luban.CompressionPredicate;
+import top.zibin.luban.Luban;
+import top.zibin.luban.OnCompressListener;
+import top.zibin.luban.OnRenameListener;
+
+public class ImageryReportActivity extends BaseActivity {
+    private ImageryViewModel viewModel;
+    private ActivityImageryReportBinding binding;
+    private UploadFileRequest uploadFileRequest = new UploadFileRequest(App.getInstance());
+    private static final int TYPE_IMAGE = 1;
+    private static final int TYPE_VIDEO = 2;
+    static Uri capturedUri = null;
+    static String mCurrentPhotoPath;
+    private List<ImageBean> imageBeanList = new ArrayList<>();
+    private ImageVideo2Adapter imageAdapter;
+    CustomBottomDialog customBottomDialog;
+
+    @Override
+    public void initBinding() {
+        binding = (ActivityImageryReportBinding) getViewDataBinding();
+        viewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(ImageryViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+    }
+
+    @Override
+    protected int initLayout() {
+        return R.layout.activity_imagery_report;
+    }
+
+    @Override
+    public void initListener() {
+        super.initListener();
+        binding.llPhoto.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                View view1 = LayoutInflater.from(ImageryReportActivity.this).inflate(R.layout.dialog_layout, null);
+                customBottomDialog = new CustomBottomDialog(view1, ImageryReportActivity.this, R.style.style_dialog);
+                customBottomDialog.setCanceledOnTouchOutside(false);
+                customBottomDialog.show();
+                TextView tv_close = view1.findViewById(R.id.tv_close);
+                ImageView iv_video = view1.findViewById(R.id.iv_video);
+                ImageView iv_image = view1.findViewById(R.id.iv_image);
+                tv_close.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        customBottomDialog.dismiss();
+                    }
+                });
+
+                iv_video.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        chooseVideo();
+                    }
+                });
+                iv_image.setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View view) {
+                        AppTools.chooseImage();
+                    }
+                });
+            }
+        });
+    }
+
+    public void chooseVideo() {
+
+        XXPermissions.with(ImageryReportActivity.this)
+                // .permission(Permission.WRITE_EXTERNAL_STORAGE)
+                .permission(Permission.MANAGE_EXTERNAL_STORAGE)
+                .permission(Permission.CAMERA)
+                .request(new OnPermissionCallback() {
+                    @Override
+                    public void onGranted(List<String> permissions, boolean all) {
+                        if (all) {
+                            dispatchTakeVideoIntent();
+                        } else {
+                            ToastUtils.show("获取部分权限成功,但部分权限未正常授予");
+                        }
+                    }
+
+                    @Override
+                    public void onDenied(List<String> permissions, boolean never) {
+                        if (never) {
+                            ToastUtils.show("被永久拒绝授权,请手动授予权限");
+                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
+                            XXPermissions.startPermissionActivity(AppManager.getAppManager().currentActivity(), permissions);
+                        } else {
+                            ToastUtils.show("获取权限失败");
+                        }
+                    }
+                });
+    }
+
+    /**
+     * 判断是否有摄像头,摄像头是否可用
+     *
+     * @return
+     */
+    private boolean isCameraOpen() {
+        boolean isCamera = false;
+        try {
+            CameraManager cameraManager = (CameraManager) ImageryReportActivity.this.getSystemService(Context.CAMERA_SERVICE);
+            String[] cameraIds = cameraManager.getCameraIdList();
+            if (cameraIds.length > 0) {
+                //摄像头存在
+                if (cameraIds[0] != null || cameraIds[1] != null) {
+                    isCamera = true;
+                }
+            }
+        } catch (IllegalStateException | CameraAccessException e) {
+            e.printStackTrace();
+        }
+        return isCamera;
+    }
+
+    private void dispatchTakeVideoIntent() {
+
+        Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
+        takeVideoIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+        if (takeVideoIntent.resolveActivity(ImageryReportActivity.this.getPackageManager()) != null || isCameraOpen()) {
+            try {
+
+                takeVideoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);
+                takeVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
+                capturedUri = FileProvider.getUriForFile(ImageryReportActivity.this, AppTools.getPackageNameProvider(),
+                        createMediaFile(TYPE_VIDEO));
+
+                takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, capturedUri);
+                startActivityForResult(takeVideoIntent, 200);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+        }
+
+
+    }
+
+    private File createMediaFile(int type) throws IOException {
+
+        // Create an image file name
+        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
+        String fileName = (type == TYPE_IMAGE) ? "JPEG_" + timeStamp + "_" : "VID_" + timeStamp + "_";
+        File storageDir = Environment.getExternalStoragePublicDirectory(
+                type == TYPE_IMAGE ? Environment.DIRECTORY_PICTURES : Environment.DIRECTORY_MOVIES);
+        if (!storageDir.exists()) {
+            storageDir.mkdir();
+        }
+
+        File file = File.createTempFile(
+                fileName,  /* prefix */
+                type == TYPE_IMAGE ? ".jpg" : ".mp4",         /* suffix */
+                storageDir      /* directory */
+        );
+
+        // Get the path of the file created
+        mCurrentPhotoPath = file.getAbsolutePath();
+        return file;
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (requestCode == Constants.SYSTEM_100 && resultCode == RESULT_OK) {
+            try {
+                List<Uri> list = AppTools.chooseImageResult(data);
+                Uri uri = list.get(0);
+                String path = RealPathFromUriUtils.getRealPathFromUri(ImageryReportActivity.this, uri);
+                File file = new File(path);
+                if (file.exists()) {
+                    showLoadingDialog();
+                    Luban.with(ImageryReportActivity.this).load(file).ignoreBy(100).setFocusAlpha(false).filter(new CompressionPredicate() {
+                        @Override
+                        public boolean apply(String path) {
+                            return !(TextUtils.isEmpty(path));
+                        }
+                    }).setRenameListener(new OnRenameListener() {
+                        @Override
+                        public String rename(String filePath) {
+                            String result = System.currentTimeMillis() + ".jpg";
+                            return result;
+                        }
+                    }).setCompressListener(new OnCompressListener() {
+                        @Override
+                        public void onStart() {
+                        }
+
+                        @Override
+                        public void onSuccess(File file) {
+                            //TODO 压缩成功后调用,返回压缩后的图片文件
+                            uploadFileRequest.setFile(file);
+                            uploadFileRequest.execute(new ProcessErrorSubscriber<ImageEventFilesBean>() {
+                                @Override
+                                public void onError(Throwable e) {
+                                    super.onError(e);
+                                    ToastUtils.show(e.getMessage());
+                                    hideLoadingDialog(LoadingDialog.LOADING_FAILED);
+                                }
+
+                                @Override
+                                public void onNext(ImageEventFilesBean bean) {
+                                    super.onNext(bean);
+                                    hideLoadingDialog(LoadingDialog.LOADING_SUCCESS);
+                                    if (customBottomDialog.isShowing()) {
+                                        customBottomDialog.dismiss();
+                                    }
+                                    ImageBean imageBean = new ImageBean();
+                                    imageBean.setRealUrl(AppTools.getImageBaseUrl() + bean.getFileUrl());
+                                    imageBean.setFileUrl(bean.getFileUrl());
+                                    imageBean.setFileName(bean.getFileName());
+                                    imageBean.setFileSize(bean.getFileSize());
+                                    imageBean.setFileType(bean.getFileType());
+                                    imageBean.setType(TYPE_IMAGE);
+                                    imageBeanList.add(imageBean);
+                                    imageAdapter.refreshList(imageBeanList);
+                                    if (imageAdapter.getList().size() >= 2) {
+                                        binding.ivAdd.setVisibility(View.GONE);
+                                    }
+                                }
+                            });
+                        }
+
+                        @Override
+                        public void onError(Throwable e) {
+                            //TODO 当压缩过去出现问题时调用
+                            ToastUtils.show(e.getMessage() + "");
+                            hideLoadingDialog(LoadingDialog.LOADING_FAILED);
+                        }
+                    }).launch();
+                } else {
+                    ToastUtils.show("图片不存在");
+                }
+
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+
+        } else if (requestCode == Constants.CODE_SUCCESS && resultCode == RESULT_OK) {
+            if (data.getData() != null) {
+                showLoadingDialog();
+                try {
+
+                    File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES) + "/IntegratedPlatform/videos");
+
+                    if (f.mkdirs() || f.isDirectory()) {
+                        new VideoCompressAsyncTask(ImageryReportActivity.this).execute(mCurrentPhotoPath, f.getPath());
+
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    class VideoCompressAsyncTask extends AsyncTask<String, String, String> {
+
+        Context mContext;
+
+        public VideoCompressAsyncTask(Context context) {
+            mContext = context;
+        }
+
+        @Override
+        protected void onPreExecute() {
+            super.onPreExecute();
+        }
+
+        @Override
+        protected String doInBackground(String... paths) {
+            String filePath = null;
+            try {
+
+                filePath = SiliCompressor.with(mContext).compressVideo(paths[0], paths[1], 1080, 720, 4000000);
+
+            } catch (URISyntaxException e) {
+                e.printStackTrace();
+            }
+            return filePath;
+
+        }
+
+
+        @Override
+        protected void onPostExecute(String compressedFilePath) {
+            super.onPostExecute(compressedFilePath);
+
+            File imageFile = new File(compressedFilePath);
+
+            uploadFileRequest.setFile(imageFile);
+            uploadFileRequest.execute(new ProcessErrorSubscriber<ImageEventFilesBean>() {
+                @Override
+                public void onError(Throwable e) {
+                    super.onError(e);
+                    ToastUtils.show("上传失败" + e.getMessage());
+                    hideLoadingDialog(LoadingDialog.LOADING_FAILED);
+                }
+
+                @Override
+                public void onNext(ImageEventFilesBean bean) {
+                    super.onNext(bean);
+                    //ToastUtils.show("上传成功" + bean.getWebUrl() + "-=-=");
+                    if (customBottomDialog != null && customBottomDialog.isShowing()) {
+                        customBottomDialog.dismiss();
+                    }
+                    hideLoadingDialog(LoadingDialog.LOADING_SUCCESS);
+                    ImageBean imageBean = new ImageBean();
+                    imageBean.setRealUrl(AppTools.getImageBaseUrl() + bean.getFileUrl());
+                    imageBean.setFileUrl(bean.getFileUrl());
+                    imageBean.setFileName(bean.getFileName());
+                    imageBean.setFileSize(bean.getFileSize());
+                    imageBean.setFileType(bean.getFileType());
+                    imageBean.setPath(imageFile.getAbsolutePath());
+                    imageBean.setType(TYPE_VIDEO);
+                    imageBeanList.add(imageBean);
+                    imageAdapter.refreshList(imageBeanList);
+                    if (imageAdapter.getList().size() >= 2) {
+                        binding.ivAdd.setVisibility(View.GONE);
+                    }
+
+                }
+            });
+
+        }
+    }
+
+    @Override
+    public void initView() {
+        super.initView();
+        ImmersionBar.with(ImageryReportActivity.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(ImageryReportActivity.this, drawableLeft);
+        if (drawable1 != null) {
+            getBackView().setCompoundDrawablesRelativeWithIntrinsicBounds(drawable1, null, null, null); // 使用Relative版本以支持RTL布局方向
+        }
+        getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.color.white));
+        getTitleView().setText("映像实录");
+        LinearLayoutManager manager1 = new LinearLayoutManager(ImageryReportActivity.this);
+        manager1.setOrientation(RecyclerView.HORIZONTAL);
+        binding.imageRecyclerView.setLayoutManager(manager1);
+        imageAdapter = new ImageVideo2Adapter(ImageryReportActivity.this);
+        binding.imageRecyclerView.setAdapter(imageAdapter);
+        imageAdapter.setOnDeleteClick(new OnDeleteClick() {
+            @Override
+            public void delete(ImageBean bean, int position) {
+                if (imageAdapter.getList().size() < 2) {
+                    binding.ivAdd.setVisibility(View.VISIBLE);
+                }
+
+            }
+        });
+
+    }
+}

+ 8 - 8
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/MonitoringCenterActivity.java

@@ -321,8 +321,8 @@ public class MonitoringCenterActivity extends BaseActivity {
                         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).getDictValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
-                                    list.get(i).setCameraType(cameraTypeList.get(j).getDictLabel()); // 修改value属性
+                                if (list.get(i).getCameraType().equals(cameraTypeList.get(j).getValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
+                                    list.get(i).setCameraType(cameraTypeList.get(j).getLabel()); // 修改value属性
                                 }
                         }
                     }
@@ -332,8 +332,8 @@ public class MonitoringCenterActivity extends BaseActivity {
 
 
                             if (!TextUtils.isEmpty(list.get(i).getCameraActuality()) && null != list.get(i).getCameraActuality())
-                                if (list.get(i).getCameraActuality().equals(cameraTypeList2.get(j).getDictValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
-                                    list.get(i).setCameraActuality(cameraTypeList2.get(j).getDictLabel()); // 修改value属性
+                                if (list.get(i).getCameraActuality().equals(cameraTypeList2.get(j).getValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
+                                    list.get(i).setCameraActuality(cameraTypeList2.get(j).getLabel()); // 修改value属性
                                 }
                         }
                     }
@@ -374,8 +374,8 @@ public class MonitoringCenterActivity extends BaseActivity {
                         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).getDictValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
-                                    list.get(i).setCameraType(cameraTypeList.get(j).getDictLabel()); // 修改value属性
+                                if (list.get(i).getCameraType().equals(cameraTypeList.get(j).getValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
+                                    list.get(i).setCameraType(cameraTypeList.get(j).getLabel()); // 修改value属性
                                 }
                         }
                     }
@@ -385,8 +385,8 @@ public class MonitoringCenterActivity extends BaseActivity {
 
 
                             if (!TextUtils.isEmpty(list.get(i).getCameraActuality()) && null != list.get(i).getCameraActuality())
-                                if (list.get(i).getCameraActuality().equals(cameraTypeList2.get(j).getDictValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
-                                    list.get(i).setCameraActuality(cameraTypeList2.get(j).getDictLabel()); // 修改value属性
+                                if (list.get(i).getCameraActuality().equals(cameraTypeList2.get(j).getValue())) { // 例如,我们想修改名为"Banana"的元素的value属性
+                                    list.get(i).setCameraActuality(cameraTypeList2.get(j).getLabel()); // 修改value属性
                                 }
                         }
                     }

+ 285 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/SlowLiveActivity.java

@@ -0,0 +1,285 @@
+package com.sjkj.appthreefloor_tsgz.activity;
+
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.text.TextUtils;
+
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
+import androidx.lifecycle.ViewModelProvider;
+
+import com.google.android.material.tabs.TabLayout;
+import com.gyf.immersionbar.ImmersionBar;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.activity.viewModel.SlowLiveViewModel;
+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.ActivitySlowLiveBinding;
+import com.sjkj.appthreefloor_tsgz.fragment.CameraListFragment;
+import com.sjkj.appthreefloor_tsgz.fragment.DeviceMapFragment;
+import com.sjkj.appthreefloor_tsgz.net.CameraAllListRequest;
+import com.sjkj.appthreefloor_tsgz.net.GetDictTypeRequest;
+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.util.ArrayList;
+import java.util.List;
+
+public class SlowLiveActivity extends BaseActivity {
+    private SlowLiveViewModel viewModel;
+    private ActivitySlowLiveBinding binding;
+    // private ViewPagerAdapter pagerAdapter;
+    CameraListFragment dataListFragment;
+    DeviceMapFragment mapFragment;
+    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<>();
+    private List<AllCameraBean.Rows> list = new ArrayList<>();
+    private int currentPage = 1;
+    private int distanceKm = 3;
+
+    @Override
+    protected int initLayout() {
+        return R.layout.activity_slow_live;
+    }
+
+    @Override
+    public void initBinding() {
+        binding = (ActivitySlowLiveBinding) getViewDataBinding();
+        viewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(SlowLiveViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+    }
+
+    @Override
+    public void initView() {
+        super.initView();
+        ImmersionBar.with(SlowLiveActivity.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(SlowLiveActivity.this, drawableLeft);
+        if (drawable1 != null) {
+            getBackView().setCompoundDrawablesRelativeWithIntrinsicBounds(drawable1, null, null, null); // 使用Relative版本以支持RTL布局方向
+        }
+        getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.color.white));
+        getTitleView().setText("慢直播");
+        binding.tabLayout.addTab(binding.tabLayout.newTab().setText("设备列表"));
+        binding.tabLayout.addTab(binding.tabLayout.newTab().setText("地图"));
+        binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
+            @Override
+            public void onTabSelected(TabLayout.Tab tab) {
+                if (TextUtils.equals(tab.getText(), "设备列表")) {
+                    getSupportFragmentManager().beginTransaction()
+                            .show(dataListFragment)
+                            .hide(mapFragment)
+                            .commit();
+                } else {
+                    getSupportFragmentManager().beginTransaction()
+                            .hide(dataListFragment)
+                            .show(mapFragment)
+                            .commit();
+                }
+            }
+
+            @Override
+            public void onTabUnselected(TabLayout.Tab tab) {
+
+            }
+
+            @Override
+            public void onTabReselected(TabLayout.Tab tab) {
+
+            }
+        });
+
+        dataListFragment = new CameraListFragment();
+        mapFragment = new DeviceMapFragment();
+        getSupportFragmentManager().beginTransaction()
+                .add(R.id.fragment_layout, dataListFragment)
+                .add(R.id.fragment_layout, mapFragment)
+                .show(dataListFragment)
+                .hide(mapFragment)
+                .commit();
+
+        viewModel.getDistanceKmt().observe(this, km -> {
+
+            this.distanceKm = km;
+            requestListRefresh();
+        });
+    }
+
+
+    @Override
+    public void initListener() {
+        super.initListener();
+
+
+    }
+
+    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", 5000);
+        params.put("isShow", true);
+        params.put("kilometer", distanceKm);
+        params.put("longitude", getIntent().getDoubleExtra("Longitude", 0.0));
+        params.put("latitude", getIntent().getDoubleExtra("Latitude", 0.0));
+        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属性
+                                }
+                        }
+                    }
+
+
+                }
+
+                viewModel.setData(list);
+                //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);
+        params.put("isShow", true);
+        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);
+            }
+        });
+    }
+
+    @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();
+    }
+}

+ 252 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/YunWeiRecordActivity.java

@@ -0,0 +1,252 @@
+package com.sjkj.appthreefloor_tsgz.activity;
+
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
+
+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.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.RecordViewModel;
+import com.sjkj.appthreefloor_tsgz.databinding.ActivityYunweiRecordBinding;
+import com.sjkj.appthreefloor_tsgz.utils.Method;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseActivity;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+public class YunWeiRecordActivity extends BaseActivity {
+    private RecordViewModel viewModel;
+    private ActivityYunweiRecordBinding binding;
+    TimePickerView pvTime;
+    TimePickerView pvTimeEnd;
+    private int currentPage = 1;
+
+    @Override
+    public void initBinding() {
+        binding = (ActivityYunweiRecordBinding) getViewDataBinding();
+        viewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(RecordViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+    }
+
+    @Override
+    protected int initLayout() {
+        return R.layout.activity_yunwei_record;
+    }
+
+    @Override
+    public void initView() {
+        super.initView();
+        ImmersionBar.with(YunWeiRecordActivity.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(YunWeiRecordActivity.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(YunWeiRecordActivity.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();
+            }
+        });
+    }
+
+    private void initPickViewTime2() {
+        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
+
+        Calendar selectedDate = Calendar.getInstance();//系统当前时间
+        pvTimeEnd = new TimePickerBuilder(YunWeiRecordActivity.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);
+                }
+
+            }
+
+        })
+                .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(YunWeiRecordActivity.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.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();
+            }
+        });
+    }
+
+    private void requestListLoadMore() {
+    }
+
+    private void requestListRefresh() {
+
+    }
+}

+ 17 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/viewModel/ImageryViewModel.java

@@ -0,0 +1,17 @@
+package com.sjkj.appthreefloor_tsgz.activity.viewModel;
+
+import androidx.databinding.ObservableField;
+
+import com.sjkj.base_lib.vm.BaseViewModel;
+
+public class ImageryViewModel extends BaseViewModel {
+
+    public ObservableField<String> satrtTime = new ObservableField<>("");
+    public ObservableField<String> endTime = new ObservableField<>("");
+    public ObservableField<String> title = new ObservableField<>("");
+    public ObservableField<String> typeVale = new ObservableField<>("");
+    public ObservableField<String> typeLabel = new ObservableField<>("");
+    public ObservableField<String> address = new ObservableField<>("");
+
+
+}

+ 14 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/viewModel/RecordViewModel.java

@@ -0,0 +1,14 @@
+package com.sjkj.appthreefloor_tsgz.activity.viewModel;
+
+import androidx.databinding.ObservableField;
+
+import com.sjkj.base_lib.vm.BaseViewModel;
+
+public class RecordViewModel extends BaseViewModel {
+
+    public ObservableField<String> satrtTime = new ObservableField<>("");
+    public ObservableField<String> endTime = new ObservableField<>("");
+    public ObservableField<String> inspector = new ObservableField<>("");
+
+
+}

+ 31 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/viewModel/SlowLiveViewModel.java

@@ -0,0 +1,31 @@
+package com.sjkj.appthreefloor_tsgz.activity.viewModel;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+
+import com.sjkj.appthreefloor_tsgz.bean.AllCameraBean;
+import com.sjkj.base_lib.vm.BaseViewModel;
+
+import java.util.List;
+
+public class SlowLiveViewModel extends BaseViewModel {
+    private final MutableLiveData<List<AllCameraBean.Rows>> sharedData = new MutableLiveData<>();
+    private final MutableLiveData<Integer> distanceKm = new MutableLiveData<>();
+
+    public void setDistanceKm(Integer data) {
+        distanceKm.setValue(data);
+    }
+
+    public LiveData<Integer> getDistanceKmt() {
+        return distanceKm;
+    }
+
+    public void setData(List<AllCameraBean.Rows> data) {
+        sharedData.setValue(data);
+    }
+
+    public LiveData<List<AllCameraBean.Rows>> getData() {
+        return sharedData;
+    }
+
+}

+ 93 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/adapter/ImageVideo2Adapter.java

@@ -0,0 +1,93 @@
+package com.sjkj.appthreefloor_tsgz.adapter;
+
+import android.content.Context;
+import android.view.View;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.bean.ImageBean;
+import com.sjkj.appthreefloor_tsgz.databinding.ItemImageVideoList2Binding;
+import com.sjkj.appthreefloor_tsgz.utils.ItemSlideCallBack;
+import com.sjkj.base_lib.adapter.BaseRecAdapter;
+
+import java.util.Collections;
+import java.util.List;
+
+public class ImageVideo2Adapter extends BaseRecAdapter<ImageBean, ItemImageVideoList2Binding> implements ItemSlideCallBack {
+    private OnDeleteClick onDeleteClick;
+
+    public ImageVideo2Adapter(Context context) {
+        super(context);
+    }
+
+    public ImageVideo2Adapter(Context context, List<ImageBean> list) {
+        super(context, list);
+    }
+
+    @Override
+    protected int getLayoutResId(int viewType) {
+
+        return R.layout.item_image_video_list2;
+
+
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+
+        return list.get(position).getType();
+    }
+
+    /**
+     * 设置列表的点击事件回调接口
+     */
+    public void setOnDeleteClick(OnDeleteClick onDeleteClick) {
+        this.onDeleteClick = onDeleteClick;
+    }
+
+    @Override
+    protected void onBindItem(ItemImageVideoList2Binding binding, ImageBean bean, int position) {
+        binding.setModel(bean);
+        binding.executePendingBindings();
+        if (bean.getType() == 1) {
+            binding.ivC.setVisibility(View.VISIBLE);
+            binding.flHead.setVisibility(View.GONE);
+        } else {
+            binding.ivC.setVisibility(View.GONE);
+            binding.flHead.setVisibility(View.VISIBLE);
+        }
+        Glide.with(context)
+                .setDefaultRequestOptions(
+                        new RequestOptions()
+                                .frame(1000)
+                                .centerCrop()
+                )
+                .load(bean.getRealUrl())
+                .into(binding.ivIcon);
+//        binding.titleTv TODO
+        binding.deleteIv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (list != null && list.size() > 0) {
+                    list.remove(position);
+                    notifyDataSetChanged();
+                }
+
+                if (onDeleteClick != null) {
+                    onDeleteClick.delete(bean, position);
+                }
+            }
+        });
+    }
+
+
+    @Override
+    public void onMove(int fromPosition, int toPosition) {
+        Collections.swap(list, fromPosition, toPosition);//交换数据
+        notifyItemMoved(fromPosition, toPosition);
+        notifyItemChanged(fromPosition);
+        notifyItemChanged(toPosition);
+
+    }
+}

+ 10 - 10
app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/CameraTypeBean.java

@@ -1,22 +1,22 @@
 package com.sjkj.appthreefloor_tsgz.bean;
 
 public class CameraTypeBean {
-   private String dictLabel;
-   private String dictValue;
+   private String label;
+   private String value;
 
-    public String getDictLabel() {
-        return dictLabel;
+    public String getValue() {
+        return value;
     }
 
-    public void setDictLabel(String dictLabel) {
-        this.dictLabel = dictLabel;
+    public void setValue(String value) {
+        this.value = value;
     }
 
-    public String getDictValue() {
-        return dictValue;
+    public String getLabel() {
+        return label;
     }
 
-    public void setDictValue(String dictValue) {
-        this.dictValue = dictValue;
+    public void setLabel(String label) {
+        this.label = label;
     }
 }

+ 145 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/CameraListFragment.java

@@ -0,0 +1,145 @@
+package com.sjkj.appthreefloor_tsgz.fragment;
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.activity.ExoPlayerActivity;
+import com.sjkj.appthreefloor_tsgz.activity.viewModel.SlowLiveViewModel;
+import com.sjkj.appthreefloor_tsgz.adapter.CameraAdapter;
+import com.sjkj.appthreefloor_tsgz.bean.AllCameraBean;
+import com.sjkj.appthreefloor_tsgz.databinding.FragmentCameraListBinding;
+import com.sjkj.base_lib.adapter.BaseRecAdapter;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseFragment;
+
+public class CameraListFragment extends BaseFragment {
+
+    private FragmentCameraListBinding binding;
+    private SlowLiveViewModel viewModel;
+
+    private CameraAdapter adapter;
+
+    private int distanceKm = 3;
+
+    public CameraListFragment() {
+    }
+
+    @Override
+    protected int initLayout() {
+        return R.layout.fragment_camera_list;
+    }
+
+    @Override
+    public View initBinding(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
+        binding = (FragmentCameraListBinding) getViewDataBing(inflater, container);
+        viewModel = new ViewModelProvider(getActivity(), new ViewModelProvider.NewInstanceFactory()).get(SlowLiveViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+        return binding.getRoot();
+    }
+
+    @Override
+    public void initView() {
+
+
+        LinearLayoutManager manager = new LinearLayoutManager(getActivity());
+        manager.setOrientation(RecyclerView.VERTICAL);
+        binding.recyclerView.setLayoutManager(manager);
+        adapter = new CameraAdapter(getActivity());
+        adapter.setItemClick(new BaseRecAdapter.OnItemClick<AllCameraBean.Rows>() {
+            @Override
+            public void onItemClick(AllCameraBean.Rows bean, int position) {
+                if (!TextUtils.isEmpty(bean.getChannelCode())) {
+                    Log.d("zhr1111", bean.getChannelCode());
+                    startActivity(new Intent(getActivity(), ExoPlayerActivity.class).putExtra("id", bean.getChannelCode()).putExtra("name", bean.getCameraName()));
+                } else {
+                    ToastUtils.show("无视频源");
+                }
+            }
+        });
+        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();
+//            }
+//        });
+        // binding.recyclerView.addItemDecoration(new DividerItem(getActivity()));
+//        viewModel.singleLiveData.observe(this, new Observer<DataBean>() {
+//            @Override
+//            public void onChanged(DataBean bean) {
+//                ToastUtils.show(bean == null ? "null" : "not null");
+//            }
+//        });
+
+        viewModel.getData().observe(getViewLifecycleOwner(), list -> {
+            adapter.refreshList(list);
+            Log.d("zhr2212311111", adapter.getList().size() + "====");
+        });
+
+    }
+
+    @Override
+    public void initListener() {
+        binding.tvThree.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                ChooseSelect(3, binding.tvThree, binding.tvFive, binding.tvTen);
+            }
+        });
+        binding.tvFive.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                ChooseSelect(5, binding.tvFive, binding.tvThree, binding.tvTen);
+            }
+        });
+        binding.tvTen.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                ChooseSelect(10, binding.tvTen, binding.tvFive, binding.tvThree);
+            }
+        });
+    }
+
+    private void ChooseSelect(int distance, TextView textView, TextView textView2, TextView textView3) {
+        distanceKm = distance;
+        adapter.clear();
+        viewModel.setDistanceKm(distanceKm);
+        textView.setTextColor(Color.rgb(255, 255, 255));
+        textView2.setTextColor(Color.rgb(0, 0, 0));
+        textView3.setTextColor(Color.rgb(0, 0, 0));
+        textView.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_blue));
+        textView2.setBackgroundDrawable(null);
+        textView3.setBackgroundDrawable(null);
+    }
+
+
+    @Override
+    public void loadData() {
+
+
+    }
+
+
+}

+ 370 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/DeviceMapFragment.java

@@ -0,0 +1,370 @@
+package com.sjkj.appthreefloor_tsgz.fragment;
+
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.os.Handler;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.lifecycle.ViewModelStoreOwner;
+
+import com.amap.api.maps.AMap;
+import com.amap.api.maps.CameraUpdate;
+import com.amap.api.maps.CameraUpdateFactory;
+import com.amap.api.maps.model.BitmapDescriptorFactory;
+import com.amap.api.maps.model.CameraPosition;
+import com.amap.api.maps.model.LatLng;
+import com.amap.api.maps.model.Marker;
+import com.amap.api.maps.model.MarkerOptions;
+import com.amap.api.maps.model.MultiPointItem;
+import com.amap.api.maps.model.MultiPointOverlay;
+import com.amap.api.maps.model.MultiPointOverlayOptions;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.activity.ExoPlayerActivity;
+import com.sjkj.appthreefloor_tsgz.activity.viewModel.SlowLiveViewModel;
+import com.sjkj.appthreefloor_tsgz.bean.AllCameraBean;
+import com.sjkj.appthreefloor_tsgz.databinding.FragmentDeviceMapBinding;
+import com.sjkj.appthreefloor_tsgz.map.MapMarkBean;
+import com.sjkj.base_lib.app.AppManager;
+import com.sjkj.base_lib.utils.CommonUtils;
+import com.sjkj.base_lib.utils.Constants;
+import com.sjkj.base_lib.utils.MapUtils;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseMapFragment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DeviceMapFragment extends BaseMapFragment {
+    private FragmentDeviceMapBinding binding;
+    private SlowLiveViewModel viewModel;
+    //显示地图需要的变量
+    private AMap aMap;//地图对象
+    //标识,用于判断是否只显示一次定位信息和用户重新定位
+    //定位需要的声明
+    private List<MapMarkBean> markBeans;
+    private List<AllCameraBean.Rows> rowsArrayList = new ArrayList<>();
+    private int zoomValue = 12;//(3-19)
+    private String distanceKm = "3";
+    /**
+     * 优先级 :1/0
+     * 1:地图移动到标点位置
+     * 0:地图移动到定位位置
+     */
+    private int priority = 0;
+    private MultiPointOverlay multiPointOverlay;
+    private MultiPointOverlayOptions overlayOptions;
+    private Handler handler = new Handler();
+
+    public DeviceMapFragment() {
+
+    }
+
+
+    public DeviceMapFragment(List<MapMarkBean> markBeans, int priority) {
+        this.markBeans = markBeans;
+        this.priority = priority;
+
+    }
+
+//    private void clear() {
+//        overlayOptions = null;
+//        if (multiPointOverlay != null) {
+//            multiPointOverlay.remove();
+//            multiPointOverlay.destroy();
+//        }
+//    }
+
+//    public void refreshData(List<MapMarkBean> markBeans, List<ResourceVisualizationBean> list, String type, int priority) {
+//        clear();//先清除图层
+//        this.markBeans = markBeans;
+//        this.priority = priority;
+//        this.resourceVisualizationBeanList = list;
+////        changeCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(Constants.DEFAULT_LOCATION_LAT, Constants.DEFAULT_LOCATION_LNG, true), 12, 30, 30)));
+//        changeCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(markBeans.get(markBeans.size() - 1).getLatitude(), markBeans.get(markBeans.size() - 1).getLongitude(), true), 10, 30, 30)));
+//        binding.mapView.getMap().clear();
+//        overlayOptions = new MultiPointOverlayOptions();
+//        setLocationIcon(type);
+//        overlayOptions.anchor(0.5f, 0.5f); //设置锚点
+//        multiPointOverlay = binding.mapView.getMap().addMultiPointOverlay(overlayOptions);
+////        for (int i = 0; i < markBeans.size(); i++) {
+////            binding.mapView.getMap().addMarker(new MarkerOptions().position(new LatLng(markBeans.get(i).getLatitude(), markBeans.get(i).getLongitude()))
+////                    .visible(true)
+////                    .snippet(markBeans.get(i).getId())
+////                    .title(markBeans.get(i).getName())
+////                    .icon(BitmapDescriptorFactory
+////                            .defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
+////        }
+//
+//
+//        new Handler().post(new Runnable() {
+//            @Override
+//            public void run() {
+//                List<MultiPointItem> list = new ArrayList<MultiPointItem>();
+//                for (MapMarkBean newList : markBeans) {
+//
+//                    MultiPointItem multiPointItem = new MultiPointItem(new LatLng(newList.getLatitude(), newList.getLongitude()));
+//                    multiPointItem.setTitle(newList.getName());
+//
+//                    multiPointItem.setCustomerId(newList.getId());
+//
+//                    list.add(multiPointItem);
+//
+//
+//                }
+//                multiPointOverlay.setItems(list);
+//            }
+//        });
+//
+//    }
+
+    public void refreshData(List<AllCameraBean.Rows> list) {
+        clear();//先清除图层
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                handler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        try {
+                            for (AllCameraBean.Rows bean : list) {
+                                if (CommonUtils.checkLongitudeLatitude(bean.getLongitude(), bean.getLatitude())) {
+                                    MapUtils.GPS gps = MapUtils.gps84_To_Gcj02(Double.parseDouble(bean.getLatitude()), Double.parseDouble(bean.getLongitude()));
+                                    if (gps != null) {
+                                        setLocationIcon(gps, bean.getChannelCode(), bean.getCameraName() + "", bean);
+                                    }
+                                }
+                            }
+                        } catch (NumberFormatException e) {
+                            e.printStackTrace();
+                        }
+                        try {
+                            changeCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(Double.parseDouble(list.get(list.size() - 1).getLatitude()), Double.parseDouble(list.get(list.size() - 1).getLongitude()), true), 10, 30, 30)));
+                        } catch (NumberFormatException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                });
+            }
+        }).start();
+
+    }
+
+    private void clear() {
+        if (binding.mapView.getMap() != null)
+            binding.mapView.getMap().clear();
+    }
+
+    private void setLocationIcon(MapUtils.GPS gps, String id, String type, AllCameraBean.Rows bean) {
+        Log.e("ICON", type);
+        MarkerOptions options = new MarkerOptions();
+        options.position(new LatLng(gps.getLat(), gps.getLon()));
+        options.visible(true);
+        options.snippet(id);
+        options.infoWindowEnable(false);
+        options.title(bean.getCameraName());
+        options.icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_map));//设置图标
+        binding.mapView.getMap().addMarker(options);
+
+
+    }
+
+    @Override
+    protected int initLayout() {
+        return R.layout.fragment_device_map;
+    }
+
+    @Override
+    public View initBinding(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
+        binding = (FragmentDeviceMapBinding) getViewDataBing(inflater, container);
+        viewModel = new ViewModelProvider((ViewModelStoreOwner) AppManager.getAppManager().currentActivity(), new ViewModelProvider.NewInstanceFactory()).get(SlowLiveViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner((LifecycleOwner) this);
+        binding.mapView.onCreate(bundle);
+        binding.mapView.getMap().getUiSettings().setLogoBottomMargin(-50);
+        binding.mapView.getMap().getUiSettings().setZoomControlsEnabled(false);
+        binding.mapView.getMap().getUiSettings().setMyLocationButtonEnabled(false);
+        binding.mapView.getMap().setMapType(AMap.MAP_TYPE_SATELLITE); // 设为正常模式
+        //binding.mapView.getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(43.911535, 125.324667), zoomValue));
+        changeCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(Constants.DEFAULT_LOCATION_LAT, Constants.DEFAULT_LOCATION_LNG, true), 10, 30, 30)));
+
+        return binding.getRoot();
+    }
+
+    @Override
+    public void initView() {
+
+        //requestPermissionsLocation();
+        viewModel.getData().observe(getViewLifecycleOwner(), list -> {
+            this.rowsArrayList.clear();
+            this.rowsArrayList = list;
+            refreshData(list);
+        });
+    }
+
+    /**
+     * 根据动画按钮状态,调用函数animateCamera或moveCamera来改变可视区域
+     */
+    private void changeCamera(CameraUpdate update) {
+
+        binding.mapView.getMap().moveCamera(update);
+
+    }
+
+    private void requestPermissionsLocation() {
+        XXPermissions.with(AppManager.getAppManager().currentActivity())
+                .permission(Permission.ACCESS_COARSE_LOCATION)
+                .permission(Permission.ACCESS_FINE_LOCATION)
+//                .permission(Permission.ACCESS_BACKGROUND_LOCATION)
+                .request(new OnPermissionCallback() {
+                    @Override
+                    public void onGranted(List<String> permissions, boolean all) {
+                        if (all) {
+                            //开始定位
+                            initLocation();
+                        } else {
+                            ToastUtils.show("获取部分权限成功,但部分权限未正常授予");
+                        }
+                    }
+
+                    @Override
+                    public void onDenied(List<String> permissions, boolean never) {
+                        if (never) {
+                            ToastUtils.show("被永久拒绝授权,请手动授予权限");
+                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
+                            XXPermissions.startPermissionActivity(AppManager.getAppManager().currentActivity(), permissions);
+                        } else {
+                            ToastUtils.show("获取权限失败");
+                        }
+                    }
+                });
+    }
+
+    private void initLocation() {
+
+
+    }
+
+    private void ChooseSelect(String distance, TextView textView, TextView textView2, TextView textView3) {
+        distanceKm = distance;
+        textView.setTextColor(Color.rgb(255, 255, 255));
+        textView2.setTextColor(Color.rgb(0, 0, 0));
+        textView3.setTextColor(Color.rgb(0, 0, 0));
+        textView.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_blue));
+        textView2.setBackgroundDrawable(null);
+        textView3.setBackgroundDrawable(null);
+    }
+
+    @Override
+    public void initListener() {
+        binding.tvThree.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                ChooseSelect("3", binding.tvThree, binding.tvFive, binding.tvTen);
+            }
+        });
+        binding.tvFive.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                ChooseSelect("5", binding.tvFive, binding.tvThree, binding.tvTen);
+            }
+        });
+        binding.tvTen.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                ChooseSelect("10", binding.tvTen, binding.tvFive, binding.tvThree);
+            }
+        });
+        binding.mapView.getMap().setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
+            @Override
+            public boolean onMarkerClick(Marker marker) {
+                if (!TextUtils.isEmpty(marker.getSnippet())) {
+                    Log.d("zhr1111", marker.getSnippet());
+                    startActivity(new Intent(getActivity(), ExoPlayerActivity.class).putExtra("id", marker.getSnippet()).putExtra("name", marker.getTitle()));
+                } else {
+                    ToastUtils.show("无视频源");
+                }
+                return false;
+            }
+        });
+        binding.mapView.getMap().setOnMultiPointClickListener(new AMap.OnMultiPointClickListener() {
+            @Override
+            public boolean onPointClick(MultiPointItem multiPointItem) {
+                Log.d("zhr123123", multiPointItem.toString());
+                return true;
+            }
+        });
+    }
+
+    @Override
+    public void loadData() {
+
+    }
+
+    //自定义一个图钉,并且设置图标,当我们点击图钉时,显示设置的信息
+
+    /**
+     * @param lat 纬度
+     * @param log 经度
+     * @return
+     */
+    private MarkerOptions getMarkerOptions(double lat, double log, String address) {
+        //设置图钉选项
+        MarkerOptions options = new MarkerOptions();
+        //图标
+        options.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_baseline_local_fire_department_24));
+        //位置
+        options.position(new LatLng(lat, log));
+        //标题
+        options.title(address);
+        options.visible(true);
+        //子标题
+        //options.snippet("这里好火");
+        //设置多少帧刷新一次图片资源
+        options.period(60);
+        return options;
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        binding.mapView.onResume();
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        binding.mapView.onPause();
+    }
+
+    @Override
+    public void onSaveInstanceState(@NonNull Bundle outState) {
+        super.onSaveInstanceState(outState);
+        binding.mapView.onSaveInstanceState(outState);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        binding.mapView.onDestroy();
+    }
+
+
+}

+ 2 - 2
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventDetailsFragment.java

@@ -221,8 +221,8 @@ public class EventDetailsFragment extends BaseFragment {
                         for (int i = 0; i < deptXzList.size(); i++) {
                             for (int j = 0; j < eventStatusList.size(); j++) {
 
-                                if (deptXzList.get(i).getStatus().equals(eventStatusList.get(j).getDictValue())) {
-                                    deptXzList.get(i).setStatusValue(eventStatusList.get(j).getDictLabel());
+                                if (deptXzList.get(i).getStatus().equals(eventStatusList.get(j).getValue())) {
+                                    deptXzList.get(i).setStatusValue(eventStatusList.get(j).getLabel());
                                 }
 
                             }

+ 41 - 3
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/MainFragment.java

@@ -9,10 +9,10 @@ import android.view.ViewGroup;
 import androidx.lifecycle.ViewModelProvider;
 
 import com.sjkj.appthreefloor_tsgz.R;
-import com.sjkj.appthreefloor_tsgz.activity.ExoPlayerActivity;
+import com.sjkj.appthreefloor_tsgz.activity.ImageryActivity;
 import com.sjkj.appthreefloor_tsgz.activity.MonitoringCenterActivity;
-import com.sjkj.appthreefloor_tsgz.activity.MyVideoPlayerActivity;
-import com.sjkj.appthreefloor_tsgz.activity.WaterCraneResourcesActivity;
+import com.sjkj.appthreefloor_tsgz.activity.SlowLiveActivity;
+import com.sjkj.appthreefloor_tsgz.activity.YunWeiRecordActivity;
 import com.sjkj.appthreefloor_tsgz.app.App;
 import com.sjkj.appthreefloor_tsgz.bean.NoticeListBean;
 import com.sjkj.appthreefloor_tsgz.databinding.FragmentMainBinding;
@@ -23,6 +23,7 @@ import com.sjkj.base_lib.utils.CommonUtils;
 import com.sjkj.base_lib.utils.LocationUtils;
 import com.sjkj.base_lib.utils.ToastUtils;
 import com.sjkj.base_lib.view.BaseFragment;
+import com.sjkj.base_lib.weight.LoadingDialog;
 import com.youth.banner.adapter.BannerImageAdapter;
 import com.youth.banner.holder.BannerImageHolder;
 import com.youth.banner.indicator.CircleIndicator;
@@ -58,6 +59,43 @@ public class MainFragment extends BaseFragment {
 
     @Override
     public void initListener() {
+        //慢直播
+        binding.llSlowLive.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+
+                showLoadingDialog();
+                LocationUtils.getInstance().startLocation(true, new LocationUtils.OnLocationListener() {
+                    @Override
+                    public void onLocationChanged(double lat, double lng, String address, int code) {
+
+                        if (CommonUtils.checkLongitudeLatitude(lng + "", lat + "")) {
+                            hideLoadingDialog(LoadingDialog.LOADING_SUCCESS);
+                            startActivity(new Intent(getActivity(), SlowLiveActivity.class).putExtra("Latitude", lat).putExtra("Longitude", lng));
+                        } else {
+                            ToastUtils.show("定位失败,请检查定位权限或者稍后重试");
+                        }
+                    }
+
+
+                });
+            }
+        });
+        //映像实录
+        binding.tvImagery.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+
+                startActivity(new Intent(getActivity(), ImageryActivity.class));
+            }
+        });
+        //运维记录
+        binding.tvRecord.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                startActivity(new Intent(getActivity(), YunWeiRecordActivity.class));
+            }
+        });
         binding.llCamera.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {

+ 0 - 1
app/src/main/java/com/sjkj/appthreefloor_tsgz/login/LoginActivity.java

@@ -193,7 +193,6 @@ public class LoginActivity extends BaseLoginActivity {
                 try {
                     hideLoadingDialog(LoadingDialog.LOADING_SUCCESS);
                     AppTools.setToken(loginBean.getAccessToken());
-                    Log.d("zhr1231", loginBean.toString());
                      AppTools.setTenantId(loginBean.getTenantId());
                      //AppTools.setNickName(data.getUsername());
                     AppTools.setUserName(viewModel.username.get());

+ 2 - 2
app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/DictValueTools.java

@@ -35,8 +35,8 @@ public class DictValueTools {
 
                 if (list != null && list.size() > 0) {
                     for (int i = 0; i < list.size(); i++) {
-                        if (list.get(i).getDictValue().equals(typeValue)) {
-                            value = list.get(i).getDictLabel();
+                        if (list.get(i).getValue().equals(typeValue)) {
+                            value = list.get(i).getLabel();
                             Log.d("zhr111", value);
                         }
 

+ 1 - 1
app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/Method.java

@@ -161,7 +161,7 @@ public class Method {
      * @return result=0两个日期相等,result < 0表示firstDate 小与lastDate
      */
     public static int compareDate(String firstDate, String lastDate) {
-        java.text.DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        java.text.DateFormat df = new SimpleDateFormat("HH:mm:ss");
         Calendar c1 = Calendar.getInstance();
         Calendar c2 = Calendar.getInstance();
         try {

+ 72 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/weight/CustomBottomDialog.java

@@ -0,0 +1,72 @@
+package com.sjkj.appthreefloor_tsgz.weight;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.res.Resources;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+import com.sjkj.appthreefloor_tsgz.R;
+
+/**
+ * Created by NiYang on 2017/4/16.
+ */
+
+public class CustomBottomDialog extends Dialog {
+    private Context mContext = null;
+
+    public CustomBottomDialog(View contentView, Context context) {
+        super(context);
+        this.mContext = context;
+        init(contentView);
+    }
+
+    public CustomBottomDialog(View contentView, Context context, int themeResId) {
+        super(context, themeResId);
+        this.mContext = context;
+        init(contentView);
+    }
+
+    protected CustomBottomDialog(View contentView, Context context, boolean cancelable, OnCancelListener cancelListener) {
+        super(context, cancelable, cancelListener);
+        this.mContext = context;
+        init(contentView);
+    }
+
+    private void init(View contentView) {
+        setContentView(contentView);
+        Window window = getWindow();//获取Dialog的Window对象
+        window.setGravity(Gravity.BOTTOM);//把Dialog的窗体设置在屏幕的底部
+        window.setWindowAnimations(R.style.dialog_animation);//给窗体设置动画
+
+        //获取的是Dialog窗体的布局参数,注意这里不是Dialog中的View的布局参数
+        WindowManager.LayoutParams lp = window.getAttributes();
+        //lp.y = 15;//设置Dialog的窗体距离屏幕底部的距离
+        //获取Activity的Window管理器
+        WindowManager windowManager = (WindowManager) this.mContext.getSystemService(Context.WINDOW_SERVICE);
+        //设置Dialog的窗体的宽度,屏幕的宽度-15
+        lp.width = windowManager.getDefaultDisplay().getWidth();
+        window.setAttributes(lp);
+    }
+
+    /**
+     * dp转px
+     * @param dp dp值
+     * @return 转换后的px的值
+     */
+    private int dp2px(int dp) {
+        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, Resources.getSystem().getDisplayMetrics());
+    }
+
+    /**
+     * sp转px
+     * @param sp sp值
+     * @return 转换后的px值
+     */
+    private int sp2px(int sp) {
+        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, Resources.getSystem().getDisplayMetrics());
+    }
+}

+ 10 - 0
app/src/main/res/anim/dialog_animation_enter.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shareInterpolator="false">
+
+    <translate
+        android:fromYDelta="100%p"
+        android:toYDelta="0"
+        android:duration="300" />
+
+</set>

+ 8 - 0
app/src/main/res/anim/dialog_animation_out.xml

@@ -0,0 +1,8 @@
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shareInterpolator="false">
+
+    <translate
+        android:fromYDelta="0"
+        android:toYDelta="100%p"
+        android:duration="300" />
+</set>

BIN
app/src/main/res/drawable-xxhdpi/icon_c.png


BIN
app/src/main/res/drawable-xxhdpi/icon_calendar.png


BIN
app/src/main/res/drawable-xxhdpi/icon_del.png


BIN
app/src/main/res/drawable-xxhdpi/icon_edit.png


BIN
app/src/main/res/drawable-xxhdpi/icon_image.png


BIN
app/src/main/res/drawable-xxhdpi/icon_map.png


BIN
app/src/main/res/drawable-xxhdpi/icon_report.png


BIN
app/src/main/res/drawable-xxhdpi/icon_type.png


BIN
app/src/main/res/drawable-xxhdpi/icon_video.png


+ 6 - 0
app/src/main/res/drawable/bg_blue.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="5dp"/>
+    <solid android:color="#5598FF"/>
+</shape>

+ 9 - 0
app/src/main/res/drawable/bg_camera_list.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#F3F4FB"/> <!-- 背景颜色 -->
+    <corners
+        android:topLeftRadius="20dp"
+        android:topRightRadius="20dp"
+        android:bottomLeftRadius="0dp"
+        android:bottomRightRadius="0dp"/>
+</shape>

+ 6 - 0
app/src/main/res/drawable/bg_hui.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="5dp"/>
+    <solid android:color="#E6F2FF"/>
+</shape>

+ 9 - 0
app/src/main/res/drawable/dialog_bg.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <corners android:radius="10dp" />
+
+    <solid android:color="@color/white" />
+
+</shape>

+ 22 - 0
app/src/main/res/drawable/tab_indicator.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <item android:gravity="center">
+        <shape android:shape="rectangle">
+            <size
+                android:width="12dp"
+                android:height="4dp" />
+
+            <corners android:radius="5dp" />
+            <gradient
+                android:angle="0"
+                android:endColor="#1faffe"
+                android:startColor="#2781F8"
+                android:type="linear" />
+
+
+        </shape>
+    </item>
+
+</layer-list>

+ 150 - 0
app/src/main/res/layout/activity_imagery.xml

@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.activity.viewModel.ImageryViewModel" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+
+        android:orientation="vertical">
+
+        <androidx.appcompat.widget.Toolbar
+            android:id="@+id/toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="?actionBarSize"
+            android:fitsSystemWindows="true"
+            android:gravity="center_horizontal">
+
+
+        </androidx.appcompat.widget.Toolbar>
+
+        <LinearLayout
+
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@drawable/bg_camera_list"
+            android:orientation="vertical">
+
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="40dp"
+                android:layout_marginLeft="15dp"
+                android:layout_marginTop="10dp"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/bg_update">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:layout_marginLeft="15dp"
+                    android:gravity="center_vertical"
+                    android:text="巡检时间:"
+                    android:textColor="@color/color_black_text" />
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent">
+
+
+
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_gravity="center_vertical"
+                        android:gravity="right">
+
+                        <ImageView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_gravity="center_vertical"
+                            android:background="@drawable/icon_calendar" />
+                        <TextView
+                            android:id="@+id/tv_startTime"
+                            android:layout_width="wrap_content"
+                            android:layout_height="match_parent"
+                            android:layout_marginLeft="15dp"
+                            android:padding="5dp"
+                            android:layout_toLeftOf="@+id/tv_heng"
+                            android:gravity="center_vertical"
+                            android:text="开始时间"
+                            android:textColor="#AAAAAA" />
+
+                        <TextView
+                            android:id="@+id/tv_heng"
+                            android:layout_width="wrap_content"
+                            android:layout_height="match_parent"
+                            android:layout_marginLeft="5dp"
+                            android:gravity="center_vertical"
+                            android:text="─"
+                            android:textColor="#AAAAAA" />
+
+                        <TextView
+                            android:id="@+id/tv_endTime"
+                            android:layout_width="wrap_content"
+                            android:layout_height="match_parent"
+                            android:layout_marginLeft="5dp"
+                            android:layout_marginRight="20dp"
+                            android:gravity="center_vertical"
+                            android:text="结束时间"
+                            android:textColor="#AAAAAA" />
+                    </LinearLayout>
+                </LinearLayout>
+            </LinearLayout>
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="35dp"
+                android:layout_marginLeft="15dp"
+                android:layout_marginTop="10dp"
+                android:layout_marginRight="15dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginRight="15dp"
+                    android:layout_toLeftOf="@+id/tv_reset"
+                    android:background="@drawable/bg_blue"
+                    android:gravity="center_vertical|center_horizontal"
+                    android:text="查      询"
+                    android:textColor="#FFFFFF">
+
+                </TextView>
+
+                <TextView
+                    android:id="@+id/tv_reset"
+                    android:layout_width="75dp"
+                    android:layout_height="match_parent"
+                    android:layout_alignParentRight="true"
+                    android:background="@drawable/bg_hui"
+                    android:gravity="center_horizontal|center_vertical"
+                    android:text="重置"
+                    android:textColor="@color/gray6">
+
+                </TextView>
+            </RelativeLayout>
+
+            <com.scwang.smartrefresh.layout.SmartRefreshLayout
+                android:id="@+id/smartRefreshLayout"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/recyclerView"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:overScrollMode="never" />
+
+
+            </com.scwang.smartrefresh.layout.SmartRefreshLayout>
+        </LinearLayout>
+    </LinearLayout>
+</layout>

+ 197 - 0
app/src/main/res/layout/activity_imagery_report.xml

@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.activity.viewModel.ImageryViewModel" />
+    </data>
+
+    <LinearLayout
+
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <androidx.appcompat.widget.Toolbar
+            android:id="@+id/toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="?actionBarSize"
+            android:fitsSystemWindows="true"
+            android:gravity="center_horizontal">
+
+
+        </androidx.appcompat.widget.Toolbar>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@drawable/bg_camera_list"
+
+            android:orientation="vertical">
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="40dp"
+                android:layout_marginLeft="15dp"
+                android:layout_marginTop="15dp"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/bg_update">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:layout_marginLeft="15dp"
+                    android:gravity="center_vertical"
+                    android:text="类型:"
+                    android:textColor="@color/color_black_text"
+                    android:textSize="14dp" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:layout_alignParentRight="true"
+                    android:layout_marginLeft="15dp"
+                    android:layout_marginRight="15dp"
+                    android:drawableRight="@drawable/icon_type"
+                    android:drawablePadding="10dp"
+                    android:gravity="center_vertical|right"
+                    android:hint="请选择"
+                    android:text="@{viewModel.typeLabel}"
+                    android:textColor="#AAAAAA"
+                    android:textSize="14dp" />
+            </RelativeLayout>
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="40dp"
+                android:layout_marginLeft="15dp"
+                android:layout_marginTop="15dp"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/bg_update">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:layout_marginLeft="15dp"
+                    android:gravity="center_vertical"
+                    android:text="地点:"
+                    android:textColor="@color/color_black_text"
+                    android:textSize="14dp" />
+
+                <EditText
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:layout_alignParentRight="true"
+                    android:layout_marginLeft="15dp"
+                    android:layout_marginRight="15dp"
+                    android:background="@null"
+                    android:drawableLeft="@drawable/icon_edit"
+                    android:drawablePadding="10dp"
+                    android:hint="请输入"
+                    android:gravity="center_vertical|right"
+                    android:text="@{viewModel.address}"
+                    android:textColor="#AAAAAA"
+                    android:textSize="14dp" />
+            </RelativeLayout>
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="160dp"
+                android:layout_marginLeft="15dp"
+                android:layout_marginTop="15dp"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/bg_update">
+
+                <TextView
+                    android:id="@+id/tv_tu"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="15dp"
+                    android:layout_marginTop="15dp"
+                    android:gravity="center_vertical"
+                    android:text="图片:"
+                    android:textColor="@color/color_black_text"
+                    android:textSize="14dp" />
+
+                <TextView
+                    android:id="@+id/tv_hong"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@+id/tv_tu"
+                    android:layout_marginLeft="15dp"
+                    android:layout_marginTop="10dp"
+                    android:gravity="center_vertical"
+                    android:text="*"
+                    android:textColor="@color/red_color"
+                    android:textSize="14dp" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+
+                    android:layout_height="wrap_content"
+                    android:layout_below="@+id/tv_tu"
+                    android:layout_marginLeft="5dp"
+                    android:layout_marginTop="10dp"
+                    android:layout_toRightOf="@+id/tv_hong"
+                    android:gravity="center_vertical"
+                    android:text="最多允许上传2张图片,请上传现场情况图片/视频"
+                    android:textColor="#8D8D8D"
+                    android:textSize="12dp" />
+
+                <LinearLayout
+                    android:id="@+id/ll_photo"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@+id/tv_hong"
+                    android:layout_gravity="center_vertical"
+                    android:layout_marginLeft="20dp"
+                    android:layout_marginTop="13dp"
+                    android:orientation="horizontal">
+
+                    <ImageView
+                        android:id="@+id/iv_add"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center_vertical"
+                        android:background="@drawable/icon_camera_phot" />
+
+                    <androidx.recyclerview.widget.RecyclerView
+                        android:id="@+id/image_recyclerView"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="10dp"
+                        android:layout_marginRight="10dp"
+                        android:overScrollMode="never"
+                        android:padding="3dp" />
+
+
+                </LinearLayout>
+            </RelativeLayout>
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+
+                <TextView
+                    android:id="@+id/submit"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_alignParentBottom="true"
+                    android:layout_marginLeft="48dp"
+                    android:layout_marginRight="48dp"
+                    android:layout_marginBottom="40dp"
+                    android:background="@drawable/shape_fillet_bg_blue"
+                    android:gravity="center|bottom"
+                    android:paddingTop="10dp"
+                    android:paddingBottom="10dp"
+                    android:text="提交"
+                    android:textColor="@color/color_white"
+                    android:textSize="15dp" />
+            </RelativeLayout>
+        </LinearLayout>
+
+    </LinearLayout>
+</layout>

+ 10 - 13
app/src/main/res/layout/activity_login.xml

@@ -9,27 +9,25 @@
             type="com.sjkj.appthreefloor_tsgz.login.LoginViewModel" />
     </data>
 
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical">
+
 
         <androidx.core.widget.NestedScrollView
+
+            android:background="@mipmap/bg_login_siping_tsgz"
             android:layout_height="match_parent"
             android:layout_width="match_parent"
             android:fillViewport="true">
 
             <LinearLayout
+
                 android:layout_height="match_parent"
                 android:layout_width="match_parent"
-                android:background="@mipmap/bg_login_siping_tsgz"
                 android:orientation="vertical">
 
                 <androidx.appcompat.widget.Toolbar
                     android:id="@+id/toolbar"
                     android:layout_width="match_parent"
                     android:layout_height="?actionBarSize"
-                    android:fitsSystemWindows="true"
                     android:gravity="center_horizontal">
 
 
@@ -37,24 +35,24 @@
 
 
                 <RelativeLayout
-                    android:layout_height="match_parent"
                     android:layout_width="match_parent"
-                    android:layout_marginTop="50dp">
+                    android:layout_height="match_parent">
 
                     <LinearLayout
                         android:layout_width="match_parent"
+                        android:layout_height="380dp"
+                        android:layout_centerVertical="true"
                         android:layout_marginLeft="15dp"
                         android:layout_marginRight="15dp"
-                        android:layout_height="480dp"
-                        android:layout_centerInParent="true"
                         android:background="@drawable/icon_loginbg"
+                        android:gravity="center_vertical"
                         android:orientation="vertical">
 
 
                         <LinearLayout
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content"
-                            android:layout_marginTop="140dp"
+                            android:layout_marginTop="70dp"
                             android:gravity="center_vertical"
                             android:orientation="horizontal">
 
@@ -131,7 +129,7 @@
                             android:layout_width="match_parent"
                             android:layout_height="wrap_content"
                             android:layout_marginLeft="22dp"
-                            android:layout_marginTop="50dp"
+                            android:layout_marginTop="20dp"
                             android:layout_marginRight="22dp"
                             android:layout_marginBottom="20dp"
                             android:background="@drawable/shape_fillet_bg_blue"
@@ -149,5 +147,4 @@
         </androidx.core.widget.NestedScrollView>
 
 
-    </LinearLayout>
 </layout>

+ 1 - 1
app/src/main/res/layout/activity_new_event.xml

@@ -114,7 +114,7 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_gravity="center_vertical"
-                        android:text="所属部门"
+                        android:text="所属部门:"
                         android:textColor="@color/color_black_text"
                         android:textSize="14dp" />
 

+ 64 - 0
app/src/main/res/layout/activity_slow_live.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.activity.viewModel.SlowLiveViewModel" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_gravity="start"
+        android:background="@color/color_white"
+        android:orientation="vertical">
+
+        <androidx.appcompat.widget.Toolbar
+            android:id="@+id/toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="?actionBarSize"
+            android:fitsSystemWindows="true"
+            android:gravity="center_horizontal">
+
+
+        </androidx.appcompat.widget.Toolbar>
+
+        <com.google.android.material.tabs.TabLayout
+            android:background="@drawable/bg_camera_list"
+            android:id="@+id/tabLayout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:tabGravity="fill"
+            app:tabIndicator="@drawable/tab_indicator"
+            app:tabIndicatorFullWidth="false"
+            app:tabIndicatorHeight="2dp"
+            app:tabMaxWidth="0dp"
+            app:tabMode="fixed"
+            app:tabRippleColor="@android:color/transparent"
+            app:tabSelectedTextColor="@color/color_black_text"
+            app:tabTextColor="@color/gray6" />
+
+        <View
+            android:background="#D8D8D8"
+            android:layout_width="match_parent"
+            android:layout_height="1dp">
+
+        </View>
+        <FrameLayout
+            android:id="@+id/fragment_layout"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:layout_weight="1" />
+        <!--        <androidx.viewpager2.widget.ViewPager2-->
+        <!--            android:id="@+id/view_pager"-->
+        <!--            android:layout_width="match_parent"-->
+        <!--            android:layout_height="0dp"-->
+        <!--            android:layout_weight="1" />-->
+
+    </LinearLayout>
+
+
+</layout>

+ 184 - 0
app/src/main/res/layout/activity_yunwei_record.xml

@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.activity.viewModel.RecordViewModel" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+
+        android:orientation="vertical">
+
+        <androidx.appcompat.widget.Toolbar
+            android:id="@+id/toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="?actionBarSize"
+            android:fitsSystemWindows="true"
+            android:gravity="center_horizontal">
+
+
+        </androidx.appcompat.widget.Toolbar>
+
+        <LinearLayout
+            android:background="@drawable/bg_camera_list"
+            android:orientation="vertical"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:layout_marginLeft="15dp"
+            android:layout_marginTop="15dp"
+            android:layout_marginRight="15dp"
+            android:background="@drawable/bg_update">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:layout_marginLeft="15dp"
+                android:gravity="center_vertical"
+                android:text="巡检人:"
+                android:textColor="@color/color_black_text"
+                android:textSize="14dp" />
+
+            <EditText
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:layout_alignParentRight="true"
+                android:layout_marginLeft="15dp"
+                android:layout_marginRight="15dp"
+                android:background="@null"
+                android:drawableLeft="@drawable/icon_edit"
+                android:drawablePadding="10dp"
+                android:gravity="center_vertical|right"
+                android:hint="请输入"
+                android:text="@{viewModel.inspector}"
+                android:textColor="#AAAAAA"
+                android:textSize="14dp" />
+        </RelativeLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="40dp"
+            android:layout_marginLeft="15dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="15dp"
+            android:background="@drawable/bg_update">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:layout_marginLeft="15dp"
+                android:gravity="center_vertical"
+                android:text="巡检时间:"
+                android:textColor="@color/color_black_text" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+
+
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_gravity="center_vertical"
+                    android:gravity="right">
+                    <ImageView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center_vertical"
+                        android:layout_marginLeft="15dp"
+                        android:background="@drawable/icon_calendar" />
+
+                    <TextView
+                        android:id="@+id/tv_startTime"
+                        android:layout_width="wrap_content"
+                        android:layout_height="match_parent"
+                        android:layout_marginLeft="15dp"
+                        android:layout_toLeftOf="@+id/tv_heng"
+                        android:gravity="center_vertical"
+                        android:hint="开始时间"
+                        android:text="@{viewModel.satrtTime}"
+                        android:textColor="#AAAAAA" />
+
+                    <TextView
+                        android:id="@+id/tv_heng"
+                        android:layout_width="wrap_content"
+                        android:layout_height="match_parent"
+                        android:layout_marginLeft="5dp"
+                        android:gravity="center_vertical"
+                        android:text="─"
+                        android:textColor="#AAAAAA" />
+
+                    <TextView
+                        android:id="@+id/tv_endTime"
+                        android:layout_width="wrap_content"
+                        android:layout_height="match_parent"
+                        android:layout_marginLeft="5dp"
+                        android:layout_marginRight="20dp"
+                        android:gravity="center_vertical"
+                        android:hint="结束时间"
+                        android:text="@{viewModel.endTime}"
+                        android:textColor="#AAAAAA" />
+                </LinearLayout>
+            </LinearLayout>
+        </LinearLayout>
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="35dp"
+            android:layout_marginLeft="15dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="15dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_marginRight="15dp"
+                android:layout_toLeftOf="@+id/tv_reset"
+                android:background="@drawable/bg_blue"
+                android:gravity="center_vertical|center_horizontal"
+                android:text="查      询"
+                android:textColor="#FFFFFF">
+
+            </TextView>
+
+            <TextView
+                android:id="@+id/tv_reset"
+                android:layout_width="75dp"
+                android:layout_height="match_parent"
+                android:layout_alignParentRight="true"
+                android:background="@drawable/bg_hui"
+                android:gravity="center_horizontal|center_vertical"
+                android:text="重置"
+                android:textColor="@color/gray6">
+
+            </TextView>
+        </RelativeLayout>
+
+        <com.scwang.smartrefresh.layout.SmartRefreshLayout
+            android:id="@+id/smartRefreshLayout"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/recyclerView"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:overScrollMode="never" />
+
+
+        </com.scwang.smartrefresh.layout.SmartRefreshLayout>
+        </LinearLayout>
+    </LinearLayout>
+</layout>

+ 75 - 0
app/src/main/res/layout/dialog_layout.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="200dp"
+        android:background="@drawable/dialog_bg">
+
+        <View
+            android:id="@+id/view"
+            android:layout_width="2dp"
+            android:layout_height="16dp"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="19dp"
+            android:background="#285AFB">
+
+        </View>
+
+        <TextView
+            android:id="@+id/txt_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="5dp"
+            android:layout_marginTop="15dp"
+            android:layout_toRightOf="@+id/view"
+            android:text="请选择上传方式"
+            android:textColor="#0E182F"
+            android:textSize="16sp" />
+
+        <TextView
+            android:id="@+id/tv_close"
+            android:layout_width="30dp"
+            android:layout_height="30dp"
+            android:layout_alignParentRight="true"
+            android:layout_marginTop="5dp"
+            android:layout_marginRight="15dp"
+            android:gravity="center_vertical|center_horizontal"
+            android:text="X"
+            android:textColor="#C9C9C9"
+            android:textSize="20dp" />
+
+
+        <LinearLayout
+            android:layout_marginTop="15dp"
+            android:layout_width="match_parent"
+            android:paddingBottom="20dp"
+            android:layout_height="140dp"
+            android:layout_below="@+id/txt_title"
+            android:layout_marginLeft="15dp"
+            android:layout_marginRight="15dp">
+
+            <ImageView
+                android:id="@+id/iv_video"
+                android:layout_marginRight="10dp"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:background="@drawable/icon_video">
+
+            </ImageView>
+
+            <ImageView
+                android:id="@+id/iv_image"
+                android:layout_width="0dp"
+                android:layout_marginLeft="5dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:background="@drawable/icon_image">
+
+            </ImageView>
+        </LinearLayout>
+
+    </RelativeLayout>
+
+</layout>

+ 85 - 0
app/src/main/res/layout/fragment_camera_list.xml

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.activity.viewModel.SlowLiveViewModel" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+        <LinearLayout
+            android:background="#F3F4FB"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="35dp"
+                android:layout_marginLeft="15dp"
+                android:layout_marginTop="10dp"
+                android:layout_marginRight="15dp"
+                android:background="@drawable/bg_update">
+
+                <TextView
+
+                    android:id="@+id/tv_three"
+                    android:layout_width="0dp"
+                    android:layout_height="match_parent"
+                    android:layout_margin="2dp"
+                    android:layout_weight="1"
+                    android:background="@drawable/bg_blue"
+                    android:gravity="center_horizontal|center_vertical"
+                    android:text="3KM内"
+                    android:textColor="#ffffff">
+
+                </TextView>
+
+                <TextView
+                    android:id="@+id/tv_five"
+                    android:layout_width="0dp"
+                    android:layout_height="match_parent"
+                    android:layout_margin="2dp"
+                    android:layout_weight="1"
+                    android:gravity="center_horizontal|center_vertical"
+                    android:text="5KM内"
+                    android:textColor="#333333">
+
+                </TextView>
+
+                <TextView
+                    android:id="@+id/tv_ten"
+
+                    android:layout_width="0dp"
+                    android:layout_height="match_parent"
+                    android:layout_margin="2dp"
+                    android:layout_weight="1"
+                    android:gravity="center_horizontal|center_vertical"
+                    android:text="10KM内"
+                    android:textColor="#333333">
+
+                </TextView>
+            </LinearLayout>
+
+<!--            <com.scwang.smartrefresh.layout.SmartRefreshLayout-->
+<!--                android:id="@+id/smartRefreshLayout"-->
+<!--                android:layout_width="match_parent"-->
+<!--                android:layout_height="match_parent">-->
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/recyclerView"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:overScrollMode="never" />
+
+
+<!--            </com.scwang.smartrefresh.layout.SmartRefreshLayout>-->
+
+        </LinearLayout>
+    </LinearLayout>
+</layout>

+ 71 - 0
app/src/main/res/layout/fragment_device_map.xml

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.activity.viewModel.SlowLiveViewModel" />
+    </data>
+
+    <LinearLayout
+        android:background="#F3F4FB"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="35dp"
+            android:layout_marginLeft="15dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="15dp"
+            android:background="@drawable/bg_update">
+
+            <TextView
+
+                android:id="@+id/tv_three"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_margin="2dp"
+                android:layout_weight="1"
+                android:background="@drawable/bg_blue"
+                android:gravity="center_horizontal|center_vertical"
+                android:text="3KM内"
+                android:textColor="#ffffff">
+
+            </TextView>
+
+            <TextView
+                android:id="@+id/tv_five"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_margin="2dp"
+                android:layout_weight="1"
+                android:gravity="center_horizontal|center_vertical"
+                android:text="5KM内"
+                android:textColor="#333333">
+
+            </TextView>
+
+            <TextView
+                android:id="@+id/tv_ten"
+
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_margin="2dp"
+                android:layout_weight="1"
+                android:gravity="center_horizontal|center_vertical"
+                android:text="10KM内"
+                android:textColor="#333333">
+
+            </TextView>
+        </LinearLayout>
+
+        <com.amap.api.maps.TextureMapView
+            android:id="@+id/map_view"
+            android:layout_margin="15dp"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </LinearLayout>
+</layout>

+ 5 - 1
app/src/main/res/layout/fragment_main.xml

@@ -532,12 +532,14 @@
                 android:orientation="horizontal">
 
                 <LinearLayout
+                    android:id="@+id/llSlowLive"
                     android:layout_width="0dp"
                     android:layout_height="220dp"
                     android:layout_marginLeft="10dp"
                     android:layout_marginRight="10dp"
                     android:layout_weight="1"
-                    android:background="@drawable/icon_zanding03">
+                    android:background="@drawable/icon_zanding03"
+                    android:orientation="vertical">
 
                 </LinearLayout>
 
@@ -550,6 +552,7 @@
 
                     <TextView
                         android:layout_width="match_parent"
+                        android:id="@+id/tvImagery"
                         android:layout_height="0dp"
                         android:layout_marginBottom="10dp"
                         android:layout_weight="1"
@@ -557,6 +560,7 @@
 
                     <TextView
                         android:layout_width="match_parent"
+                        android:id="@+id/tvRecord"
                         android:layout_height="0dp"
                         android:layout_weight="1"
                         android:background="@drawable/icon_zanding05" />

+ 59 - 0
app/src/main/res/layout/item_image_video_list2.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <data>
+
+        <variable
+            name="model"
+            type="com.sjkj.appthreefloor_tsgz.bean.ImageBean" />
+    </data>
+
+    <RelativeLayout
+        android:id="@+id/rl_image"
+        android:layout_width="65dp"
+        android:layout_height="65dp">
+
+        <ImageView
+            android:id="@+id/iv_icon"
+            android:layout_width="50dp"
+            android:layout_height="50dp"
+            android:layout_centerInParent="true"
+            android:layout_marginStart="5dp"
+            android:layout_marginTop="5dp"
+            android:layout_marginEnd="5dp"
+            android:layout_marginBottom="5dp"
+            android:scaleType="fitCenter" />
+
+        <ImageView
+            android:id="@+id/delete_iv"
+            android:layout_width="16dp"
+            android:layout_height="16dp"
+            android:layout_alignParentRight="true"
+            android:src="@drawable/icon_del" />
+
+        <FrameLayout
+
+
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerInParent="true"
+            android:layout_marginLeft="5dp"
+            android:layout_marginRight="5dp"
+            android:visibility="visible">
+
+            <ImageView
+                android:id="@+id/fl_head"
+                android:layout_width="20dp"
+                android:visibility="gone"
+                android:layout_height="20dp"
+                android:layout_gravity="center_vertical|center_horizontal"
+                android:background="@drawable/icon_scan" />
+            <ImageView
+                android:layout_width="40dp"
+                android:id="@+id/iv_c"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical|center_horizontal"
+                android:background="@drawable/icon_c" />
+        </FrameLayout>
+    </RelativeLayout>
+</layout>

+ 6 - 0
app/src/main/res/layout/window_report.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/icon"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:background="@drawable/icon_report" />

+ 1 - 0
app/src/main/res/values/colors.xml

@@ -33,4 +33,5 @@
     <color name="recyclerview_left_select">#F7F7F7</color>
     <color name="recyclerview_lefttext_select">#4D4D4D</color>
     <drawable name="gray">#D8D8D8</drawable>
+    <color name="gray6">#666666</color>
 </resources>

+ 13 - 0
app/src/main/res/values/styles.xml

@@ -107,5 +107,18 @@
         <!--/背景是否模糊显示-->
         <item name="android:backgroundDimEnabled">true</item>
     </style>
+    <!--Dialog动画-->
+    <style name="dialog_animation">
+        <item name="android:windowEnterAnimation">@anim/dialog_animation_enter</item>
+        <item name="android:windowExitAnimation">@anim/dialog_animation_out</item>
+    </style>
+
+    <style name="style_dialog" parent="android:style/Theme.Dialog">
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowContentOverlay">@null</item>
+        <item name="android:scrollHorizontally">true</item>
+    </style>
 
 </resources>

+ 1 - 0
base-lib/src/main/java/com/sjkj/base_lib/net/domain/interactor/ProcessErrorSubscriber.java

@@ -1,6 +1,7 @@
 package com.sjkj.base_lib.net.domain.interactor;
 
 import android.content.Context;
+import android.util.Log;
 
 import com.sjkj.base_lib.app.BaseApp;
 import com.sjkj.base_lib.utils.CommonUtils;

+ 2 - 1
base-lib/src/main/java/com/sjkj/base_lib/utils/AppTools.java

@@ -496,7 +496,8 @@ public class AppTools {
     }
 
     public static String getImageBaseUrl() {
-        return mmkv.decodeString("ImageBaseUrl", "http://36.212.234.101:88");
+        //return mmkv.decodeString("ImageBaseUrl", "http://36.212.234.101:88");
+        return mmkv.decodeString("ImageBaseUrl", "http://192.168.4.16:88");
     }
 //    public static final String GATEWAY_URL = "sooka-mobile";
 //    public static final String GATEWAY_URL_SYSTEM = "system";

+ 10 - 5
base-lib/src/main/res/layout/include_picker_time.xml

@@ -11,18 +11,21 @@
         android:layout_width="30dp"
         android:layout_height="30dp"
         android:text="取消"
+        android:gravity="center_vertical"
         android:textSize="14dp"
         android:layout_marginLeft="20dp"
-        android:layout_marginTop="20dp"
-        android:textColor="#333333"
+        android:layout_marginTop="10dp"
+        android:textStyle="bold"
+        android:textColor="#FF0000"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 
     <TextView
+        android:gravity="center_vertical"
         android:id="@+id/tv_title"
         app:layout_constraintEnd_toEndOf="parent"
         android:textColor="#333333"
-        android:layout_marginTop="20dp"
+        android:layout_marginTop="10dp"
         app:layout_constraintStart_toStartOf="parent"
 
         app:layout_constraintTop_toTopOf="parent"
@@ -31,14 +34,16 @@
 
     </TextView>
     <TextView
+        android:gravity="center_vertical"
         android:id="@+id/tv_finish"
         android:layout_width="30dp"
         android:layout_height="30dp"
         android:text="确定"
+        android:textStyle="bold"
         android:textSize="14dp"
         android:layout_marginRight="20dp"
-        android:layout_marginTop="20dp"
-        android:textColor="#333333"
+        android:layout_marginTop="10dp"
+        android:textColor="#5598FF"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toTopOf="parent" />