From 8b490e61a84ecd430412a61b3213852225a84379 Mon Sep 17 00:00:00 2001 From: itgaojian163 Date: Mon, 18 Nov 2024 14:07:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tenlionsoft/aimz_k/dao/MsgCategoryDao.kt | 1 + .../aimz_k/page/activity/MainActivity.kt | 1 - .../page/activity/SearchContactActivity.kt | 2 + .../aimz_k/page/activity/SplashActivity.kt | 49 ++++++- .../aimz_k/widget/ApplyPermissionDialog.kt | 130 ++++++++++++++++++ .../tenlionsoft/aimz_k/widget/BindingUtils.kt | 39 ++++-- .../main/res/drawable/sel_login_btn_gray.xml | 5 + .../res/drawable/shp_gray_deep_btn_press.xml | 6 + .../res/layout/dialog_apply_permission.xml | 70 ++++++++++ app/src/main/res/layout/item_msg_my.xml | 39 ++++-- app/src/main/res/layout/item_msg_other.xml | 8 +- 11 files changed, 319 insertions(+), 31 deletions(-) create mode 100644 app/src/main/java/com/tenlionsoft/aimz_k/widget/ApplyPermissionDialog.kt create mode 100644 app/src/main/res/drawable/sel_login_btn_gray.xml create mode 100644 app/src/main/res/drawable/shp_gray_deep_btn_press.xml create mode 100644 app/src/main/res/layout/dialog_apply_permission.xml diff --git a/app/src/main/java/com/tenlionsoft/aimz_k/dao/MsgCategoryDao.kt b/app/src/main/java/com/tenlionsoft/aimz_k/dao/MsgCategoryDao.kt index 4ef4afc..41ab948 100644 --- a/app/src/main/java/com/tenlionsoft/aimz_k/dao/MsgCategoryDao.kt +++ b/app/src/main/java/com/tenlionsoft/aimz_k/dao/MsgCategoryDao.kt @@ -12,6 +12,7 @@ import com.tenlionsoft.aimz_k.model.MsgCategoryBean @Dao interface MsgCategoryDao { + /** * 获取全部信息 * diff --git a/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/MainActivity.kt b/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/MainActivity.kt index 636bb70..8757d1d 100644 --- a/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/MainActivity.kt +++ b/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/MainActivity.kt @@ -29,7 +29,6 @@ import com.tenlionsoft.baselib.utils.LogUtils import com.tenlionsoft.baselib.utils.ToastUtils import com.tenlionsoft.baselib.widget.CenterProgressUpdateView import com.tenlionsoft.baselib.widget.FadePageTransformer -import pl.com.salsoft.sqlitestudioremote.SQLiteStudioService import java.io.File /** diff --git a/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/SearchContactActivity.kt b/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/SearchContactActivity.kt index 6d503c1..5b2a40d 100644 --- a/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/SearchContactActivity.kt +++ b/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/SearchContactActivity.kt @@ -46,5 +46,7 @@ class SearchContactActivity : BaseActivity() { } } + showSoftKeyBoard(mBind.etSearchContact) + mBind.etSearchContact.requestFocus() } } \ No newline at end of file diff --git a/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/SplashActivity.kt b/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/SplashActivity.kt index 5c6c962..7cba3dc 100644 --- a/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/SplashActivity.kt +++ b/app/src/main/java/com/tenlionsoft/aimz_k/page/activity/SplashActivity.kt @@ -1,6 +1,7 @@ package com.tenlionsoft.aimz_k.page.activity import android.content.Intent +import android.util.Log import androidx.databinding.DataBindingUtil import androidx.lifecycle.lifecycleScope import com.hjq.permissions.OnPermissionCallback @@ -10,6 +11,7 @@ import com.tenlionsoft.aimz_k.R import com.tenlionsoft.aimz_k.dao.DbManager import com.tenlionsoft.aimz_k.databinding.ActivitySplashBinding import com.tenlionsoft.aimz_k.model.ReplyBean +import com.tenlionsoft.aimz_k.widget.ApplyPermissionDialog import com.tenlionsoft.baselib.base.BaseActivity import com.tenlionsoft.baselib.utils.SpUtils import com.tenlionsoft.baselib.utils.ToastUtils @@ -29,9 +31,39 @@ class SplashActivity : BaseActivity() { override fun bindView() { mBinding = DataBindingUtil.setContentView(this, R.layout.activity_splash) mBinding.lifecycleOwner = this - XXPermissions.with(this).permission(Permission.MANAGE_EXTERNAL_STORAGE) + val isGranted = XXPermissions.isGranted(this, Permission.MANAGE_EXTERNAL_STORAGE) + Log.e("SplashActivity", "bindView:${isGranted}") + if (!isGranted) { + ApplyPermissionDialog.Builder(this) + .setCancelOutside(false) + .setCancelable(false) + .setMessage("为了能正常使用,需要文件管理权限,请前往设置进行授权.") + .addConfirmListener(object : ApplyPermissionDialog.OnConfirmListener { + override fun onConfirm() { + toLoginPage() + } + + override fun onCancel() { + ToastUtils.error("未授权无法使用App,请自行前往设置页面进行授权.") + exitApp() + } + }) + .create() + .show() + } else { + toLoginPage() + } + } + + //打开登录页面 + fun toLoginPage() { + XXPermissions.with(this@SplashActivity) + .permission(Permission.MANAGE_EXTERNAL_STORAGE) .request(object : OnPermissionCallback { - override fun onGranted(permissions: MutableList, allGranted: Boolean) { + override fun onGranted( + permissions: MutableList, + allGranted: Boolean + ) { if (allGranted) { lifecycleScope.launch { withContext(Dispatchers.IO) { @@ -67,7 +99,8 @@ class SplashActivity : BaseActivity() { override fun run() { startActivity( Intent( - this@SplashActivity, LoginActivity::class.java + this@SplashActivity, + LoginActivity::class.java ) ); finish(); @@ -80,11 +113,17 @@ class SplashActivity : BaseActivity() { } } - override fun onDenied(permissions: MutableList, doNotAskAgain: Boolean) { + override fun onDenied( + permissions: MutableList, + doNotAskAgain: Boolean + ) { if (doNotAskAgain) { ToastUtils.error("被永久拒绝授权,请手动授予") // 如果是被永久拒绝就跳转到应用权限系统设置页面 - XXPermissions.startPermissionActivity(this@SplashActivity, permissions) + XXPermissions.startPermissionActivity( + this@SplashActivity, + permissions + ) } else { ToastUtils.error("获取权限失败") finish() diff --git a/app/src/main/java/com/tenlionsoft/aimz_k/widget/ApplyPermissionDialog.kt b/app/src/main/java/com/tenlionsoft/aimz_k/widget/ApplyPermissionDialog.kt new file mode 100644 index 0000000..c5d8dae --- /dev/null +++ b/app/src/main/java/com/tenlionsoft/aimz_k/widget/ApplyPermissionDialog.kt @@ -0,0 +1,130 @@ +package com.tenlionsoft.aimz_k.widget + +import android.app.Activity +import android.app.Dialog +import android.content.Context +import android.content.DialogInterface +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.widget.Button +import android.widget.TextView +import com.lxj.xpopup.interfaces.OnConfirmListener +import com.tenlionsoft.aimz_k.R + + +class ApplyPermissionDialog : Dialog { + constructor(context: Context) : super(context) + + constructor(context: Context, themeResId: Int) : super(context, themeResId) + + constructor( + context: Context, cancelable: Boolean, cancelListener: DialogInterface.OnCancelListener? + ) : super(context, cancelable, cancelListener) + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val window = this.window + val displayMetrics = context.resources.displayMetrics + window!!.setGravity(Gravity.CENTER) + window.setWindowAnimations(com.tenlionsoft.baselib.R.style.dialog_style) + val params = window.attributes + params.width = (displayMetrics.widthPixels * 0.8).toInt() + params.height = (displayMetrics.heightPixels * 0.2).toInt() + window.attributes = params + window.setBackgroundDrawable(ColorDrawable()) + + } + + class Builder(private val context: Activity) { + //提示信息 + private var message: String? = null + + //是否展示提示信息 + private var isShowMessage = true + + //是否按返回键取消 + private var isCancelable = true + + //是否取消 + private var isCancelOutside = false + private var listener: OnConfirmListener? = null + + /** + * 设置提示信息 + * @param message + * @return + */ + fun setMessage(message: String?): Builder { + this.message = message + return this + } + + fun addConfirmListener(listener: OnConfirmListener): Builder { + this.listener = listener + return this + } + + /** + * 设置是否显示提示信息 + * @param isShowMessage + * @return + */ + fun setShowMessage(isShowMessage: Boolean): Builder { + this.isShowMessage = isShowMessage + return this + } + + /** + * 设置是否可以按返回键取消 + * @param isCancelable + * @return + */ + fun setCancelable(isCancelable: Boolean): Builder { + this.isCancelable = isCancelable + return this + } + + /** + * 设置是否可以取消 + * @param isCancelOutside + * @return + */ + fun setCancelOutside(isCancelOutside: Boolean): Builder { + this.isCancelOutside = isCancelOutside + return this + } + + //创建Dialog + fun create(): ApplyPermissionDialog { + val inflater = LayoutInflater.from(context) + val view: View = inflater.inflate(R.layout.dialog_apply_permission, null) + //设置带自定义主题的dialog + val dialog = + ApplyPermissionDialog(context, com.tenlionsoft.baselib.R.style.dialog_style) + view.findViewById(R.id.tv_hint).text = message + ?: "为了能正常使用,需要相关权限,请前往设置进行授权." + view.findViewById