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