From 791f82dc46e14491116a87bd4aa84ade011ab4c6 Mon Sep 17 00:00:00 2001
From: mac <user@users-MacBook-Pro.local>
Date: 星期一, 15 一月 2024 14:30:58 +0800
Subject: [PATCH] 2024年01月15日14:30:41

---
 app/src/main/res/layout/activity_message_info.xml                             |   12 
 app/src/main/java/com/hdl/photovoltaic/broadcast/NetworkChangeReceiver.java   |    2 
 app/src/main/res/layout/null_data_view.xml                                    |   31 +++
 app/src/main/res/values/strings.xml                                           |    4 
 app/src/main/java/com/hdl/photovoltaic/widget/MovieDrawable.java              |   75 +++++++++
 app/src/main/java/com/hdl/photovoltaic/ui/message/RecoverMessageFragment.java |   42 ++++
 app/src/main/res/drawable/null_data_icon.gif                                  |    0 
 app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java              |   25 ++
 app/src/main/java/com/hdl/photovoltaic/ui/adapter/LanguageAdapter.java        |    8 
 app/src/main/res/layout/fragment_nascent_message.xml                          |   16 +
 app/src/main/res/layout/home_bottom_line.xml                                  |   20 +-
 app/src/main/res/layout/fragment_recover_message.xml                          |   11 +
 app/src/main/res/layout/fragment_house_list.xml                               |   19 +-
 app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java        |   16 -
 app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java              |    2 
 app/src/main/res/values-zh/strings.xml                                        |    2 
 app/src/main/java/com/hdl/photovoltaic/ui/message/NascentMessageFragment.java |  102 +++++++++++-
 app/src/main/res/values-en/strings.xml                                        |    2 
 app/src/main/java/com/hdl/photovoltaic/utils/GlideUtils.java                  |   44 +++++
 app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java |   22 ++
 app/build.gradle                                                              |    4 
 21 files changed, 393 insertions(+), 66 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 754b6ef..57003e8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -28,7 +28,7 @@
         minSdk 23
         targetSdk 30
         versionCode 1
-        versionName "1.1.3"//鐗堟湰瑙勫垯1.1鏄骇鍝佸姛鑳借凯浠g敤鐨�,鏈�鍚庝竴浣�1鏄垜浠慨澶峛ug鐢ㄧ殑
+        versionName "1.2.1"//鐗堟湰瑙勫垯1.2鏄骇鍝佸姛鑳借凯浠g敤鐨�,鏈�鍚庝竴浣�1鏄垜浠慨澶峛ug鐢ㄧ殑
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         multiDexEnabled true
         manifestPlaceholders = mfph
@@ -136,7 +136,7 @@
     implementation 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1'
 
     //鍥剧墖鍔犺浇搴�
-    implementation 'com.github.bumptech.glide:glide:4.12.0'
+    implementation 'com.github.bumptech.glide:glide:4.13.0'
     annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
 
 
diff --git a/app/src/main/java/com/hdl/photovoltaic/broadcast/NetworkChangeReceiver.java b/app/src/main/java/com/hdl/photovoltaic/broadcast/NetworkChangeReceiver.java
index aed6caf..68f3b99 100644
--- a/app/src/main/java/com/hdl/photovoltaic/broadcast/NetworkChangeReceiver.java
+++ b/app/src/main/java/com/hdl/photovoltaic/broadcast/NetworkChangeReceiver.java
@@ -21,7 +21,7 @@
 
     @Override
     public void onReceive(Context context, Intent intent) {
-        //todo 宸茬粡鍦∟etworkUtils閲岄潰瀹炵幇
+        //todo 宸茬粡杞湪NetworkUtils閲岄潰瀹炵幇
 //        ConnectivityManager connectionManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 //        NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
 //        if (networkInfo != null && networkInfo.isAvailable()) {
diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java b/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
index 669d131..68203ce 100644
--- a/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
+++ b/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
@@ -10,7 +10,7 @@
     public static final String POST_Mqtt_GetRemoteInfo = "/home-wisdom/app/mqtt/getRemoteInfo";
     //region -----璀︽姤娑堟伅涓績(浣忓畢)---------
     //鑾峰彇鏈鐞嗘秷鎭暟閲�
-    public static final String POST_Message_UntreatedCount = "/home-wisdom/app/powerStation/message/untreatedCount";
+    public static final String POST_Message_UntreatedCount = "/home-wisdom/app/powerStation/message/unCount";
     //娑堟伅鍒楄〃
     public static final String POST_Message_List = "/home-wisdom/app/powerStation/message/listByPage";
     //鑾峰彇娑堟伅璇︽儏
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java
index 00b8645..369ef0d 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java
@@ -1,14 +1,17 @@
 package com.hdl.photovoltaic.other;
 
+import android.content.Context;
 import android.graphics.Bitmap;
 import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
 
-import com.dcloud.zxing2.WriterException;
-import com.google.gson.Gson;
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.EncodeHintType;
 import com.google.zxing.common.BitMatrix;
 import com.google.zxing.qrcode.QRCodeWriter;
+import com.hdl.photovoltaic.utils.GlideUtils;
 
 import java.util.Hashtable;
 
@@ -100,5 +103,23 @@
         }
     }
 
+    /**
+     * 娌℃湁鏁版嵁鐣岄潰鐨勬牱寮�
+     *
+     * @param is_data   true鏈夋暟鎹紝false娌℃暟鎹�
+     * @param parent    鐖跺鍣�
+     * @param imageView 鏄剧ずgif鎺т欢
+     * @param str       鎻忚堪鏂囨湰
+     */
+    public void nullDataUpdateUi(Context mContext, View parent, ImageView imageView, TextView textView, String str, boolean is_data) {
+        if (is_data) {
+            parent.setVisibility(View.GONE);
+        } else {
+            parent.setVisibility(View.VISIBLE);
+            GlideUtils.getDrawableGifAnimation(mContext, imageView);
+            textView.setText(str);
+
+        }
+    }
 
 }
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/adapter/LanguageAdapter.java b/app/src/main/java/com/hdl/photovoltaic/ui/adapter/LanguageAdapter.java
index 74423c9..ab1239d 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/adapter/LanguageAdapter.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/adapter/LanguageAdapter.java
@@ -55,11 +55,15 @@
             if (position == this.mList.size() - 1) {
                 holder.item_bottom_line_v.setVisibility(View.GONE);
             }
+            holder.itemView.setTag(position);//鏍囪浣嶇疆
             holder.itemView.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    if (noOnclickListener != null) {
-                        noOnclickListener.onClick(holder.getAdapterPosition(), itemData);
+                    try {
+                        if (noOnclickListener != null) {
+                            noOnclickListener.onClick((int) holder.itemView.getTag(), itemData);
+                        }
+                    } catch (Exception ignored) {
                     }
                 }
             });
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java b/app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java
index 8efa489..c13e282 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java
@@ -3,12 +3,16 @@
 import android.os.Bundle;
 import android.os.SystemClock;
 import android.view.View;
+import android.widget.TextView;
 
 
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.hdl.linkpm.sdk.core.exception.HDLException;
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.base.CustomBaseFragment;
 import com.hdl.photovoltaic.config.ConstantManage;
@@ -16,6 +20,7 @@
 import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch;
 import com.hdl.photovoltaic.enums.MessageFunctionTabSwitch;
 import com.hdl.photovoltaic.enums.MessageStateType;
+import com.hdl.photovoltaic.listener.CloudCallBeak;
 import com.hdl.photovoltaic.other.HdlCommonLogic;
 import com.hdl.photovoltaic.other.HdlLogLogic;
 import com.hdl.photovoltaic.other.HdlMessageLogic;
@@ -224,17 +229,8 @@
                 EventBus.getDefault().removeStickyEvent(eventBus);
                 postEventBus(MessageFunctionTabSwitch.nascent);
                 HdlLogLogic.print("姝e湪鐐瑰嚮銆愭秷鎭��");
-            }
-        } else if (eventBus.getTopic().equals(ConstantManage.message_count)) {
-            if (eventBus.getType().equals(MessageStateType.untreated)) {
-                String s = getText(R.string.message_nascent) + "(" + HdlMessageLogic.getInstance().getNascentMessageMemoryList().size() + ")";
-                viewBinding.messageTabNascentTitleTv.setText(s);
-            } else if (eventBus.getType().equals(MessageStateType.processed)) {
-                String s = getText(R.string.message_recover) + "(" + HdlMessageLogic.getInstance().getRecoverMessageMemoryList().size() + ")";
-                viewBinding.messageTabRecoverTitleTv.setText(s);
+
             }
         }
     }
-
-
 }
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/message/NascentMessageFragment.java b/app/src/main/java/com/hdl/photovoltaic/ui/message/NascentMessageFragment.java
index 3388a68..b119560 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/message/NascentMessageFragment.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/message/NascentMessageFragment.java
@@ -4,12 +4,17 @@
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
 
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.hdl.linkpm.sdk.core.exception.HDLException;
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.base.CustomBaseFragment;
@@ -18,11 +23,14 @@
 import com.hdl.photovoltaic.enums.MessageFunctionTabSwitch;
 import com.hdl.photovoltaic.enums.MessageStateType;
 import com.hdl.photovoltaic.listener.CloudCallBeak;
+import com.hdl.photovoltaic.other.HdlCommonLogic;
 import com.hdl.photovoltaic.other.HdlLogLogic;
 import com.hdl.photovoltaic.other.HdlMessageLogic;
 import com.hdl.photovoltaic.other.HdlThreadLogic;
 import com.hdl.photovoltaic.ui.adapter.MessageAdapter;
+import com.hdl.photovoltaic.ui.bean.HouseIdBean;
 import com.hdl.photovoltaic.ui.bean.MessageBean;
+import com.hdl.photovoltaic.utils.GlideUtils;
 import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus;
 
 import org.greenrobot.eventbus.EventBus;
@@ -124,15 +132,30 @@
             this.messageNascentAdapter.setList(mList);
             this.messageNascentAdapter.notifyDataSetChanged();
         }
+        //鍒锋柊銆愬彂鐢熶腑銆戜俊鎭暟閲忔�绘暟
+        this.refreshNascentCount();
+        this.nullDataUpdateUi();
 
-        if (mList.size() > 0) {
-            BaseEventBus baseEventBus = new BaseEventBus();
-            baseEventBus.setTopic(ConstantManage.message_count);
-            baseEventBus.setType(MessageStateType.untreated);
-            baseEventBus.setData(mList.size());
-            EventBus.getDefault().post(baseEventBus);
-        }
 
+    }
+
+    /**
+     * 鍒锋柊銆愬彂鐢熶腑銆戜俊鎭暟閲忔�绘暟
+     */
+    private void refreshNascentCount() {
+        HdlThreadLogic.runMainThread(new Runnable() {
+            @Override
+            public void run() {
+                TextView textView = _mActivity.findViewById(R.id.message_tab_nascent_title_tv);
+                if (textView != null) {
+                    textView.setText(getText(R.string.message_nascent));
+                    if (mList.size() > 0) {
+                        String s = getText(R.string.message_nascent) + "(" + mList.size() + ")";
+                        textView.setText(s);
+                    }
+                }
+            }
+        });
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
@@ -146,8 +169,10 @@
             if (eventBus.getType().equals(MessageFunctionTabSwitch.nascent.toString())) {
                 initData();
                 getNascentMessageList(true);
+                getUnreadCount();
                 // 鍙栨秷绮樻�т簨浠�
                 EventBus.getDefault().removeStickyEvent(eventBus);
+
             }
 
         } else if (eventBus.getTopic().equals(ConstantManage.message_function_push_post)) {
@@ -155,6 +180,7 @@
                 //娑堟伅璇︽儏鍥炶皟
                 initData();
                 updateListData();
+                getUnreadCount();
             }
         }
     }
@@ -162,7 +188,7 @@
     /**
      * 鑾峰彇鍙戠敓涓殑娑堟伅鍒楄〃
      *
-     * @param isShowLoading 鏄惁鍚姩 true鍚姩
+     * @param isShowLoading 鏄惁鍚姩鍔犺浇妗� true鍚姩
      */
     private void getNascentMessageList(boolean isShowLoading) {
         if (mList.size() == 0) {
@@ -222,4 +248,64 @@
 //        List<MessageBean> newData = HdlMessageLogic.getInstance().getAllMessageList();
 //        return newData;
 //    }
+
+    /**
+     * 璇诲彇娑堟伅銆愭湭璇绘暟閲忋��
+     */
+    private void getUnreadCount() {
+        HdlMessageLogic.getInstance().getMessageUntreatedCount(new CloudCallBeak<String>() {
+            @Override
+            public void onSuccess(String data) {
+
+                HdlThreadLogic.runMainThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        JSONObject jsonObject = JSON.parseObject(data);
+//                        if (jsonObject.containsKey("untreatedCount")) {
+//                            //鏈鐞嗘暟閲�
+//                            jsonObject.getString("untreatedCount");
+//                        }
+                        String unreadCount = "0";
+                        if (jsonObject.containsKey("unreadCount")) {
+                            //鏈鏁伴噺
+                            unreadCount = jsonObject.getString("unreadCount");
+                        }
+                        TextView textView = _mActivity.findViewById(R.id.my_message_bottom_il2).findViewById(R.id.red_count_tv);
+                        if (textView != null) {
+                            if (TextUtils.isEmpty(unreadCount) || unreadCount.equals("0")) {
+                                textView.setVisibility(View.GONE);
+                            } else {
+                                if (unreadCount.length() > 2) {
+                                    //澶т簬3浣嶆暟,榛樿99+
+                                    unreadCount = "99+";
+                                }
+                                textView.setVisibility(View.VISIBLE);
+                                textView.setText(unreadCount);
+                            }
+                        }
+                    }
+                });
+
+            }
+
+            @Override
+            public void onFailure(HDLException e) {
+                TextView textView = _mActivity.findViewById(R.id.my_message_bottom_il2).findViewById(R.id.red_count_tv);
+                if (textView != null) {
+                    textView.setVisibility(View.GONE);
+                }
+            }
+        });
+    }
+
+
+    /**
+     * 娌℃湁鐢电珯鍒楄〃鐨勬牱寮�
+     */
+    private void nullDataUpdateUi() {
+        HdlCommonLogic.getInstance().nullDataUpdateUi(_mActivity,
+                viewBinding.nullDataIc.getRoot(),
+                viewBinding.nullDataIc.nullDataGifAnimationIv,
+                viewBinding.nullDataIc.nullDataTv, getString(R.string.message_alarm_data_null), mList.size() > 0);
+    }
 }
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/message/RecoverMessageFragment.java b/app/src/main/java/com/hdl/photovoltaic/ui/message/RecoverMessageFragment.java
index 08fa6d6..0aad188 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/message/RecoverMessageFragment.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/message/RecoverMessageFragment.java
@@ -2,6 +2,7 @@
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.widget.TextView;
 
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
@@ -15,6 +16,7 @@
 import com.hdl.photovoltaic.enums.MessageFunctionTabSwitch;
 import com.hdl.photovoltaic.enums.MessageStateType;
 import com.hdl.photovoltaic.listener.CloudCallBeak;
+import com.hdl.photovoltaic.other.HdlCommonLogic;
 import com.hdl.photovoltaic.other.HdlLogLogic;
 import com.hdl.photovoltaic.other.HdlMessageLogic;
 import com.hdl.photovoltaic.other.HdlThreadLogic;
@@ -104,13 +106,29 @@
             this.messageRecoverAdapter.notifyDataSetChanged();
         }
 
-        if (mList.size() > 0) {
-            BaseEventBus baseEventBus = new BaseEventBus();
-            baseEventBus.setTopic(ConstantManage.message_count);
-            baseEventBus.setType(MessageStateType.processed);
-            baseEventBus.setData(mList.size());
-            EventBus.getDefault().post(baseEventBus);
-        }
+        //鍒锋柊銆愬凡鎭㈠銆戜俊鎭暟閲忔�绘暟
+        this.refreshRecoverCount();
+        this.nullDataUpdateUi();
+    }
+
+    /**
+     * 鍒锋柊銆愬凡鎭㈠銆戜俊鎭暟閲忔�绘暟
+     */
+    private void refreshRecoverCount() {
+        HdlThreadLogic.runMainThread(new Runnable() {
+            @Override
+            public void run() {
+                TextView textView = _mActivity.findViewById(R.id.message_tab_recover_title_tv);
+                if (textView != null) {
+                    textView.setText(getText(R.string.message_recover));
+                    if (mList.size() > 0) {
+                        String s = getText(R.string.message_recover) + "(" + mList.size() + ")";
+                        textView.setText(s);
+                    }
+                }
+
+            }
+        });
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
@@ -182,4 +200,14 @@
             });
         }
     }
+
+    /**
+     * 娌℃湁鐢电珯鍒楄〃鐨勬牱寮�
+     */
+    private void nullDataUpdateUi() {
+        HdlCommonLogic.getInstance().nullDataUpdateUi(_mActivity,
+                viewBinding.nullDataIc.getRoot(),
+                viewBinding.nullDataIc.nullDataGifAnimationIv,
+                viewBinding.nullDataIc.nullDataTv, getString(R.string.message_alarm_data_null), mList.size() > 0);
+    }
 }
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java b/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java
index 3a5c20c..cd222e3 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java
@@ -1,16 +1,26 @@
 package com.hdl.photovoltaic.ui.powerstation;
 
 import android.Manifest;
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.graphics.Movie;
 import android.hardware.camera2.CameraManager;
 import android.os.Bundle;
 import android.view.View;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.load.resource.gif.GifDrawable;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.target.Target;
 import com.google.gson.Gson;
 import com.hdl.linkpm.sdk.core.exception.HDLException;
 import com.hdl.photovoltaic.R;
@@ -22,6 +32,7 @@
 import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch;
 import com.hdl.photovoltaic.enums.ShowErrorMode;
 import com.hdl.photovoltaic.listener.CloudCallBeak;
+import com.hdl.photovoltaic.other.HdlCommonLogic;
 import com.hdl.photovoltaic.other.HdlLogLogic;
 import com.hdl.photovoltaic.other.HdlResidenceLogic;
 import com.hdl.photovoltaic.other.HdlThreadLogic;
@@ -29,7 +40,9 @@
 import com.hdl.photovoltaic.ui.adapter.HouseInfoAdapter;
 import com.hdl.photovoltaic.ui.bean.HouseIdBean;
 import com.hdl.photovoltaic.uni.HDLUniMP;
+import com.hdl.photovoltaic.utils.GlideUtils;
 import com.hdl.photovoltaic.utils.PermissionUtils;
+import com.hdl.photovoltaic.widget.MovieDrawable;
 import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus;
 import com.hdl.sdk.link.core.utils.mqtt.MqttRecvClient;
 
@@ -316,11 +329,10 @@
      * 娌℃湁鐢电珯鍒楄〃鐨勬牱寮�
      */
     private void nullDataUpdateUi(List<HouseIdBean> list) {
-        if (list != null && list.size() > 0) {
-            viewBinding.nullListTv.setVisibility(View.GONE);
-        } else {
-            viewBinding.nullListTv.setVisibility(View.VISIBLE);
-        }
+        HdlCommonLogic.getInstance().nullDataUpdateUi(_mActivity,
+                viewBinding.nullDataIc.getRoot(),
+                viewBinding.nullDataIc.nullDataGifAnimationIv,
+                viewBinding.nullDataIc.nullDataTv, getString(R.string.my_power_station_data_null), list != null && list.size() > 0);
     }
 
 
diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/GlideUtils.java b/app/src/main/java/com/hdl/photovoltaic/utils/GlideUtils.java
index cfeb8b5..c76747d 100644
--- a/app/src/main/java/com/hdl/photovoltaic/utils/GlideUtils.java
+++ b/app/src/main/java/com/hdl/photovoltaic/utils/GlideUtils.java
@@ -11,15 +11,22 @@
 import android.graphics.RectF;
 import android.widget.ImageView;
 
+import androidx.annotation.Nullable;
 import androidx.core.graphics.drawable.RoundedBitmapDrawable;
 import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
 
 import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.load.engine.GlideException;
 import com.bumptech.glide.load.resource.bitmap.CenterCrop;
 import com.bumptech.glide.load.resource.bitmap.CircleCrop;
 import com.bumptech.glide.load.resource.bitmap.GranularRoundedCorners;
 import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.load.resource.gif.GifDrawable;
+import com.bumptech.glide.request.RequestListener;
 import com.bumptech.glide.request.RequestOptions;
+import com.bumptech.glide.request.target.Target;
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.other.HdlThreadLogic;
 
@@ -123,7 +130,7 @@
                     if (conn.getResponseCode() == 200) {
                         InputStream inStream = conn.getInputStream();
                         Bitmap bitmap = BitmapFactory.decodeStream(inStream);
-                        imageView.setImageBitmap(getRoundedCornerBitmap(bitmap,pixels));
+                        imageView.setImageBitmap(getRoundedCornerBitmap(bitmap, pixels));
                     }
                 } catch (Exception e) {
                 }
@@ -160,4 +167,39 @@
         canvas.drawBitmap(bitmap, rect, rect, paint);
         return output;
     }
+
+
+    /**
+     * 鐣岄潰绾挎暟鎹樉绀烘牱寮�
+     *
+     * @param context   涓婁笅鏂�
+     * @param imageview 鏄剧ず鍥剧墖缁勪欢
+     */
+    public static void getDrawableGifAnimation(Context context, ImageView imageview) {
+        if (context == null) {
+            return;
+        }
+        if (imageview == null) {
+            return;
+        }
+        Glide.with(context)
+                .asGif()
+                .load(R.drawable.null_data_icon)//(res鎴栬�単if鐨剈rl閾炬帴)
+                .diskCacheStrategy(DiskCacheStrategy.ALL)
+                .listener(new RequestListener<GifDrawable>() {
+                    @Override
+                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
+                        return false;
+                    }
+
+                    @Override
+                    public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
+//                            resource.setLoopCount(1);鎺у埗鎾斁娆℃暟
+                        return false;
+                    }
+                })
+                .into(imageview);
+    }
+
+
 }
diff --git a/app/src/main/java/com/hdl/photovoltaic/widget/MovieDrawable.java b/app/src/main/java/com/hdl/photovoltaic/widget/MovieDrawable.java
new file mode 100644
index 0000000..78f1c8b
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/widget/MovieDrawable.java
@@ -0,0 +1,75 @@
+package com.hdl.photovoltaic.widget;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.Movie;
+import android.graphics.PixelFormat;
+import android.graphics.drawable.Drawable;
+import android.os.SystemClock;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+
+import com.hdl.photovoltaic.R;
+
+/**
+ * 鎾斁GIF鍔ㄧ敾
+ */
+public class MovieDrawable extends Drawable {
+
+    private final Movie mMovie;
+    private long mStartTime;
+
+    public MovieDrawable(Movie movie) {
+        mMovie = movie;
+    }
+
+    public void start() {
+        mStartTime = SystemClock.uptimeMillis();
+    }
+
+    @Override
+    public void draw(@NonNull Canvas canvas) {
+        long time = SystemClock.uptimeMillis() - mStartTime;
+        mMovie.setTime((int) (time % mMovie.duration()));
+        mMovie.draw(canvas, getBounds().left, getBounds().top);
+        invalidateSelf();
+    }
+
+    @Override
+    public void setAlpha(int alpha) {
+        // 璁剧疆閫忔槑搴�
+    }
+
+    @Override
+    public void setColorFilter(ColorFilter colorFilter) {
+        // 璁剧疆棰滆壊婊ら暅
+    }
+
+    @Override
+    public int getOpacity() {
+        // 杩斿洖閫忔槑搴�
+        return PixelFormat.TRANSLUCENT;
+    }
+
+    public void getDrawableGifAnimation(Context mContext, ImageView imageView) {
+        try {
+            if (mContext == null) {
+                return;
+            }
+            if (imageView == null) {
+                return;
+            }
+            @SuppressLint("ResourceType") Movie movie = Movie.decodeStream(mContext.getResources().openRawResource(R.drawable.null_data_icon));
+            MovieDrawable drawable = new MovieDrawable(movie);
+            imageView.setImageDrawable(drawable);
+            drawable.start();
+        } catch (Exception ignored) {
+        }
+    }
+
+}
+
+
diff --git a/app/src/main/res/drawable/null_data_icon.gif b/app/src/main/res/drawable/null_data_icon.gif
new file mode 100644
index 0000000..828b34a
--- /dev/null
+++ b/app/src/main/res/drawable/null_data_icon.gif
Binary files differ
diff --git a/app/src/main/res/layout/activity_message_info.xml b/app/src/main/res/layout/activity_message_info.xml
index fb2b121..988c9d4 100644
--- a/app/src/main/res/layout/activity_message_info.xml
+++ b/app/src/main/res/layout/activity_message_info.xml
@@ -50,7 +50,7 @@
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_marginTop="18.5dp"
+            android:layout_marginTop="@dimen/dp_32"
             android:orientation="vertical"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
@@ -62,7 +62,7 @@
 
             <View
                 android:layout_width="match_parent"
-                android:layout_height="@dimen/dp_14" />
+                android:layout_height="@dimen/dp_31" />
 
             <include
                 android:id="@+id/message_info_alarm_device_in"
@@ -70,7 +70,7 @@
 
             <View
                 android:layout_width="match_parent"
-                android:layout_height="@dimen/dp_14" />
+                android:layout_height="@dimen/dp_31" />
 
             <include
                 android:id="@+id/message_info_alarm_range_in"
@@ -78,7 +78,7 @@
 
             <View
                 android:layout_width="match_parent"
-                android:layout_height="@dimen/dp_14" />
+                android:layout_height="@dimen/dp_31" />
 
             <include
                 android:id="@+id/message_info_power_station_location_in"
@@ -86,7 +86,7 @@
 
             <View
                 android:layout_width="match_parent"
-                android:layout_height="@dimen/dp_14" />
+                android:layout_height="@dimen/dp_31" />
 
             <include
                 android:id="@+id/message_info_alarm_time_in"
@@ -94,7 +94,7 @@
 
             <View
                 android:layout_width="match_parent"
-                android:layout_height="@dimen/dp_14" />
+                android:layout_height="@dimen/dp_31" />
 
         </LinearLayout>
 
diff --git a/app/src/main/res/layout/fragment_house_list.xml b/app/src/main/res/layout/fragment_house_list.xml
index cfeb8f6..0722160 100644
--- a/app/src/main/res/layout/fragment_house_list.xml
+++ b/app/src/main/res/layout/fragment_house_list.xml
@@ -130,19 +130,18 @@
             android:paddingBottom="@dimen/dp_16" />
     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
 
-    <TextView
-        android:id="@+id/null_list_tv"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="鏁版嵁涓虹┖,璧跺揩鍒涘缓涓�涓惂"
-        android:textColor="@color/text_90000000"
-        android:textSize="@dimen/text_14"
-        android:visibility="gone"
+    <!--娌℃湁鏁版嵁鏄剧ず鏍峰紡-->
+    <include
+        android:id="@+id/null_data_ic"
+        layout="@layout/null_data_view"
+        android:layout_width="match_parent"
+        android:layout_height="224dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-
+        app:layout_constraintTop_toTopOf="parent"
+        android:visibility="gone"
+        />
 
 </androidx.constraintlayout.widget.ConstraintLayout>
 
diff --git a/app/src/main/res/layout/fragment_nascent_message.xml b/app/src/main/res/layout/fragment_nascent_message.xml
index bed934a..284f7c1 100644
--- a/app/src/main/res/layout/fragment_nascent_message.xml
+++ b/app/src/main/res/layout/fragment_nascent_message.xml
@@ -8,8 +8,8 @@
     <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
         android:id="@+id/message_nascent_srl"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        >
+        android:layout_height="match_parent">
+
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/message_nascent_recyclerview"
             android:layout_width="match_parent"
@@ -18,4 +18,16 @@
             android:paddingBottom="@dimen/dp_16" />
     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
 
+    <!--娌℃湁鏁版嵁鏄剧ず鏍峰紡-->
+    <include
+        android:id="@+id/null_data_ic"
+        layout="@layout/null_data_view"
+        android:layout_width="match_parent"
+        android:layout_height="224dp"
+        android:layout_marginTop="183dp"
+        android:visibility="gone"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_recover_message.xml b/app/src/main/res/layout/fragment_recover_message.xml
index cd7964c..c04c8ec 100644
--- a/app/src/main/res/layout/fragment_recover_message.xml
+++ b/app/src/main/res/layout/fragment_recover_message.xml
@@ -17,6 +17,17 @@
             android:clipToPadding="false"
             android:paddingBottom="@dimen/dp_16" />
     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+    <!--娌℃湁鏁版嵁鏄剧ず鏍峰紡-->
+    <include
+        android:id="@+id/null_data_ic"
+        layout="@layout/null_data_view"
+        android:layout_width="match_parent"
+        android:layout_height="224dp"
+        android:layout_marginTop="183dp"
+        android:visibility="gone"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
 
 
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/home_bottom_line.xml b/app/src/main/res/layout/home_bottom_line.xml
index 9c1a7b1..60c05b3 100644
--- a/app/src/main/res/layout/home_bottom_line.xml
+++ b/app/src/main/res/layout/home_bottom_line.xml
@@ -2,8 +2,7 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="0dp"
     android:layout_height="@dimen/dp_49"
-    android:layout_weight="1"
-    >
+    android:layout_weight="1">
 
     <ImageView
         android:id="@+id/icon_iv"
@@ -22,15 +21,18 @@
         android:layout_marginTop="@dimen/dp_2"
         android:textColor="@color/text_90000000"
         android:textSize="@dimen/text_10" />
+
     <TextView
-        android:id="@+id/red_tv"
-        android:layout_width="@dimen/dp_8"
-        android:layout_height="@dimen/dp_8"
+        android:id="@+id/red_count_tv"
+        android:layout_width="@dimen/dp_16"
+        android:layout_height="@dimen/dp_16"
+        android:layout_alignStart="@+id/icon_iv"
+        android:layout_marginStart="@dimen/dp_16"
+        android:layout_marginTop="4.5dp"
         android:background="@drawable/red_font"
-        android:layout_alignEnd="@+id/icon_iv"
-        android:layout_alignTop="@+id/icon_iv"
-        android:visibility="gone"
-         />
+        android:textColor="@color/text_FFFFFFFF"
+        android:textSize="11sp"
+        android:visibility="gone" />
     <!--鍔犲ぇ鐐瑰嚮鐑尯-->
     <TextView
         android:id="@+id/click_tv"
diff --git a/app/src/main/res/layout/null_data_view.xml b/app/src/main/res/layout/null_data_view.xml
new file mode 100644
index 0000000..24a235e
--- /dev/null
+++ b/app/src/main/res/layout/null_data_view.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="224dp">
+
+    <ImageView
+        android:id="@+id/null_data_gif_animation_iv"
+        android:layout_width="289.5dp"
+        android:layout_height="189.5dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:ignore="MissingConstraints" />
+
+    <TextView
+        android:id="@+id/null_data_tv"
+        android:layout_width="match_parent"
+        android:layout_height="22.5dp"
+        android:layout_marginTop="11.5dp"
+        android:gravity="center"
+        android:text="鏁版嵁涓虹┖,璧跺揩鍒涘缓涓�涓惂"
+        android:textColor="@color/text_7C8590"
+        android:textSize="@dimen/text_16"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/null_data_gif_animation_iv" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index 7775723..80c62a6 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -82,6 +82,7 @@
     <string name="my_power_station_malfunction">Malfunction</string>
     <string name="my_power_station_operation">Operating</string>
     <string name="my_power_station_await">Standby</string>
+    <string name="my_power_station_data_null">Data is empty, create one now!</string>
 
     <!--璁惧-->
     <string name="device_manual_connection">Manual connect</string>
@@ -102,6 +103,7 @@
     <string name="message_alarm_details_time">Alarm time</string>
     <string name="message_alarm_details_back">Back</string>
     <string name="message_alarm_details_resolved">Solved</string>
+    <string name="message_alarm_data_null">No alarm</string>
 
 
     <!--鎴戠殑-->
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index 9192895..06fd10a 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -82,6 +82,7 @@
     <string name="my_power_station_malfunction">鏁呴殰</string>
     <string name="my_power_station_operation">杩愯</string>
     <string name="my_power_station_await">寰呮満</string>
+    <string name="my_power_station_data_null">鏁版嵁涓虹┖,璧跺揩鍒涘缓涓�涓惂!</string>
 
     <!--璁惧-->
     <string name="device_manual_connection">鎵嬪姩杩炴帴</string>
@@ -102,6 +103,7 @@
     <string name="message_alarm_details_time">鎶ヨ鏃堕棿</string>
     <string name="message_alarm_details_back">杩斿洖</string>
     <string name="message_alarm_details_resolved">宸茶В鍐�</string>
+    <string name="message_alarm_data_null">鏆傛棤鎶ヨ</string>
 
 
     <!--鎴戠殑-->
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9192895..a31d99b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -82,6 +82,7 @@
     <string name="my_power_station_malfunction">鏁呴殰</string>
     <string name="my_power_station_operation">杩愯</string>
     <string name="my_power_station_await">寰呮満</string>
+    <string name="my_power_station_data_null">鏁版嵁涓虹┖,璧跺揩鍒涘缓涓�涓惂!</string>
 
     <!--璁惧-->
     <string name="device_manual_connection">鎵嬪姩杩炴帴</string>
@@ -102,6 +103,7 @@
     <string name="message_alarm_details_time">鎶ヨ鏃堕棿</string>
     <string name="message_alarm_details_back">杩斿洖</string>
     <string name="message_alarm_details_resolved">宸茶В鍐�</string>
+    <string name="message_alarm_data_null">鏆傛棤鎶ヨ</string>
 
 
     <!--鎴戠殑-->
@@ -206,4 +208,6 @@
     <string name="system_positioning_switch">闇�瑕佹墦寮�绯荤粺瀹氫綅寮�鍏�,鍚﹀垯鍙栨硶鑾峰彇浣嶇疆淇℃伅.</string>
 
 
+
+
 </resources>
\ No newline at end of file

--
Gitblit v1.8.0