wjc
2025-01-10 a231e3aee7881a679243df42ecdd4f4c04adfe87
2025年01月10日10:10:45
3个文件已添加
12个文件已修改
283 ■■■■ 已修改文件
app/build.gradle 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/me/CPersonalDataActivity.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/newC/PowerStationsListEdit.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/utils/PermissionUtils.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/widget/PermissionExplanationDialog.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/oval_color_white_18.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/dialog_permission_explanation.xml 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values-en/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values-zh/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/themes.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gradle.properties 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pickerview/src/androidTest/java/com/bigkoo/pickerview/ApplicationTest.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wheelview/src/androidTest/java/test/wheelview/ExampleInstrumentedTest.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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"
        }
    }
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" />
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);
                }
//                }
            }
        });
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;
                        }
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);
                }
app/src/main/java/com/hdl/photovoltaic/widget/PermissionExplanationDialog.java
New file
@@ -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();
        }
    }
}
app/src/main/res/drawable/oval_color_white_18.xml
New file
@@ -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>
app/src/main/res/layout/dialog_permission_explanation.xml
New file
@@ -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>
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>
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>
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>
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>
        <!-- 是否浮现在activity之上 -->
        <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>
gradle.properties
@@ -20,4 +20,5 @@
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
# 可以将v4,v7库转成Android X
android.enableJetifier=true
android.enableJetifier=true
android.bundle.enableUncompressedNativeLibs=false
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);
    }
}
//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);
//    }
//}
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());
//    }
//}