diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/activity/LogActivity.kt b/app/src/main/java/com/shuwei/intelligent/shelves/activity/LogActivity.kt index 3ba4541..9028501 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/activity/LogActivity.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/activity/LogActivity.kt @@ -5,6 +5,8 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.shuwei.intelligent.shelves.adapter.LogAdapter import com.shuwei.intelligent.shelves.base.BaseActivity import com.shuwei.intelligent.shelves.databinding.ActivityLogListBinding +import com.shuwei.intelligent.shelves.dialog.CommonDialog +import com.shuwei.intelligent.shelves.utils.ext.copyTextToClipboard import com.shuwei.intelligent.shelves.utils.ext.startActivity class LogActivity : BaseActivity() { @@ -22,6 +24,7 @@ class LogActivity : BaseActivity() { LogAdapter(logList).apply { setOnItemClickListener { _, _, position -> if (isLogDir.not()) { + showConfirmDialog(logList[position]) return@setOnItemClickListener } startActivity { @@ -32,6 +35,16 @@ class LogActivity : BaseActivity() { } } + private fun showConfirmDialog(content:String) { + CommonDialog(this).apply { + dialogTitle = "温馨提示" + dialogContent = content + confirmBlock = { + content?.copyTextToClipboard(this@LogActivity) + } + }.show() + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityLogListBinding.inflate(layoutInflater) @@ -41,6 +54,10 @@ class LogActivity : BaseActivity() { logDate = intent.getStringExtra(LOG_DATE) ?: "" binding.ivBack.setOnClickListener { finish() } binding.tvTitle.text = if (isLogDir) "全部日志" else logDate + binding.tvTitle.setOnClickListener { + logList.reverse() + logAdapter.notifyDataSetChanged() + } if (isLogDir) { logList.addAll(fileLogger.getLogFiles()) diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseDialog.kt b/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseDialog.kt new file mode 100644 index 0000000..d68b2a3 --- /dev/null +++ b/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseDialog.kt @@ -0,0 +1,38 @@ +package com.shuwei.intelligent.shelves.base + +import android.app.Dialog +import android.content.Context +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.view.Gravity +import android.view.View +import com.shuwei.intelligent.shelves.R +import com.shuwei.intelligent.shelves.utils.ext.dp +import com.shuwei.intelligent.shelves.utils.ext.hideKeyboard + +abstract class BaseDialog( + context: Context, + var defWidth: Int = 400.dp, + var defHeight: Int = 300.dp +) : Dialog(context, R.style.DialogTheme) { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val rootView = getRootView() + setContentView(rootView) + setCancelable(false) + setCanceledOnTouchOutside(false) + window?.apply { + setLayout(defWidth, defHeight) + setBackgroundDrawable(ColorDrawable()) + setGravity(Gravity.CENTER) + } + rootView.setOnClickListener { it.hideKeyboard() } + initView() + } + + abstract fun getRootView(): View + + abstract fun initView() + +} \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/dialog/CommonDialog.kt b/app/src/main/java/com/shuwei/intelligent/shelves/dialog/CommonDialog.kt new file mode 100644 index 0000000..2870125 --- /dev/null +++ b/app/src/main/java/com/shuwei/intelligent/shelves/dialog/CommonDialog.kt @@ -0,0 +1,33 @@ +package com.shuwei.intelligent.shelves.dialog + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import com.shuwei.intelligent.shelves.base.BaseDialog +import com.shuwei.intelligent.shelves.databinding.DialogLayoutBinding + +class CommonDialog(context: Context):BaseDialog(context) { + + private lateinit var binding:DialogLayoutBinding + + override fun getRootView(): View { + binding = DialogLayoutBinding.inflate(LayoutInflater.from(context)) + return binding.root + } + + var dialogTitle:String?=null + var dialogContent:String?=null + var confirmBlock:(()->Unit)?=null + override fun initView() { + binding.btnConfirm.setOnClickListener { + confirmBlock?.invoke() + dismiss() + } + } + + override fun show() { + super.show() + binding.tvDialogTitle.text = dialogTitle + binding.tvDialogContent.text = dialogContent + } +} \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/utils/ext/Common.kt b/app/src/main/java/com/shuwei/intelligent/shelves/utils/ext/Common.kt index dc1aa40..acc32e6 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/utils/ext/Common.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/utils/ext/Common.kt @@ -10,6 +10,7 @@ import android.os.Bundle import android.util.TypedValue import android.view.View import android.view.inputmethod.EditorInfo +import android.view.inputmethod.InputMethodManager import android.widget.EditText import android.widget.Toast import androidx.core.app.ActivityOptionsCompat @@ -22,6 +23,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import android.content.ClipData +import android.content.ClipboardManager fun Context.toast( message: String?, @@ -151,3 +154,24 @@ fun View.clickWithDebounce(delay: Long = 500, action: () -> Unit) { } } } + +fun View.hideKeyboard() { + val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.hideSoftInputFromWindow(this.windowToken, 0) + this.clearFocus() // 清除焦点避免键盘再次弹出 +} + +fun String.copyTextToClipboard(context: Context) { + // 获取系统服务中的ClipboardManager + val clipboard: ClipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + + // 创建一个ClipData对象,包含要复制的文本 + val clip = ClipData.newPlainText("label", this) + + // 将ClipData对象设置到剪贴板 + clipboard.setPrimaryClip(clip) + + // 显示一个简单的Toast提示用户文本已复制 + Toast.makeText(context, "文本已复制到剪贴板", Toast.LENGTH_SHORT).show() +} + diff --git a/app/src/main/res/layout-sw600dp/dialog_layout.xml b/app/src/main/res/layout-sw600dp/dialog_layout.xml new file mode 100644 index 0000000..1d184ee --- /dev/null +++ b/app/src/main/res/layout-sw600dp/dialog_layout.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index bb70a94..d46b5e3 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -19,4 +19,24 @@ true @android:color/transparent + + + + \ No newline at end of file