From c1fda856a93c384e2a02be7d40eb7d1a86b83bce Mon Sep 17 00:00:00 2001 From: wendong Date: Wed, 17 Jan 2024 17:32:19 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E5=AE=89?= =?UTF-8?q?=E5=8D=9314=E4=B8=8A=E5=AA=92=E4=BD=93=E9=87=8D=E9=80=89?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=88=E6=A0=B9=E6=8D=AE=E8=B0=B7=E6=AD=8C?= =?UTF-8?q?=E5=AE=98=E6=96=B9=E6=8E=A8=E8=8D=90=E5=86=99=E6=B3=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../picture/lib/PictureSelectorFragment.java | 64 ++++++--- .../lib/permissions/PermissionChecker.java | 15 ++- .../lib/widget/MediaReselectionTipView.java | 124 ++++++++++++++++++ .../main/res/layout/ps_fragment_selector.xml | 16 ++- .../layout/ps_media_reselection_tip_view.xml | 44 +++++++ .../src/main/res/values-ar-rAE/strings.xml | 2 + .../src/main/res/values-cs-rCZ/string.xml | 2 + .../src/main/res/values-de-rDE/strings.xml | 2 + .../src/main/res/values-en-rUS/string.xml | 2 + .../src/main/res/values-es-rES/strings.xml | 2 + .../src/main/res/values-fr-rFR/strings.xml | 2 + .../src/main/res/values-ja-rJP/strings.xml | 2 + .../src/main/res/values-kk-rKZ/string.xml | 2 + .../src/main/res/values-ko-rKR/strings.xml | 2 + .../src/main/res/values-pt-rPT/strings.xml | 2 + .../src/main/res/values-ru-rRU/strings.xml | 2 + .../src/main/res/values-vi-rVN/string.xml | 2 + .../src/main/res/values-zh-rCN/strings.xml | 2 + .../src/main/res/values-zh-rTW/strings.xml | 2 + selector/src/main/res/values/strings.xml | 2 + 20 files changed, 272 insertions(+), 21 deletions(-) create mode 100644 selector/src/main/java/com/luck/picture/lib/widget/MediaReselectionTipView.java create mode 100644 selector/src/main/res/layout/ps_media_reselection_tip_view.xml diff --git a/selector/src/main/java/com/luck/picture/lib/PictureSelectorFragment.java b/selector/src/main/java/com/luck/picture/lib/PictureSelectorFragment.java index d5fd540b6..52b1924d4 100644 --- a/selector/src/main/java/com/luck/picture/lib/PictureSelectorFragment.java +++ b/selector/src/main/java/com/luck/picture/lib/PictureSelectorFragment.java @@ -65,6 +65,7 @@ import com.luck.picture.lib.utils.ValueOf; import com.luck.picture.lib.widget.BottomNavBar; import com.luck.picture.lib.widget.CompleteSelectView; +import com.luck.picture.lib.widget.MediaReselectionTipView; import com.luck.picture.lib.widget.RecyclerPreloadView; import com.luck.picture.lib.widget.SlideSelectTouchListener; import com.luck.picture.lib.widget.SlideSelectionHandler; @@ -92,6 +93,7 @@ public class PictureSelectorFragment extends PictureCommonFragment private RecyclerPreloadView mRecycler; private TextView tvDataEmpty; private TitleBar titleBar; + private MediaReselectionTipView mediaReselectionTipView; private BottomNavBar bottomNarBar; private CompleteSelectView completeSelectView; private TextView tvCurrentDataTime; @@ -240,11 +242,13 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat tvDataEmpty = view.findViewById(R.id.tv_data_empty); completeSelectView = view.findViewById(R.id.ps_complete_select); titleBar = view.findViewById(R.id.title_bar); + mediaReselectionTipView = view.findViewById(R.id.media_reselection_tip_view); bottomNarBar = view.findViewById(R.id.bottom_nar_bar); tvCurrentDataTime = view.findViewById(R.id.tv_current_data_time); onCreateLoader(); initAlbumListPopWindow(); initTitleBar(); + initMediaReselectionTipView(false); initComplete(); initRecycler(view); initBottomNavBar(); @@ -388,7 +392,7 @@ public void onDismissPopupWindow() { addAlbumPopWindowAction(); } - private void recoverSaveInstanceData(){ + private void recoverSaveInstanceData() { mAdapter.setDisplayCamera(isDisplayCamera); setEnterAnimationDuration(0); if (selectorConfig.isOnlySandboxDir) { @@ -428,24 +432,50 @@ private void requestLoadData() { mAdapter.setDisplayCamera(isDisplayCamera); if (PermissionChecker.isCheckReadStorage(selectorConfig.chooseMode, getContext())) { beginLoadData(); + } else if (PermissionChecker.isCheckUserSelected(selectorConfig.chooseMode, getContext())) { + //权限未授予,但是授予了 READ_MEDIA_VISUAL_USER_SELECTED 权限 + //正常加载数据,同时提示用户再次选择要展示在图库的照片 + initMediaReselectionTipView(true); + beginLoadData(); } else { - String[] readPermissionArray = PermissionConfig.getReadPermissionArray(getAppContext(), selectorConfig.chooseMode); - onPermissionExplainEvent(true, readPermissionArray); - if (selectorConfig.onPermissionsEventListener != null) { - onApplyPermissionsEvent(PermissionEvent.EVENT_SOURCE_DATA, readPermissionArray); - } else { - PermissionChecker.getInstance().requestPermissions(this, readPermissionArray, new PermissionResultCallback() { - @Override - public void onGranted() { - beginLoadData(); - } + requestPermissionsAndLoadData(); + } + } - @Override - public void onDenied() { - handlePermissionDenied(readPermissionArray); + private void initMediaReselectionTipView(Boolean showTip) { + if (showTip) { + mediaReselectionTipView.setVisibility(View.VISIBLE); + mediaReselectionTipView.setMediaReselectionTipViewStyle(); + mediaReselectionTipView.setOnMediaReselectionListener( + new MediaReselectionTipView.OnMediaReselectionListener() { + @Override + public void onManageClick() { + requestPermissionsAndLoadData(); + } } - }); - } + ); + } else { + mediaReselectionTipView.setVisibility(View.GONE); + } + } + + private void requestPermissionsAndLoadData() { + String[] readPermissionArray = PermissionConfig.getReadPermissionArray(getAppContext(), selectorConfig.chooseMode); + onPermissionExplainEvent(true, readPermissionArray); + if (selectorConfig.onPermissionsEventListener != null) { + onApplyPermissionsEvent(PermissionEvent.EVENT_SOURCE_DATA, readPermissionArray); + } else { + PermissionChecker.getInstance().requestPermissions(this, readPermissionArray, new PermissionResultCallback() { + @Override + public void onGranted() { + beginLoadData(); + } + + @Override + public void onDenied() { + handlePermissionDenied(readPermissionArray); + } + }); } } @@ -481,7 +511,7 @@ private void beginLoadData() { @Override public void handlePermissionSettingResult(String[] permissions) { - if (permissions == null){ + if (permissions == null) { return; } onPermissionExplainEvent(false, null); diff --git a/selector/src/main/java/com/luck/picture/lib/permissions/PermissionChecker.java b/selector/src/main/java/com/luck/picture/lib/permissions/PermissionChecker.java index db22a2aa6..e32e8bd6b 100644 --- a/selector/src/main/java/com/luck/picture/lib/permissions/PermissionChecker.java +++ b/selector/src/main/java/com/luck/picture/lib/permissions/PermissionChecker.java @@ -91,7 +91,7 @@ private void requestPermissions(Fragment fragment, List permissionGrou } } - public void onRequestPermissionsResult(Context context,String[] permissions,int[] grantResults, PermissionResultCallback action) { + public void onRequestPermissionsResult(Context context, String[] permissions, int[] grantResults, PermissionResultCallback action) { Activity activity = (Activity) context; for (String permission : permissions) { boolean should = ActivityCompat.shouldShowRequestPermissionRationale(activity, permission); @@ -143,6 +143,19 @@ public static boolean isCheckReadStorage(int chooseMode, Context context) { } } + /** + * 检查 READ_MEDIA_VISUAL_USER_SELECTED 权限是否存在 + */ + public static boolean isCheckUserSelected(int chooseMode, Context context) { + if (SdkVersionUtils.isUPSIDE_DOWN_CAKE()) { + if (chooseMode != SelectMimeType.ofAudio()) { + return PermissionChecker.checkSelfPermission(context, + new String[]{PermissionConfig.READ_MEDIA_VISUAL_USER_SELECTED}); + } else return false; + } else { + return false; + } + } /** * 检查读取图片权限是否存在 diff --git a/selector/src/main/java/com/luck/picture/lib/widget/MediaReselectionTipView.java b/selector/src/main/java/com/luck/picture/lib/widget/MediaReselectionTipView.java new file mode 100644 index 000000000..ad07b2abe --- /dev/null +++ b/selector/src/main/java/com/luck/picture/lib/widget/MediaReselectionTipView.java @@ -0,0 +1,124 @@ +package com.luck.picture.lib.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.TextView; + +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.core.content.ContextCompat; + +import com.luck.picture.lib.R; +import com.luck.picture.lib.config.SelectorConfig; +import com.luck.picture.lib.config.SelectorProviders; +import com.luck.picture.lib.style.BottomNavBarStyle; +import com.luck.picture.lib.style.PictureSelectorStyle; +import com.luck.picture.lib.utils.StyleUtils; + +/** + * Created on 2024/1/17. + * + * @author wdeo3601@163.com + * @description 安卓34+,READ_MEDIA_VISUAL_USER_SELECTED 授权后,提示用户重选媒体 + */ +public class MediaReselectionTipView extends FrameLayout implements View.OnClickListener { + + protected TextView tvTip; + protected TextView tvManage; + protected SelectorConfig config; + protected ConstraintLayout mediaReselectionTipLayout; + + public TextView getTitleManageView() { + return tvManage; + } + + public MediaReselectionTipView(Context context) { + super(context); + init(); + } + + public MediaReselectionTipView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public MediaReselectionTipView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + protected void init() { + inflateLayout(); + setClickable(true); + setFocusable(true); + config = SelectorProviders.getInstance().getSelectorConfig(); + mediaReselectionTipLayout = findViewById(R.id.cl_media_reselection_tip); + tvTip = findViewById(R.id.ps_tv_title); + tvManage = findViewById(R.id.ps_tv_manage); + tvManage.setOnClickListener(this); + mediaReselectionTipLayout.setOnClickListener(this); + setBackgroundColor(ContextCompat.getColor(getContext(), R.color.ps_color_grey)); + handleLayoutUI(); + } + + protected void inflateLayout() { + LayoutInflater.from(getContext()).inflate(R.layout.ps_media_reselection_tip_view, this); + } + + protected void handleLayoutUI() { + + } + + public void setMediaReselectionTipViewStyle() { + PictureSelectorStyle selectorStyle = config.selectorStyle; + BottomNavBarStyle bottomBarStyle = selectorStyle.getBottomBarStyle(); + + int backgroundColor = bottomBarStyle.getBottomNarBarBackgroundColor(); + if (StyleUtils.checkStyleValidity(backgroundColor)) { + setBackgroundColor(backgroundColor); + } + + int previewNormalTextColor = bottomBarStyle.getBottomPreviewNormalTextColor(); + if (StyleUtils.checkSizeValidity(previewNormalTextColor)) { + tvTip.setTextColor(previewNormalTextColor); + } + + int previewSelectTextColor = bottomBarStyle.getBottomPreviewSelectTextColor(); + if (StyleUtils.checkStyleValidity(previewSelectTextColor)) { + tvManage.setTextColor(previewSelectTextColor); + } + int previewNormalTextSize = bottomBarStyle.getBottomPreviewNormalTextSize(); + if (StyleUtils.checkSizeValidity(previewNormalTextSize)) { + tvManage.setTextSize(previewNormalTextSize); + } + } + + @Override + public void onClick(View view) { + int id = view.getId(); + if (id == R.id.ps_tv_manage) { + if (mediaReselectionListener != null) { + mediaReselectionListener.onManageClick(); + } + } + } + + protected OnMediaReselectionListener mediaReselectionListener; + + /** + * 功能事件回调 + * + * @param listener + */ + public void setOnMediaReselectionListener(OnMediaReselectionListener listener) { + this.mediaReselectionListener = listener; + } + + public static class OnMediaReselectionListener { + public void onManageClick() { + + } + } +} diff --git a/selector/src/main/res/layout/ps_fragment_selector.xml b/selector/src/main/res/layout/ps_fragment_selector.xml index 641cb6e53..9217ff251 100644 --- a/selector/src/main/res/layout/ps_fragment_selector.xml +++ b/selector/src/main/res/layout/ps_fragment_selector.xml @@ -13,7 +13,7 @@ app:layout_constraintBottom_toTopOf="@+id/bottom_nar_bar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/title_bar" /> + app:layout_constraintTop_toBottomOf="@+id/media_reselection_tip_view" /> + app:layout_constraintTop_toBottomOf="@+id/media_reselection_tip_view" /> + + diff --git a/selector/src/main/res/layout/ps_media_reselection_tip_view.xml b/selector/src/main/res/layout/ps_media_reselection_tip_view.xml new file mode 100644 index 000000000..cbc5f07cc --- /dev/null +++ b/selector/src/main/res/layout/ps_media_reselection_tip_view.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/selector/src/main/res/values-ar-rAE/strings.xml b/selector/src/main/res/values-ar-rAE/strings.xml index f586dd4b4..f1932af93 100644 --- a/selector/src/main/res/values-ar-rAE/strings.xml +++ b/selector/src/main/res/values-ar-rAE/strings.xml @@ -75,4 +75,6 @@ ختيار الصوت أكبر من %1$d ثانية اختيار الصوت أقل من %1$d ثوان اختيار نوع غير معتمد +  إدارة  + لقد منحت حق الوصول إلى عدد محدد من الصور ومقاطع الفيديو. diff --git a/selector/src/main/res/values-cs-rCZ/string.xml b/selector/src/main/res/values-cs-rCZ/string.xml index 906de8931..5e001fb23 100644 --- a/selector/src/main/res/values-cs-rCZ/string.xml +++ b/selector/src/main/res/values-cs-rCZ/string.xml @@ -79,4 +79,6 @@ Vyberte zvuk delší než %1$d s Vyberte zvuk kratší než %1$d s Nepodporovaný typ výběru + Podávání + udělili jste přístup k vybranému počtu fotografií a videí. \ No newline at end of file diff --git a/selector/src/main/res/values-de-rDE/strings.xml b/selector/src/main/res/values-de-rDE/strings.xml index b3ae69903..020f86e63 100644 --- a/selector/src/main/res/values-de-rDE/strings.xml +++ b/selector/src/main/res/values-de-rDE/strings.xml @@ -75,4 +75,6 @@ Audio für mehr als %1$d Sekunden auswählen Audio für weniger als %1$d Sekunden auswählen Nicht unterstützter Auswahltyp + Verwaltung + Sie haben Zugriff auf eine ausgewählte Anzahl von Fotos und Videos gewährt. diff --git a/selector/src/main/res/values-en-rUS/string.xml b/selector/src/main/res/values-en-rUS/string.xml index 1e92ddb70..90b790034 100644 --- a/selector/src/main/res/values-en-rUS/string.xml +++ b/selector/src/main/res/values-en-rUS/string.xml @@ -78,4 +78,6 @@ Select audio for more than %1$d s Select audio for less than %1$d s Unsupported selection type + Manage + you\'ve given access to a select number of photos and videos. \ No newline at end of file diff --git a/selector/src/main/res/values-es-rES/strings.xml b/selector/src/main/res/values-es-rES/strings.xml index 0396a4a81..cabad9582 100644 --- a/selector/src/main/res/values-es-rES/strings.xml +++ b/selector/src/main/res/values-es-rES/strings.xml @@ -76,4 +76,6 @@ Seleccionar audio durante más de %1$d segundos Seleccionar audio durante menos de %1$d segundos Tipos de selección no soportados + administrar + le has dado acceso a un número selecto de fotos y videos. \ No newline at end of file diff --git a/selector/src/main/res/values-fr-rFR/strings.xml b/selector/src/main/res/values-fr-rFR/strings.xml index 4f9909ddf..9d2f37a4c 100644 --- a/selector/src/main/res/values-fr-rFR/strings.xml +++ b/selector/src/main/res/values-fr-rFR/strings.xml @@ -75,4 +75,6 @@ Sélectionnez audio plus de %1$d secondes Sélectionnez audio moins de %1$d secondes Type de sélection non pris en charge + Gestion + vous avez donné accès à un certain nombre de photos et de vidéos. diff --git a/selector/src/main/res/values-ja-rJP/strings.xml b/selector/src/main/res/values-ja-rJP/strings.xml index 0f996c499..29c295857 100644 --- a/selector/src/main/res/values-ja-rJP/strings.xml +++ b/selector/src/main/res/values-ja-rJP/strings.xml @@ -75,4 +75,6 @@ %1$d秒以上のオーディオを選択 %1$d秒未満のオーディオを選択 サポートされていない選択タイプ + 管理 + 選択した数の写真とビデオへのアクセスが許可されました。 diff --git a/selector/src/main/res/values-kk-rKZ/string.xml b/selector/src/main/res/values-kk-rKZ/string.xml index 5cfde9e93..a6a90dc7a 100644 --- a/selector/src/main/res/values-kk-rKZ/string.xml +++ b/selector/src/main/res/values-kk-rKZ/string.xml @@ -79,4 +79,6 @@ %1$d секундан артық аудионы таңдау %1$d секундан аз аудионы таңдау Таңдау типі қолдау көрсетілмейді + басқару + фотосуреттер мен бейнелердің таңдаулы санына рұқсат бердіңіз. \ No newline at end of file diff --git a/selector/src/main/res/values-ko-rKR/strings.xml b/selector/src/main/res/values-ko-rKR/strings.xml index 242f44d2e..bc9cb4299 100644 --- a/selector/src/main/res/values-ko-rKR/strings.xml +++ b/selector/src/main/res/values-ko-rKR/strings.xml @@ -75,4 +75,6 @@ %1$d초 이상의 음성파일을 선택해주세요. %1$d초 미만의 음성파일을 선택해주세요. 지원되지 않는 선택 유형입니다. + 관리하다 + 선택한 수의 사진과 비디오에 대한 액세스 권한을 부여했습니다. diff --git a/selector/src/main/res/values-pt-rPT/strings.xml b/selector/src/main/res/values-pt-rPT/strings.xml index 1ae3f308f..9997dacc9 100644 --- a/selector/src/main/res/values-pt-rPT/strings.xml +++ b/selector/src/main/res/values-pt-rPT/strings.xml @@ -76,4 +76,6 @@ Selecionar áudio por mais de %1$d segundos Selecionar áudio por menos de %1$d segundos Tipo de selecção não suportado + gerenciar + você deu acesso a um número selecionado de fotos e vídeos. diff --git a/selector/src/main/res/values-ru-rRU/strings.xml b/selector/src/main/res/values-ru-rRU/strings.xml index f28cea33f..a7950e04c 100644 --- a/selector/src/main/res/values-ru-rRU/strings.xml +++ b/selector/src/main/res/values-ru-rRU/strings.xml @@ -75,4 +75,6 @@ Выберите звук больше %1$d секунд Выберите звук меньше %1$d секунд не поддерживается тип выделения + управлять + вы предоставили доступ к определенному количеству фотографий и видео. diff --git a/selector/src/main/res/values-vi-rVN/string.xml b/selector/src/main/res/values-vi-rVN/string.xml index 08e1b248c..a9650574e 100644 --- a/selector/src/main/res/values-vi-rVN/string.xml +++ b/selector/src/main/res/values-vi-rVN/string.xml @@ -76,4 +76,6 @@ Chọn tiếng lớn hơn %1$d giây Chọn tiếng dưới %1$d giây Kiểu chọn không được sắp xếp + quản lý + bạn đã cấp quyền truy cập vào một số ảnh và video được chọn. \ No newline at end of file diff --git a/selector/src/main/res/values-zh-rCN/strings.xml b/selector/src/main/res/values-zh-rCN/strings.xml index 885762e03..36b15eacf 100644 --- a/selector/src/main/res/values-zh-rCN/strings.xml +++ b/selector/src/main/res/values-zh-rCN/strings.xml @@ -75,4 +75,6 @@ 选择音频大于%1$d秒 选择音频小于%1$d秒 不支持的选择类型 + 管理 + 您已授予对选定数量的照片和视频的访问权限。 diff --git a/selector/src/main/res/values-zh-rTW/strings.xml b/selector/src/main/res/values-zh-rTW/strings.xml index d185ef28d..21e2af149 100644 --- a/selector/src/main/res/values-zh-rTW/strings.xml +++ b/selector/src/main/res/values-zh-rTW/strings.xml @@ -75,4 +75,6 @@ 選擇錄音大於%1$d秒 選擇錄音小於%1$d秒 不支援的選擇類型 + 管理 + 您已授予對選定數量的照片和影片的存取權。 diff --git a/selector/src/main/res/values/strings.xml b/selector/src/main/res/values/strings.xml index 885762e03..2367cf536 100644 --- a/selector/src/main/res/values/strings.xml +++ b/selector/src/main/res/values/strings.xml @@ -75,4 +75,6 @@ 选择音频大于%1$d秒 选择音频小于%1$d秒 不支持的选择类型 + 您已授予对选定数量的照片和视频的访问权限。 + 管理 From f5b9b194fc095f6483f788af5d5bf58abd9288c6 Mon Sep 17 00:00:00 2001 From: wendong Date: Thu, 18 Jan 2024 10:59:46 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E7=9B=B8=E5=86=8C=E5=86=85=E9=83=A8?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E8=AF=B7=E6=B1=82=E6=9D=83=E9=99=90=EF=BC=8C?= =?UTF-8?q?=E6=8B=BF=E5=88=B0=E6=9D=83=E9=99=90=E7=BB=93=E6=9E=9C=E5=90=8E?= =?UTF-8?q?=E6=9C=AA=E5=AE=9E=E6=97=B6=E6=9B=B4=E6=96=B0=E5=AA=92=E4=BD=93?= =?UTF-8?q?=E9=87=8D=E9=80=89ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../picture/lib/PictureSelectorFragment.java | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/selector/src/main/java/com/luck/picture/lib/PictureSelectorFragment.java b/selector/src/main/java/com/luck/picture/lib/PictureSelectorFragment.java index 52b1924d4..b16e7c575 100644 --- a/selector/src/main/java/com/luck/picture/lib/PictureSelectorFragment.java +++ b/selector/src/main/java/com/luck/picture/lib/PictureSelectorFragment.java @@ -248,7 +248,6 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat onCreateLoader(); initAlbumListPopWindow(); initTitleBar(); - initMediaReselectionTipView(false); initComplete(); initRecycler(view); initBottomNavBar(); @@ -433,32 +432,14 @@ private void requestLoadData() { if (PermissionChecker.isCheckReadStorage(selectorConfig.chooseMode, getContext())) { beginLoadData(); } else if (PermissionChecker.isCheckUserSelected(selectorConfig.chooseMode, getContext())) { - //权限未授予,但是授予了 READ_MEDIA_VISUAL_USER_SELECTED 权限 - //正常加载数据,同时提示用户再次选择要展示在图库的照片 - initMediaReselectionTipView(true); + //媒体权限未授予,但是授予了 READ_MEDIA_VISUAL_USER_SELECTED 权限 + //正常加载数据 beginLoadData(); } else { requestPermissionsAndLoadData(); } } - private void initMediaReselectionTipView(Boolean showTip) { - if (showTip) { - mediaReselectionTipView.setVisibility(View.VISIBLE); - mediaReselectionTipView.setMediaReselectionTipViewStyle(); - mediaReselectionTipView.setOnMediaReselectionListener( - new MediaReselectionTipView.OnMediaReselectionListener() { - @Override - public void onManageClick() { - requestPermissionsAndLoadData(); - } - } - ); - } else { - mediaReselectionTipView.setVisibility(View.GONE); - } - } - private void requestPermissionsAndLoadData() { String[] readPermissionArray = PermissionConfig.getReadPermissionArray(getAppContext(), selectorConfig.chooseMode); onPermissionExplainEvent(true, readPermissionArray); @@ -501,6 +482,8 @@ public void onCall(String[] permissionArray, boolean isResult) { * 开始获取数据 */ private void beginLoadData() { + //加载数据同时,初始化媒体重选 View + initMediaReselectionTipView(); onPermissionExplainEvent(false, null); if (selectorConfig.isOnlySandboxDir) { loadOnlyInAppDirectoryAllMediaData(); @@ -509,6 +492,26 @@ private void beginLoadData() { } } + private void initMediaReselectionTipView() { + //未授予读写权限 且 授予 READ_MEDIA_VISUAL_USER_SELECTED 权限,需要显示媒体重选提示 + boolean shouldShowMediaReselectionTip = !PermissionChecker.isCheckReadStorage(selectorConfig.chooseMode, getContext()) + && PermissionChecker.isCheckUserSelected(selectorConfig.chooseMode, getContext()); + if (shouldShowMediaReselectionTip) { + mediaReselectionTipView.setVisibility(View.VISIBLE); + mediaReselectionTipView.setMediaReselectionTipViewStyle(); + mediaReselectionTipView.setOnMediaReselectionListener( + new MediaReselectionTipView.OnMediaReselectionListener() { + @Override + public void onManageClick() { + requestPermissionsAndLoadData(); + } + } + ); + } else { + mediaReselectionTipView.setVisibility(View.GONE); + } + } + @Override public void handlePermissionSettingResult(String[] permissions) { if (permissions == null) { From 8e1e508ffae5113029db5ec8a18155ae23e7ba8a Mon Sep 17 00:00:00 2001 From: wendong Date: Thu, 18 Jan 2024 15:08:16 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=20demo=20?= =?UTF-8?q?=E4=B8=AD=20=E2=80=9C=E6=B3=A8=E5=85=A5=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=B8=83=E5=B1=80=E2=80=9D=20=E7=9A=84=E5=AA=92?= =?UTF-8?q?=E4=BD=93=E9=87=8D=E9=80=89=20ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/layout/ps_custom_fragment_selector.xml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/ps_custom_fragment_selector.xml b/app/src/main/res/layout/ps_custom_fragment_selector.xml index ea43072d7..71b0ac4b3 100644 --- a/app/src/main/res/layout/ps_custom_fragment_selector.xml +++ b/app/src/main/res/layout/ps_custom_fragment_selector.xml @@ -15,7 +15,7 @@ app:layout_constraintBottom_toTopOf="@+id/bottom_nar_bar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/title_bar" /> + app:layout_constraintTop_toBottomOf="@+id/media_reselection_tip_view" /> + app:layout_constraintTop_toBottomOf="@+id/media_reselection_tip_view" /> + +