管灌系统巡查员智能手机App
-为按钮和列表项添加波纹效果,以获得更好的视觉反馈
-改进MapFragment中的底部布局动画
-在MapFragment中添加设备状态和RTU地址显示
-更新BaseListResult以支持泛型类型
-为设备数据添加IntakeListResult和IntakeResult
-通过数据库支持增强标记位置更新功能
-添加电话拨号意图以分隔标记详细信息
-通过过期检查改进磁贴缓存
-添加问题报告的确认对话框
-更新登录活动以限制用户名长度
-为波纹效果和UI元素添加新颜色
-重构XML布局以使用新的波纹图
-改进MapFragment中的错误处理和用户反馈
17个文件已修改
5个文件已添加
591 ■■■■ 已修改文件
app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/BaseListResult.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/IntakeListResult.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/bean/net/IntakeResult.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/dao/MarkerDao.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java 199 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/bottom_butten_blue_ripple.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/bottom_butten_red_ripple.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/item_ripple.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/my_item_ripple.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_add_issue.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_issue_detail.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_login.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_order_deal.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_order_detail.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_map.xml 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_my.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_inspect.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_issue.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_order.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/colors.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/pipirrapp/activity/LoginActivity.java
@@ -112,7 +112,9 @@
    }
    /**
     * 显示隐藏密码
     */
    private void togglePasswordVisibility() {
        if (isPasswordVisible) {
            // 如果密码可见,隐藏密码
@@ -240,6 +242,7 @@
                            isShowCode = true;
                            SharedPreferencesHelper.getInstance(LoginActivity.this).put(CommonKeyName.isShowCode, true);
                            binding.codeLL.setVisibility(View.VISIBLE);
                            getCode();
                        }
                    }
app/src/main/java/com/dayu/pipirrapp/activity/OrderDetailActivity.java
@@ -152,13 +152,13 @@
                            case 0://未上报
                                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.setBackground(getResources().getDrawable(R.drawable.bottom_butten_blue_ripple, null));
                                binding.dealButton.setVisibility(View.VISIBLE);
                                break;
                            case 1://已上报
                                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.setBackground(getResources().getDrawable(R.drawable.bottom_butten_red_ripple, null));
                                binding.dealButton.setVisibility(View.VISIBLE);
                                binding.dealButton.setText("删除处理结果");
                                break;
@@ -170,7 +170,7 @@
                            case 3://被驳回
                                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.setBackground(getResources().getDrawable(R.drawable.bottom_butten_blue_ripple, null));
                                binding.dealButton.setVisibility(View.VISIBLE);
                                break;
@@ -223,8 +223,8 @@
                            binding.orderDealLL.setVisibility(View.VISIBLE);
                            binding.setDealData(t.getContent());
                            if (!t.getContent().getImages().isEmpty()){
                                for (ImageResult imageResult:t.getContent().getImages()){
                            if (!t.getContent().getImages().isEmpty()) {
                                for (ImageResult imageResult : t.getContent().getImages()) {
                                    ImageBean imageBean = new ImageBean();
                                    imageBean.setId(imageResult.getId());
                                    imageBean.setWebPath(imageResult.getWebPathZip());
@@ -233,15 +233,15 @@
                                    ImageInfo info = new ImageInfo();
                                    info.setOriginUrl(imageResult.getWebPath());
                                    info.setType(Type.IMAGE);
                                    if (imageResult.getWebPathZip()!=null){
                                    if (imageResult.getWebPathZip() != null) {
                                        info.setThumbnailUrl(imageResult.getWebPathZip());
                                    }
                                    imageInfoList.add(info);
                                }
                            }
                            if (!t.getContent().getVideos().isEmpty()){
                                for (ImageResult imageResult:t.getContent().getVideos()){
                            if (!t.getContent().getVideos().isEmpty()) {
                                for (ImageResult imageResult : t.getContent().getVideos()) {
                                    ImageBean imageBean = new ImageBean();
                                    imageBean.setId(imageResult.getId());
                                    imageBean.setWebPath(imageResult.getWebPathZip());
@@ -250,7 +250,7 @@
                                    ImageInfo info = new ImageInfo();
                                    info.setOriginUrl(imageResult.getWebPath());
                                    info.setThumbnailUrl(imageResult.getWebPath());
                                    if (imageResult.getWebPathZip()!=null){
                                    if (imageResult.getWebPathZip() != null) {
                                        info.setThumbnailUrl(imageResult.getWebPathZip());
                                    }
                                    info.setType(Type.VIDEO);
app/src/main/java/com/dayu/pipirrapp/bean/net/BaseListResult.java
@@ -1,5 +1,7 @@
package com.dayu.pipirrapp.bean.net;
import java.util.List;
/**
 * BaseListResult -
 *
@@ -7,9 +9,51 @@
 * @version 1.0
 * @since 2024-11-26
 */
public class BaseListResult {
public class BaseListResult<T> {
    public int getItemTotal() {
        return itemTotal;
    }
    public void setItemTotal(int itemTotal) {
        this.itemTotal = itemTotal;
    }
    public int getPageCurr() {
        return pageCurr;
    }
    public void setPageCurr(int pageCurr) {
        this.pageCurr = pageCurr;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getPageTotal() {
        return pageTotal;
    }
    public void setPageTotal(int pageTotal) {
        this.pageTotal = pageTotal;
    }
    public List<T> getObj() {
        return obj;
    }
    public void setObj(List<T> obj) {
        this.obj = obj;
    }
    private int itemTotal;
    private int pageCurr;
    private int pageSize;
    private int pageTotal;
    private List<T> obj;
}
app/src/main/java/com/dayu/pipirrapp/bean/net/IntakeListResult.java
New file
@@ -0,0 +1,59 @@
package com.dayu.pipirrapp.bean.net;
import java.util.List;
/**
 * IntakeListResult - 设备相关信息
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2025-02-25
 */
public class IntakeListResult {
    private int itemTotal;
    private int pageCurr;
    private int pageSize;
    private int pageTotal;
    private List<IntakeResult> obj;
    public int getItemTotal() {
        return itemTotal;
    }
    public void setItemTotal(int itemTotal) {
        this.itemTotal = itemTotal;
    }
    public int getPageCurr() {
        return pageCurr;
    }
    public void setPageCurr(int pageCurr) {
        this.pageCurr = pageCurr;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getPageTotal() {
        return pageTotal;
    }
    public void setPageTotal(int pageTotal) {
        this.pageTotal = pageTotal;
    }
    public List<IntakeResult> getObj() {
        return obj;
    }
    public void setObj(List<IntakeResult> obj) {
        this.obj = obj;
    }
}
app/src/main/java/com/dayu/pipirrapp/bean/net/IntakeResult.java
New file
@@ -0,0 +1,118 @@
package com.dayu.pipirrapp.bean.net;
/**
 * IntakeData -设备详情
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2025-02-25
 */
public class IntakeResult {
    private String intakeId;
    private String rtuAddr;
    private String intakeNum;
    private boolean isOnLine;
    private boolean isBinded;
    private String alarm;
    private double instantAmount;
    private double totalAmount;
    private double lat;
    private double lng;
    // Getters and Setters
    public String getIntakeId() {
        return intakeId;
    }
    public void setIntakeId(String intakeId) {
        this.intakeId = intakeId;
    }
    public String getRtuAddr() {
        return rtuAddr;
    }
    public void setRtuAddr(String rtuAddr) {
        this.rtuAddr = rtuAddr;
    }
    public String getIntakeNum() {
        return intakeNum;
    }
    public void setIntakeNum(String intakeNum) {
        this.intakeNum = intakeNum;
    }
    public boolean isOnLine() {
        return isOnLine;
    }
    public void setOnLine(boolean onLine) {
        isOnLine = onLine;
    }
    public boolean isBinded() {
        return isBinded;
    }
    public void setBinded(boolean binded) {
        isBinded = binded;
    }
    public String getAlarm() {
        return alarm;
    }
    public void setAlarm(String alarm) {
        this.alarm = alarm;
    }
    public double getInstantAmount() {
        return instantAmount;
    }
    public void setInstantAmount(double instantAmount) {
        this.instantAmount = instantAmount;
    }
    public double getTotalAmount() {
        return totalAmount;
    }
    public void setTotalAmount(double totalAmount) {
        this.totalAmount = totalAmount;
    }
    public double getLat() {
        return lat;
    }
    public void setLat(double lat) {
        this.lat = lat;
    }
    public double getLng() {
        return lng;
    }
    public void setLng(double lng) {
        this.lng = lng;
    }
    @Override
    public String toString() {
        return "IntakeData{" +
                "intakeId='" + intakeId + '\'' +
                ", rtuAddr='" + rtuAddr + '\'' +
                ", intakeNum='" + intakeNum + '\'' +
                ", isOnLine=" + isOnLine +
                ", isBinded=" + isBinded +
                ", alarm='" + alarm + '\'' +
                ", instantAmount=" + instantAmount +
                ", totalAmount=" + totalAmount +
                ", lat=" + lat +
                ", lng=" + lng +
                '}';
    }
}
app/src/main/java/com/dayu/pipirrapp/dao/MarkerDao.java
@@ -55,4 +55,7 @@
    @Query("SELECT * FROM MarkerBean WHERE name LIKE '%' || :name || '%'")
    Single<List<MarkerBean>> findByNameLike(String name);
    @Query("UPDATE MarkerBean SET lng = :lng, lat = :lat WHERE id = :id")
    Completable updateMarkerLocation(String id, String lng, String lat);
}
app/src/main/java/com/dayu/pipirrapp/fragment/MapFragment.java
@@ -5,6 +5,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
@@ -35,11 +36,14 @@
import com.dayu.pipirrapp.bean.db.PipeNetWorkDataBean;
import com.dayu.pipirrapp.bean.db.PipeNetworkBean;
import com.dayu.pipirrapp.bean.db.PipeNetworkDataCoordinateBean;
import com.dayu.pipirrapp.bean.net.BaseListResult;
import com.dayu.pipirrapp.bean.net.CenterPointResult;
import com.dayu.pipirrapp.bean.net.DivideListResult;
import com.dayu.pipirrapp.bean.net.DivideResult;
import com.dayu.pipirrapp.bean.net.InsectionResult;
import com.dayu.pipirrapp.bean.net.InspectionRequest;
import com.dayu.pipirrapp.bean.net.IntakeListResult;
import com.dayu.pipirrapp.bean.net.IntakeResult;
import com.dayu.pipirrapp.bean.net.MarkerListResult;
import com.dayu.pipirrapp.bean.net.MarkerResult;
import com.dayu.pipirrapp.bean.net.PipeNetworkResult;
@@ -149,7 +153,7 @@
        LiveEventBus.get(CommonKeyName.refreshData).observe(this, o -> {
            // 显示加载动画
            TipUtil.showLoading(MapFragment.this.getActivity(), "正在更新数据...");
            // 创建多个Single对象来表示每个网络请求
            Single<Boolean> centerPointSingle = Single.create(emitter -> {
                getCenterPoint();
@@ -173,28 +177,28 @@
            // 组合所有Single
            compositeDisposable.add(
                Single.zip(
                    centerPointSingle,
                    markerDataSingle,
                    divideListSingle,
                    pipeNetworkListSingle,
                    (centerPoint, marker, divide, pipe) -> true
                )
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .doFinally(() -> {
                    // 无论成功还是失败,都需要隐藏加载动画
                    TipUtil.dismissLoading();
                })
                .subscribe(
                    result -> {
                        ToastUtil.showToast(MapFragment.this.getContext(), "数据更新完成");
                    },
                    throwable -> {
                        Log.e(TAG, "数据更新失败: " + throwable.getMessage());
                        ToastUtil.showToast(MapFragment.this.getContext(), "数据更新失败");
                    }
                )
                    Single.zip(
                                    centerPointSingle,
                                    markerDataSingle,
                                    divideListSingle,
                                    pipeNetworkListSingle,
                                    (centerPoint, marker, divide, pipe) -> true
                            )
                            .subscribeOn(Schedulers.io())
                            .observeOn(AndroidSchedulers.mainThread())
                            .doFinally(() -> {
                                // 无论成功还是失败,都需要隐藏加载动画
                                TipUtil.dismissLoading();
                            })
                            .subscribe(
                                    result -> {
                                        ToastUtil.showToast(MapFragment.this.getContext(), "数据更新完成");
                                    },
                                    throwable -> {
                                        Log.e(TAG, "数据更新失败: " + throwable.getMessage());
                                        ToastUtil.showToast(MapFragment.this.getContext(), "数据更新失败");
                                    }
                            )
            );
        });
    }
@@ -336,24 +340,31 @@
                    // 检查本地缓存
                    File cachedTile = MapJpgUtils.getInsatance().getCachedTile(androidUrl);
                    if (cachedTile != null && cachedTile.exists()) {
//                        Log.d(TAG, "本地缓存>>>" + androidUrl);
//                        if (MapJpgUtils.getInsatance().validateImageFile(androidUrl,request.))
                        // 判断缓存是否过期
//                    if (!MapJpgUtils.getInsatance(MapFragment.this.getContext()).isCacheExpired(cachedTile)) {
                        try {
                            // 从缓存加载瓦片
                            return new WebResourceResponse("image/jpg", "utf-8", new FileInputStream(cachedTile));
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        // 检查文件是否超过6个月
                        long sixMonthsInMillis = 6L * 30 * 24 * 60 * 60 * 1000; // 6个月的毫秒数
                        long fileAge = System.currentTimeMillis() - cachedTile.lastModified();
                        if (fileAge > sixMonthsInMillis) {
                            // 如果文件超过6个月,删除旧文件并重新下载
                            if (cachedTile.delete()) {
                                Log.d(TAG, "已删除过期瓦片: " + androidUrl);
                            } else {
                                Log.e(TAG, "删除过期瓦片失败: " + androidUrl);
                            }
                            ApiManager.getInstance().donwLoadTile(MapFragment.this.getContext(), androidUrl);
                        } else {
                            try {
                                // 从缓存加载瓦片
                                return new WebResourceResponse("image/jpg", "utf-8", new FileInputStream(cachedTile));
                            } catch (FileNotFoundException e) {
                                e.printStackTrace();
                            }
                        }
//                    }
                    } else {
                        //下载瓦片
                        ApiManager.getInstance().donwLoadTile(MapFragment.this.getContext(), androidUrl);
                    }
                }
                return super.shouldInterceptRequest(view, request);
            }
@@ -516,8 +527,13 @@
        });
        //上报问题
        binding.putButton.setOnClickListener(v -> {
            Intent issue = new Intent(MapFragment.this.getActivity(), AddIssueActivity.class);
            MapFragment.this.getActivity().startActivity(issue);
            new ConfirmDialog(MapFragment.this.getActivity(), "确认上报问题吗?", (confirmDialog, v1) -> {
                Intent issue = new Intent(MapFragment.this.getActivity(), AddIssueActivity.class);
                MapFragment.this.getActivity().startActivity(issue);
                confirmDialog.dismiss();
            }).show();
        });
        binding.expandButton.setLegendsArray(new ExpandButton.Quadruple(
                        ContextCompat.getDrawable(requireContext(), R.drawable.marker_blue),
@@ -656,8 +672,23 @@
        });
    }
    /**
     * 隐藏底部布局的动画效果
     */
    private void hideBottomLayoutWithAnimation() {
        binding.bottomLL.animate()
                .translationY(binding.bottomLL.getHeight())
                .setDuration(300)
                .setInterpolator(new android.view.animation.AccelerateInterpolator())
                .withEndAction(() -> {
                    binding.bottomLL.setVisibility(View.GONE);
                    binding.bottomLL.setTranslationY(0);
                })
                .start();
    }
    public void closeWaterIntakeDetail() {
        binding.bottomLL.setVisibility(View.GONE);
        hideBottomLayoutWithAnimation();
    }
    /**
@@ -1005,7 +1036,30 @@
                        binding.lat.setText(lat);
                        mWebView.evaluateJavascript("javascript:cancelPin()", value -> {
                        });
                        ToastUtil.showToastLong(MapFragment.this.getContext(), "修改成功!");
                        // 更新本地数据库
                        compositeDisposable.add(
                                DaoSingleton.getAsynchInstance(MapFragment.this.getContext())
                                        .markerDao()
                                        .updateMarkerLocation(markerBean.getId(), lng, lat)
                                        .subscribeOn(Schedulers.io())
                                        .observeOn(AndroidSchedulers.mainThread())
                                        .subscribe(
                                                () -> {
                                                    // 更新本地缓存Map中的数据
                                                    MarkerBean cachedMarker = markerBeanSet.get(markerBean.getId());
                                                    if (cachedMarker != null) {
                                                        cachedMarker.setLng(lng);
                                                        cachedMarker.setLat(lat);
                                                    }
                                                    ToastUtil.showToastLong(MapFragment.this.getContext(), "修改成功!");
                                                },
                                                throwable -> {
                                                    Log.e(TAG, "更新本地数据库失败: ");
                                                    ToastUtil.showToastLong(MapFragment.this.getContext(), "修改成功,但本地数据库更新失败");
                                                }
                                        )
                        );
                    } else {
                        ToastUtil.showToastLong(MapFragment.this.getContext(), t.getMsg());
@@ -1045,6 +1099,7 @@
                    mMarkerBean.setAddress(result.getAddress());
                    mMarkerBean.setBlockName(result.getBlockName());
                    mMarkerBean.setDivideId(result.getDivideId());
                    getDeviceData(result.getName());
                    showMarker(mMarkerBean);
                } else {
                    ToastUtil.showToast(MapFragment.this.getContext(), t.getMsg());
@@ -1055,7 +1110,7 @@
    }
    /**
     * 显示取水口详情
     * 显示分水房详情
     */
    private void getDivideDetail(DivideBean divideBean) {
        ApiManager.getInstance().requestGet(this.getContext(), Constants.BASE_URL + "/project/divide/getone/" + divideBean.getDivideId(), DivideResult.class, null, new SubscriberListener<BaseResponse<DivideResult>>() {
@@ -1063,6 +1118,7 @@
            public void onNext(BaseResponse<DivideResult> t) {
                if (t.isSuccess()) {
                    DivideBean divideBean = getDivideBean(t.getContent());
                    getDeviceData(divideBean.getDivideName());
                    showDivideMarker(divideBean);
                } else {
                    ToastUtil.showToast(MapFragment.this.getContext(), t.getMsg());
@@ -1073,10 +1129,23 @@
    }
    /**
     * 显示底部布局的动画效果
     */
    private void showBottomLayoutWithAnimation() {
        binding.bottomLL.setVisibility(View.VISIBLE);
        binding.bottomLL.setTranslationY(binding.bottomLL.getHeight());
        binding.bottomLL.animate()
                .translationY(0)
                .setDuration(300)
                .setInterpolator(new android.view.animation.DecelerateInterpolator())
                .start();
    }
    /**
     * 显示取水口详情
     */
    private void showMarker(MarkerBean markerBean) {
        binding.bottomLL.setVisibility(View.VISIBLE);
        showBottomLayoutWithAnimation();
        binding.phoneLL.setVisibility(View.GONE);
        binding.headerLL.setVisibility(View.GONE);
        binding.editePoint.setVisibility(View.VISIBLE);
@@ -1120,7 +1189,7 @@
     * @param divideBean
     */
    private void showDivideMarker(DivideBean divideBean) {
        binding.bottomLL.setVisibility(View.VISIBLE);
        showBottomLayoutWithAnimation();
        binding.phoneLL.setVisibility(View.VISIBLE);
        binding.headerLL.setVisibility(View.VISIBLE);
        binding.editePoint.setVisibility(View.GONE);
@@ -1128,6 +1197,11 @@
        binding.markerName.setText(divideBean.getDivideName());
        binding.markerBlockName.setText(divideBean.getBlockName());
        binding.phone.setText(divideBean.getPhone());
        binding.phone.setOnClickListener(v -> {
            Intent intent = new Intent(Intent.ACTION_DIAL);
            intent.setData(Uri.parse("tel:" + divideBean.getPhone()));
            startActivity(intent);
        });
        binding.header.setText(divideBean.getHeader());
        binding.lat.setText(divideBean.getLat());
        binding.lng.setText(divideBean.getLng());
@@ -1384,4 +1458,45 @@
        }
    }
    /**
     * 获取设备相关状态信息
     *
     * @param intakeNum
     */
    private void getDeviceData(String intakeNum) {
        Map<String, Object> params = new HashMap<>();
        params.put("intakeNum", intakeNum);
        ApiManager.getInstance().requestGetHideLoading(MapFragment.this.getContext(), BASE_URL + "/remote/monitor/all_intakes", IntakeListResult.class, params, new SubscriberListener<BaseResponse<IntakeListResult>>() {
            @Override
            public void onNext(BaseResponse<IntakeListResult> t) {
                try {
                    if (t.isSuccess()) {
                        if (t.getContent() != null && t.getContent().getObj().size() > 0) {
                            binding.deviceStateLL.setVisibility(View.VISIBLE);
                            binding.rtuAddressLL.setVisibility(View.VISIBLE);
                            IntakeResult intakeResult = t.getContent().getObj().get(0);
                            if (intakeResult.isOnLine()) {
                                binding.deviceState.setText("在线");
                                binding.deviceState.setTextColor(getResources().getColor(R.color.down_green_up, null));
                            } else {
                                binding.deviceState.setText("离线");
                                binding.deviceState.setTextColor(getResources().getColor(R.color.delete_color, null));
                            }
                            binding.rtuAddress.setText(intakeResult.getRtuAddr());
                        } else {
                            binding.deviceStateLL.setVisibility(View.GONE);
                            binding.rtuAddressLL.setVisibility(View.GONE);
                        }
                    } else {
                        ToastUtil.showToastLong(MapFragment.this.getContext(), t.getMsg());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    CrashReport.postCatchedException(e);
                }
            }
        });
    }
}
app/src/main/res/drawable/bottom_butten_blue_ripple.xml
New file
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight">
    <!-- 背景形状及颜色 -->
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/base_blue" /> <!-- 背景色 -->
        </shape>
    </item>
    <!-- 掩码效果,用于控制波纹范围(可选) -->
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="@color/down_blue" /> <!-- 掩码颜色 -->
        </shape>
    </item>
</ripple>
app/src/main/res/drawable/bottom_butten_red_ripple.xml
New file
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight">
    <!-- 背景形状及颜色 -->
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/delete_color" /> <!-- 背景色 -->
        </shape>
    </item>
    <!-- 掩码效果,用于控制波纹范围(可选) -->
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="@color/delete_color_down" /> <!-- 掩码颜色 -->
        </shape>
    </item>
</ripple>
app/src/main/res/drawable/item_ripple.xml
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight">
    <!-- 背景形状及颜色 -->
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white" /> <!-- 背景色 -->
            <corners android:radius="7dp" />
            <stroke
                android:width="1dp"
                android:color="#ededed" />
        </shape>
    </item>
    <!-- 掩码效果,用于控制波纹范围(可选) -->
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="@color/text_color" /> <!-- 掩码颜色 -->
        </shape>
    </item>
</ripple>
app/src/main/res/drawable/my_item_ripple.xml
@@ -5,7 +5,7 @@
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white" /> <!-- 背景色 -->
            <corners android:radius="10dp" /> <!-- 圆角半径 -->
<!--            <corners android:radius="10dp" /> &lt;!&ndash; 圆角半径 &ndash;&gt;-->
        </shape>
    </item>
    <!-- 掩码效果,用于控制波纹范围(可选) -->
app/src/main/res/layout/activity_add_issue.xml
@@ -81,7 +81,7 @@
        android:layout_width="match_parent"
        android:layout_height="@dimen/order_detail_button_height"
        android:layout_alignParentBottom="true"
        android:background="@color/title_color"
        android:background="@drawable/bottom_butten_blue_ripple"
        android:gravity="center"
        android:text="上报问题"
        android:textColor="@color/white"
app/src/main/res/layout/activity_issue_detail.xml
@@ -300,8 +300,8 @@
            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:background="@drawable/bottom_butten_blue_ripple"
            android:onClick="@{()->itemclidk.deleteIssue()}"
            android:text="删除问题"
            android:textColor="@color/white"
app/src/main/res/layout/activity_login.xml
@@ -27,6 +27,7 @@
        android:hint="请输入账号"
        android:maxLines="1"
        android:paddingLeft="15dp"
        android:maxLength="11"
        android:singleLine="true"
        android:text="15802220723" />
app/src/main/res/layout/activity_order_deal.xml
@@ -31,7 +31,7 @@
            android:layout_above="@+id/deal_button"
            android:layout_below="@+id/title"
            android:orientation="vertical"
            android:padding="20dp">
           >
            <RelativeLayout
@@ -39,6 +39,10 @@
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:gravity="center"
                android:layout_marginRight="20dp"
                android:layout_marginLeft="20dp"
                android:layout_marginTop="20dp"
                android:background="@drawable/my_item_ripple"
                android:orientation="horizontal">
                <TextView
@@ -85,6 +89,8 @@
                android:layout_width="match_parent"
                android:layout_marginTop="10dp"
                android:layout_height="wrap_content"
                android:layout_marginRight="20dp"
                android:layout_marginLeft="20dp"
                android:orientation="horizontal">
                <TextView
@@ -112,12 +118,16 @@
                android:gravity="start"
                android:maxHeight="200dp"
                android:minHeight="100dp"
                android:layout_marginRight="20dp"
                android:layout_marginLeft="20dp"
                android:text="" />
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_marginRight="20dp"
                android:layout_marginLeft="20dp"
                android:orientation="horizontal">
                <TextView
@@ -140,6 +150,8 @@
                android:id="@+id/recycler"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginRight="20dp"
                android:layout_marginLeft="20dp"
                android:layout_marginTop="10dp"
                android:background="@color/white"
                android:overScrollMode="never"
@@ -151,8 +163,8 @@
            android:id="@+id/deal_button"
            android:layout_width="match_parent"
            android:layout_height="@dimen/order_detail_button_height"
            android:background="@drawable/bottom_butten_blue_ripple"
            android:layout_alignParentBottom="true"
            android:background="@color/title_color"
            android:gravity="center"
            android:text="提   交"
            android:textColor="@color/white"
app/src/main/res/layout/activity_order_detail.xml
@@ -420,7 +420,7 @@
            android:layout_width="match_parent"
            android:layout_height="@dimen/order_detail_button_height"
            android:layout_alignParentBottom="true"
            android:background="@color/title_color"
            android:background="@drawable/bottom_butten_blue_ripple"
            android:gravity="center"
            android:onClick="@{()->itemclidk.startDealActivity()}"
            android:text="处理工单"
app/src/main/res/layout/fragment_map.xml
@@ -232,7 +232,54 @@
                        android:textColor="@color/black"
                        android:textSize="@dimen/common_text_size_little" />
                </LinearLayout>
                <LinearLayout
                    android:id="@+id/deviceStateLL"
                    android:layout_width="match_parent"
                    android:layout_height="25dp"
                    android:gravity="center_vertical"
                    android:orientation="horizontal">
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="设备:"
                        android:textColor="@color/black"
                        android:textSize="@dimen/common_text_size_little" />
                    <TextView
                        android:id="@+id/deviceState"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:ellipsize="end"
                        android:maxLines="1"
                        android:text="未知"
                        android:textColor="@color/black"
                        android:textSize="@dimen/common_text_size_little" />
                </LinearLayout>
                <LinearLayout
                    android:id="@+id/rtuAddressLL"
                    android:layout_width="match_parent"
                    android:layout_height="25dp"
                    android:gravity="center_vertical"
                    android:orientation="horizontal">
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="RTU地址:"
                        android:textColor="@color/black"
                        android:textSize="@dimen/common_text_size_little" />
                    <TextView
                        android:id="@+id/rtuAddress"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:ellipsize="end"
                        android:maxLines="1"
                        android:text="未知"
                        android:textColor="@color/black"
                        android:textSize="@dimen/common_text_size_little" />
                </LinearLayout>
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="25dp"
@@ -275,8 +322,9 @@
                        android:id="@+id/lng"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:layout_weight="4"
                        android:ellipsize="end"
                        android:text=""
                        android:maxLines="1"
                        android:textColor="@color/manage_item_text"
                        android:textSize="@dimen/common_text_size_little" />
@@ -292,15 +340,17 @@
                        android:id="@+id/lat"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:layout_weight="4"
                        android:ellipsize="end"
                        android:maxLines="1"
                        android:text=""
                        android:textColor="@color/manage_item_text"
                        android:textSize="@dimen/common_text_size_little" />
                    <ImageView
                        android:id="@+id/editePoint"
                        android:layout_width="wrap_content"
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        android:layout_height="wrap_content"
                        android:padding="2dp"
                        android:src="@drawable/ic_edit_btn" />
app/src/main/res/layout/fragment_my.xml
@@ -142,8 +142,6 @@
            android:id="@+id/changePS"
            android:layout_width="match_parent"
            android:layout_height="@dimen/item_height"
            android:background="@color/white"
            android:gravity="center_vertical"
            android:paddingLeft="30dp"
            android:text="修改密码"
app/src/main/res/layout/item_inspect.xml
@@ -6,7 +6,8 @@
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:background="@drawable/ic_choose_gray_edge"
        android:background="@drawable/item_ripple"
        android:orientation="vertical"
        android:padding="16dp">
app/src/main/res/layout/item_issue.xml
@@ -15,7 +15,7 @@
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:background="@drawable/ic_choose_gray_edge"
        android:background="@drawable/item_ripple"
        android:onClick="@{()->itemclidk.startDetail(data.issueReportId)}"
        android:orientation="vertical"
        android:padding="10dp">
app/src/main/res/layout/item_order.xml
@@ -15,7 +15,7 @@
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:background="@drawable/ic_choose_gray_edge"
        android:background="@drawable/item_ripple"
        android:onClick="@{()->itemclidk.startDetail(data.workOrderId,data.proResultId)}"
        android:orientation="vertical"
        android:padding="10dp">
app/src/main/res/values/colors.xml
@@ -28,6 +28,7 @@
    <color name="inspect_text_color_pause">#7fff00</color>
    <color name="inspect_rl_bg_color">#ff6347</color>
    <color name="delete_color">#ff0000</color>
    <color name="delete_color_down">#7E0202</color>
    <color name="item_bg_color">#F9F9F9</color>
    <color name="item_name_text_color">#828282</color>
    <color name="mask_layer_bg">#BF828282</color>