From a231e3aee7881a679243df42ecdd4f4c04adfe87 Mon Sep 17 00:00:00 2001
From: wjc <1243177876@qq.com>
Date: 星期五, 10 一月 2025 10:10:48 +0800
Subject: [PATCH] 2025年01月10日10:10:45

---
 app/src/main/res/values/strings.xml                                            |    2 
 app/src/main/res/values/themes.xml                                             |   17 +++
 app/src/main/java/com/hdl/photovoltaic/ui/me/CPersonalDataActivity.java        |   28 ++--
 app/src/main/AndroidManifest.xml                                               |    8 
 app/src/main/java/com/hdl/photovoltaic/widget/PermissionExplanationDialog.java |   82 ++++++++++++++++
 app/src/main/res/layout/dialog_permission_explanation.xml                      |   45 +++++++++
 gradle.properties                                                              |    3 
 app/src/main/res/drawable/oval_color_white_18.xml                              |   12 ++
 app/src/main/res/values-zh/strings.xml                                         |    2 
 wheelview/src/androidTest/java/test/wheelview/ExampleInstrumentedTest.java     |   46 ++++----
 pickerview/src/androidTest/java/com/bigkoo/pickerview/ApplicationTest.java     |   20 ++--
 app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java              |    8 +
 app/src/main/res/values-en/strings.xml                                         |    2 
 app/src/main/java/com/hdl/photovoltaic/ui/newC/PowerStationsListEdit.java      |    6 +
 app/build.gradle                                                               |    2 
 15 files changed, 228 insertions(+), 55 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 6b03070..d1417a0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -90,7 +90,7 @@
      */
     android.applicationVariants.configureEach { variant ->
         variant.outputs.configureEach {
-            outputFileName = "photovoltaic_v${versionName}_${generateTime()}_${getEnvironmentVersion(2)}.apk"
+            outputFileName = "photovoltaic_v${versionName}_${generateTime()}_${getEnvironmentVersion(4)}.apk"
         }
     }
 
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2653181..0d0a0ca 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,10 +8,10 @@
         tools:ignore="ProtectedPermissions" />
 
 
-    <!--Android13 鐓х墖-->
-    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
-    <!--Android13 瑙嗛-->
-    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
+<!--    &lt;!&ndash;Android13 鐓х墖&ndash;&gt;-->
+<!--    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />-->
+<!--    &lt;!&ndash;Android13 瑙嗛&ndash;&gt;-->
+<!--    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />-->
     <!--Android13 闊抽-->
     <!--    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />-->
     <uses-permission android:name="android.permission.VIBRATE" />
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/me/CPersonalDataActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/me/CPersonalDataActivity.java
index f0e1da1..8148fc5 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/me/CPersonalDataActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/me/CPersonalDataActivity.java
@@ -114,29 +114,29 @@
                 //Manifest.permission.WRITE_EXTERNAL_STORAGE 璇诲啓璁惧涓婄殑鐓х墖浠ュ強鏂囦欢
                 //generalPermission.launch(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE});
                 //Android 13浠ヤ笂鐢ㄥ埆鐨勬潈闄�
-                if (Build.VERSION.SDK_INT >= 33) {
-                    PermissionUtils.requestPermissionsResultCallback(_mActivity, Manifest.permission.READ_MEDIA_IMAGES, new PermissionUtils.PermissionState() {
-                        @Override
-                        public void Success(int value) {
-                            if (value == PermissionUtils.STATUS_REFUSE_PERMANENT) {
-//                            HdlThreadLogic.toast(_mActivity, R.string.permission_open);
-                                return;
-                            }
-                            changedUserAvatar();
-                        }
-                    }, true);
-                } else {
+//                if (Build.VERSION.SDK_INT >= 33) {
+//                    PermissionUtils.requestPermissionsResultCallback(_mActivity, Manifest.permission.READ_MEDIA_IMAGES, new PermissionUtils.PermissionState() {
+//                        @Override
+//                        public void Success(int value) {
+//                            if (value == PermissionUtils.STATUS_REFUSE_PERMANENT) {
+////                            HdlThreadLogic.toast(_mActivity, R.string.permission_open);
+//                                return;
+//                            }
+//                            changedUserAvatar();
+//                        }
+//                    }, true);
+//                } else {
                     PermissionUtils.requestPermissionsResultCallback(_mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE, new PermissionUtils.PermissionState() {
                         @Override
                         public void Success(int value) {
-                            if (value == PermissionUtils.STATUS_REFUSE_PERMANENT) {
+                            if (value == PermissionUtils.STATUS_REFUSE_PERMANENT | value == PermissionUtils.STATUS_REFUSE) {
 //                            HdlThreadLogic.toast(_mActivity, R.string.permission_open);
                                 return;
                             }
                             changedUserAvatar();
                         }
                     }, true);
-                }
+//                }
             }
         });
 
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/newC/PowerStationsListEdit.java b/app/src/main/java/com/hdl/photovoltaic/ui/newC/PowerStationsListEdit.java
index 9548f9a..a042b29 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/newC/PowerStationsListEdit.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/newC/PowerStationsListEdit.java
@@ -31,6 +31,7 @@
 import com.hdl.photovoltaic.utils.LocalManageUtil;
 import com.hdl.photovoltaic.utils.PermissionUtils;
 import com.hdl.photovoltaic.widget.ConfirmationCancelDialog;
+import com.hdl.photovoltaic.widget.PermissionExplanationDialog;
 import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus;
 
 import org.greenrobot.eventbus.Subscribe;
@@ -123,10 +124,13 @@
         viewBinding.addPowerStationTv.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
+                // 鏈巿鏉� 濡傛灉搴旂敤绋嬪簭娌℃湁鎵�闇�鐨勬潈闄愶紝鍒欐樉绀鸿В閲婅鏄�
+                PermissionExplanationDialog.getInstance().showPortConflictPdDialog(_mActivity, getString(R.string.camera_storage_instructions), getString(R.string.camera_storage_purpose));
                 PermissionUtils.requestPermissionsResultCallback(_mActivity, Manifest.permission.CAMERA, new PermissionUtils.PermissionState() {
                     @Override
                     public void Success(int value) {
-                        if (value == PermissionUtils.STATUS_REFUSE_PERMANENT) {
+                        PermissionExplanationDialog.getInstance().dismiss();
+                        if (value == PermissionUtils.STATUS_REFUSE_PERMANENT | value == PermissionUtils.STATUS_REFUSE) {
 //                            HdlThreadLogic.toast(_mActivity, R.string.permission_open);
                             return;
                         }
diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java b/app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java
index 2aa33c7..c492c84 100644
--- a/app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java
+++ b/app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java
@@ -139,12 +139,15 @@
                     public void onGranted(List<String> permissions, boolean all) {
                         SharedPreUtils.putBoolean(permission, true);
                         if (permissionStateCallback != null) {
-                            permissionStateCallback.Success(STATUS_REFUSE);
+                            permissionStateCallback.Success(STATUS_SUCCESS);
                         }
                     }
 
                     @Override
                     public void onDenied(List<String> permissions, boolean never) {
+                        if (permissionStateCallback != null) {
+                            permissionStateCallback.Success(STATUS_REFUSE);
+                        }
                         if (is_skip) {
                             SharedPreUtils.putBoolean(permission, true);
                         }
@@ -155,6 +158,9 @@
 //                if (permissionStateCallback != null) {
 //                    permissionStateCallback.Success(STATUS_REFUSE_PERMANENT);
 //                }
+                if (permissionStateCallback != null) {
+                    permissionStateCallback.Success(STATUS_REFUSE_PERMANENT);
+                }
                 if (is_skip) {
                     HdlDialogLogic.getInstance().showSettingPermissionDialog(activity);
                 }
diff --git a/app/src/main/java/com/hdl/photovoltaic/widget/PermissionExplanationDialog.java b/app/src/main/java/com/hdl/photovoltaic/widget/PermissionExplanationDialog.java
new file mode 100644
index 0000000..1e2d723
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/widget/PermissionExplanationDialog.java
@@ -0,0 +1,82 @@
+package com.hdl.photovoltaic.widget;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.view.Display;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+import com.hdl.photovoltaic.R;
+import com.hdl.photovoltaic.other.HdlCommonLogic;
+import com.hdl.photovoltaic.utils.UnitConversionUtils;
+
+import java.util.Objects;
+
+
+public class PermissionExplanationDialog {
+
+    private Dialog portConflictPd;
+    private volatile static PermissionExplanationDialog mInstance;
+
+    public PermissionExplanationDialog() {
+    }
+
+    public static PermissionExplanationDialog getInstance() {
+        if (mInstance == null) {
+            synchronized (PermissionExplanationDialog.class) {
+                if (mInstance == null) {
+                    mInstance = new PermissionExplanationDialog();
+                }
+            }
+        }
+        return mInstance;
+    }
+
+    public void showPortConflictPdDialog(Context context, String description, String purpose) {
+
+        if (portConflictPd != null) {
+            try {
+                portConflictPd.show();
+            } catch (Exception e) {
+
+            }
+        } else {
+            Dialog dialog = new Dialog(context, R.style.video_dialog);
+            View view = LayoutInflater.from(context).inflate(R.layout.dialog_permission_explanation, null);
+            dialog.setContentView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
+
+            WindowManager windowManager = Objects.requireNonNull(dialog.getWindow()).getWindowManager();
+            Display display = windowManager.getDefaultDisplay();
+            WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
+            lp.width = (int) (display.getWidth() * 0.9); //璁剧疆瀹藉害
+            dialog.getWindow().setGravity(Gravity.TOP);
+            lp.y = (int) UnitConversionUtils.dpToPx(context, 44);
+
+            dialog.getWindow().setAttributes(lp);
+
+            TextView tvDescription = view.findViewById(R.id.tv_description);
+            tvDescription.setText(description);
+
+            TextView tvPurpose = view.findViewById(R.id.tv_purpose);
+            tvPurpose.setText(purpose);
+
+            portConflictPd = dialog;
+            portConflictPd.show();
+        }
+    }
+
+    public void dismiss() {
+        try {
+            if (portConflictPd != null) {
+                portConflictPd.dismiss();
+                portConflictPd = null;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/app/src/main/res/drawable/oval_color_white_18.xml b/app/src/main/res/drawable/oval_color_white_18.xml
new file mode 100644
index 0000000..93e0af7
--- /dev/null
+++ b/app/src/main/res/drawable/oval_color_white_18.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape>
+            <solid android:color="@color/white" />
+            <corners android:topLeftRadius="18dp"
+                android:topRightRadius="18dp"
+                android:bottomLeftRadius="18dp"
+                android:bottomRightRadius="18dp"/>
+        </shape>
+    </item>
+</selector>
diff --git a/app/src/main/res/layout/dialog_permission_explanation.xml b/app/src/main/res/layout/dialog_permission_explanation.xml
new file mode 100644
index 0000000..923daeb
--- /dev/null
+++ b/app/src/main/res/layout/dialog_permission_explanation.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+
+    <RelativeLayout
+        android:layout_width="343dp"
+        android:layout_height="wrap_content"
+        android:layout_centerHorizontal="true"
+        android:background="@drawable/oval_color_white_18">
+
+        <TextView
+            android:id="@+id/tv_description"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/dp_16"
+            android:layout_marginTop="@dimen/dp_20"
+            android:text="111111"
+            android:textColor="#0A0A0A"
+            android:textSize="16sp"
+            android:textStyle="bold" />
+
+        <TextView
+            android:id="@+id/tv_purpose"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/tv_description"
+            android:layout_marginStart="@dimen/dp_16"
+            android:layout_marginTop="@dimen/dp_12"
+            android:text="222222"
+            android:textColor="#0A0A0A"
+            android:textSize="16sp" />
+
+        <View
+            android:id="@+id/view_split"
+            android:layout_width="match_parent"
+            android:layout_height="0.5dp"
+            android:layout_below="@id/tv_purpose"
+            android:layout_marginTop="@dimen/dp_20" />
+
+    </RelativeLayout>
+
+</RelativeLayout>
\ 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 06edb12..11f5982 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -333,5 +333,7 @@
     <string name="radio">Radio</string>
     <string name="min">Min</string>
     <string name="max">Max</string>
+    <string name="camera_storage_instructions">Camera and Storage Permission Usage Instructions:</string>
+    <string name="camera_storage_purpose">Used for scanning codes, taking photos, uploading pictures from albums, reading and writing photos on devices, and other scenarios</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 c9fc7f7..c181ef0 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -330,6 +330,8 @@
     <string name="radio">姣旂巼</string>
     <string name="min">鏈�灏忓��</string>
     <string name="max">鏈�澶у��</string>
+    <string name="camera_storage_instructions">鐩告満銆佸瓨鍌ㄦ潈闄愪娇鐢ㄨ鏄庯細</string>
+    <string name="camera_storage_purpose">鐢ㄤ簬鎵爜銆佹媿鐓с�佷粠鐩稿唽涓婁紶鍥剧墖銆佽鍐欒澶囦笂鐨勭収鐗囩瓑鍦烘櫙</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 237adaf..541c951 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -330,6 +330,8 @@
     <string name="radio">姣旂巼</string>
     <string name="min">鏈�灏忓��</string>
     <string name="max">鏈�澶у��</string>
+    <string name="camera_storage_instructions">鐩告満銆佸瓨鍌ㄦ潈闄愪娇鐢ㄨ鏄庯細</string>
+    <string name="camera_storage_purpose">鐢ㄤ簬鎵爜銆佹媿鐓с�佷粠鐩稿唽涓婁紶鍥剧墖銆佽鍐欒澶囦笂鐨勭収鐗囩瓑鍦烘櫙</string>
 
 
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 4c093a9..2ca9755 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -81,4 +81,21 @@
         <item name="android:windowFullscreen">true</item>
     </style>
 
+    <style name="video_dialog" parent="@android:style/Theme.Dialog">
+        <!-- 鑳屾櫙棰滆壊鍙婂拰閫忔槑绋嬪害 -->
+        <item name="android:windowBackground">@color/transparent</item>
+        <!-- 鏄惁鍘婚櫎鏍囬 -->
+        <item name="android:windowNoTitle">true</item>
+        <!-- 鏄惁鍘婚櫎杈规 -->
+        <item name="android:windowFrame">@null</item>
+        <!-- 鏄惁娴幇鍦╝ctivity涔嬩笂 -->
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowIsTranslucent">true</item>
+        <!-- 鏄惁寮�鍚崐閫忔槑鐨勮儗鏅� -->
+        <item name="android:backgroundDimEnabled">true</item>
+        <!-- 鍗婇�忔槑鐨勮儗鏅殑閫忔槑搴� -->
+        <item name="android:backgroundDimAmount">0.6</item>
+        <item name="android:background">@color/transparent</item>
+    </style>
+
 </resources>
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index 98aeb05..d7154ba 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -20,4 +20,5 @@
 # thereby reducing the size of the R class for that library
 android.nonTransitiveRClass=true
 # 鍙互灏唙4,v7搴撹浆鎴怉ndroid X
-android.enableJetifier=true
\ No newline at end of file
+android.enableJetifier=true
+android.bundle.enableUncompressedNativeLibs=false
\ No newline at end of file
diff --git a/pickerview/src/androidTest/java/com/bigkoo/pickerview/ApplicationTest.java b/pickerview/src/androidTest/java/com/bigkoo/pickerview/ApplicationTest.java
index e820eb1..84067f5 100644
--- a/pickerview/src/androidTest/java/com/bigkoo/pickerview/ApplicationTest.java
+++ b/pickerview/src/androidTest/java/com/bigkoo/pickerview/ApplicationTest.java
@@ -1,13 +1,13 @@
 package com.bigkoo.pickerview;
 
 import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
- */
-public class ApplicationTest extends ApplicationTestCase<Application> {
-    public ApplicationTest() {
-        super(Application.class);
-    }
-}
\ No newline at end of file
+//import android.test.ApplicationTestCase;
+//
+///**
+// * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
+// */
+//public class ApplicationTest extends ApplicationTestCase<Application> {
+//    public ApplicationTest() {
+//        super(Application.class);
+//    }
+//}
\ No newline at end of file
diff --git a/wheelview/src/androidTest/java/test/wheelview/ExampleInstrumentedTest.java b/wheelview/src/androidTest/java/test/wheelview/ExampleInstrumentedTest.java
index b5aa002..8cbab30 100644
--- a/wheelview/src/androidTest/java/test/wheelview/ExampleInstrumentedTest.java
+++ b/wheelview/src/androidTest/java/test/wheelview/ExampleInstrumentedTest.java
@@ -1,26 +1,26 @@
 package test.wheelview;
 
 import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.*;
-
-/**
- * Instrumentation test, which will execute on an Android device.
- *
- * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
-    @Test
-    public void useAppContext() throws Exception {
-        // Context of the app under test.
-        Context appContext = InstrumentationRegistry.getTargetContext();
-
-        assertEquals("test.wheelview.test", appContext.getPackageName());
-    }
-}
+//import android.support.test.InstrumentationRegistry;
+//import android.support.test.runner.AndroidJUnit4;
+//
+//import org.junit.Test;
+//import org.junit.runner.RunWith;
+//
+//import static org.junit.Assert.*;
+//
+///**
+// * Instrumentation test, which will execute on an Android device.
+// *
+// * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+// */
+//@RunWith(AndroidJUnit4.class)
+//public class ExampleInstrumentedTest {
+//    @Test
+//    public void useAppContext() throws Exception {
+//        // Context of the app under test.
+//        Context appContext = InstrumentationRegistry.getTargetContext();
+//
+//        assertEquals("test.wheelview.test", appContext.getPackageName());
+//    }
+//}

--
Gitblit v1.8.0