app/src/main/AndroidManifest.xml
@@ -69,9 +69,9 @@ android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:icon="@mipmap/logo2" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/logo2" android:supportsRtl="true" android:theme="@style/Theme.PipIrrApp" android:usesCleartextTraffic="true" @@ -104,8 +104,9 @@ </activity> <activity android:name=".activity.OrderDetailActivity" /> <activity android:name=".activity.OrderDealActivity" /> <activity android:name=".activity.AddIssueActivity"/> <activity android:name=".activity.IssueListActivity"/> <activity android:name=".activity.AddIssueActivity" /> <activity android:name=".activity.IssueListActivity" /> <activity android:name=".activity.IssueDetailActivity" /> <!-- <activity android:name=".activity.MainActivity" />--> app/src/main/assets/js/map.js
@@ -18,11 +18,11 @@ mountMethodToWindow(); }); window.onload = function () { console.log(window.onload); // 打印数组数据 //加载坐标点 window.Android.loadMarker(); }; // window.onload = function () { // console.log(window.onload); // 打印数组数据 // //加载坐标点 // window.Android.loadMarker(); // }; // 初始化地图 function initMap() { // 影像底图 @@ -170,8 +170,8 @@ window.updateLocation = updateLocation; window.aginShowLocation = aginShowLocation; window.cleanLocationLay = cleanLocationLay; window.updateInspectionLocation=updateInspectionLocation; window.cleanLoclLay=cleanLoclLay; window.updateInspectionLocation = updateInspectionLocation; window.cleanLoclLay = cleanLoclLay; } @@ -204,9 +204,9 @@ } // 点击标注的事件 function addMarkerListener(data) { function addMarkerListener(id,data) { chageMarkerIcon(data); showWaterIntakeDetail("模拟数据"); showWaterIntakeDetail(id); } // 修改点击标注的图标 @@ -244,35 +244,33 @@ return data1.lat === data2.lat && data1.lng === data2.lng; } //添加从原生传过来的坐标并显示在地图上 function addMarker(jsonData) { function addMarker(id,lng,lat,name) { console.log("function》》》》》addMarker"); var array = JSON.parse(jsonData); var icon = new T.Icon({ iconUrl: markerBluePath, iconSize: new T.Point(27, 27), iconAnchor: new T.Point(10, 25) }); array.forEach(element => { let marker = new T.Marker( new T.LngLat(element[0], element[1]) // 创建标注 , { icon: icon }); //添加点击事件 marker.addEventListener("click", (data) => { addMarkerListener(data) }); map.addOverLay(marker); // 将标注添加到地图中 let label = new T.Label({ text: element[2], position: marker.getLngLat(), offset: new T.Point(-35, 8), // 设置标注文字的位置 opacity: 1, // 设置文本的显示不透明度(范围0-1) }); label.setBorderLine(0); // 设置文本的边框线宽 label.setBackgroundColor("transparent"); // 设置文本的背景色(透明色) label.setFontColor("#0000FF"); label.setFontSize(10); map.addOverLay(label); let marker = new T.Marker( new T.LngLat(lng, lat) // 创建标注 , { icon: icon }); //添加点击事件 marker.addEventListener("click", (data) => { addMarkerListener(id,data) }); map.addOverLay(marker); // 将标注添加到地图中 let label = new T.Label({ text: name, position: marker.getLngLat(), offset: new T.Point(-35, 8), // 设置标注文字的位置 opacity: 1, // 设置文本的显示不透明度(范围0-1) }); label.setBorderLine(0); // 设置文本的边框线宽 label.setBackgroundColor("transparent"); // 设置文本的背景色(透明色) label.setFontColor("#0000FF"); label.setFontSize(10); map.addOverLay(label); return "addMarker加载成功" } //更新定位坐标 @@ -303,7 +301,7 @@ lineLayer.setLngLats(path); map.addOverLay(lineLayer); // 移动地图视角到最后一个位置 // }, 500); } @@ -322,18 +320,18 @@ function cleanLocationLay() { if (lineLayer) { map.removeOverLay(lineLayer); path=[] path = [] } if (locationMarker) { map.removeOverLay(locationMarker); } if (oldLineLayer) { aginPath=[] aginPath = [] map.removeOverLay(oldLineLayer); } } //清除本地定位坐标位置 function cleanLoclLay(){ function cleanLoclLay() { if (locationMarker) { map.removeOverLay(locationMarker); } app/src/main/java/com/dayu/pipirrapp/activity/AddIssueActivity.java
@@ -271,14 +271,16 @@ //处理从相册返回时取消的图片处理 existingPaths.removeAll(resultPaths); if (!existingPaths.isEmpty()) { List<UplodFileState> toRemove = new ArrayList<>(); for (String path : existingPaths) { for (UplodFileState uplodFileState : uplodFileStates) { if (path.equals(uplodFileState.getFilePath())) { uplodFileState.getThisCall().cancel(); uplodFileStates.remove(uplodFileState); toRemove.add(uplodFileState); } } } uplodFileStates.removeAll(toRemove); } runOnUiThread(new Runnable() { @Override @@ -351,7 +353,7 @@ * 开始定位相关逻辑 */ private void startLocation() { ServiceUtils.startLocationService(this, true); ServiceUtils.startLocationService(this, true); //获取定位服务传过来的坐标点 LiveEventBus.get(CommonKeyName.locationData).observeForever(locationObserver); } app/src/main/java/com/dayu/pipirrapp/activity/IssueDetailActivity.java
New file @@ -0,0 +1,192 @@ package com.dayu.pipirrapp.activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import androidx.annotation.Nullable; import androidx.core.content.res.ResourcesCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.R; import com.dayu.pipirrapp.adapter.ImageAdapter; import com.dayu.pipirrapp.bean.net.ImageResult; import com.dayu.pipirrapp.bean.net.IssueResult; import com.dayu.pipirrapp.databinding.ActivityIssueDetailBinding; import com.dayu.pipirrapp.fragment.OrderFragment; import com.dayu.pipirrapp.net.ApiManager; import com.dayu.pipirrapp.net.BaseResponse; import com.dayu.pipirrapp.net.Constants; import com.dayu.pipirrapp.net.subscribers.SubscriberListener; import com.dayu.pipirrapp.tool.FullyGridLayoutManager; import com.dayu.pipirrapp.utils.ToastUtil; import com.dayu.pipirrapp.view.ConfirmDialog; import com.dayu.pipirrapp.view.TitleBar; import com.luck.picture.lib.decoration.GridSpacingItemDecoration; import com.luck.picture.lib.utils.DensityUtil; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import cc.shinichi.library.ImagePreview; /** * IssueDetailActivity - 问题上报详情界面 * * @author zuoxiao * @version 1.0 * @since 2024-12-12 */ public class IssueDetailActivity extends BaseActivity { RecyclerView mRecyclerView; ActivityIssueDetailBinding binding; ImageAdapter mAdapter; List<String> imageInfoList = new ArrayList<>(); List<ImageResult> images = new ArrayList<>(); int state; String issueReportId; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityIssueDetailBinding.inflate(LayoutInflater.from(this)); setContentView(binding.getRoot()); issueReportId = this.getIntent().getStringExtra("issueReportId"); initView(); getData(issueReportId); } private void initView() { new TitleBar(this).setTitleText("问题详情").setLeftIco().setLeftIcoListening(v -> IssueDetailActivity.this.finish()); mRecyclerView = binding.recyclerView; FullyGridLayoutManager manager = new FullyGridLayoutManager(this, 4, GridLayoutManager.VERTICAL, false); mRecyclerView.setLayoutManager(manager); RecyclerView.ItemAnimator itemAnimator = mRecyclerView.getItemAnimator(); if (itemAnimator != null) { ((SimpleItemAnimator) itemAnimator).setSupportsChangeAnimations(false); } // 添加间距装饰,确保图片有合适的间隔 mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(4, DensityUtil.dip2px(this, 8), false)); mAdapter = new ImageAdapter(this, images, (v, position) -> { ImagePreview.getInstance().setContext(IssueDetailActivity.this).setImageList(imageInfoList).start(); }); mRecyclerView.setAdapter(mAdapter); } private void getData(String issueReportId) { Map<String, Object> params = new HashMap<>(); params.put("issueReportId", issueReportId); ApiManager.getInstance().requestGet(this, Constants.BASE_URL + "/app/issue/getOneIssueReport", IssueResult.class, params, new SubscriberListener<BaseResponse<IssueResult>>() { @Override public void onNext(BaseResponse<IssueResult> t) { if (t.isSuccess()) { if (t.isSuccess()) { if (t.getContent() != null) { IssueResult orderDetailResult = t.getContent(); binding.setData(orderDetailResult); binding.setItemclidk(IssueDetailActivity.this); state = orderDetailResult.getStateId(); images.addAll(t.getContent().getImages()); for (ImageResult imageResult : images) { imageInfoList.add(imageResult.getWebPath()); } mAdapter.notifyDataSetChanged(); switch (state) { case 1://未受理 binding.stateText.setTextColor(IssueDetailActivity.this.getResources().getColor(R.color.black, null)); binding.stateText.setBackground(ResourcesCompat.getDrawable(IssueDetailActivity.this.getResources(), R.drawable.order_state_no_bg, null)); binding.callBackLL.setVisibility(View.GONE); binding.deleteButton.setVisibility(View.VISIBLE); break; case 2://已受理 binding.stateText.setTextColor(IssueDetailActivity.this.getResources().getColor(R.color.white, null)); binding.stateText.setBackground(ResourcesCompat.getDrawable(IssueDetailActivity.this.getResources(), R.drawable.order_state_wait_bg, null)); binding.callBackLL.setVisibility(View.VISIBLE); binding.deleteButton.setVisibility(View.GONE); break; case 3://3已删除 binding.stateText.setTextColor(IssueDetailActivity.this.getResources().getColor(R.color.white, null)); binding.stateText.setBackground(ResourcesCompat.getDrawable(IssueDetailActivity.this.getResources(), R.drawable.order_state_reject_bg, null)); binding.callBackLL.setVisibility(View.VISIBLE); binding.deleteButton.setVisibility(View.GONE); break; } } else { ToastUtil.showToast(IssueDetailActivity.this, t.getMsg()); } } else if (t.DATA_NULL.equals(t.getCode())) { //工单已被删除 ToastUtil.showToast(IssueDetailActivity.this, "订单已被删除!"); setResult(OrderFragment.RESULT_REFRESH); IssueDetailActivity.this.finish(); } else { ToastUtil.showToast(IssueDetailActivity.this, t.getMsg()); IssueDetailActivity.this.finish(); } } else { ToastUtil.showToast(IssueDetailActivity.this, t.getMsg()); } } @Override public void onCloose() { super.onCloose(); } @Override public void onError(Throwable e) { super.onError(e); ToastUtil.showToastLong(IssueDetailActivity.this, "获取详情失败,请稍后再试"); IssueDetailActivity.this.finish(); } }); } public void deleteIssue() { ConfirmDialog confirmDialog = new ConfirmDialog(IssueDetailActivity.this, "确认删除当前问题吗?", (confirmDialog1, v1) -> { confirmDialog1.dismiss(); delete(issueReportId); }); confirmDialog.show(); } private void delete(String issueReportId) { Map<String, Object> params = new HashMap<>(); params.put("issueReportId", issueReportId); params.put("inspectorId", MyApplication.myApplication.userId); ApiManager.getInstance().requestPost(this, Constants.BASE_URL + "/app/issue/deleteIssueReport", IssueResult.class, params, new SubscriberListener<BaseResponse<IssueResult>>() { @Override public void onNext(BaseResponse<IssueResult> t) { if (t.isSuccess()) { setResult(IssueListActivity.RESULT_REFRESH); ToastUtil.showToastLong(IssueDetailActivity.this, "删除成功!"); IssueDetailActivity.this.finish(); } else { ToastUtil.showToast(IssueDetailActivity.this, t.getMsg()); } } @Override public void onCloose() { super.onCloose(); } @Override public void onError(Throwable e) { super.onError(e); ToastUtil.showToastLong(IssueDetailActivity.this, "删除失败,请稍后再试"); } }); } } app/src/main/java/com/dayu/pipirrapp/activity/IssueListActivity.java
@@ -1,8 +1,13 @@ package com.dayu.pipirrapp.activity; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.Nullable; import androidx.recyclerview.widget.LinearLayoutManager; @@ -34,11 +39,22 @@ * @since 2024-12-10 */ public class IssueListActivity extends BaseActivity { public static final int RESULT_REFRESH = 1001; ActivityIssueListBinding binding; RefreshLayout myRefreshLayout; List<IssueResult> recordsList = new ArrayList<>(); IssueAdapter mAdapter; private final ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { if (result.getResultCode() == RESULT_REFRESH) { myRefreshLayout.autoRefresh(); } } }); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -114,6 +130,8 @@ } public void startDetail(String issueReportId) { Intent intent = new Intent(IssueListActivity.this, IssueDetailActivity.class); intent.putExtra("issueReportId", issueReportId); activityResultLauncher.launch(intent); } } app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
@@ -275,27 +275,26 @@ //处理从相册返回时取消的图片处理 existingPaths.removeAll(resultPaths); if (!existingPaths.isEmpty()) { List<UplodFileState> toRemove = new ArrayList<>(); for (String path : existingPaths) { for (UplodFileState uplodFileState : uplodFileStates) { if (path.equals(uplodFileState.getFilePath())) { uplodFileState.getThisCall().cancel(); uplodFileStates.remove(uplodFileState); toRemove.add(uplodFileState); } } } uplodFileStates.removeAll(toRemove); } runOnUiThread(new Runnable() { @Override public void run() { boolean isMaxSize = result.size() == mAdapter.getSelectMax(); int oldSize = mAdapter.getData().size(); mAdapter.notifyItemRangeRemoved(0, isMaxSize ? oldSize + 1 : oldSize); mAdapter.getData().clear(); runOnUiThread(() -> { boolean isMaxSize = result.size() == mAdapter.getSelectMax(); int oldSize = mAdapter.getData().size(); mAdapter.notifyItemRangeRemoved(0, isMaxSize ? oldSize + 1 : oldSize); mAdapter.getData().clear(); mAdapter.getData().addAll(result); mAdapter.notifyItemRangeInserted(0, result.size()); mAdapter.getData().addAll(result); mAdapter.notifyItemRangeInserted(0, result.size()); } }); } app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java
@@ -9,6 +9,7 @@ import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.Nullable; import androidx.core.content.res.ResourcesCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; @@ -131,26 +132,26 @@ ProResultStateId = orderDetailResult.getProResultStateId(); switch (ProResultStateId) { case 0://未上报 binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.black,null)); binding.stateText.setBackground(OrderDetailActivity.this.getResources().getDrawable(R.drawable.order_state_no_bg,null)); binding.dealButton.setBackgroundColor(getResources().getColor(R.color.title_color,null)); binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.black, null)); binding.stateText.setBackground(ResourcesCompat.getDrawable(OrderDetailActivity.this.getResources(), R.drawable.order_state_no_bg, null)); binding.dealButton.setBackgroundColor(getResources().getColor(R.color.title_color, null)); binding.dealButton.setVisibility(View.VISIBLE); break; case 1://已上报 binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.white,null)); binding.stateText.setBackground(OrderDetailActivity.this.getResources().getDrawable(R.drawable.order_state_wait_bg,null)); binding.dealButton.setBackgroundColor(getResources().getColor(R.color.delete_color,null)); binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.white, null)); binding.stateText.setBackground(ResourcesCompat.getDrawable(OrderDetailActivity.this.getResources(), R.drawable.order_state_wait_bg, null)); binding.dealButton.setBackgroundColor(getResources().getColor(R.color.delete_color, null)); binding.dealButton.setVisibility(View.VISIBLE); binding.dealButton.setText("删除处理结果"); break; case 2://已完成 binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.white,null)); binding.stateText.setBackground(OrderDetailActivity.this.getResources().getDrawable(R.drawable.order_state_finish_bg,null)); binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.white, null)); binding.stateText.setBackground(ResourcesCompat.getDrawable(OrderDetailActivity.this.getResources(), R.drawable.order_state_finish_bg, null)); binding.dealButton.setVisibility(View.GONE); break; case 3://被驳回 binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.white,null)); binding.stateText.setBackground(OrderDetailActivity.this.getResources().getDrawable(R.drawable.order_state_reject_bg,null)); binding.stateText.setTextColor(OrderDetailActivity.this.getResources().getColor(R.color.white, null)); binding.stateText.setBackground(ResourcesCompat.getDrawable(OrderDetailActivity.this.getResources(), R.drawable.order_state_reject_bg, null)); binding.dealButton.setBackgroundColor(getResources().getColor(R.color.title_color)); binding.dealButton.setVisibility(View.VISIBLE); break; @@ -165,6 +166,10 @@ setResult(OrderFragment.RESULT_REFRESH); OrderDetailActivity.this.finish(); } else { ToastUtil.showToast(OrderDetailActivity.this, t.getMsg()); OrderDetailActivity.this.finish(); } } else { ToastUtil.showToast(OrderDetailActivity.this, t.getMsg()); @@ -176,6 +181,12 @@ super.onCloose(); } @Override public void onError(Throwable e) { super.onError(e); ToastUtil.showToastLong(OrderDetailActivity.this, "获取详情失败,请稍后再试"); OrderDetailActivity.this.finish(); } }); } app/src/main/java/com/dayu/pipirrapp/adapter/IssueAdapter.java
@@ -54,18 +54,18 @@ if (recordsList.size() > 0) { IssueResult record = recordsList.get(position); ((ViewHolder) holder).getBinding().setData(record); ViewHolder mHolder= ((ViewHolder) holder); ViewHolder mHolder = ((ViewHolder) holder); //状态;1-未受理,2-已受理,3已删除 switch (record.getStateId()) { case 1://未受理 mHolder.mBinding.stateText.setTextColor(activity.getResources().getColor(R.color.white, null)); mHolder.mBinding.stateText.setBackground(activity.getResources().getDrawable(R.drawable.order_state_wait_bg, null)); mHolder.mBinding.stateText.setTextColor(activity.getResources().getColor(R.color.black, null)); mHolder.mBinding.stateText.setBackground(activity.getResources().getDrawable(R.drawable.order_state_no_bg, null)); mHolder.mBinding.replyContentLL.setVisibility(View.GONE); mHolder.mBinding.replyTimeLL.setVisibility(View.GONE); break; case 2://已受理 mHolder.mBinding.stateText.setTextColor(activity.getResources().getColor(R.color.white, null)); mHolder.mBinding.stateText.setBackground(activity.getResources().getDrawable(R.drawable.order_state_finish_bg, null)); mHolder.mBinding.stateText.setBackground(activity.getResources().getDrawable(R.drawable.order_state_wait_bg, null)); mHolder.mBinding.replyContentLL.setVisibility(View.VISIBLE); mHolder.mBinding.replyTimeLL.setVisibility(View.VISIBLE); break; app/src/main/java/com/dayu/pipirrapp/bean/db/MarkerBean.java
@@ -15,7 +15,9 @@ @PrimaryKey(autoGenerate = true) public long localid; @Nullable String blockId; String id;//服务器返回的取水口id @Nullable String blockId;//区域id @Nullable String deleted;//逻辑删除标识 @Nullable @@ -37,6 +39,37 @@ String villageId;//所在村编号 @Nullable String countyId;//所在县编号 @Nullable String address;//地址 @Nullable String blockName;//片区名称 @Nullable public String getAddress() { return address; } public void setAddress(@Nullable String address) { this.address = address; } @Nullable public String getBlockName() { return blockName; } public void setBlockName(@Nullable String blockName) { this.blockName = blockName; } @Nullable public String getId() { return id; } public void setId(@Nullable String id) { this.id = id; } public String getBlockId() { return blockId; app/src/main/java/com/dayu/pipirrapp/bean/net/MarkerResult.java
@@ -73,6 +73,24 @@ String townId;//所在镇编号 String villageId;//所在村编号 String countyId;//所在县编号 String blockName; String address; public String getBlockName() { return blockName; } public void setBlockName(String blockName) { this.blockName = blockName; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getBlockId() { return blockId; app/src/main/java/com/dayu/pipirrapp/dao/MarkerDao.java
@@ -12,6 +12,7 @@ import java.util.List; import io.reactivex.rxjava3.core.Completable; import io.reactivex.rxjava3.core.Single; /** * author: zuo @@ -44,4 +45,7 @@ @Query("select * from MarkerBean") List<MarkerBean> findAll(); @Query("select * from MarkerBean") Single<List<MarkerBean>> findAllToSingle(); } app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -35,13 +35,14 @@ import com.dayu.pipirrapp.bean.net.MarkerResult; import com.dayu.pipirrapp.dao.DaoSingleton; import com.dayu.pipirrapp.databinding.FragmentMapBinding; import com.dayu.pipirrapp.js.MyWebViewInterface; import com.dayu.pipirrapp.tool.MyWebViewInterface; import com.dayu.pipirrapp.net.ApiManager; import com.dayu.pipirrapp.net.BaseResponse; import com.dayu.pipirrapp.net.Constants; import com.dayu.pipirrapp.net.subscribers.SubscriberListener; import com.dayu.pipirrapp.observer.MapFragmenObserver; import com.dayu.pipirrapp.tool.InspectionUtils; import com.dayu.pipirrapp.tool.MarkerUtils; import com.dayu.pipirrapp.utils.CommonData; import com.dayu.pipirrapp.utils.CommonKeyName; import com.dayu.pipirrapp.utils.DateUtils; @@ -63,8 +64,9 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Random; import java.util.Map; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.schedulers.Schedulers; @@ -82,7 +84,6 @@ WebView mWebView; CenterPointBean centerPointBean; String strMarkerJson; //当前巡检状态 int mInspectionState; MapFragmenObserver mapFragmenObserver; @@ -90,9 +91,13 @@ public InspectionBean mInspectionBean; LatLonBean lastLatLonBean; InspectionRequest inspectionRequest; volatile boolean isHaseAginData = false; // volatile boolean isHaseAginData = false; volatile boolean webViewIsFinished = false; List<InspectionLocationBean> aginShowlocationBeans; //web加载时网页还没加载完时的数据 List<MarkerBean> webNoFinishMarkerData = new ArrayList<>(); //所有的Marker数据键为marker的Id Map<String, MarkerBean> markerBeanSet = new HashMap<>(); @Override public void onAttach(@NonNull Context context) { @@ -130,14 +135,9 @@ mWebView.loadUrl("file:///android_asset/index.html"); getCenterPoint(); initView(); initLocalData(); getMarkerData(); //显示巡检状态并且显示因意外关闭的历史数据 switch (mInspectionState) { case InspectionUtils.STAT_INSPECTION: case InspectionUtils.PAUSE_INSPECTION: InspectionUtils.aginShowLocation(MapFragment.this); } chageInspecState(mInspectionState); return binding.getRoot(); } @@ -155,36 +155,23 @@ * 初始化本地数据 */ public void initLocalData() { //跳转中心点 centerPointBean = DaoSingleton.getInstance(MapFragment.this.getContext()).centerPointDao().findFirst(); List<MarkerBean> markerBeans = DaoSingleton.getInstance(MapFragment.this.getContext()).markerDao().findAll(); strMarkerJson = WebViewUtils.beanToJson(markerBeans); jumpCenterPoint(); setMapMarker(); } /** * 跳转地图中心点 */ public void jumpCenterPoint() { if (centerPointBean != null) { Log.d(TAG, "jumpCenterPoint>>>>>>>>>>>>>>>>>>>" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat()); mWebView.evaluateJavascript("javascript:setCenterAndZoom(\"" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat() + "\",\"" + centerPointBean.getZoomMp() + "\")", value -> { }); } } /** * 添加标注点 */ public void setMapMarker() { Log.i("mWebView", "addMarker????????????" + strMarkerJson); mWebView.evaluateJavascript("javascript:addMarker(\"" + strMarkerJson + "\")", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Log.i("mWebView", "addMarker!!!!!!!!!" + value); //添加因webview没有加载完成导致没有添加的地图标注 if (!webNoFinishMarkerData.isEmpty()) { for (MarkerBean bean : webNoFinishMarkerData) { setMapMarker(bean); } }); } //显示所有取水口 MarkerUtils.showLocoMarks(MapFragment.this); //显示巡检状态并且显示因意外关闭的历史数据 switch (mInspectionState) { case InspectionUtils.STAT_INSPECTION: case InspectionUtils.PAUSE_INSPECTION: InspectionUtils.aginShowLocation(MapFragment.this); } } @@ -203,6 +190,7 @@ MarkerResult.Obj result = t.getContent().getObj().get(i); //保存数据 MarkerBean markerBean = new MarkerBean(); markerBean.setId(result.getId()); markerBean.setLng(result.getLng()); markerBean.setLat(result.getLat()); markerBean.setBlockId(result.getBlockId()); @@ -211,10 +199,11 @@ markerBean.setTownId(result.getTownId()); markerBean.setVillageId(result.getVillageId()); markerBean.setCountyId(result.getCountyId()); markerBean.setAddress(result.getAddress()); markerBean.setBlockName(result.getBlockName()); markerBeans.add(markerBean); setMapMarker(markerBean); } strMarkerJson = WebViewUtils.beanToJson(markerBeans); setMapMarker(); DaoSingleton.getInstance(MapFragment.this.getContext()).markerDao().deleteAll(); // 使用 RxJava 异步插入数据 DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).markerDao().insertAll(markerBeans) @@ -234,43 +223,6 @@ } } }); } /** * 添加标注点 */ public void addMarker() { Random random = new Random(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("["); // 中国经纬度范围 double minLongitude = 73.43; double maxLongitude = 135.05; double minLatitude = 3.52; double maxLatitude = 53.57; for (int i = 0; i < 1000; i++) { stringBuilder.append("["); // 生成随机经度 double longitude = minLongitude + (maxLongitude - minLongitude) * random.nextDouble(); stringBuilder.append(longitude); stringBuilder.append(","); // 生成随机纬度 double latitude = minLatitude + (maxLatitude - minLatitude) * random.nextDouble(); stringBuilder.append(latitude); stringBuilder.append(",\"237取水口\"],"); } stringBuilder.append("[116.417854,39.921988,\"235取水口\"]]"); String jsonData = stringBuilder.toString().replace("\\", "\\\\").replace("\"", "\\\""); Log.i("mWebView", "addMarker????????????" + jsonData); mWebView.evaluateJavascript("javascript:addMarker(\"" + jsonData + "\")", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Log.i("mWebView", "addMarker!!!!!!!!!" + value); } }); } @@ -335,11 +287,11 @@ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); webViewIsFinished = true; //页面加载完成 if (isHaseAginData) { aginShowLocation(null); } webViewIsFinished = true; initLocalData(); aginShowLocation(null); } }); //巡检按钮 @@ -378,7 +330,14 @@ public void showWaterIntakeDetail(String data) { MyLog.i(data); binding.bottomLL.setVisibility(View.VISIBLE); MarkerBean markerBean= markerBeanSet.get(data); if (markerBean!=null){ binding.bottomLL.setVisibility(View.VISIBLE); binding.markerAddress.setText(markerBean.getAddress()); binding.markerName.setText(markerBean.getName()); binding.markerBlockName.setText(markerBean.getBlockName()); } } @@ -558,7 +517,6 @@ * 意外退出后继续显示之前的坐标 */ public void aginShowLocation(List<InspectionLocationBean> locationBeans) { isHaseAginData = true; if (locationBeans != null) { aginShowlocationBeans = locationBeans; } @@ -570,15 +528,46 @@ }); } // 向 WebView 注入数据 aginShowlocationBeans.clear(); } } } /** * 跳转地图中心点 */ public void jumpCenterPoint() { if (webViewIsFinished) { if (centerPointBean != null) { Log.d(TAG, "jumpCenterPoint>>>>>>>>>>>>>>>>>>>" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat()); mWebView.evaluateJavascript("javascript:setCenterAndZoom(\"" + centerPointBean.getLng() + "\",\"" + centerPointBean.getLat() + "\",\"" + centerPointBean.getZoomMp() + "\")", value -> { }); } } } /** * 添加标注点 */ public void setMapMarker(MarkerBean markerBean) { if (markerBean != null) { if (webViewIsFinished) { Log.i("mWebView", "addMarker????????????"); mWebView.evaluateJavascript("javascript:addMarker(\"" + markerBean.getId() + "\",\"" + markerBean.getLng() + "\",\"" + markerBean.getLat() + "\",\"" + markerBean.getName() + "\")", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { } }); markerBeanSet.put(markerBean.getId(), markerBean); } else { webNoFinishMarkerData.add(markerBean); } } } /** * 开始巡检的相关逻辑 * * @param app/src/main/java/com/dayu/pipirrapp/tool/InspectionUtils.java
@@ -55,16 +55,20 @@ * @param fragment * @return */ public static String getInspectionId(MapFragment fragment) { public static void getInspectionId(MapFragment fragment) { DaoSingleton.getAsynchInstance(fragment.getContext()).inspectionDao().getMostRecentInspectionWithNoStopTime() .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()).subscribe(inspectionBean -> { }); return ""; } /** * 继续显示异常关闭之前的巡检坐标 * * @param fragment */ public static void aginShowLocation(MapFragment fragment) { //查询当前未关闭的巡检记录 DaoSingleton.getAsynchInstance(fragment.getContext()).inspectionDao().getMostRecentInspectionWithNoStopTime() app/src/main/java/com/dayu/pipirrapp/tool/MarkerUtils.java
New file @@ -0,0 +1,35 @@ package com.dayu.pipirrapp.tool; import com.dayu.pipirrapp.bean.db.MarkerBean; import com.dayu.pipirrapp.dao.DaoSingleton; import com.dayu.pipirrapp.fragment.MapFragment; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; /** * MarkerUtils - 取水口等地图上显示的标识相关公共方法 * * @author zuoxiao * @version 1.0 * @since 2024-12-16 */ public class MarkerUtils { public static Disposable showLocoMarks(MapFragment fragment) { //查询当前未关闭的巡检记录 Disposable disposable = DaoSingleton.getAsynchInstance(fragment.getContext()) .markerDao() .findAllToSingle() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()).subscribe(markerBeans -> { for (MarkerBean bean : markerBeans) { fragment.setMapMarker(bean); } }); return disposable; } } app/src/main/java/com/dayu/pipirrapp/tool/MyWebViewInterface.java
File was renamed from app/src/main/java/com/dayu/pipirrapp/js/MyWebViewInterface.java @@ -1,4 +1,4 @@ package com.dayu.pipirrapp.js; package com.dayu.pipirrapp.tool; import android.os.Handler; import android.os.Looper; @@ -15,7 +15,7 @@ */ public class MyWebViewInterface { private MapFragment myContext; private final MapFragment myContext; public MyWebViewInterface(MapFragment context) { @@ -74,8 +74,8 @@ // 在主线程上执行UI操作 // 更新或操作UI元素的代码 // myContext.addMarker(); myContext.jumpCenterPoint(); myContext.setMapMarker(); // myContext.jumpCenterPoint(); // myContext.setMapMarker(); } }); } app/src/main/java/com/dayu/pipirrapp/utils/WebViewUtils.java
@@ -7,7 +7,6 @@ import android.webkit.WebSettings; import android.webkit.WebView; import com.dayu.pipirrapp.bean.db.CenterPointBean; import com.dayu.pipirrapp.bean.db.MarkerBean; import java.util.List; @@ -124,5 +123,18 @@ return stringBuilder.toString().replace("\\", "\\\\").replace("\"", "\\\""); } /** * bean转json * * @param stringBuilder * @param markerBean */ public static String markerBeanToJson(StringBuilder stringBuilder, MarkerBean markerBean) { stringBuilder.append("{"); stringBuilder.append(markerBean.getLng()); stringBuilder.append(","); stringBuilder.append(markerBean.getLat()); stringBuilder.append(",\"" + markerBean.getName() + "\"}"); return stringBuilder.toString().replace("\\", "\\\\").replace("\"", "\\\""); } } app/src/main/res/drawable/ic_right_blue.xml
New file @@ -0,0 +1,13 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="31dp" android:height="31dp" android:viewportWidth="48" android:viewportHeight="48"> <path android:pathData="M19,12L31,24L19,36" android:strokeLineJoin="round" android:strokeWidth="4" android:fillColor="#00000000" android:strokeColor="#3D8BFF" android:strokeLineCap="round"/> </vector> app/src/main/res/layout/activity_issue_detail.xml
@@ -6,7 +6,7 @@ <variable name="itemclidk" type="com.dayu.pipirrapp.activity.OrderDetailActivity" /> type="com.dayu.pipirrapp.activity.IssueDetailActivity" /> <variable name="data" @@ -31,7 +31,7 @@ android:id="@+id/ScrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/deal_button" android:layout_above="@+id/delete_button" android:layout_below="@+id/title" android:layout_marginTop="5dp" android:layout_marginBottom="5dp"> @@ -54,6 +54,7 @@ android:layout_width="20dp" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_marginLeft="3dp" android:layout_marginRight="10dp" android:src="@drawable/ic_issue" /> @@ -70,7 +71,7 @@ android:maxLines="1" android:text="@{data.issueReportId}" android:textColor="@color/title_color" android:textSize="@dimen/manage_item_text_size" /> android:textSize="@dimen/order_detail_text_size" /> <TextView @@ -113,7 +114,7 @@ android:layout_height="wrap_content" android:text="上报时间:" android:textColor="@color/manage_item_text" android:textSize="@dimen/manage_item_text_size" /> android:textSize="@dimen/order_detail_text_size" /> <TextView android:id="@+id/xiangMuJianCheng" @@ -123,7 +124,7 @@ android:maxLines="1" android:text="@{data.reportTime}" android:textColor="@color/manage_item_text" android:textSize="@dimen/manage_item_text_size" /> android:textSize="@dimen/order_detail_text_size" /> </LinearLayout> @@ -132,47 +133,152 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <TextView android:id="@+id/daiShenPiTag" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上报内容:" android:textColor="@color/manage_item_text" android:textSize="@dimen/manage_item_text_size" /> <TextView android:id="@+id/daiShenPiTag" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上报内容:" android:textColor="@color/manage_item_text" android:textSize="@dimen/order_detail_text_size" /> <TextView android:id="@+id/daiShenPi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" android:text="@{data.content}" android:textColor="@color/manage_item_text" android:textSize="@dimen/order_detail_text_size" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上报图片:" android:textColor="@color/manage_item_text" android:textSize="@dimen/order_detail_text_size" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_marginTop="10dp" android:minHeight="80dp" /> </LinearLayout> <LinearLayout android:id="@+id/callBackLL" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/orderDealLL" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:orientation="vertical" android:visibility="visible"> <View android:layout_width="match_parent" android:layout_height="2dp" android:background="@color/base_blue" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:gravity="center" android:text="回复信息" android:textColor="@color/base_blue" android:textSize="@dimen/order_detail_text_size" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <TextView android:id="@+id/daiShenPi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="回复时间:" android:textColor="@color/manage_item_text" android:textSize="@dimen/order_detail_text_size" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" android:text="@{data.content}" android:text="@{data.reportTime}" android:textColor="@color/manage_item_text" android:textSize="@dimen/manage_item_text_size" /> android:textSize="@dimen/order_detail_text_size" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="回复内容:" android:textColor="@color/manage_item_text" android:textSize="@dimen/order_detail_text_size" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" android:text="@{data.replyContent}" android:textColor="@color/manage_item_text" android:textSize="@dimen/order_detail_text_size" /> </LinearLayout> </LinearLayout> </LinearLayout> </ScrollView> <TextView android:id="@+id/deal_button" android:id="@+id/delete_button" android:layout_width="match_parent" android:layout_height="@dimen/order_detail_button_height" android:layout_alignParentBottom="true" android:background="@color/title_color" android:gravity="center" android:onClick="@{()->itemclidk.startDealActivity()}" android:text="处理工单" android:onClick="@{()->itemclidk.deleteIssue()}" android:text="删除问题" android:textColor="@color/white" android:textSize="@dimen/order_detail_button_size" android:visibility="gone" /> android:visibility="visible" /> </RelativeLayout> app/src/main/res/layout/activity_login.xml
@@ -6,6 +6,14 @@ android:orientation="vertical" android:padding="20dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/logo1" android:layout_centerHorizontal="true" android:layout_marginTop="70dp" /> <EditText android:id="@+id/name" @@ -18,9 +26,9 @@ android:background="@drawable/ic_edt_gray_bg" android:hint="请输入账号" android:maxLines="1" android:text="15802220723" android:paddingLeft="15dp" android:singleLine="true" /> android:singleLine="true" android:text="15802220723" /> <RelativeLayout android:id="@+id/psLL" @@ -45,9 +53,9 @@ android:hint="请输入密码" android:inputType="textPassword" android:maxLines="1" android:text="abc_123" android:paddingLeft="10dp" android:singleLine="true" /> android:singleLine="true" android:text="abc_123" /> <ImageView android:id="@+id/passwordBtn" app/src/main/res/layout/fragment_map.xml
@@ -7,11 +7,12 @@ <!-- android:id="@+id/webView"--> <!-- android:layout_width="match_parent"--> <!-- android:layout_height="match_parent" />--> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:id="@+id/inspectRL" @@ -105,30 +106,82 @@ android:orientation="vertical" android:padding="10dp"> <TextView <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:text="取水口" android:textColor="@color/black" /> android:gravity="start" android:orientation="horizontal"> <TextView <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="名称:" android:textColor="@color/black" /> <TextView android:id="@+id/markerName" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" android:text="" android:textColor="@color/black" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="取水口位置" android:textColor="@color/black" /> android:gravity="start" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="片区:" android:textColor="@color/black" /> <TextView android:id="@+id/markerBlockName" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" android:text="" android:textColor="@color/black" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:gravity="start" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="地址:" android:textColor="@color/black" /> <TextView android:id="@+id/markerAddress" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" android:text="" android:textColor="@color/black" /> </LinearLayout> </LinearLayout> <ImageView android:layout_width="80dp" android:layout_height="80dp" android:layout_width="25dp" android:layout_height="30dp" android:layout_gravity="center" android:layout_marginRight="20dp" android:padding="10dp" android:src="@drawable/ic_gps_navigation" /> android:layout_marginRight="10dp" android:background="@drawable/ic_right_blue" /> </LinearLayout> app/src/main/res/layout/item_issue.xml
@@ -31,6 +31,7 @@ android:layout_width="20dp" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_marginLeft="3dp" android:layout_marginRight="10dp" android:src="@drawable/ic_issue" /> app/src/main/res/layout/item_order.xml
@@ -75,10 +75,7 @@ android:layout_marginTop="5dp" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"> <TextView android:id="@+id/jinduTag" @@ -95,7 +92,7 @@ android:text="@{data.workOrderId}" android:textColor="@color/manage_item_text" android:textSize="@dimen/manage_item_text_size" /> </LinearLayout> </LinearLayout> @@ -106,10 +103,7 @@ android:layout_marginTop="5dp" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"> <TextView android:id="@+id/daiShenPiTag" @@ -129,7 +123,7 @@ </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" @@ -138,13 +132,7 @@ android:gravity="center_vertical" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center_vertical" android:orientation="horizontal" android:paddingRight="5dp"> <TextView @@ -166,7 +154,7 @@ </LinearLayout> </LinearLayout> <LinearLayout @@ -176,13 +164,6 @@ android:gravity="center_vertical" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center_vertical" android:orientation="horizontal" android:paddingRight="5dp"> <TextView android:layout_width="wrap_content" @@ -200,7 +181,7 @@ android:text="@{data.taskContent}" android:textColor="@color/manage_item_text" android:textSize="@dimen/manage_item_text_size" /> </LinearLayout> </LinearLayout> @@ -208,16 +189,10 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:layout_marginTop="5dp" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_weight="2" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" @@ -229,54 +204,16 @@ <TextView android:id="@+id/startTime" android:layout_width="wrap_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{data.dispatchTime}" android:textColor="@color/manage_item_text" android:textSize="@dimen/manage_item_text_size" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:layout_marginRight="10dp" android:layout_weight="1" android:orientation="horizontal" android:visibility="gone"> <TextView android:id="@+id/lookDetail" android:layout_width="0dp" android:layout_height="@dimen/manage_item_btn_height" android:layout_weight="1" android:background="@drawable/ic_blue_background" android:gravity="center" android:text="查看" android:textColor="@color/white" android:textSize="@dimen/manage_item_btn_text_size" /> <TextView android:id="@+id/examineBtn" android:layout_width="0dp" android:layout_height="@dimen/manage_item_btn_height" android:layout_marginLeft="15dp" android:layout_weight="1" android:background="@drawable/ic_blue_background" android:gravity="center" android:text="审批" android:textColor="@color/white" android:textSize="@dimen/manage_item_btn_text_size" /> </LinearLayout> </LinearLayout> </LinearLayout> app/src/main/res/mipmap-hdpi/ic_launcher.webpBinary files differ
app/src/main/res/mipmap-hdpi/ic_launcher_round.webpBinary files differ
app/src/main/res/mipmap-mdpi/ic_launcher.webpBinary files differ
app/src/main/res/mipmap-mdpi/ic_launcher_round.webpBinary files differ
app/src/main/res/mipmap-xhdpi/logo1.png
app/src/main/res/mipmap-xhdpi/logo2.png
app/src/main/res/mipmap-xxhdpi/ic_launcher.webpBinary files differ
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webpBinary files differ
app/src/main/res/mipmap-xxxhdpi/ic_launcher.webpBinary files differ
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webpBinary files differ