130 lines
5.7 KiB
Java
130 lines
5.7 KiB
Java
package com.xscm.moduleutil.utils;
|
||
|
||
import android.Manifest;
|
||
import android.graphics.Color;
|
||
import android.text.Spannable;
|
||
import android.text.SpannableStringBuilder;
|
||
import android.text.TextUtils;
|
||
import android.text.style.AbsoluteSizeSpan;
|
||
import android.text.style.ForegroundColorSpan;
|
||
import android.view.View;
|
||
import android.view.ViewGroup;
|
||
import android.widget.RelativeLayout;
|
||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||
import androidx.constraintlayout.widget.ConstraintSet;
|
||
import androidx.core.content.ContextCompat;
|
||
import androidx.fragment.app.Fragment;
|
||
import com.luck.picture.lib.interfaces.OnPermissionDescriptionListener;
|
||
import com.luck.picture.lib.permissions.PermissionConfig;
|
||
import com.luck.picture.lib.utils.DensityUtil;
|
||
import com.luck.picture.lib.widget.MediumBoldTextView;
|
||
|
||
/**
|
||
* com.xscm.moduleutil.utils
|
||
* qx
|
||
* 2025/10/30
|
||
*/
|
||
// PermissionDescriptionHelper.java
|
||
public class PermissionDescriptionHelper {
|
||
private static final String TAG_EXPLAIN_VIEW = "TAG_EXPLAIN_VIEW";
|
||
|
||
public static class PermissionDescriptionListener implements OnPermissionDescriptionListener {
|
||
@Override
|
||
public void onPermissionDescription(Fragment fragment, String[] permissionArray) {
|
||
View rootView = fragment.requireView();
|
||
if (rootView instanceof ViewGroup) {
|
||
addPermissionDescription(false, (ViewGroup) rootView, permissionArray);
|
||
}
|
||
}
|
||
|
||
@Override
|
||
public void onDismiss(Fragment fragment) {
|
||
removePermissionDescription((ViewGroup) fragment.requireView());
|
||
}
|
||
}
|
||
|
||
public static OnPermissionDescriptionListener createListener() {
|
||
return new PermissionDescriptionListener();
|
||
}
|
||
|
||
public static void addPermissionDescription(boolean isHasSimpleXCamera, ViewGroup viewGroup, String[] permissionArray) {
|
||
int dp10 = DensityUtil.dip2px(viewGroup.getContext(), 10);
|
||
int dp15 = DensityUtil.dip2px(viewGroup.getContext(), 15);
|
||
MediumBoldTextView view = new MediumBoldTextView(viewGroup.getContext());
|
||
view.setTag(TAG_EXPLAIN_VIEW);
|
||
view.setTextSize(14);
|
||
view.setTextColor(Color.parseColor("#333333"));
|
||
view.setPadding(dp10, dp15, dp10, dp15);
|
||
view.setBackgroundColor(Color.WHITE); // 添加背景色确保可见
|
||
|
||
String title;
|
||
String explain;
|
||
|
||
if (TextUtils.equals(permissionArray[0], PermissionConfig.CAMERA[0])) {
|
||
title = "相机权限使用说明";
|
||
explain = "相机权限使用说明\n用户app用于拍照/录视频";
|
||
} else if (TextUtils.equals(permissionArray[0], Manifest.permission.RECORD_AUDIO)) {
|
||
if (isHasSimpleXCamera) {
|
||
title = "麦克风权限使用说明";
|
||
explain = "麦克风权限使用说明\n用户app用于录视频时采集声音";
|
||
} else {
|
||
title = "录音权限使用说明";
|
||
explain = "录音权限使用说明\n用户app用于采集声音";
|
||
}
|
||
}else if (TextUtils.equals(permissionArray[0], Manifest.permission.ACCESS_FINE_LOCATION)){
|
||
title = "定位权限";
|
||
explain = "定位权限使用说明\n用户app获取当前位置,方便更好的推荐附近玩乐";
|
||
}
|
||
else {
|
||
title = "存储权限使用说明";
|
||
explain = "存储权限使用说明\n用户app写入/下载/保存/读取/修改/删除图片、视频、文件等信息";
|
||
}
|
||
int startIndex = 0;
|
||
int endOf = startIndex + title.length();
|
||
SpannableStringBuilder builder = new SpannableStringBuilder(explain);
|
||
builder.setSpan(new AbsoluteSizeSpan(DensityUtil.dip2px(viewGroup.getContext(), 16)), startIndex, endOf, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
|
||
builder.setSpan(new ForegroundColorSpan(0xFF333333), startIndex, endOf, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
|
||
view.setText(builder);
|
||
view.setBackground(ContextCompat.getDrawable(viewGroup.getContext(), com.xscm.moduleutil.R.drawable.ps_demo_permission_desc_bg));
|
||
|
||
// 确保视图可见
|
||
view.setVisibility(View.VISIBLE);
|
||
view.setZ(9999); // 提高Z轴确保在最上层
|
||
|
||
if (isHasSimpleXCamera) {
|
||
RelativeLayout.LayoutParams layoutParams =
|
||
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
|
||
layoutParams.topMargin = DensityUtil.getStatusBarHeight(viewGroup.getContext());
|
||
layoutParams.leftMargin = dp10;
|
||
layoutParams.rightMargin = dp10;
|
||
viewGroup.addView(view, layoutParams);
|
||
} else {
|
||
ConstraintLayout.LayoutParams layoutParams =
|
||
new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
|
||
// 修改约束设置,确保视图位置正确
|
||
layoutParams.topToTop = ConstraintSet.PARENT_ID;
|
||
layoutParams.leftToLeft = ConstraintSet.PARENT_ID;
|
||
layoutParams.rightToRight = ConstraintSet.PARENT_ID;
|
||
layoutParams.leftMargin = dp10;
|
||
layoutParams.rightMargin = dp10;
|
||
layoutParams.topMargin = DensityUtil.dip2px(viewGroup.getContext(), 50);
|
||
viewGroup.addView(view, layoutParams);
|
||
}
|
||
|
||
// 强制刷新布局
|
||
viewGroup.requestLayout();
|
||
viewGroup.postInvalidate();
|
||
}
|
||
|
||
public static void removePermissionDescription(ViewGroup viewGroup) {
|
||
if (viewGroup != null) {
|
||
View tagExplainView = viewGroup.findViewWithTag(TAG_EXPLAIN_VIEW);
|
||
if (tagExplainView != null) {
|
||
viewGroup.removeView(tagExplainView);
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|