wjc
昨天 e7e48e1a65fdaa361e14e7e77e24043a63126bd6
2026年01月13日15:47:59 升级gradle版本

1,增加游客模式登录功能;
2,不强制阿拉伯语言布局从左到右;
1个文件已添加
1个文件已删除
36个文件已修改
456 ■■■■ 已修改文件
aa_chart_core/build.gradle 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/build.gradle 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/libs/android-gif-drawable-1.2.28.aar 补丁 | 查看 | 原始文档 | blame | 历史
app/libs/android-gif-drawable-1.2.29.aar 补丁 | 查看 | 原始文档 | blame | 历史
app/libs/breakpad-build-release.aar 补丁 | 查看 | 原始文档 | blame | 历史
app/libs/uniMPSDK-V2-release.aar 补丁 | 查看 | 原始文档 | blame | 历史
app/libs/uniapp-v8-release.aar 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/HDLApp.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/config/UserConfigManage.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlPushLogic.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/LoginActivity.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/StartActivity.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/adapter/HouseInfoAdapter.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/home/HomePageFragment.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/me/AsRegardsActivity.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/me/MeFragment.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/me/SetActivity.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/me/languageSelectionActivity.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseAndDeviceFragment.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/uni/MyForegroundService.java 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/activity_home_login.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_home_page.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_house_list.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_me.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values-ar/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values-en/strings.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values-zh/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
build.gradle 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
countrypicker/build.gradle 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gradle.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
gradle/wrapper/gradle-wrapper.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pickerview/build.gradle 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sdk/build.gradle 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third-zxing/build.gradle 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wheelview/build.gradle 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aa_chart_core/build.gradle
@@ -1,6 +1,7 @@
apply plugin: 'com.android.library'
android {
    namespace 'com.github.AAChartModel.AAChartCore'
    compileSdkVersion 33
    defaultConfig {
app/build.gradle
@@ -25,13 +25,14 @@
            keyPassword '85521566'
        }
    }
    namespace 'com.hdl.photovoltaic'
    compileSdk 35
    defaultConfig {
        applicationId "com.hdl.photovoltaic"
        minSdk 23
        targetSdk 35
        versionCode 23
        versionName "2.0.0"//版本规则1.3是产品功能迭代用的,最后一位0是我们修复bug用的
        versionName "2.0.1"//版本规则1.3是产品功能迭代用的,最后一位0是我们修复bug用的
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
        manifestPlaceholders = mfph
@@ -63,10 +64,10 @@
        ]
    }
    // 保证其他的lib没有被preDex
    dexOptions {
        preDexLibraries = false
    }
//    // 保证其他的lib没有被preDex
//    dexOptions {
//        preDexLibraries = false
//    }
    repositories {
        flatDir {
            dirs 'libs'
@@ -85,6 +86,11 @@
//        abortOnError false
//    }
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
    /**
     * 打包自动命名
@@ -110,6 +116,7 @@
    buildFeatures {
        viewBinding true
        aidl true
        buildConfig true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
@@ -154,7 +161,7 @@
    //二维码库
    implementation project(path: ':third-zxing')
    //Link本地库(在线依赖网络库)
    implementation 'com.hdl.android:pmsdk:1.0.18'
    implementation 'com.hdl.android:pmsdk:1.0.22'//22
//    implementation 'com.hdl.android:debugsdk:1.0.71'
    implementation project(path: ':sdk')
    implementation 'androidx.activity:activity:1.2.3'
@@ -185,13 +192,13 @@
    //********UniSDK必须添加的依赖 start********
    implementation "androidx.recyclerview:recyclerview:1.0.0"
    implementation 'com.alibaba:fastjson:1.2.66'//必须集成,fastjson功能需要
    implementation 'com.facebook.fresco:fresco:2.5.0'//必须集成,图片加载需要
    implementation 'com.facebook.fresco:animated-gif:2.5.0'//必须集成,图片加载需要
    implementation 'com.facebook.fresco:webpsupport:2.5.0'
    implementation 'com.facebook.fresco:animated-webp:2.5.0'
    implementation 'com.github.bumptech.glide:glide:4.9.0'//必须集成,图片加载需要
    implementation 'com.facebook.fresco:fresco:3.6.0'//必须集成,图片加载需要
    implementation 'com.facebook.fresco:animated-gif:3.6.0'//必须集成,图片加载需要
    implementation 'com.facebook.fresco:webpsupport:3.6.0'
    implementation 'com.facebook.fresco:animated-webp:3.6.0'
    implementation 'com.github.bumptech.glide:glide:5.0.5'//必须集成,图片加载需要
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'androidx.webkit:webkit:1.3.0'//3.6.15版本之后 必须集成,用来支持暗黑模式
    implementation 'androidx.webkit:webkit:1.6.1'//3.6.15版本之后 必须集成,用来支持暗黑模式
    //********UniSDK必须添加的依赖 end********
    //NanoHTTPD搭建服务器
    implementation 'org.nanohttpd:nanohttpd:2.3.1'
@@ -216,9 +223,10 @@
    implementation 'com.huawei.agconnect:agconnect-core:1.9.1.301'
    //友盟
    implementation 'com.umeng.umsdk:common:9.5.6'// 必选
    implementation 'com.umeng.umsdk:asms:1.6.3'// 必选
    implementation 'com.umeng.umsdk:apm:1.7.0' // 错误分析
    implementation 'com.umeng.umsdk:common:9.6.8'// 必选
    implementation 'com.umeng.umsdk:asms:1.8.0'// 必选
//    implementation 'com.umeng.umsdk:apm:1.9.2' // 错误分析,目前不支持‌Android 15的‌16KB功能适配要求‌。‌
    //引入FCM(原生谷歌)
    implementation 'com.google.firebase:firebase-messaging:23.2.1'
@@ -228,7 +236,6 @@
    implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
    // 阿里云推送核心库
    implementation 'com.aliyun.ams:alicloud-android-push:3.9.3'
    //辅助通道
app/libs/android-gif-drawable-1.2.28.aar
Binary files differ
app/libs/android-gif-drawable-1.2.29.aar
Binary files differ
app/libs/breakpad-build-release.aar
Binary files differ
app/libs/uniMPSDK-V2-release.aar
Binary files differ
app/libs/uniapp-v8-release.aar
Binary files differ
app/src/main/AndroidManifest.xml
@@ -100,7 +100,7 @@
        android:label="@string/app_name"
        android:persistent="true"
        android:requestLegacyExternalStorage="true"
        android:supportsRtl="false"
        android:supportsRtl="true"
        android:theme="@style/Theme.PhotovoltaicDebug"
        tools:replace="android:supportsRtl">
        <!-- 厂商通道专用Activity(透明中转页),创建一个透明的Activity来处理厂商通道点击 -->
app/src/main/java/com/hdl/photovoltaic/HDLApp.java
@@ -84,6 +84,10 @@
public class HDLApp extends Application {
    /**
     * 添加标志位控制首次加载逻辑
     */
    public boolean isFirstLoad = true;
    final String TAG = HDLApp.class.getName();
    //控制打印 Debug模式打印
    private Boolean isLogEnabled = true;
@@ -109,20 +113,15 @@
    @Override
    public void onCreate() {
        super.onCreate();
//        Log.d("Application==onCreate", "onCreate");
//        // 获取当前进程的PID
//        String processMessage = "进程Uid:" + Process.myUid() + "进程ID:" + Process.myPid() + " 进程名:" + RuningAcitvityUtil.getAppName(getBaseContext());
        Log.d("Application==onCreate", "onCreate");
//        Log.d(TAG, processMessage);
//        Log.d("Application==onCreate", processMessage);
//        if (RuningAcitvityUtil.getAppName(getBaseContext()).contains(":")) {
//            //非原生进程,用初始化后面的
//            return;
//        }
        mHDLApp = this;
        SharedPreUtils.init(this);
        getAppLanguage();
        //预创建脚本json文件夹
        HdlFileLogic.getInstance().createHdlDeviceModelLocalJsonDirectory();
        init();
@@ -181,6 +180,11 @@
            return;
        }
        isInitThirdSDK = true;
        SharedPreUtils.init(this);
        getAppLanguage();
        //预创建脚本json文件夹
        HdlFileLogic.getInstance().createHdlDeviceModelLocalJsonDirectory();
        UserConfigManage.getInstance().setTouristModeJumpLogic(UserConfigManage.getInstance().isTourist_mode());
//        //5.初始化Bugly
//        CrashReport.initCrashReport(this, Constant.BUGLY_APP_ID, true);
        //6.初始化DCUniMPSDK
@@ -303,6 +307,8 @@
        HDLLinkPMUser.getInstance().setOnReloginListener(new IOnReloginListener() {
            @Override
            public void onReLogin(int type) {
//                UserConfigManage.getInstance().setTourist_mode(false);
//                UserConfigManage.getInstance().Save();
                if (type == LogoutType.ServerSwitchingLogout.getValue()) {
                    new Handler().postDelayed(new Runnable() {
                        @Override
app/src/main/java/com/hdl/photovoltaic/config/UserConfigManage.java
@@ -109,13 +109,14 @@
    private String userImageUrl = "/static/image/user-default-head.png";
    /// <summary>
    /// 注册极光ID,谷歌FCM的令牌
    /// </summary>
    /**
     * 注册极光ID,谷歌FCM的令牌
     */
    private String pushToken;
    /// <summary>
    /// 添加令牌到云端成功时返回的
    /// </summary>
    /**
     * 添加令牌到云端成功时返回的
     */
    private String pushId;
    /**
@@ -123,6 +124,50 @@
     */
    private boolean noNetworkFlag = false;
    /**
     * 是否是游客模式(true=游客模式,false=正常模式)
     */
    private boolean tourist_mode = false;
    /**
     * 是否是游客模式
     * @return (true=游客模式,false=正常模式)
     */
    public boolean isTourist_mode() {
        return tourist_mode;
    }
    /**
     * 是否是游客模式
     * @return (true=游客模式,false=正常模式)
     */
    public void setTourist_mode(boolean tourist_mode) {
        this.tourist_mode = tourist_mode;
    }
    /**
     * 用来游客模式冷启动强制跳到登录界面标记
     *  true=游客模式,冷启动强制跳转登录界面,false:按正常流程跑
     */
    private boolean isTouristModeJumpLogic = false;
    /**
     * 用来游客模式冷启动强制跳到登录界面标记
     * @return true=游客模式,冷启动强制跳转登录界面,false:按正常流程跑
     */
    public boolean isTouristModeJumpLogic() {
        return isTouristModeJumpLogic;
    }
    /**
     * 用来游客模式冷启动强制跳到登录界面标记
     * @return true=游客模式,冷启动强制跳转登录界面,false:按正常流程跑
     */
    public void setTouristModeJumpLogic(boolean touristModeJumpLogic) {
        isTouristModeJumpLogic = touristModeJumpLogic;
    }
    public boolean isAutomaticSkipNoNetworkFlag() {
        return automaticSkipNoNetworkFlag;
    }
app/src/main/java/com/hdl/photovoltaic/other/HdlPushLogic.java
@@ -59,6 +59,10 @@
     * @param cloudCallBeak -
     */
    public void pushAdd(CloudCallBeak<String> cloudCallBeak) {
        //游客模式不需要消息推送,因为手动杀死应用时,自动退出游客模式
        if (UserConfigManage.getInstance().isTourist_mode()) {
            return;
        }
        String requestUrl = HttpApi.POST_push_add;
        JsonObject json = new JsonObject();
        json.addProperty("deviceName", Build.MODEL);//设备名称
app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
@@ -72,6 +72,7 @@
import com.hdl.photovoltaic.uni.HDLUniMPSDKManager;
import com.hdl.photovoltaic.utils.NetworkUtils;
import com.hdl.photovoltaic.utils.PermissionUtils;
import com.hdl.photovoltaic.utils.SharedPreUtils;
import com.hdl.photovoltaic.utils.WifiUtils;
import com.hdl.sdk.link.common.exception.HDLLinkException;
import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus;
@@ -3088,6 +3089,7 @@
//                data.put("appSecret", AppConfigManage.getAppSecret());
//            }
            data.put("appLanguage", UserConfigManage.getInstance().getCurrentAppLanguage());
            data.put("tourist_mode", UserConfigManage.getInstance().isTourist_mode());
            uniCallBackBaseBean.setData(data);
            return getJSONObject(uniCallBackBaseBean);
        } catch (Exception e) {
app/src/main/java/com/hdl/photovoltaic/ui/LoginActivity.java
@@ -171,6 +171,10 @@
//        String pws = "123456";
            //测试用
            viewBinding.homeLoginAccountEt.setText(UserConfigManage.getInstance().getAccount());
            if (UserConfigManage.getInstance().isTourist_mode()) {
                //游客模式不记录账号
                viewBinding.homeLoginAccountEt.setText("");
            }
//        viewBinding.homeLoginPasswordEt.setText(pws);
            checkClearIconShowOrNot(viewBinding.homeLoginAccountEt.getText().toString());
            isLoginTextViewEnabled();
@@ -213,6 +217,18 @@
                        viewBinding.homeLoginLanguageTv.setText(itemData.getTitle());
                    }
                });
            }
        });
        //游客模式
        viewBinding.homeLoginTouristTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                UserConfigManage.getInstance().setTourist_mode(true);
                UserConfigManage.getInstance().Save();
                HDLUniMPSDKManager.isExistsActivity = false;
                //游客模式登录
                loginAccount("Sales@xenterrasolar.com", "PLMOKNIJ");
            }
        });
@@ -286,6 +302,8 @@
                    getAcceiptPolicyDialog();
                    return;
                }
                UserConfigManage.getInstance().setTourist_mode(false);
                UserConfigManage.getInstance().Save();
                //登录
                loginAccount(account, password);
@@ -686,6 +704,8 @@
                confirmationCancelDialog.dismiss();
                String account = viewBinding.homeLoginAccountEt.getText().toString().replace(" ", "");
                String password = viewBinding.homeLoginPasswordEt.getText().toString().replace(" ", "");
                UserConfigManage.getInstance().setTourist_mode(false);
                UserConfigManage.getInstance().Save();
                loginAccount(account, password);
            }
        });
app/src/main/java/com/hdl/photovoltaic/ui/StartActivity.java
@@ -94,8 +94,9 @@
            if (!UserConfigManage.getInstance().isNoNetworkFlag()) {
                //初始化服务器域名(用户注册所在服务器域名地址)
                AppConfigManage.setUserRegionUrl(HDLLinkPMUser.getInstance().getUserRegionUrl());
                boolean isTourist = UserConfigManage.getInstance().isTouristModeJumpLogic();
                //判断AccessToken是否null
                if (!TextUtils.isEmpty(HDLLinkPMUser.getInstance().getAccessToken())) {
                if (!TextUtils.isEmpty(HDLLinkPMUser.getInstance().getAccessToken()) && !isTourist) {
                    if (UserConfigManage.getInstance().isBAccount()) {
                        //安装商跳转界面
                        Intent intent = new Intent();
app/src/main/java/com/hdl/photovoltaic/ui/adapter/HouseInfoAdapter.java
@@ -15,6 +15,7 @@
import androidx.recyclerview.widget.RecyclerView;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.enums.DebugStatus;
import com.hdl.photovoltaic.enums.DeliverStatus;
import com.hdl.photovoltaic.enums.PowerStationStatus;
@@ -128,6 +129,9 @@
            }
        });
        if (UserConfigManage.getInstance().isTourist_mode()) {
            holder.home_del_ll.setVisibility(View.GONE);
        }
    }
    @Override
app/src/main/java/com/hdl/photovoltaic/ui/home/HomePageFragment.java
@@ -33,11 +33,13 @@
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.databinding.FragmentHomePageBinding;
import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch;
import com.hdl.photovoltaic.enums.LogoutType;
import com.hdl.photovoltaic.enums.PowerStationStatus;
import com.hdl.photovoltaic.enums.TimeType;
import com.hdl.photovoltaic.enums.UnitType;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.listener.OnCallBeak;
import com.hdl.photovoltaic.other.HdlAccountLogic;
import com.hdl.photovoltaic.other.HdlCommonLogic;
import com.hdl.photovoltaic.other.HdlDialogLogic;
import com.hdl.photovoltaic.other.HdlLogLogic;
@@ -45,8 +47,6 @@
import com.hdl.photovoltaic.other.HdlResidenceLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.other.HdlUniLogic;
import com.hdl.photovoltaic.ui.StartActivity;
import com.hdl.photovoltaic.ui.adapter.LanguageAdapter;
import com.hdl.photovoltaic.ui.bean.DataOverBean;
import com.hdl.photovoltaic.ui.bean.SocialContributionBean;
import com.hdl.photovoltaic.ui.bean.StatisticsBean;
@@ -56,6 +56,7 @@
import com.hdl.photovoltaic.utils.AppManagerUtils;
import com.hdl.photovoltaic.utils.GPSManagerUtils;
import com.hdl.photovoltaic.utils.PermissionUtils;
import com.hdl.photovoltaic.utils.SharedPreUtils;
import com.hdl.photovoltaic.utils.TimeUtils;
import com.hdl.photovoltaic.widget.AddPowerStationDialog;
import com.hdl.photovoltaic.widget.ConfirmationCancelDialog;
@@ -130,6 +131,12 @@
    }
    private void initEvent() {
        viewBinding.exitTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HdlAccountLogic.getInstance().logout(LogoutType.NormalLogout);
            }
        });
        //电站添加
        //点击进入新配置入网界面
        viewBinding.homePageStationAddIv.setOnClickListener(new View.OnClickListener() {
@@ -470,7 +477,13 @@
    }
    private void initView() {
        if (UserConfigManage.getInstance().isTourist_mode()) {
            viewBinding.homePageStationAddIv.setVisibility(View.GONE);
            viewBinding.exitTv.setVisibility(View.VISIBLE);
        } else {
            viewBinding.homePageStationAddIv.setVisibility(View.VISIBLE);
            viewBinding.exitTv.setVisibility(View.GONE);
        }
        String dataStr = TimeUtils.getDateTimestamp(TimeUtils.getCurrentTimestamp(), TimeUtils.getTimeDateFormat(timeType));
        viewBinding.yearMonthDayTv.setText(dataStr);
app/src/main/java/com/hdl/photovoltaic/ui/me/AsRegardsActivity.java
@@ -1,23 +1,14 @@
package com.hdl.photovoltaic.ui.me;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.hdl.linkpm.sdk.core.exception.HDLException;
import com.hdl.linkpm.sdk.user.bean.NewVersionBean;
import com.hdl.photovoltaic.R;
@@ -29,16 +20,12 @@
import com.hdl.photovoltaic.other.HdlAppUpdateLogic;
import com.hdl.photovoltaic.other.HdlCommonLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.ui.BPowerStationActivity;
import com.hdl.photovoltaic.ui.CPowerStationActivity;
import com.hdl.photovoltaic.ui.StartActivity;
import com.hdl.photovoltaic.utils.BadgeUtils;
import com.hdl.photovoltaic.widget.FlashingBoxDialog;
import com.hdl.photovoltaic.widget.apkwgtupload.ApkDownLoadService;
import com.hdl.photovoltaic.widget.ConfirmationCancelDialog;
import com.hdl.photovoltaic.widget.UpdateConfirmationCancelDialog;
import java.util.Map;
/**
 * 关于界面(app更新)
@@ -210,60 +197,4 @@
        }, this, ShowErrorMode.YES);
    }
    private void showCustomNotification(String title, String message, Map<String, String> data) {
        NotificationManager notificationManager =
                (NotificationManager) _mActivity.getSystemService(Context.NOTIFICATION_SERVICE);
        // 创建通知渠道(Android 8.0+)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            createNotificationChannel(notificationManager);
        }
        NotificationCompat.Builder builder = new NotificationCompat.Builder(_mActivity, "fcm_channel")
                .setSmallIcon(R.drawable.notification_logo)
                .setContentTitle(title)
                .setContentText(message)
                .setAutoCancel(true)
                .setNumber(5)
                .setWhen(System.currentTimeMillis());
        // 设置点击意图
        Intent intent = createNotificationIntent(data);
        PendingIntent pendingIntent = PendingIntent.getActivity(
                _mActivity, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
        builder.setContentIntent(pendingIntent);
        // 显示通知
        notificationManager.notify((int) System.currentTimeMillis(), builder.build());
    }
    private Intent createNotificationIntent(Map<String, String> data) {
        Intent intent = new Intent(_mActivity, StartActivity.class);
        intent.putExtra("from_fcm", true);
        intent.putExtra("pushData", JSON.toJSON(data).toString());
//        if (data != null) {
//            for (Map.Entry<String, String> entry : data.entrySet()) {
//                intent.putExtra(entry.getKey(), entry.getValue());
//            }
//        }
//        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
        return intent;
    }
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void createNotificationChannel(NotificationManager notificationManager) {
        NotificationChannel channel = new NotificationChannel(
                "fcm_channel",
                "FCM 消息",
                NotificationManager.IMPORTANCE_HIGH
        );
        channel.setDescription("Firebase Cloud Messaging 通知");
        // 启用角标
        channel.setShowBadge(true);
        notificationManager.createNotificationChannel(channel);
        BadgeUtils.setBadgeCount(_mActivity, 7);
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/me/MeFragment.java
@@ -17,6 +17,7 @@
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.databinding.FragmentMeBinding;
import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch;
import com.hdl.photovoltaic.enums.LogoutType;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.other.HdlAccountLogic;
import com.hdl.photovoltaic.other.HdlLogLogic;
@@ -169,10 +170,19 @@
     */
    private void initEvent() {
        viewBinding.exitTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HdlAccountLogic.getInstance().logout(LogoutType.NormalLogout);
            }
        });
        viewBinding.fragmentMeIconParentCl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (UserConfigManage.getInstance().isTourist_mode()) {
                    return;
                }
                if (UserConfigManage.getInstance().isBAccount()) {
                    Intent intent = new Intent();
                    intent.setClass(_mActivity, BPersonalDataActivity.class);
@@ -238,6 +248,11 @@
     * 初始化界面
     */
    private void initView() {
        if (UserConfigManage.getInstance().isTourist_mode()) {
            viewBinding.exitTv.setVisibility(View.VISIBLE);
        } else {
            viewBinding.exitTv.setVisibility(View.GONE);
        }
        //设备调试
        viewBinding.fragmentMeLineDeviceDebugIl.fragmentMeLineLeftIconIv.setImageResource(R.drawable.device_debug);
        viewBinding.fragmentMeLineDeviceDebugIl.fragmentMeLineTitleIv.setText(R.string.device_debugging);
@@ -266,7 +281,11 @@
        setMemberAccount(UserConfigManage.getInstance().getAccount());
//        setMemberHeadIcon(UserConfigManage.getInstance().getUserImageUrl());
        if (UserConfigManage.getInstance().isTourist_mode()) {
            viewBinding.fragmentMeUserNameNextIv.setVisibility(View.GONE);
        } else {
            viewBinding.fragmentMeUserNameNextIv.setVisibility(View.VISIBLE);
        }
    }
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
@@ -415,7 +434,6 @@
            }
        });
    }
}
app/src/main/java/com/hdl/photovoltaic/ui/me/SetActivity.java
@@ -153,6 +153,15 @@
            viewBinding.setNotificationSettingsIl.lineV.setVisibility(View.GONE);
        }
        if (UserConfigManage.getInstance().isTourist_mode()) {
            viewBinding.outTv.setVisibility(View.GONE);
            viewBinding.setAccountSecurityIl.parentCl.setVisibility(View.GONE);
            viewBinding.setAccountSecurityIl.lineV.setVisibility(View.GONE);
            viewBinding.setNotificationSettingsIl.parentCl.setVisibility(View.GONE);
            viewBinding.setNotificationSettingsIl.lineV.setVisibility(View.GONE);
            viewBinding.setContextSwitchIl.parentCl.setVisibility(View.GONE);
            viewBinding.setNotificationSettingsIl.lineV.setVisibility(View.GONE);
        }
    }
    @Override
app/src/main/java/com/hdl/photovoltaic/ui/me/languageSelectionActivity.java
@@ -20,6 +20,8 @@
import com.hdl.photovoltaic.other.HdlPushLogic;
import com.hdl.photovoltaic.other.HdlResidenceLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.ui.BPowerStationActivity;
import com.hdl.photovoltaic.ui.CPowerStationActivity;
import com.hdl.photovoltaic.ui.StartActivity;
import com.hdl.photovoltaic.ui.adapter.LanguageAdapter;
import com.hdl.photovoltaic.uni.HDLUniMPSDKManager;
@@ -135,15 +137,27 @@
                            @Override
                            public void run() {
                                hideLoading();
                                UserConfigManage.getInstance().setTouristModeJumpLogic(false);
                                UserConfigManage.getInstance().setCurrentAppLanguage(itemData.getLanguage());
                                UserConfigManage.getInstance().Save();
                                //配置接口请求语言
                                HDLLinkPMSdk.setLanguage(UserConfigManage.getInstance().getCurrentAppLanguage());
                                AppManagerUtils.getAppManager().finishAllActivity();
//                                if (UserConfigManage.getInstance().isTourist_mode()) {
//                                    Intent intent = new Intent();
//                                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
//                                    if (UserConfigManage.getInstance().isBAccount()) {
//                                        intent.setClass(HDLApp.getInstance(), BPowerStationActivity.class);
//                                    } else {
//                                        intent.setClass(HDLApp.getInstance(), CPowerStationActivity.class);
//                                    }
//                                    startActivity(intent);
//                                } else {
                                Intent intent = new Intent();
                                intent.setClass(HDLApp.getInstance(), StartActivity.class);
                                startActivity(intent);
//                                }
                                HdlPushLogic.getInstance().pushAdd(new CloudCallBeak<String>() {
                                    @Override
                                    public void onSuccess(String pushId) {
app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseAndDeviceFragment.java
@@ -32,6 +32,7 @@
import com.hdl.photovoltaic.enums.DebugType;
import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch;
import com.hdl.photovoltaic.enums.Languages;
import com.hdl.photovoltaic.enums.LogoutType;
import com.hdl.photovoltaic.enums.LowerTagType;
import com.hdl.photovoltaic.enums.PowerStationStatus;
import com.hdl.photovoltaic.enums.ProjectOperation;
@@ -41,6 +42,7 @@
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.listener.LinkCallBack;
import com.hdl.photovoltaic.listener.OnCallBeak;
import com.hdl.photovoltaic.other.HdlAccountLogic;
import com.hdl.photovoltaic.other.HdlCommonLogic;
import com.hdl.photovoltaic.other.HdlDeviceLogic;
import com.hdl.photovoltaic.other.HdlDialogLogic;
@@ -139,7 +141,12 @@
    }
    private void initEvent() {
        viewBinding.exitTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HdlAccountLogic.getInstance().logout(LogoutType.NormalLogout);
            }
        });
        //电站标签
        viewBinding.powerStationLabel.setOnClickListener(new View.OnClickListener() {
            @Override
@@ -574,6 +581,13 @@
    private void initView() {
        if (UserConfigManage.getInstance().isTourist_mode()) {
            viewBinding.addIv.setVisibility(View.GONE);
            viewBinding.exitTv.setVisibility(View.VISIBLE);
        } else {
            viewBinding.addIv.setVisibility(View.VISIBLE);
            viewBinding.exitTv.setVisibility(View.GONE);
        }
        viewBinding.powerStationLabelParent.setVisibility(View.VISIBLE);
        viewBinding.deviceLabelParent.setVisibility(View.GONE);
@@ -604,7 +618,11 @@
            viewBinding.powerStationLabel.setTextAppearance(R.style.Text18Style);
            viewBinding.deviceLabel.setTextAppearance(R.style.Text14Style);
//            viewBinding.editIv.setVisibility(View.VISIBLE);//编辑图标隐藏
            if (UserConfigManage.getInstance().isTourist_mode()) {
                viewBinding.addIv.setVisibility(View.GONE);//添加图标隐藏
            } else {
            viewBinding.addIv.setVisibility(View.VISIBLE);//添加图标隐藏
            }
            viewBinding.powerStationLabelParent.setVisibility(View.VISIBLE);//电站标签【父容器】显示
            viewBinding.deviceLabelParent.setVisibility(View.GONE);//设备标签【父容器】隐藏
            if (viewBinding.deviceNullDataIc.getRoot().getVisibility() == View.VISIBLE) {
@@ -614,7 +632,11 @@
            viewBinding.deviceLabel.setTextAppearance(R.style.Text18Style);
            viewBinding.powerStationLabel.setTextAppearance(R.style.Text14Style);
//            viewBinding.editIv.setVisibility(View.GONE);//编辑图标隐藏
            if (UserConfigManage.getInstance().isTourist_mode()) {
            viewBinding.addIv.setVisibility(View.GONE);//添加图标隐藏
            } else {
                viewBinding.addIv.setVisibility(View.GONE);//添加图标隐藏
            }
            viewBinding.powerStationLabelParent.setVisibility(View.GONE);//电站标签【父容器】隐藏
            viewBinding.deviceLabelParent.setVisibility(View.VISIBLE);//设备标签【父容器】显示
            if (viewBinding.homeNullDataIc.getRoot().getVisibility() == View.VISIBLE) {
app/src/main/java/com/hdl/photovoltaic/uni/MyForegroundService.java
@@ -1,18 +1,22 @@
package com.hdl.photovoltaic.uni;
import android.app.ActivityManager;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.IBinder;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import com.hdl.photovoltaic.R;
import java.util.List;
public class MyForegroundService extends Service {
@@ -29,21 +33,17 @@
        isRunning = true;
    }
//    @Override
//    public void onTaskRemoved(Intent rootIntent) {
//        super.onTaskRemoved(rootIntent);
//        isRunning = false;
    /// /        // 停止前台状态,移除通知
    /// /        stopForeground(true);  // true表示移除通知
    /// ///        // 停止服务
    /// ///        stopSelf();
//        // 1. 先移除前台状态(可选,但建议)
//        stopForeground(true);
//
//        // 2. 停止服务
//        stopSelf();
//    }
    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        // 当应用从最近任务中移除时调用
        stopForeground(true);
        stopSelf();
        killAppProcess(this);
//        // 3. 结束进程
//        android.os.Process.killProcess(android.os.Process.myPid());
//        System.exit(0);
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // 创建通知
@@ -88,10 +88,41 @@
    public void onDestroy() {
        super.onDestroy();
        isRunning = false;
        // 清理资源
        stopForeground(true);
    }
    public static boolean isServiceRunning() {
        return isRunning;
    }
    /**
     * 关掉app所有进程
     *
     * @param context 上下文
     */
    private void killAppProcess(Context context) {
//        AppManagerUtils.getAppManager().finishAllActivity();
//        Log.d("===6666666","");
        try {
            android.app.ActivityManager manager = (android.app.ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningAppProcessInfo> processInfos = manager.getRunningAppProcesses();
            // 先杀掉相关进程,最后再杀掉主进程
            for (android.app.ActivityManager.RunningAppProcessInfo runningAppProcessInfo : processInfos) {
                if ((runningAppProcessInfo.uid == android.os.Process.myUid()) && (runningAppProcessInfo.pid != android.os.Process.myPid())) {
                    try {
                        android.os.Process.killProcess(runningAppProcessInfo.pid);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            android.os.Process.killProcess(android.os.Process.myPid());
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.exit(0);
    }
}
app/src/main/res/layout/activity_home_login.xml
@@ -56,7 +56,17 @@
                    android:layout_marginStart="@dimen/dp_4"
                    android:src="@drawable/language_pull_down" />
            </LinearLayout>
            <TextView
                android:id="@+id/home_login_tourist_tv"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/dp_20"
                android:layout_marginEnd="@dimen/dp_16"
                android:layout_marginTop="@dimen/dp_60"
                android:text="@string/tourist_mode"
                android:textColor="@color/text_38C494"
                android:textSize="@dimen/text_14"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>
            <!--    <TextView-->
            <!--        android:id="@+id/home_login_language_tv"-->
            <!--        android:layout_width="wrap_content"-->
app/src/main/res/layout/fragment_home_page.xml
@@ -35,6 +35,18 @@
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:src="@drawable/add" />
        <TextView
            android:id="@+id/exit_tv"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/dp_20"
            android:text="@string/exit"
            android:textColor="@color/text_38C494"
            android:textSize="@dimen/text_14"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:visibility="gone"
            />
    </RelativeLayout>
    <com.hdl.photovoltaic.widget.refreshlayout.BGARefreshLayout
app/src/main/res/layout/fragment_house_list.xml
@@ -50,7 +50,17 @@
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:src="@drawable/add" />
        <TextView
            android:id="@+id/exit_tv"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/dp_20"
            android:text="@string/exit"
            android:textColor="@color/text_38C494"
            android:textSize="@dimen/text_14"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:visibility="gone"
            />
    </RelativeLayout>
    <!--电站标签-->
app/src/main/res/layout/fragment_me.xml
@@ -34,12 +34,22 @@
                    android:layout_centerInParent="true"
                    android:text="@string/me"
                    android:textColor="@color/text_FFACACAC"
                    android:textSize="@dimen/text_18" />
                <TextView
                    android:id="@+id/exit_tv"
                    android:layout_width="wrap_content"
                    android:layout_height="@dimen/dp_20"
                    android:text="@string/exit"
                    android:textColor="@color/text_38C494"
                    android:textSize="@dimen/text_14"
                    android:layout_centerInParent="true"
                    android:layout_alignParentEnd="true"
                  />
            </RelativeLayout>
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/fragment_me_icon_parent_cl"
                android:layout_width="match_parent"
app/src/main/res/values-ar/strings.xml
@@ -374,4 +374,6 @@
    <string name="re_commissioning_power_station">تم إعادة تشغيل محطة الطاقة الجديدة من طراز APP</string>
    <string name="notification_settings">إعدادات الإشعارات</string>
    <string name="host_process_service_channel">ممر خدمة عملية المضيف</string>
    <string name="tourist_mode">وضع السياح</string>
    <string name="exit">الانسحاب</string>
</resources>
app/src/main/res/values-en/strings.xml
@@ -376,4 +376,7 @@
    <string name="re_commissioning_power_station">The Xenterra app initiates the re-commissioning of the power station</string>
    <string name="notification_settings">Notification settings</string>
    <string name="host_process_service_channel">Host process service channel</string>
    <string name="tourist_mode">Tourist mode</string>
    <string name="exit">Exit</string>
</resources>
app/src/main/res/values-zh/strings.xml
@@ -372,4 +372,6 @@
    <string name="re_commissioning_power_station">新特锐能app发起电站重新调试</string>
    <string name="notification_settings">通知设置</string>
    <string name="host_process_service_channel">宿主进程服务通道</string>
    <string name="tourist_mode">游客模式</string>
    <string name="exit">退出</string>
</resources>
app/src/main/res/values/strings.xml
@@ -376,4 +376,6 @@
    <string name="re_commissioning_power_station">The Xenterra app initiates the re-commissioning of the power station</string>
    <string name="notification_settings">Notification settings</string>
    <string name="host_process_service_channel">Host process service channel</string>
    <string name="tourist_mode">Tourist mode</string>
    <string name="exit">Exit</string>
</resources>
build.gradle
@@ -3,7 +3,7 @@
buildscript {
    ext {
        agp_version = '4.1.3'
        agp_version = '8.7.3'
    }
    repositories {
        google()
@@ -23,7 +23,7 @@
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        //增加AGC插件配置,以便能同步“agconnect-services.json”文件中的信息.(华为极光推送)
        classpath 'com.huawei.agconnect:agcp:1.6.1.300'
        classpath 'com.huawei.agconnect:agcp:1.9.1.300'
        classpath 'com.google.gms:google-services:4.3.15'  // Google Services 插件
    }
}
countrypicker/build.gradle
@@ -1,6 +1,7 @@
apply plugin: 'com.android.library'
android {
    namespace 'com.sahooz.library.countrypicker'
    compileSdkVersion 33
    defaultConfig {
@@ -26,7 +27,7 @@
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('androidx.test.espresso:espresso-core:3.1.0', {
    androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation 'androidx.appcompat:appcompat:1.2.0'
gradle.properties
@@ -21,4 +21,4 @@
android.nonTransitiveRClass=true
# 可以将v4,v7库转成Android X
android.enableJetifier=true
android.bundle.enableUncompressedNativeLibs=false
#android.bundle.enableUncompressedNativeLibs=false
gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Wed Mar 19 11:08:39 CST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
pickerview/build.gradle
@@ -4,6 +4,7 @@
android {
    namespace 'com.bigkoo.pickerview'
    compileSdkVersion 33
    defaultConfig {
sdk/build.gradle
@@ -3,6 +3,7 @@
}
android {
    namespace 'com.hdl.sdk.link'
    compileSdkVersion 33
    defaultConfig {
@@ -26,7 +27,9 @@
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildFeatures {
        buildConfig = true
    }
    /**
     * 打包自动命名
     */
@@ -63,7 +66,7 @@
    publishing {
        publications {
            plugin(MavenPublication) {
                from components.release
                from components.findByName('release')
                groupId 'com.hdl.android'
                version "$android.defaultConfig.versionName"
                artifactId = 'debugsdk'
third-zxing/build.gradle
@@ -2,6 +2,7 @@
android {
    namespace 'com.zxing'
    compileSdkVersion 33
    buildToolsVersion "29.0.1"
wheelview/build.gradle
@@ -4,6 +4,7 @@
android {
    namespace 'com.contrarywind.view'
    compileSdkVersion 33
    defaultConfig {