From e478c9c2020966a3c1e755638ec4c343f0041f1a Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 15 Jan 2024 11:58:22 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E9=92=88=E5=AF=B9=E5=8D=8E?= =?UTF-8?q?=E4=B8=BA=E5=B8=82=E5=9C=BA=E5=AE=A1=E6=A0=B8=20=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E6=9D=83=E9=99=90=E7=94=B3=E8=AF=B7=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/common/permission/PermissionHelper.kt | 34 ++++++++++----- .../app/qiyukefu/RequestPermissionEvent.kt | 15 +++++-- .../app/skill/activity/AddSkillActivity.kt | 20 ++++++++- .../app/ui/im/fragment/MessageFragment.java | 16 +++++--- app/src/main/res/values/strings.xml | 1 + .../publish/view/PublishActivity.java | 2 +- .../app/music/activity/MusicListActivity.java | 41 ++++++++++++++++++- 7 files changed, 104 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/nnbc123/app/common/permission/PermissionHelper.kt b/app/src/main/java/com/nnbc123/app/common/permission/PermissionHelper.kt index 86b4cf58c..159e55593 100644 --- a/app/src/main/java/com/nnbc123/app/common/permission/PermissionHelper.kt +++ b/app/src/main/java/com/nnbc123/app/common/permission/PermissionHelper.kt @@ -1,5 +1,8 @@ package com.nnbc123.app.common.permission +import android.content.Context +import android.content.pm.PackageManager +import androidx.core.content.ContextCompat import com.tbruyelle.rxpermissions2.RxPermissions /** @@ -8,19 +11,28 @@ import com.tbruyelle.rxpermissions2.RxPermissions **/ object PermissionHelper { + fun isGranted(context: Context, permission: String): Boolean { + return ContextCompat.checkSelfPermission( + context, + permission + ) == PackageManager.PERMISSION_GRANTED + } + /** * 检查权限是否都授权 */ - fun isAllGender(rxPermissions: RxPermissions, vararg perms: String?): Boolean { - if (perms.firstOrNull { - if (it == null) { - false - } else { - !rxPermissions.isGranted(it) - } - } != null) { - return false - } - return true + fun isAllGranted(context: Context, vararg permissions: String): Boolean { + return permissions.firstOrNull { + !isGranted(context, it) + } == null + } + + /** + * 检查权限是否都授权 + */ + fun isAllGranted(rxPermissions: RxPermissions, vararg perms: String): Boolean { + return perms.firstOrNull { + !rxPermissions.isGranted(it) + } == null } } \ No newline at end of file diff --git a/app/src/main/java/com/nnbc123/app/qiyukefu/RequestPermissionEvent.kt b/app/src/main/java/com/nnbc123/app/qiyukefu/RequestPermissionEvent.kt index 7ecfcd125..fb268c0ec 100644 --- a/app/src/main/java/com/nnbc123/app/qiyukefu/RequestPermissionEvent.kt +++ b/app/src/main/java/com/nnbc123/app/qiyukefu/RequestPermissionEvent.kt @@ -36,7 +36,7 @@ class RequestPermissionEvent : UnicornEventBase { && perms != null ) { val rxPermissions = RxPermissions(activity) - if (PermissionHelper.isAllGender(rxPermissions, * perms)) { + if (PermissionHelper.isAllGranted(rxPermissions, * perms)) { p2?.onNotPorcessEvent() } else { RequestPermissionPromptDialog(p1, tips).show() @@ -81,14 +81,23 @@ class RequestPermissionEvent : UnicornEventBase { return ResUtil.getString(R.string.permission_denied_tips_mic) } + RequestPermissionEventEntry.SCENES_TAKE_VIDEO -> { + return StringBuffer().append("1.") + .append(ResUtil.getString(R.string.permission_denied_tips_camera)) + .append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_mic)) + .toString() + } + + RequestPermissionEventEntry.SCENES_TAKE_PHOTO -> { + return ResUtil.getString(R.string.permission_denied_tips_camera) + } + RequestPermissionEventEntry.SCENES_SELECT_MEDIA, - RequestPermissionEventEntry.SCENES_TAKE_VIDEO, RequestPermissionEventEntry.SCENES_SAVE_IMAGE, RequestPermissionEventEntry.SCENES_SAVE_VIDEO, RequestPermissionEventEntry.SCENES_SELECT_VIDEO, RequestPermissionEventEntry.SCENES_SELECT_FILE, RequestPermissionEventEntry.SCENES_SELECT_IMAGE, - RequestPermissionEventEntry.SCENES_TAKE_PHOTO, RequestPermissionEventEntry.SCENES_VIDEO_CHAT -> { return ResUtil.getString(R.string.permission_denied_tips_image) } diff --git a/app/src/main/java/com/nnbc123/app/skill/activity/AddSkillActivity.kt b/app/src/main/java/com/nnbc123/app/skill/activity/AddSkillActivity.kt index 20753d815..4b62902ac 100644 --- a/app/src/main/java/com/nnbc123/app/skill/activity/AddSkillActivity.kt +++ b/app/src/main/java/com/nnbc123/app/skill/activity/AddSkillActivity.kt @@ -8,12 +8,15 @@ import android.view.View import com.netease.nim.uikit.StatusBarUtil import com.nnbc123.app.R import com.nnbc123.app.base.BaseBindingActivity +import com.nnbc123.app.common.permission.PermissionHelper import com.nnbc123.app.databinding.ActivitySkillEditBinding -import com.nnbc123.core.skill.entity.SkillPropertyEntity import com.nnbc123.app.skill.repository.SkillDataManager import com.nnbc123.app.skill.repository.SkillModel import com.nnbc123.app.skill.widget.CARD_TYPE_AUDIO +import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog +import com.nnbc123.core.skill.entity.SkillPropertyEntity import com.nnbc123.library.annatation.ActLayoutRes +import com.nnbc123.library.utils.ResUtil @ActLayoutRes(R.layout.activity_skill_edit) class AddSkillActivity : BaseBindingActivity() { @@ -79,11 +82,24 @@ class AddSkillActivity : BaseBindingActivity() { @SuppressLint("CheckResult") private fun checkPermissionAndDeal(it: SkillPropertyEntity) { - checkPermission( + val tips = StringBuffer().append("1.") + .append(ResUtil.getString(R.string.permission_denied_tips_mic)) + .append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_image)) + .toString() + val params = arrayOf( Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE ) + if (RequestPermissionPromptDialog.isNeedPrompt() && !PermissionHelper.isAllGranted( + rxPermissions, + *params + ) + ) { + RequestPermissionPromptDialog(this, tips).show() + } + checkPermission(*params) .subscribe { aBoolean: Boolean -> + RequestPermissionPromptDialog.dismissCurrentDialog() if (aBoolean) { setSkillViewData(it) } else { diff --git a/app/src/main/java/com/nnbc123/app/ui/im/fragment/MessageFragment.java b/app/src/main/java/com/nnbc123/app/ui/im/fragment/MessageFragment.java index 6069243ba..b52070983 100644 --- a/app/src/main/java/com/nnbc123/app/ui/im/fragment/MessageFragment.java +++ b/app/src/main/java/com/nnbc123/app/ui/im/fragment/MessageFragment.java @@ -327,7 +327,7 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi private void requestPermission(Consumer consumer, String tips, String... perms) { Context context = getContext(); if (context != null && RequestPermissionPromptDialog.Companion.isNeedPrompt() - && !PermissionHelper.INSTANCE.isAllGender(rxPermissions, perms)) { + && !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, perms)) { new RequestPermissionPromptDialog(context, tips).show(); } Disposable disposable = rxPermissions.request(perms).subscribe(aBoolean -> { @@ -625,12 +625,16 @@ public class MessageFragment extends TFragment implements ModuleProxy, MessageLi @Subscribe(threadMode = ThreadMode.MAIN) @SuppressLint("CheckResult") public void onNimAudioChatEvent(NimAudioChatEvent event) { - String[] perms = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.RECORD_AUDIO}; - String tips = ResUtil.getString(R.string.permission_denied_tips_mic); + String[] perms = new String[]{ + Manifest.permission.RECORD_AUDIO, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE}; + StringBuffer sb = new StringBuffer(); + sb.append("1.").append(ResUtil.getString(R.string.permission_denied_tips_mic)) + .append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_image)); + String tips = sb.toString(); if (RequestPermissionPromptDialog.Companion.isNeedPrompt() - && !PermissionHelper.INSTANCE.isAllGender(rxPermissions, perms)) { + && !PermissionHelper.INSTANCE.isAllGranted(rxPermissions, perms)) { new RequestPermissionPromptDialog(requireContext(), tips).show(); } checkPermission(perms) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b405e0d44..170c9f4b6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -989,4 +989,5 @@ %d钻/局 为了实现连麦及语音输入等功能,请您允许应用向您获取“麦克风”权限 访问你的本地内容,以能正常使用图片上传、视频发送等应用功能 + 用于拍摄更新个人头像、发布动态、与客服反馈问题时进行照片和视频的拍摄录制 diff --git a/app/src/module_community/java/com/nnbc123/app/community/publish/view/PublishActivity.java b/app/src/module_community/java/com/nnbc123/app/community/publish/view/PublishActivity.java index 5c085d2ea..ca1eec5de 100644 --- a/app/src/module_community/java/com/nnbc123/app/community/publish/view/PublishActivity.java +++ b/app/src/module_community/java/com/nnbc123/app/community/publish/view/PublishActivity.java @@ -201,7 +201,7 @@ public class PublishActivity extends BaseMvpActivity { diff --git a/app/src/module_music/java/com/nnbc123/app/music/activity/MusicListActivity.java b/app/src/module_music/java/com/nnbc123/app/music/activity/MusicListActivity.java index aea99b356..03fd3fe91 100644 --- a/app/src/module_music/java/com/nnbc123/app/music/activity/MusicListActivity.java +++ b/app/src/module_music/java/com/nnbc123/app/music/activity/MusicListActivity.java @@ -4,11 +4,13 @@ import android.Manifest; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; +import android.provider.Settings; import android.view.View; import android.widget.ImageView; @@ -16,10 +18,13 @@ import com.flyco.tablayout.SlidingTabLayout; import com.netease.nim.uikit.StatusBarUtil; import com.nnbc123.app.R; import com.nnbc123.app.base.BaseMvpActivity; +import com.nnbc123.app.common.permission.PermissionHelper; import com.nnbc123.app.public_chat_hall.adapter.PagerDataAdapter; import com.nnbc123.app.music.fragment.LocalMusicListFragment; import com.nnbc123.app.music.fragment.ShareMusicListFragment; import com.nnbc123.app.music.presenter.MusicListPresenter; +import com.nnbc123.app.ui.widget.dialog.CommonTipDialog; +import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog; import com.nnbc123.core.auth.event.KickOutEvent; import com.nnbc123.core.music.db.bean.LocalMusicBean; import com.nnbc123.core.statistic.StatisticManager; @@ -27,6 +32,7 @@ import com.nnbc123.core.statistic.protocol.StatisticsProtocol; import com.nnbc123.library.base.factory.CreatePresenter; import com.nnbc123.core.music.event.JumpToShareMusicListFragmentEvent; import com.nnbc123.core.music.view.IMusicListView; +import com.nnbc123.library.utils.ResUtil; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -95,15 +101,46 @@ public class MusicListActivity extends BaseMvpActivity { + RequestPermissionPromptDialog.Companion.dismissCurrentDialog(); if (!aBoolean) { - toast("请给予应用存储权限,以正常播放音乐。"); + showPermissionDeniedDialog(tips); } }); } + private void showPermissionDeniedDialog(String tips) { + CommonTipDialog mPrivacyDialog = new CommonTipDialog(context); + mPrivacyDialog.setTipMsg(tips); + mPrivacyDialog.setOkText("去设置"); + mPrivacyDialog.setOnActionListener( + new CommonTipDialog.OnActionListener() { + @Override + public void onOk() { + //同意跳到应用详情页面 + Uri packageUri = Uri.parse("package:" + getPackageName()); + Intent intent = new Intent( + Settings.ACTION_APPLICATION_DETAILS_SETTINGS, + packageUri + ); + startActivityForResult( + intent, 0 + ); + } + } + ); + mPrivacyDialog.show(); + } + @Override protected void onDestroy() { super.onDestroy();