From 429342051e643218ba621eb1a29fa834f400bb12 Mon Sep 17 00:00:00 2001 From: yitao_hello <2714330342@qq.com> Date: Fri, 17 Dec 2021 11:02:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=BF=A1=E6=81=AF=E4=B8=8E?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/drawable/bg_f6f7f9_8_radius.xml | 6 + app/src/main/AndroidManifest.xml | 8 ++ .../ui/setting/GrantedPermissionsActivity.kt | 87 +++++++++++++ .../ui/setting/PermissionGuideActivity.kt | 38 ++++++ .../erban/ui/setting/SettingActivity.java | 3 + .../erban/ui/setting/bean/PermissionEntity.kt | 61 +++++++++ .../erban/ui/utils/sys/PermissionUtil.kt | 4 + .../com/yizhuan/erban/utils/PermissionUtil.kt | 117 ++++++++++++++++++ .../drawable-xhdpi/icon_permission_camera.png | Bin 0 -> 850 bytes .../drawable-xhdpi/icon_permission_common.png | Bin 0 -> 1066 bytes .../icon_permission_location.png | Bin 0 -> 2403 bytes .../drawable-xhdpi/icon_permission_mic.png | Bin 0 -> 1315 bytes .../drawable-xhdpi/icon_permission_phone.png | Bin 0 -> 2434 bytes .../icon_permission_storage.png | Bin 0 -> 1689 bytes .../layout/activity_granted_permissions.xml | 69 +++++++++++ .../res/layout/activity_permission_guide.xml | 116 +++++++++++++++++ app/src/main/res/layout/activity_setting.xml | 31 +++++ .../res/layout/item_permission_granted.xml | 44 +++++++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/styles.xml | 15 +++ nim_uikit/res/values/colors.xml | 1 + 21 files changed, 601 insertions(+) create mode 100644 app/src/common/res/drawable/bg_f6f7f9_8_radius.xml create mode 100644 app/src/main/java/com/yizhuan/erban/ui/setting/GrantedPermissionsActivity.kt create mode 100644 app/src/main/java/com/yizhuan/erban/ui/setting/PermissionGuideActivity.kt create mode 100644 app/src/main/java/com/yizhuan/erban/ui/setting/bean/PermissionEntity.kt create mode 100644 app/src/main/java/com/yizhuan/erban/ui/utils/sys/PermissionUtil.kt create mode 100644 app/src/main/java/com/yizhuan/erban/utils/PermissionUtil.kt create mode 100644 app/src/main/res/drawable-xhdpi/icon_permission_camera.png create mode 100644 app/src/main/res/drawable-xhdpi/icon_permission_common.png create mode 100644 app/src/main/res/drawable-xhdpi/icon_permission_location.png create mode 100644 app/src/main/res/drawable-xhdpi/icon_permission_mic.png create mode 100644 app/src/main/res/drawable-xhdpi/icon_permission_phone.png create mode 100644 app/src/main/res/drawable-xhdpi/icon_permission_storage.png create mode 100644 app/src/main/res/layout/activity_granted_permissions.xml create mode 100644 app/src/main/res/layout/activity_permission_guide.xml create mode 100644 app/src/main/res/layout/item_permission_granted.xml 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 0000000000000000000000000000000000000000..c2b2ca66e07236d6e9973986798978bb0f1efde3 GIT binary patch literal 850 zcmV-Y1FigtP)Px&3`s;mRA@u(nN4UDK@`W|jyu^LRMb;3w<-uKUfeF-GzcDqfc@~GL3;311A+%Z zK`m&ALRC=cK@e(B9*R^C)>J5X5G2Wl?RXIt1lyA>J*ij^-E5eZg>IR~)NE#V8wRr1 z%zN+uoA>7B?X2WD&JGaxkvafv&R!=2x~`wLZTkrT>~Ap{%NXNJhGD#E(Qec7KpE)o z@87+$vhoc8_Hl~%(bd&;aCUa~H>W)W0?;&Vlu~+!H@Itu5V~!e<`}OJZh#PW-_sl@ z3)}z=cHftfM&LoRzy%Og1TTD}GW!Q$y{lXS02Kgs@z!R@cB=qDFvjEcU27A7rfGL6 zr8h$k9;!Qp&^^;MZ+T8P0M>VYCe&yVIl~wad70P%P*wFU0Gx~{X4r1u5kgM6PFaAT zY|Y2x@e{>ju^e_}9)GD+D!I0{_MWj_C4}s)2dJ^m2_Z61u&8WQRc)w`%|HhrpU>mD zxw#?Rwg&;=I5Xfa1HcE2@#}OtJ(J7j>{c@sc?NoWd(YHrwFdxjpozEzS(dL?DwS8Q zKtu*GF)@KACnv`!rB~gi;8T=?5PCE+GBTRYW~m>W$N)4=yH6>-=0`;R8ide8(=>1R zv5f>^y=-2vJMTD-g%Elgi^ZlAiNqII+|tt0;cB%yOewu6Ns__{c4S#T=ck-P2XGH; zp-}i#SM%RvvDjd_T>jW-SCh%)v1+wi0DuJZ`@+D$z|m$0J9GeD*U#Fv{oE7c?!2NX z`c~q-buNTuSq7U4jPZHHFkb$zltKqkRrMJF3~vlolJt0fe%_s8n?5}~J>!n!TxJ$d z5kf9(H^65AIOGLY6eU?ImCUB<0idt1PqQqG9aFv%LXK=Vz^2)$ySsbO^z`%}KLD9b zX6NGK;;%-t%~tkNl#uWM!k3WPhgkSFD*PXr+bx71CA@Yg^f2c_2tQ7HnGp7chW+Oh z`jyhp2oYpW=%YjsF+8?@0EEBT68maV_{&|lE``2c_YRiOA2@irL%VIbzLB+CG#kGI c(C%#f1tNqIUaD6R<^TWy07*qoM6N<$f@FDu&;S4c literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ec9bf72e3a29180c756c2d29afbcce691af54c56 GIT binary patch literal 1066 zcmV+_1l9YAP)Px&kvwv|H)0x3@QmhbEApmy5o>Uf$q|0VV zuC5jz-oK-P5%Bd-8{p#NV!&Oe(^0jkPvYXG%ScbpFzTayBXA`y7USbTXb`1k

H2 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 Z{s9n1C|)fJB+CE*002ovPDHLkV1iZOdL{q> literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..42a3184735593df01bdb9100013e78b39bad5288 GIT binary patch literal 2434 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 A1^@s6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..9ed02161f96d635fb21d65d48a2a30391c0017d0 GIT binary patch literal 1689 zcmV;K24?w*P)Px*Q%OWYRA@u(T7OJcRUAL}z6ZjqhoA+Pq~*-vveDeR_dXu5m%N&WI)^nkvvjFF zrx{I#u56ZL&01SnIJ0bNZrTbrT`6keM1*+n-g92%(!VMq2pI_(kgvz{-h0|*+`Gf& z{bGO*n)g5M`TqEPzCX_Sp8H@3Ar>%+ALb5$1ZOX51{@BDTbAWd006TRg!5W*a`M)u zrlzkW`HxBfLijTP;GqP8*WF(Ccsw&b9*-IhM??Z{w>!J1r>7;s;0N5>Y_{A>mo8l$ z5dnw8Q6kIo@rgjdYPD|g`Fux4M1bSCJ%o@Qx)Q@Mdl5q0ZwDbk5Oyhw@}};KW!VFg zB)vQ$0uaJl0Kg($$zriQD~e+EZ6ffLq9~`R;30%iUfcvOUcAVZmzQ?~0Mc|NyWRe9 zU0vO8u?VilV#~3z)Xfvh2=SBsh-yf)MhI zZqI79ZuR+mAH_w0=lLpCRku)0R3S-HMI>-VMMZOadwZ`$iM&}=PD@K$5Urd9K`2)g z1;a+7`*C)9HLX6bhZE)~{lWb7K-HD=SN`udlzsFw7KPI4djbzM7hv z>t^Lut5)6J($eyxs;aL80Mhk!i^Z}|6vbn-ydVf`6h)!;@;;Vj52mK3?ys+}Z#CO4 zDJikHwzhUN48sntDLFYg(~cfJdXttN*2Dz`1za!~^io1C7~{ES2Ze=&3xdJmNkYi5 zQ6n7T#fukD@9ysIG}|GB{F9WF^n%alJ852n5NaFAeEoe=Qqm%?*V_=4fFKB)6-C)c zrTRERXf>_0V#SJk+S}WI1ON=%nY1m>@Auyot~4NoeE@*eFl!;3&BmF>1&-qm6GEP+ zdU3lXNqeIb;5hCOA!IF84m(6q)auuGc%FYxRn=F*0kK-GnIYOXzeEVFiAn%MsO=^>(b5JX)DEKuDZ`(pr>9rc*4DO%i@f<=adGjq zuCA_)s;cgx)~;cUhm7q`r&9=pLf=s`%^2f(5eY0?wk)lqqoXTU<3I?tMlzaw&YU^Z ztE;Pf;sLMAXd6ItbMxPnP6%Ucqit;3v}uap@7H9K2H%s+%*?DaXU_a(1dqN_=H=xr zx^?T8HUsI;6^!v?W?&G)-vIzKsSLbtv)QV0b91j%RaME+h?JI=S}$L|eE-dxH?F=ljM5vjjY0^u`M*Rr!m{iZNscPM2&AN> zENpCS95(3jJilI5RRaUVFsBeg21YXh?FN>ugGxzB;Tjtoe+UP1@TB}40FXIK5`S7O zmeryt)`zo`pP&C|e}6xXp#x*APr1M#;C8!b^z`)nK^ghi>2zj9tLc?1SEjeMwXFvL z6ca)o0RUvgF%M}yasvQxm1WtQ?Ck8rCr+H8n|TP2-Me>NPMGT|)>!2(_)LXq3KgmwFw>_(?N?-Z9)&#+yh0V?1!(HA)CV81(=eZ$u-t zk1-y&w*G$!=nO|1nemc0S4hkZ+#xW6RJdHOS%E;{AR$Cx7)G?&Y##G9b3$i;VE(GE+nn;qkp#-LVT=bpY0?)O?F;gONkF2_VzF!%Me*Da0tt-fs9fLq jUx`tLZw! + + + + + + + + + + + + + + + + \ 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