From c3542b10ea66a1c3fad44fe8e0efd357d7d3857e Mon Sep 17 00:00:00 2001
From: wjc <1243177876@qq.com>
Date: 星期三, 19 十一月 2025 19:32:41 +0800
Subject: [PATCH] 2025年11月19日19:32:39

---
 app/src/main/res/layout/activity_set.xml                                       |    6 
 app/src/main/res/values/strings.xml                                            |    5 
 app/src/main/AndroidManifest.xml                                               |    6 
 app/src/main/res/drawable-xhdpi/close.png                                      |    0 
 app/src/main/java/com/hdl/photovoltaic/ui/me/SetActivity.java                  |   18 +
 app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java               |    4 
 app/src/main/res/values-zh/strings.xml                                         |    4 
 app/src/main/res/drawable-xhdpi/open.png                                       |    0 
 app/src/main/java/com/hdl/photovoltaic/ui/me/NotificationSettingsActivity.java |  319 ++++++++++++++++++++++++++
 app/src/main/res/values-en/strings.xml                                         |    4 
 app/src/main/java/com/hdl/photovoltaic/other/HdlMessageLogic.java              |   62 +++++
 app/src/main/java/com/hdl/photovoltaic/ui/bean/MessageNoticeBean.java          |   45 +++
 app/src/main/res/layout/activity_notification_settings.xml                     |  207 +++++++++++++++++
 13 files changed, 670 insertions(+), 10 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index fb74d4b..f31814f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,13 +69,13 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.PhotovoltaicDebug">
         <activity
+            android:name=".ui.me.NotificationSettingsActivity"
+            android:exported="false" />
+        <activity
             android:name=".ui.message.SearchMessageHouseActivity"
             android:exported="false" />
         <activity
             android:name=".ui.message.MessageActivity"
-            android:exported="false" />
-        <activity
-            android:name=".ui.message.PowerStationMessageSearchActivity"
             android:exported="false" />
         <activity
             android:name=".ui.me.HelpWebActivity"
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 55e7794..7ca72e6 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
@@ -32,6 +32,10 @@
     public static final String POST_Message_AllRead = "/home-wisdom/app/powerStation/message/allRead";
     //娑堟伅鍏ㄩ儴宸茶(鍖归厤缁翠慨鏂规锛�
     public static final String POST_Message_Plan_AllRead = "/home-wisdom/app/powerStation/message/plan/allRead";
+    //娑堟伅閫氱煡璁剧疆璇︽儏
+    public static final String POST_notice_setInfo = "/home-wisdom/app/powerStation/message/notice/setInfo";
+    //娑堟伅閫氱煡璁剧疆
+    public static final String POST_notice_set = "/home-wisdom/app/powerStation/message/notice/set";
 
     //endregion
 
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlMessageLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlMessageLogic.java
index c63c146..c50c873 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlMessageLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlMessageLogic.java
@@ -11,6 +11,7 @@
 import com.hdl.photovoltaic.internet.api.HttpApi;
 import com.hdl.photovoltaic.listener.CloudCallBeak;
 import com.hdl.photovoltaic.ui.bean.MessageBean;
+import com.hdl.photovoltaic.ui.bean.MessageNoticeBean;
 import com.hdl.photovoltaic.ui.bean.UnCountBean;
 
 import java.util.ArrayList;
@@ -753,6 +754,67 @@
 
     }
 
+    /**
+     * 娑堟伅閫氱煡璁剧疆璇︽儏鑾峰彇
+     *
+     * @param cloudCallBeak -
+     */
+    public void getMessageNoticeInfo(CloudCallBeak<MessageNoticeBean> cloudCallBeak) {
+        String requestUrl = HttpApi.POST_notice_setInfo;
+        JsonObject JsonObject = new JsonObject();
+        HttpClient.getInstance().requestHttp(requestUrl, JsonObject.toString(), new CloudCallBeak<String>() {
+            @Override
+            public void onSuccess(String jsonStr) {
+                try {
+                    Gson gson = new Gson();
+                    MessageNoticeBean messageNoticeBean = gson.fromJson(jsonStr, MessageNoticeBean.class);
+                    if (cloudCallBeak != null) {
+                        cloudCallBeak.onSuccess(messageNoticeBean);
+                    }
+                } catch (Exception e) {
+                    if (cloudCallBeak != null) {
+                        cloudCallBeak.onSuccess(new MessageNoticeBean());
+                    }
+                }
+            }
+
+            @Override
+            public void onFailure(HDLException e) {
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onFailure(e);
+                }
+            }
+        });
+
+
+    }
+
+    /**
+     * 娑堟伅閫氱煡璁剧疆
+     *
+     * @param cloudCallBeak -
+     */
+    public void setMessageNoticeInfo(String type, boolean isTypeBoolean, CloudCallBeak<Boolean> cloudCallBeak) {
+        String requestUrl = HttpApi.POST_notice_set;
+        JsonObject JsonObject = new JsonObject();
+        JsonObject.addProperty(type, isTypeBoolean);
+        HttpClient.getInstance().requestHttp(requestUrl, JsonObject.toString(), new CloudCallBeak<String>() {
+            @Override
+            public void onSuccess(String jsonStr) {
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onSuccess(true);
+                }
+
+            }
+
+            @Override
+            public void onFailure(HDLException e) {
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onFailure(e);
+                }
+            }
+        });
+    }
 
     public static class MessageListClass {
 
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/bean/MessageNoticeBean.java b/app/src/main/java/com/hdl/photovoltaic/ui/bean/MessageNoticeBean.java
new file mode 100644
index 0000000..7a1060b
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/bean/MessageNoticeBean.java
@@ -0,0 +1,45 @@
+package com.hdl.photovoltaic.ui.bean;
+
+public class MessageNoticeBean {
+
+    private boolean aiPush = false;
+    private boolean eventPush = false;
+    private boolean faultPush = false;
+
+    private boolean warnPush = false;
+
+    public boolean isWarnPush() {
+        return warnPush;
+    }
+
+    public void setWarnPush(boolean warnPush) {
+        this.warnPush = warnPush;
+    }
+
+    public boolean isFaultPush() {
+        return faultPush;
+    }
+
+    public void setFaultPush(boolean faultPush) {
+        this.faultPush = faultPush;
+    }
+
+    public boolean isEventPush() {
+        return eventPush;
+    }
+
+    public void setEventPush(boolean eventPush) {
+        this.eventPush = eventPush;
+    }
+
+    public boolean isAiPush() {
+        return aiPush;
+    }
+
+    public void setAiPush(boolean aiPush) {
+        this.aiPush = aiPush;
+    }
+
+
+
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/me/NotificationSettingsActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/me/NotificationSettingsActivity.java
new file mode 100644
index 0000000..e30b911
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/me/NotificationSettingsActivity.java
@@ -0,0 +1,319 @@
+package com.hdl.photovoltaic.ui.me;
+
+import android.app.AlertDialog;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.provider.Settings;
+import android.view.View;
+import android.widget.ImageView;
+
+
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.appcompat.content.res.AppCompatResources;
+
+import com.hdl.linkpm.sdk.core.exception.HDLException;
+import com.hdl.photovoltaic.R;
+import com.hdl.photovoltaic.base.CustomBaseActivity;
+import com.hdl.photovoltaic.config.UserConfigManage;
+import com.hdl.photovoltaic.databinding.ActivityNotificationSettingsBinding;
+import com.hdl.photovoltaic.listener.CloudCallBeak;
+import com.hdl.photovoltaic.other.HdlMessageLogic;
+import com.hdl.photovoltaic.other.HdlThreadLogic;
+import com.hdl.photovoltaic.ui.bean.MessageNoticeBean;
+
+
+public class NotificationSettingsActivity extends CustomBaseActivity {
+    private static final int REQUEST_CODE_NOTIFICATION_SETTINGS = 1001;
+    private ActivityNotificationSettingsBinding viewBinding;
+
+    @Override
+    public Object getContentView() {
+        viewBinding = ActivityNotificationSettingsBinding.inflate(getLayoutInflater());
+        return viewBinding.getRoot();
+    }
+
+    @Override
+    public void onBindView(Bundle savedInstanceState) {
+        setStatusBarTranslucent();
+        getWindow().setNavigationBarColor(getColor(R.color.text_FF000000));
+        //鍒濆鍖�
+        initView();
+        //鍒濆鍖栫晫闈㈢洃鍚櫒
+        initEvent();
+        initData();
+    }
+
+    private void initData() {
+        HdlMessageLogic.getInstance().getMessageNoticeInfo(new CloudCallBeak<MessageNoticeBean>() {
+            @Override
+            public void onSuccess(MessageNoticeBean messageNoticeBean) {
+                HdlThreadLogic.runMainThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        intiBtnState(messageNoticeBean);
+                    }
+                });
+
+            }
+
+            @Override
+            public void onFailure(HDLException e) {
+                HdlThreadLogic.toast(_mActivity, e);
+            }
+        });
+    }
+
+    /**
+     * @param type          (aiPush,eventPush,warnPush,faultPush)
+     * @param isTypeBoolean true鎴栬�協alse
+     */
+    private void setMessageNoticeInfo(String type, boolean isTypeBoolean) {
+        HdlMessageLogic.getInstance().setMessageNoticeInfo(type, isTypeBoolean, new CloudCallBeak<Boolean>() {
+            @Override
+            public void onSuccess(Boolean obj) {
+
+            }
+
+            @Override
+            public void onFailure(HDLException e) {
+                HdlThreadLogic.toast(_mActivity, e);
+            }
+        });
+    }
+
+    private void initEvent() {
+        viewBinding.toolbarTopRl.topBackLl.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                finish();
+            }
+        });
+        viewBinding.notificationLl.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                openNotificationSettings();
+            }
+        });
+        viewBinding.aiIv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                v.setSelected(!v.isSelected());
+                setBtnClick(viewBinding.aiIv, v.isSelected());
+                setMessageNoticeInfo("aiPush", v.isSelected());
+            }
+        });
+        viewBinding.tipIv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                v.setSelected(!v.isSelected());
+                setBtnClick(viewBinding.tipIv, v.isSelected());
+                setMessageNoticeInfo("eventPush", v.isSelected());
+            }
+        });
+        viewBinding.warningIv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                v.setSelected(!v.isSelected());
+                setBtnClick(viewBinding.warningIv, v.isSelected());
+                setMessageNoticeInfo("warnPush", v.isSelected());
+            }
+        });
+        viewBinding.malfunctionIv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                v.setSelected(!v.isSelected());
+                setBtnClick(viewBinding.malfunctionIv, v.isSelected());
+                setMessageNoticeInfo("faultPush", v.isSelected());
+            }
+        });
+
+    }
+
+    private void initView() {
+        viewBinding.toolbarTopRl.topTitleTv.setText(R.string.notification_settings);
+        viewBinding.toolbarTopRl.topBackLl.setVisibility(View.VISIBLE);
+        if (UserConfigManage.getInstance().isBAccount()) {
+            viewBinding.aiLl.setVisibility(View.GONE);
+            viewBinding.lineV1.setVisibility(View.GONE);
+        } else {
+            viewBinding.aiLl.setVisibility(View.VISIBLE);
+            viewBinding.lineV1.setVisibility(View.VISIBLE);
+        }
+        checkAndRequestNotificationPermission();
+
+    }
+
+    /**
+     * 妫�鏌ュ苟璇锋眰閫氱煡鏉冮檺
+     */
+    private void checkAndRequestNotificationPermission() {
+        if (!areNotificationsEnabled(_mActivity)) {
+            setBtnEnabled(false);
+        } else {
+            setBtnEnabled(true);
+        }
+    }
+
+    /**
+     * 鏄剧ず閫氱煡鏉冮檺寮曞瀵硅瘽妗�
+     */
+    private void showNotificationPermissionDialog() {
+        AlertDialog.Builder builder = new AlertDialog.Builder(this);
+        builder.setTitle("寮�鍚�氱煡鏉冮檺")
+                .setMessage("涓轰簡鍙婃椂鎺ユ敹閲嶈娑堟伅锛岃寮�鍚�氱煡鏉冮檺")
+                .setPositiveButton("绔嬪嵆寮�鍚�", (dialog, which) -> {
+                    openNotificationSettings();
+                })
+                .setNegativeButton("鏆備笉寮�鍚�", (dialog, which) -> {
+                    dialog.dismiss();
+                })
+                .setCancelable(false)
+                .show();
+    }
+
+    /**
+     * 璺宠浆鍒伴�氱煡璁剧疆椤甸潰
+     */
+    private void openNotificationSettings() {
+        Intent intent = new Intent();
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            // Android 8.0+ 鐩存帴璺宠浆鍒板簲鐢ㄧ殑閫氱煡璁剧疆
+            intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
+            intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
+        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            // Android 5.0-7.1 璺宠浆鍒板簲鐢ㄨ鎯呴〉闈�
+            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+            intent.setData(Uri.fromParts("package", getPackageName(), null));
+        } else {
+            // 鏃х増鏈� Android
+            intent.setAction(Settings.ACTION_APPLICATION_SETTINGS);
+        }
+
+        try {
+            startActivityForResult(intent, REQUEST_CODE_NOTIFICATION_SETTINGS);
+        } catch (Exception e) {
+            e.printStackTrace();
+            // 澶囩敤鏂规
+            openAppDetailsSettings();
+        }
+    }
+
+    /**
+     * 澶囩敤鏂规锛氳烦杞埌搴旂敤璇︽儏椤甸潰
+     */
+    private void openAppDetailsSettings() {
+        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+        intent.setData(Uri.fromParts("package", getPackageName(), null));
+        try {
+            startActivityForResult(intent, REQUEST_CODE_NOTIFICATION_SETTINGS);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (requestCode == REQUEST_CODE_NOTIFICATION_SETTINGS) {
+            // 鐢ㄦ埛浠庤缃〉闈㈣繑鍥烇紝閲嶆柊妫�鏌ユ潈闄�
+            new Handler().postDelayed(() -> {
+                checkAndRequestNotificationPermission();
+            }, 500); // 寤惰繜妫�鏌ワ紝纭繚璁剧疆宸茬敓鏁�
+        }
+    }
+
+    /**
+     * 鍙戦�佹祴璇曢�氱煡
+     */
+    private void sendTestNotification() {
+        if (!areNotificationsEnabled(this)) {
+            showNotificationPermissionDialog();
+            return;
+        }
+
+    }
+
+
+    /**
+     * 妫�鏌ラ�氱煡鏉冮檺鏄惁寮�鍚�
+     */
+    public boolean areNotificationsEnabled(Context context) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            NotificationManager notificationManager =
+                    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+            return notificationManager.areNotificationsEnabled();
+        } else {
+            // Android 8.0 浠ヤ笅鐗堟湰锛岄�氱煡鏉冮檺榛樿寮�鍚垨閫氳繃鍏朵粬鏂瑰紡妫�鏌�
+            return true;
+        }
+    }
+
+    /**
+     * 妫�鏌ョ壒瀹氭笭閬撶殑閫氱煡鏉冮檺 (Android 8.0+)
+     */
+    @RequiresApi(api = Build.VERSION_CODES.O)
+    public boolean isNotificationChannelEnabled(Context context, String channelId) {
+        NotificationManager notificationManager =
+                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+        NotificationChannel channel = notificationManager.getNotificationChannel(channelId);
+        return channel != null && channel.getImportance() != NotificationManager.IMPORTANCE_NONE;
+    }
+
+    /**
+     * 璁剧疆鎸夐挳鏄惁寮�鍚偣鍑绘牱寮�
+     *
+     * @param enabled 鏄惁寮�鍚�
+     */
+    private void setBtnEnabled(boolean enabled) {
+        final float alpha = enabled ? 1.0f : 0.5f;
+        viewBinding.aiIv.setAlpha(alpha);
+        viewBinding.aiIv.setEnabled(enabled);
+        viewBinding.tipIv.setAlpha(alpha);
+        viewBinding.tipIv.setEnabled(enabled);
+        viewBinding.warningIv.setAlpha(alpha);
+        viewBinding.warningIv.setEnabled(enabled);
+        viewBinding.malfunctionIv.setAlpha(alpha);
+        viewBinding.malfunctionIv.setEnabled(enabled);
+        if (enabled) {
+            viewBinding.notificationLl.setVisibility(View.GONE);
+        } else {
+            viewBinding.notificationLl.setVisibility(View.VISIBLE);
+        }
+    }
+
+    /**
+     * 鍒濆鍖栨寜閽姸鎬�
+     *
+     * @param messageNoticeBean 浜戠杩斿洖鐨勬ā鍨�
+     */
+    void intiBtnState(MessageNoticeBean messageNoticeBean) {
+        setBtnClick(viewBinding.aiIv, messageNoticeBean.isAiPush());
+        setBtnClick(viewBinding.tipIv, messageNoticeBean.isEventPush());
+        setBtnClick(viewBinding.warningIv, messageNoticeBean.isWarnPush());
+        setBtnClick(viewBinding.malfunctionIv, messageNoticeBean.isFaultPush());
+    }
+
+    /**
+     * 鎸夐挳鐐瑰嚮鏍峰紡
+     *
+     * @param v          鎸夐挳缁勪欢
+     * @param isSelected 鐐瑰嚮鐘舵��
+     */
+    private void setBtnClick(ImageView v, boolean isSelected) {
+        if (isSelected) {
+            v.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.open));
+        } else {
+            v.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.close));
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/me/SetActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/me/SetActivity.java
index bbafcfa..b52b828 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/me/SetActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/me/SetActivity.java
@@ -84,6 +84,15 @@
                 startActivityForResult(intent, 40);
             }
         });
+        //寮�鍚郴缁熼�氱煡
+        viewBinding.setNotificationSettingsIl.getRoot().setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent intent = new Intent();
+                intent.setClass(_mActivity, NotificationSettingsActivity.class);
+                startActivity(intent);
+            }
+        });
         //鍒囪姳鐜
         viewBinding.setContextSwitchIl.getRoot().setOnClickListener(new View.OnClickListener() {
             @Override
@@ -119,6 +128,7 @@
         viewBinding.setLanguageIl.sllLlRlNameTv.setText(R.string.set_multilingual);
         viewBinding.setAccountSecurityIl.sllLlRlNameTv.setText(R.string.set_account_security);
         viewBinding.setTemperatureUnitIl.sllLlRlNameTv.setText(R.string.set_temperature_unit);
+        viewBinding.setNotificationSettingsIl.sllLlRlNameTv.setText(R.string.notification_settings);
         viewBinding.setLanguageIl.sllLlRlRightContentTv.setVisibility(View.VISIBLE);
         viewBinding.setLanguageIl.lineV.setVisibility(View.VISIBLE);
         viewBinding.setAccountSecurityIl.lineV.setVisibility(View.VISIBLE);
@@ -126,12 +136,13 @@
         viewBinding.setLanguageIl.sllLlRlRightContentTv.setText(str);
         viewBinding.setTemperatureUnitIl.sllLlRlRightContentTv.setVisibility(View.VISIBLE);
         viewBinding.setTemperatureUnitIl.sllLlRlRightContentTv.setText(UserConfigManage.getInstance().getTemperature_unit());
+        viewBinding.setTemperatureUnitIl.lineV.setVisibility(View.VISIBLE);
 
         if (AppConfigManage.isDebug()) {
             viewBinding.setContextSwitchIl.parentCl.setVisibility(View.VISIBLE);
             viewBinding.setContextSwitchIl.sllLlRlNameTv.setText("褰撳墠鐜");
             viewBinding.setContextSwitchIl.sllLlRlRightContentTv.setVisibility(View.VISIBLE);
-            viewBinding.setTemperatureUnitIl.lineV.setVisibility(View.VISIBLE);
+            viewBinding.setNotificationSettingsIl.lineV.setVisibility(View.VISIBLE);
             if (AppConfigManage.getOnlineServer()) {
                 viewBinding.setContextSwitchIl.sllLlRlRightContentTv.setText("绾夸笂");
             } else {
@@ -139,11 +150,8 @@
             }
         } else {
             viewBinding.setContextSwitchIl.parentCl.setVisibility(View.GONE);
-            viewBinding.setTemperatureUnitIl.lineV.setVisibility(View.GONE);
+            viewBinding.setNotificationSettingsIl.lineV.setVisibility(View.GONE);
         }
-
-//        viewBinding.setContextSwitchIl.parentCl.setVisibility(View.GONE);
-
 
     }
 
diff --git a/app/src/main/res/drawable-xhdpi/close.png b/app/src/main/res/drawable-xhdpi/close.png
index cce40d8..d20bdeb 100644
--- a/app/src/main/res/drawable-xhdpi/close.png
+++ b/app/src/main/res/drawable-xhdpi/close.png
Binary files differ
diff --git a/app/src/main/res/drawable-xhdpi/open.png b/app/src/main/res/drawable-xhdpi/open.png
index 943e64c..9ae269f 100644
--- a/app/src/main/res/drawable-xhdpi/open.png
+++ b/app/src/main/res/drawable-xhdpi/open.png
Binary files differ
diff --git a/app/src/main/res/layout/activity_notification_settings.xml b/app/src/main/res/layout/activity_notification_settings.xml
new file mode 100644
index 0000000..a71f349
--- /dev/null
+++ b/app/src/main/res/layout/activity_notification_settings.xml
@@ -0,0 +1,207 @@
+<?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:id="@+id/main"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/text_FF000000"
+    tools:context=".ui.me.NotificationSettingsActivity">
+
+    <include
+        android:id="@+id/toolbar_top_rl"
+        layout="@layout/toolbar_top_view_44"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dp_44"
+        android:layout_marginTop="@dimen/dp_38"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/text_FF1C1C1E"
+        android:orientation="vertical"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_top_rl">
+
+        <LinearLayout
+            android:id="@+id/notification_ll"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_52">
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_marginStart="@dimen/dp_16"
+                android:layout_marginEnd="@dimen/dp_10"
+                android:layout_weight="1"
+                android:ellipsize="end"
+                android:gravity="center_vertical|start"
+                android:singleLine="true"
+                android:text="@string/notification_settings"
+                android:textColor="@color/text_FFACACAC"
+                android:textSize="@dimen/text_14" />
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:ellipsize="end"
+                android:gravity="center_vertical|end"
+                android:paddingStart="@dimen/dp_6"
+                android:paddingEnd="@dimen/dp_16"
+                android:singleLine="true"
+                android:text="@string/go_and_start"
+                android:textColor="@color/text_38C494"
+                android:textSize="@dimen/text_14" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_48"
+            android:background="@color/text_FF000000">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/dp_16"
+                android:layout_marginTop="@dimen/dp_20"
+                android:ellipsize="end"
+                android:singleLine="true"
+                android:text="@string/notification_alert"
+                android:textColor="@color/text_FF8E8E8E"
+                android:textSize="@dimen/text_14" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/ai_ll"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_52">
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_marginStart="@dimen/dp_16"
+                android:layout_marginEnd="@dimen/dp_10"
+                android:layout_weight="1"
+                android:ellipsize="end"
+                android:gravity="center_vertical|start"
+                android:singleLine="true"
+                android:text="@string/ai_butler_message"
+                android:textColor="@color/text_FFACACAC"
+                android:textSize="@dimen/text_14" />
+
+            <ImageView
+                android:id="@+id/ai_iv"
+                android:layout_width="@dimen/dp_44"
+                android:layout_height="@dimen/dp_24"
+                android:layout_gravity="center_vertical"
+                android:layout_marginStart="@dimen/dp_6"
+                android:layout_marginEnd="@dimen/dp_16"
+                android:background="@drawable/open" />
+        </LinearLayout>
+
+        <View
+            android:id="@+id/line_v1"
+            android:layout_width="match_parent"
+            android:layout_height="0.5dp"
+            android:background="@color/text_1AFFFFFF" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_52">
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_marginStart="@dimen/dp_16"
+                android:layout_marginEnd="@dimen/dp_10"
+                android:layout_weight="1"
+                android:ellipsize="end"
+                android:gravity="center_vertical|start"
+                android:singleLine="true"
+                android:text="@string/alarm_all_grade_tip"
+                android:textColor="@color/text_FFACACAC"
+                android:textSize="@dimen/text_14" />
+
+            <ImageView
+                android:id="@+id/tip_iv"
+                android:layout_width="@dimen/dp_44"
+                android:layout_height="@dimen/dp_24"
+                android:layout_gravity="center_vertical"
+                android:layout_marginStart="@dimen/dp_6"
+                android:layout_marginEnd="@dimen/dp_16"
+                android:background="@drawable/open" />
+        </LinearLayout>
+
+        <View
+            android:id="@+id/line_v2"
+            android:layout_width="match_parent"
+            android:layout_height="0.5dp"
+            android:background="@color/text_1AFFFFFF" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_52">
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_marginStart="@dimen/dp_16"
+                android:layout_marginEnd="@dimen/dp_10"
+                android:layout_weight="1"
+                android:ellipsize="end"
+                android:gravity="center_vertical|start"
+                android:singleLine="true"
+                android:text="@string/alarm_all_grade_warning"
+                android:textColor="@color/text_FFACACAC"
+                android:textSize="@dimen/text_14" />
+
+            <ImageView
+                android:id="@+id/warning_iv"
+                android:layout_width="@dimen/dp_44"
+                android:layout_height="@dimen/dp_24"
+                android:layout_gravity="center_vertical"
+                android:layout_marginStart="@dimen/dp_6"
+                android:layout_marginEnd="@dimen/dp_16"
+                android:background="@drawable/open" />
+        </LinearLayout>
+
+        <View
+            android:id="@+id/line_v3"
+            android:layout_width="match_parent"
+            android:layout_height="0.5dp"
+            android:background="@color/text_1AFFFFFF" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_52">
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_marginStart="@dimen/dp_16"
+                android:layout_marginEnd="@dimen/dp_10"
+                android:layout_weight="1"
+                android:ellipsize="end"
+                android:gravity="center_vertical|start"
+                android:singleLine="true"
+                android:text="@string/alarm_all_grade_malfunction"
+                android:textColor="@color/text_FFACACAC"
+                android:textSize="@dimen/text_14" />
+
+            <ImageView
+                android:id="@+id/malfunction_iv"
+                android:layout_width="@dimen/dp_44"
+                android:layout_height="@dimen/dp_24"
+                android:layout_gravity="center_vertical"
+                android:layout_marginStart="@dimen/dp_6"
+                android:layout_marginEnd="@dimen/dp_16"
+                android:background="@drawable/open" />
+        </LinearLayout>
+    </LinearLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_set.xml b/app/src/main/res/layout/activity_set.xml
index d68ce66..814a06b 100644
--- a/app/src/main/res/layout/activity_set.xml
+++ b/app/src/main/res/layout/activity_set.xml
@@ -46,10 +46,14 @@
             <include
                 android:id="@+id/set_temperature_unit_il"
                 layout="@layout/set_line" />
+
+            <include
+                android:id="@+id/set_notification_settings_il"
+                layout="@layout/set_line" />
+
             <include
                 android:id="@+id/set_context_switch_il"
                 layout="@layout/set_line" />
-
         </LinearLayout>
     </ScrollView>
 
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index 5549f95..b258c02 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -379,4 +379,8 @@
     <string name="debug_status_rollback">Roll back the debugging status of %s plant to debugging?</string>
     <string name="device_not_activated">The device is not activated</string>
     <string name="help">Help</string>
+    <string name="notification_settings">Notification settings</string>
+    <string name="go_and_start">Go and start</string>
+    <string name="notification_alert">Notification alert</string>
+    <string name="ai_butler_message">AI butler message</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index c08d671..1ea3389 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -375,4 +375,8 @@
     <string name="debug_status_rollback">鏄惁灏�%s鐢电珯鐨勮皟璇曠姸鎬佸洖閫�鍒拌皟璇曚腑锛�</string>
     <string name="device_not_activated">璁惧鏈縺娲�</string>
     <string name="help">甯姪</string>
+    <string name="notification_settings">寮�鍚郴缁熼�氱煡</string>
+    <string name="go_and_start">鍘诲紑鍚�</string>
+    <string name="notification_alert">閫氱煡鎻愰啋</string>
+    <string name="ai_butler_message">AI绠″娑堟伅</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index aabd80c..714a5d6 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -380,5 +380,8 @@
     <string name="debug_status_rollback">Roll back the debugging status of %s plant to debugging?</string>
     <string name="device_not_activated">The device is not activated</string>
     <string name="help">Help</string>
-
+    <string name="notification_settings">Notification settings</string>
+    <string name="go_and_start">Go and start</string>
+    <string name="notification_alert">Notification alert</string>
+    <string name="ai_butler_message">AI butler message</string>
 </resources>
\ No newline at end of file

--
Gitblit v1.8.0