个人信息与权限

This commit is contained in:
yitao_hello
2021-12-17 11:02:31 +08:00
committed by zu
parent bdc90d0a0e
commit 429342051e
21 changed files with 601 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dp_8" />
<solid android:color="#F6F7F9" />
</shape>

View File

@@ -1233,6 +1233,14 @@
android:name=".avroom.firstcharge.FirstChargeDialog"
android:theme="@style/dialogactivity" />
<activity
android:name=".ui.setting.GrantedPermissionsActivity"
android:screenOrientation="portrait" />
<activity
android:name=".ui.setting.PermissionGuideActivity"
android:screenOrientation="portrait" />
</application>
</manifest>

View File

@@ -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<PermissionEntity>()
.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<PermissionEntity> {
val permissionList = ArrayList<PermissionEntity>()
PermissionUtil.instance.getGrantedPermissions(this)?.forEach {
PermissionEntity.fetchPermission(it)
?.let { permission ->
if (!permissionList.contains(permission)) permissionList.add(
permission
)
}
}
return permissionList
}
class PermissionAdapter :
BaseQuickAdapter<PermissionEntity, BaseViewHolder>(R.layout.item_permission_granted) {
override fun convert(helper: BaseViewHolder, item: PermissionEntity?) {
item?.let {
helper.getView<TextView>(R.id.tv_name)?.text = it.alias
helper.getView<TextView>(R.id.tv_desc)?.text = it.description
helper.getView<ImageView>(R.id.icon)?.setImageResource(it.icon)
}
}
}
}

View File

@@ -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()
}
}
}

View File

@@ -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;
}
}

View File

@@ -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<String>
) {
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
}
}
}

View File

@@ -0,0 +1,4 @@
package com.yizhuan.erban.ui.utils.sys
class PermissionUtil {
}

View File

@@ -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<String>? {
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)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 850 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<com.yizhuan.erban.base.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/color_transparent10_0A333333" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="@dimen/dp_16"
android:layout_weight="1"
android:overScrollMode="never" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="@dimen/dp_8"
android:layout_gravity="center_horizontal"
>
<View
android:layout_width="@dimen/dp_50"
android:layout_height="1dp"
android:layout_gravity="center_vertical"
android:background="@color/color_grey_999999"
/>
<TextView
android:layout_marginLeft="@dimen/dp_8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="jumpToSystemSetting"
android:text="仅展示能查询到的已授权系统权限"
android:textColor="@color/color_999999"
android:textSize="@dimen/sp_12" />
<View
android:layout_width="@dimen/dp_50"
android:layout_height="1dp"
android:layout_marginLeft="@dimen/dp_8"
android:layout_gravity="center_vertical"
android:background="@color/color_grey_999999"
/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_40"
android:layout_marginBottom="@dimen/dp_35"
android:onClick="jumpToSystemSetting"
android:text="前往系统设置>"
android:textColor="#7154EE"
android:textSize="@dimen/sp_14" />
</LinearLayout>

View File

@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" >
<data>
<variable
name="click"
type="android.view.View.OnClickListener" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.yizhuan.erban.base.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/color_transparent10_0A333333" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toBottomOf="@id/title_bar"
android:id="@+id/tv_system_permission"
style="@style/permission_text_style"
android:text="系统权限管理"
android:onClick="@{click}"
tools:ignore="MissingConstraints" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toBottomOf="@id/title_bar"
android:id="@+id/tv_privacy_guide"
style="@style/permission_text_style"
android:text="隐私保护指引"
android:onClick="@{click}"
tools:ignore="MissingConstraints" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toBottomOf="@id/title_bar"
android:id="@+id/tv_sdk_permission"
style="@style/permission_text_style"
android:text="第三方SDK目录"
android:onClick="@{click}"
tools:ignore="MissingConstraints" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toBottomOf="@id/title_bar"
android:id="@+id/tv_device_permission"
style="@style/permission_text_style"
android:text="设备权限清单"
android:onClick="@{click}"
tools:ignore="MissingConstraints" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:layout_gravity="center_horizontal"
>
<TextView
android:id="@+id/tv_jump_setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dp_60"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:onClick="@{click}"
android:text="前往系统设置>"
app:layout_constraintBottom_toBottomOf="parent"
android:textColor="#7154EE"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/tv_tip"
android:layout_marginLeft="@dimen/dp_8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="jumpToSystemSetting"
android:text="仅展示能查询到的已授权系统权限"
android:layout_marginBottom="@dimen/dp_40"
android:textColor="@color/color_999999"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toTopOf="@id/tv_jump_setting"
android:textSize="@dimen/sp_12" />
<View
android:layout_width="@dimen/dp_50"
android:layout_height="1dp"
android:layout_gravity="center_vertical"
android:background="@color/color_grey_999999"
app:layout_constraintRight_toLeftOf="@id/tv_tip"
android:layout_marginRight="@dimen/dp_8"
app:layout_constraintTop_toTopOf="@id/tv_tip"
app:layout_constraintBottom_toBottomOf="@id/tv_tip"
/>
<View
app:layout_constraintTop_toTopOf="@id/tv_tip"
app:layout_constraintBottom_toBottomOf="@id/tv_tip"
android:layout_width="@dimen/dp_50"
android:layout_height="1dp"
app:layout_constraintLeft_toRightOf="@id/tv_tip"
android:layout_marginLeft="@dimen/dp_8"
android:layout_gravity="center_vertical"
android:background="@color/color_grey_999999"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</layout>

View File

@@ -308,6 +308,37 @@
android:textColor="@color/text_title_white"
android:textSize="14sp" />
<View
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@color/line_height_201F27" />
<RelativeLayout
android:id="@+id/rly_permission"
android:layout_width="match_parent"
android:layout_height="50dp"
android:clickable="true"
android:focusable="true"
android:onClick="@{click}">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/dp_15"
android:text="@string/text_setting_permission"
android:textColor="@color/text_title_white"
android:textSize="14sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="@dimen/dp_15"
android:src="@drawable/arrow_right" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="10dp"

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/dp_16"
android:paddingBottom="@dimen/dp_16"
android:background="@drawable/bg_f6f7f9_8_radius">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/icon"
android:layout_width="@dimen/dp_23"
android:layout_marginLeft="@dimen/dp_16"
android:layout_height="@dimen/dp_16"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/icon_permission_common" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_7"
android:textColor="@color/color_black_333333"
android:textSize="@dimen/sp_14"
app:layout_constraintLeft_toRightOf="@id/icon"
app:layout_constraintTop_toTopOf="parent"
tools:text="存储" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:textColor="@color/color_grey_999999"
android:textSize="@dimen/sp_12"
app:layout_constraintLeft_toLeftOf="@id/tv_name"
app:layout_constraintTop_toBottomOf="@id/tv_name"
tools:text="读取手机存储,修改/删除手机储存" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -683,6 +683,7 @@
<string name="text_setting_about">关于&app_name;</string>
<string name="text_setting_check_for_update">检查版本</string>
<string name="text_setting_lab">实验室</string>
<string name="text_setting_permission">个人信息与权限</string>
<string name="text_setting_logout">退出当前账号</string>
<string name="text_setting_clear_cache">清除缓存</string>

View File

@@ -546,4 +546,19 @@
<item name="android:windowExitAnimation">@anim/anim_message_tip_out</item>
</style>
<style name="permission_text_style">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">@dimen/dp_44</item>
<item name="android:background">@drawable/bg_f6f7f9_8_radius</item>
<item name="android:layout_marginTop">@dimen/dp_16</item>
<item name="android:layout_marginLeft">@dimen/dp_16</item>
<item name="android:layout_marginRight">@dimen/dp_16</item>
<item name="android:textSize">@dimen/sp_14</item>
<item name="android:gravity">center_vertical</item>
<item name="android:paddingLeft">@dimen/dp_12</item>
<item name="android:paddingRight">@dimen/dp_17</item>
<item name="android:drawableRight">@drawable/setting_right</item>
<item name="android:textColor">@color/color_black_333333</item>
</style>
</resources>

View File

@@ -61,6 +61,7 @@
<!-- setting -->
<color name="color_black_ff333333">#ff333333</color>
<color name="color_transparent10_0A333333">#0A333333</color>
<color name="color_black_ff666666">#ff666666</color>
<color name="color_black_ff999999">#ff999999</color>
<color name="color_gray_bfc2c5">#bfc2c5</color>