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" /> +<!-- <!–Android13 鐓х墖–>--> +<!-- <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />--> +<!-- <!–Android13 瑙嗛–>--> +<!-- <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