diff --git a/app/src/common/res/drawable/bg_f6f7f9_8_radius.xml b/app/src/common/res/drawable/bg_f6f7f9_8_radius.xml new file mode 100644 index 000000000..0b35519c6 --- /dev/null +++ b/app/src/common/res/drawable/bg_f6f7f9_8_radius.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e2a46b13b..84f5438db 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1233,6 +1233,14 @@ android:name=".avroom.firstcharge.FirstChargeDialog" android:theme="@style/dialogactivity" /> + + + + \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt new file mode 100644 index 000000000..ade432cde --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt @@ -0,0 +1,87 @@ +package com.yizhuan.erban.ui.setting + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseActivity +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.ui.setting.bean.PermissionEntity +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.erban.ui.widget.DividerItemDecoration +import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil +import com.yizhuan.erban.utils.PermissionUtil +import kotlin.collections.ArrayList + +class GrantedPermissionsActivity : BaseActivity() { + private var recyclerView: RecyclerView? = null + + companion object { + fun start(context: Context) { + val intent = Intent(context, GrantedPermissionsActivity::class.java) + context.startActivity(intent) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_granted_permissions) + initTitleBar("系统权限管理") + initView() + val permissionList = getPermissions() + val rvDelegate = RVDelegate.Builder() + .setLayoutManager(LinearLayoutManager(this, LinearLayoutManager.VERTICAL,false)) + .setRecyclerView(recyclerView) + .setEmptyView(EmptyViewHelper.createEmptyView(this, "未有已授权的系统权限")) + .setAdapter(PermissionAdapter()) + .build() + rvDelegate.setNewData(permissionList) + } + + private fun initView() { + recyclerView = findViewById(R.id.recycler_view) + recyclerView?.addItemDecoration( + DividerItemDecoration( + this, LinearLayoutManager.VERTICAL, + UIUtil.dip2px(this, 16.toDouble()), + R.color.transparent + ) + ) + } + + fun jumpToSystemSetting(view: View) { + PermissionUtil.instance.jumpToSetting(this) + } + + private fun getPermissions(): MutableList { + val permissionList = ArrayList() + PermissionUtil.instance.getGrantedPermissions(this)?.forEach { + PermissionEntity.fetchPermission(it) + ?.let { permission -> + if (!permissionList.contains(permission)) permissionList.add( + permission + ) + } + } + return permissionList + } + + class PermissionAdapter : + BaseQuickAdapter(R.layout.item_permission_granted) { + override fun convert(helper: BaseViewHolder, item: PermissionEntity?) { + item?.let { + helper.getView(R.id.tv_name)?.text = it.alias + helper.getView(R.id.tv_desc)?.text = it.description + helper.getView(R.id.icon)?.setImageResource(it.icon) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/PermissionGuideActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/setting/PermissionGuideActivity.kt new file mode 100644 index 000000000..149e998ac --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/PermissionGuideActivity.kt @@ -0,0 +1,38 @@ +package com.yizhuan.erban.ui.setting + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.view.View +import androidx.databinding.DataBindingUtil +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseActivity +import com.yizhuan.erban.databinding.ActivityPermissionGuideBinding +import com.yizhuan.erban.ui.webview.CommonWebViewActivity + +class PermissionGuideActivity : BaseActivity(), View.OnClickListener { + + companion object { + fun start(context: Context) { + val intent = Intent(context, PermissionGuideActivity::class.java) + context.startActivity(intent) + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val settingBinding: ActivityPermissionGuideBinding = + DataBindingUtil.setContentView(this, R.layout.activity_permission_guide) + settingBinding.click = this + initTitleBar("个人信息与权限") + } + + override fun onClick(v: View?) { + when (v?.id) { + R.id.tv_system_permission -> GrantedPermissionsActivity.start(this) + //R.id.tv_privacy_guide -> CommonWebViewActivity.start() + // R.id.tv_sdk_permission -> CommonWebViewActivity.start() + // R.id.tv_device_permission -> CommonWebViewActivity.start() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/SettingActivity.java b/app/src/main/java/com/yizhuan/erban/ui/setting/SettingActivity.java index 592d09426..77bbaa869 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/setting/SettingActivity.java +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/SettingActivity.java @@ -228,6 +228,9 @@ public class SettingActivity extends BaseActivity implements View.OnClickListene case R.id.tv_notice_setting: NoticeSettingActivity.start(context); break; + case R.id.rly_permission: + PermissionGuideActivity.Companion.start(context); + break; } } diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt b/app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt new file mode 100644 index 000000000..f95c75dcc --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt @@ -0,0 +1,61 @@ +package com.yizhuan.erban.ui.setting.bean + +import android.Manifest +import com.yizhuan.erban.R +import com.yizhuan.xchat_android_core.utils.TextUtils + +enum class PermissionEntity( + val alias: String, + val description: String, + var icon: Int = R.drawable.icon_permission_common, + val permissionName: Array +) { + + + PHONE( + "电话", + "读取通话状态、移动网络信息和设备信息", + R.drawable.icon_permission_phone, + arrayOf(Manifest.permission.READ_PHONE_STATE) + ), + LOCATOIN( + "位置", + "访问大致位置(通过网络定位)", + R.drawable.icon_permission_location, + arrayOf( + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + ) + + ), + MICROPHONE( + "录音", + "录制音频", + R.drawable.icon_permission_mic, + arrayOf(Manifest.permission.RECORD_AUDIO) + ), + CAMERA( + "相机", + "拍摄相片或录制视频", + R.drawable.icon_permission_camera, + arrayOf(Manifest.permission.CAMERA) + ), + STORAGE( + "存储", "读取手机存储,修改/删除手机储存", R.drawable.icon_permission_storage, + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + ); + + companion object { + fun fetchPermission(name: String): PermissionEntity? { + if (TextUtils.isEmptyText(name)) return null + + values().forEach { + if (it.permissionName.contains(name)) return it + } + return null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/utils/sys/PermissionUtil.kt b/app/src/main/java/com/yizhuan/erban/ui/utils/sys/PermissionUtil.kt new file mode 100644 index 000000000..e6540a2f2 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/utils/sys/PermissionUtil.kt @@ -0,0 +1,4 @@ +package com.yizhuan.erban.ui.utils.sys + +class PermissionUtil { +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/utils/PermissionUtil.kt b/app/src/main/java/com/yizhuan/erban/utils/PermissionUtil.kt new file mode 100644 index 000000000..a3d272df1 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/utils/PermissionUtil.kt @@ -0,0 +1,117 @@ +package com.yizhuan.erban.utils + +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Build +import com.microquation.linkedme.android.v4.ContextCompatLKMe +import com.yizhuan.erban.BuildConfig +import java.lang.Exception + +class PermissionUtil { + companion object { + val instance = PermissionUtil() + } + + fun getGrantedPermissions(context: Context): List? { + val packageInfo = context.packageManager.getPackageInfo( + context.packageName, + PackageManager.GET_PERMISSIONS, + ) + val permissions = packageInfo.requestedPermissions + val list = permissions?.filter { str -> str.startsWith("android.permission") } + return if (Build.VERSION.SDK_INT < 23) { + list + } else { + list?.filter { + ContextCompatLKMe.checkSelfPermission( + context, + it + ) == PackageManager.PERMISSION_GRANTED + } + } + } + + fun jumpToSetting(context: Context) { + when (Build.BRAND?.toLowerCase()) { + "redmi", "xiaomi" -> toXiaomiPermission(context) + "huawei", "honor" -> toHuaWeiPermission(context) + "meizu" -> toMeizuPermission(context) + else -> toCommonPermission(context) + } + } + + private fun toHuaWeiPermission(context: Context) { + try { + val intent = Intent() + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + val comp = ComponentName( + "com.huawei.systemmanager", + "com.huawei.permissionmanager.ui.MainActivity" + )//华为权限管理 + intent.component = comp + context.startActivity(intent) + } catch (e: Exception) { + e.printStackTrace() + toCommonPermission(context) + } + } + + private fun toXiaomiPermission(context: Context) { + try { // MIUI 8 + val localIntent = Intent("miui.intent.action.APP_PERM_EDITOR") + localIntent.setClassName( + "com.miui.securitycenter", + "com.miui.permcenter.permissions.PermissionsEditorActivity" + ) + localIntent.putExtra("extra_pkgname", context.packageName) + context.startActivity(localIntent) + } catch (e: Exception) { + try { // MIUI 5/6/7 + val localIntent = Intent("miui.intent.action.APP_PERM_EDITOR") + localIntent.setClassName( + "com.miui.securitycenter", + "com.miui.permcenter.permissions.AppPermissionsEditorActivity" + ) + localIntent.putExtra("extra_pkgname", context.packageName) + context.startActivity(localIntent) + } catch (e1: Exception) { // 否则跳转到应用详情 + toCommonPermission(context) + } + } + } + + private fun toMeizuPermission(context: Context) { + try { + val intent = Intent("com.meizu.safe.security.SHOW_APPSEC") + intent.addCategory(Intent.CATEGORY_DEFAULT) + intent.putExtra("packageName", BuildConfig.APPLICATION_ID) + context.startActivity(intent) + } catch (e: Exception) { + e.printStackTrace() + toCommonPermission(context) + } + } + + private fun toCommonPermission(context: Context) { + val localIntent = Intent() + localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + if (Build.VERSION.SDK_INT >= 9) { + localIntent.action = "android.settings.APPLICATION_DETAILS_SETTINGS" + localIntent.data = Uri.fromParts("package", context.packageName, null) + } else if (Build.VERSION.SDK_INT <= 8) { + localIntent.action = Intent.ACTION_VIEW + localIntent.setClassName( + "com.android.settings", + "com.android.settings.InstalledAppDetails" + ) + localIntent.putExtra( + "com.android.settings.ApplicationPkgName", + context.packageName + ) + } + context.startActivity(localIntent) + } +} diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_camera.png b/app/src/main/res/drawable-xhdpi/icon_permission_camera.png new file mode 100644 index 000000000..c2b2ca66e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_camera.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_common.png b/app/src/main/res/drawable-xhdpi/icon_permission_common.png new file mode 100644 index 000000000..ec9bf72e3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_common.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_location.png b/app/src/main/res/drawable-xhdpi/icon_permission_location.png new file mode 100644 index 000000000..0152ce2e3 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_location.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_mic.png b/app/src/main/res/drawable-xhdpi/icon_permission_mic.png new file mode 100644 index 000000000..b4fd8cf1d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_mic.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_phone.png b/app/src/main/res/drawable-xhdpi/icon_permission_phone.png new file mode 100644 index 000000000..42a318473 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_phone.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_permission_storage.png b/app/src/main/res/drawable-xhdpi/icon_permission_storage.png new file mode 100644 index 000000000..9ed02161f Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_permission_storage.png differ diff --git a/app/src/main/res/layout/activity_granted_permissions.xml b/app/src/main/res/layout/activity_granted_permissions.xml new file mode 100644 index 000000000..c0aec88c8 --- /dev/null +++ b/app/src/main/res/layout/activity_granted_permissions.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_permission_guide.xml b/app/src/main/res/layout/activity_permission_guide.xml new file mode 100644 index 000000000..89b92486f --- /dev/null +++ b/app/src/main/res/layout/activity_permission_guide.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 73195f981..215b5aeac 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -308,6 +308,37 @@ android:textColor="@color/text_title_white" android:textSize="14sp" /> + + + + + + + + + + + + + + + + + + + \ 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 5cac81f04..8322ca311 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -683,6 +683,7 @@ 关于&app_name; 检查版本 实验室 + 个人信息与权限 退出当前账号 清除缓存 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 0a8a4ba93..8a6eda7d8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -546,4 +546,19 @@ @anim/anim_message_tip_out + + diff --git a/nim_uikit/res/values/colors.xml b/nim_uikit/res/values/colors.xml index 68409c0bc..8035150c8 100644 --- a/nim_uikit/res/values/colors.xml +++ b/nim_uikit/res/values/colors.xml @@ -61,6 +61,7 @@ #ff333333 + #0A333333 #ff666666 #ff999999 #bfc2c5