Commit 9714c385 authored by wanglei's avatar wanglei

...

parent 2e4888a5
...@@ -5,7 +5,6 @@ import android.content.Context ...@@ -5,7 +5,6 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
...@@ -42,7 +41,7 @@ abstract class BaseActivity<VB : ViewBinding>( ...@@ -42,7 +41,7 @@ abstract class BaseActivity<VB : ViewBinding>(
var onCreateI = 0 var onCreateI = 0
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enableEdgeToEdge() // enableEdgeToEdge()
configSystemBar() configSystemBar()
onCreateI++ onCreateI++
LogEx.logDebug(TAG, "lifecycle $tagNo onCreate ${javaClass.simpleName} $onCreateI") LogEx.logDebug(TAG, "lifecycle $tagNo onCreate ${javaClass.simpleName} $onCreateI")
......
...@@ -19,6 +19,7 @@ import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_TELEPHONE ...@@ -19,6 +19,7 @@ import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_TELEPHONE
import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_TEXT import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_TEXT
import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_WEBSITE import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_WEBSITE
import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_WIFI import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_WIFI
import com.base.scanqr.bean.MessageUIBean
import com.base.scanqr.bean.ProductUIBean import com.base.scanqr.bean.ProductUIBean
import com.base.scanqr.bean.ScanBean import com.base.scanqr.bean.ScanBean
import com.base.scanqr.bean.TelephoneUIBean import com.base.scanqr.bean.TelephoneUIBean
...@@ -107,7 +108,12 @@ class HistoryAdapter : BaseQuickAdapter<ScanBean, CommonViewHolder>() { ...@@ -107,7 +108,12 @@ class HistoryAdapter : BaseQuickAdapter<ScanBean, CommonViewHolder>() {
} }
} }
KEY_MESSAGE -> {} KEY_MESSAGE -> {
if (item is MessageUIBean) {
binding.ivIcon.setImageResource(R.mipmap.h_message)
}
}
KEY_PRODUCT -> { KEY_PRODUCT -> {
if (item is ProductUIBean) { if (item is ProductUIBean) {
binding.ivIcon.setImageResource(R.mipmap.h_product) binding.ivIcon.setImageResource(R.mipmap.h_product)
......
...@@ -15,6 +15,7 @@ import com.base.scanqr.databinding.FragmentHistoryBinding ...@@ -15,6 +15,7 @@ import com.base.scanqr.databinding.FragmentHistoryBinding
import com.base.scanqr.ui.contact.ContractCodeActivity import com.base.scanqr.ui.contact.ContractCodeActivity
import com.base.scanqr.ui.email.EmailCodeActivity import com.base.scanqr.ui.email.EmailCodeActivity
import com.base.scanqr.ui.event.EventCodeActivity import com.base.scanqr.ui.event.EventCodeActivity
import com.base.scanqr.ui.message.MessageCodeActivity
import com.base.scanqr.ui.product.ProductCodeActivity import com.base.scanqr.ui.product.ProductCodeActivity
import com.base.scanqr.ui.telephone.TelephoneCodeActivity import com.base.scanqr.ui.telephone.TelephoneCodeActivity
import com.base.scanqr.ui.text.TextCodeActivity import com.base.scanqr.ui.text.TextCodeActivity
...@@ -120,6 +121,12 @@ class HistoryFragment : BaseFragment<FragmentHistoryBinding>(FragmentHistoryBind ...@@ -120,6 +121,12 @@ class HistoryFragment : BaseFragment<FragmentHistoryBinding>(FragmentHistoryBind
putExtra("data", Gson().toJson(item)) putExtra("data", Gson().toJson(item))
}) })
} }
FunctionUIBean.KEY_MESSAGE -> {
activity?.startActivity(Intent(activity, MessageCodeActivity::class.java).apply {
putExtra("data", Gson().toJson(item))
})
}
} }
} }
......
...@@ -6,6 +6,7 @@ import com.base.scanqr.bean.ContractUIBean ...@@ -6,6 +6,7 @@ import com.base.scanqr.bean.ContractUIBean
import com.base.scanqr.bean.EmailUIBean import com.base.scanqr.bean.EmailUIBean
import com.base.scanqr.bean.EventUIBean import com.base.scanqr.bean.EventUIBean
import com.base.scanqr.bean.FunctionUIBean import com.base.scanqr.bean.FunctionUIBean
import com.base.scanqr.bean.MessageUIBean
import com.base.scanqr.bean.ProductUIBean import com.base.scanqr.bean.ProductUIBean
import com.base.scanqr.bean.ScanBean import com.base.scanqr.bean.ScanBean
import com.base.scanqr.bean.TelephoneUIBean import com.base.scanqr.bean.TelephoneUIBean
...@@ -45,6 +46,8 @@ class HistoryViewModel() : ViewModel() { ...@@ -45,6 +46,8 @@ class HistoryViewModel() : ViewModel() {
telephoneList.forEach { it.listContent = it.tel } telephoneList.forEach { it.listContent = it.tel }
val contractList = SpJsonUtils.getSpJsonList<ContractUIBean>(FunctionUIBean.KEY_CONTACT) val contractList = SpJsonUtils.getSpJsonList<ContractUIBean>(FunctionUIBean.KEY_CONTACT)
contractList.forEach { it.listContent = it.n } contractList.forEach { it.listContent = it.n }
val messageList = SpJsonUtils.getSpJsonList<MessageUIBean>(FunctionUIBean.KEY_MESSAGE)
messageList.forEach { it.listContent = it.msg }
historyList.addAll(wifiList) historyList.addAll(wifiList)
historyList.addAll(textList) historyList.addAll(textList)
...@@ -54,6 +57,7 @@ class HistoryViewModel() : ViewModel() { ...@@ -54,6 +57,7 @@ class HistoryViewModel() : ViewModel() {
historyList.addAll(eventList) historyList.addAll(eventList)
historyList.addAll(telephoneList) historyList.addAll(telephoneList)
historyList.addAll(contractList) historyList.addAll(contractList)
historyList.addAll(messageList)
historyList.forEach { historyList.forEach {
LogEx.logDebug(TAG, "${it.scanType} ${it.createTime} ${it.createType} ${it.listContent}") LogEx.logDebug(TAG, "${it.scanType} ${it.createTime} ${it.createType} ${it.listContent}")
...@@ -117,6 +121,12 @@ class HistoryViewModel() : ViewModel() { ...@@ -117,6 +121,12 @@ class HistoryViewModel() : ViewModel() {
it1.createTime == it2.createTime it1.createTime == it2.createTime
}) })
} }
FunctionUIBean.KEY_MESSAGE -> {
SpJsonUtils.removeJsonBean<MessageUIBean>(bean.scanType, bean as MessageUIBean, removeIf = { it1, it2 ->
it1.createTime == it2.createTime
})
}
} }
historyList.remove(bean) historyList.remove(bean)
......
...@@ -19,6 +19,8 @@ import com.base.scanqr.bean.EmailUIBean.Companion.createEmailBean ...@@ -19,6 +19,8 @@ import com.base.scanqr.bean.EmailUIBean.Companion.createEmailBean
import com.base.scanqr.bean.EmailUIBean.Companion.isEmailQR import com.base.scanqr.bean.EmailUIBean.Companion.isEmailQR
import com.base.scanqr.bean.EventUIBean.Companion.createEventBean import com.base.scanqr.bean.EventUIBean.Companion.createEventBean
import com.base.scanqr.bean.EventUIBean.Companion.isEventQR import com.base.scanqr.bean.EventUIBean.Companion.isEventQR
import com.base.scanqr.bean.MessageUIBean.Companion.createMessageBean
import com.base.scanqr.bean.MessageUIBean.Companion.isMessageQR
import com.base.scanqr.bean.ProductUIBean import com.base.scanqr.bean.ProductUIBean
import com.base.scanqr.bean.ScanBean.Companion.CREATE_TYPE_SCAN import com.base.scanqr.bean.ScanBean.Companion.CREATE_TYPE_SCAN
import com.base.scanqr.bean.TelephoneUIBean.Companion.createTelephoneBean import com.base.scanqr.bean.TelephoneUIBean.Companion.createTelephoneBean
...@@ -33,6 +35,7 @@ import com.base.scanqr.qr.QRImageAnalyzer ...@@ -33,6 +35,7 @@ import com.base.scanqr.qr.QRImageAnalyzer
import com.base.scanqr.ui.contact.ContractCodeActivity import com.base.scanqr.ui.contact.ContractCodeActivity
import com.base.scanqr.ui.email.EmailCodeActivity import com.base.scanqr.ui.email.EmailCodeActivity
import com.base.scanqr.ui.event.EventCodeActivity import com.base.scanqr.ui.event.EventCodeActivity
import com.base.scanqr.ui.message.MessageCodeActivity
import com.base.scanqr.ui.product.ProductCodeActivity import com.base.scanqr.ui.product.ProductCodeActivity
import com.base.scanqr.ui.telephone.TelephoneCodeActivity import com.base.scanqr.ui.telephone.TelephoneCodeActivity
import com.base.scanqr.ui.text.TextCodeActivity import com.base.scanqr.ui.text.TextCodeActivity
...@@ -149,6 +152,24 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl ...@@ -149,6 +152,24 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
}) })
return return
} }
if (isMessageQR(qrCodeValue)) {
if (scanJump.get()) return
scanJump.set(true)
AdsMgr.showInsert(activity, false, object : AdsShowCallBack() {
override fun close(where: Int) {
jumpMessageCodeActivity(activity, qrCodeValue)
}
override fun failed(where: Int) {
jumpMessageCodeActivity(activity, qrCodeValue)
}
override fun googleFailed(where: Int) {
jumpMessageCodeActivity(activity, qrCodeValue)
}
})
return
}
if (isContractQR(qrCodeValue)) { if (isContractQR(qrCodeValue)) {
if (scanJump.get()) return if (scanJump.get()) return
scanJump.set(true) scanJump.set(true)
...@@ -284,6 +305,15 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl ...@@ -284,6 +305,15 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
} }
} }
private fun jumpMessageCodeActivity(activity: MainActivity, qrCodeValue: String) {
activity.startActivity(Intent(activity, MessageCodeActivity::class.java).apply {
val bean = createMessageBean(qrCodeValue)
bean.needCreate = true
bean.createType = CREATE_TYPE_SCAN
putExtra("data", Gson().toJson(bean))
})
}
private fun jumpContractCodeActivity(activity: MainActivity, qrCodeValue: String) { private fun jumpContractCodeActivity(activity: MainActivity, qrCodeValue: String) {
activity.startActivity(Intent(activity, ContractCodeActivity::class.java).apply { activity.startActivity(Intent(activity, ContractCodeActivity::class.java).apply {
val bean = createContractBean(qrCodeValue) val bean = createContractBean(qrCodeValue)
......
package com.base.scanqr.ui.message package com.base.scanqr.ui.message
import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.view.MotionEvent
import androidx.activity.addCallback import androidx.activity.addCallback
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.lifecycleScope
import com.base.scanqr.R import com.base.scanqr.R
import com.base.scanqr.ads.AdsMgr import com.base.scanqr.ads.AdsMgr
import com.base.scanqr.ads.AdsShowCallBack import com.base.scanqr.ads.AdsShowCallBack
...@@ -11,8 +15,14 @@ import com.base.scanqr.base.BaseActivity ...@@ -11,8 +15,14 @@ import com.base.scanqr.base.BaseActivity
import com.base.scanqr.bean.MessageUIBean import com.base.scanqr.bean.MessageUIBean
import com.base.scanqr.databinding.ActivityMessageBinding import com.base.scanqr.databinding.ActivityMessageBinding
import com.base.scanqr.utils.BarUtils import com.base.scanqr.utils.BarUtils
import com.base.scanqr.utils.ContactUtils.queryTel
import com.base.scanqr.utils.IntentUtils.intentPickContacts
import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.PermissionUtils.checkContactsReadPermission
import com.base.scanqr.utils.ToastUtils.toast import com.base.scanqr.utils.ToastUtils.toast
import com.google.gson.Gson import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBinding::inflate) { class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBinding::inflate) {
...@@ -30,6 +40,7 @@ class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBind ...@@ -30,6 +40,7 @@ class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBind
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_app_exit) AdsMgr.showNative(binding.flAd, R.layout.layout_admob_app_exit)
} }
@SuppressLint("ClickableViewAccessibility")
override fun initListener() { override fun initListener() {
super.initListener() super.initListener()
onBackPressedDispatcher.addCallback { onBackPressedDispatcher.addCallback {
...@@ -56,6 +67,29 @@ class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBind ...@@ -56,6 +67,29 @@ class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBind
binding.editContent.addTextChangedListener { s -> binding.editContent.addTextChangedListener { s ->
messageUIBean.msg = s.toString() messageUIBean.msg = s.toString()
} }
binding.editPhone.setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_UP) {
val x = event.x.toInt()
val y = event.y.toInt()
val drawableEnd = binding.editPhone.compoundDrawablesRelative[2]
if (drawableEnd != null) {
val drawableWidth = drawableEnd.intrinsicWidth
val drawableHeight = drawableEnd.intrinsicHeight
val paddingEnd = binding.editPhone.paddingEnd
val left = binding.editPhone.width - drawableWidth - paddingEnd
val right = binding.editPhone.width - paddingEnd
val top = (binding.editPhone.height - drawableHeight) / 2
val bottom = top + drawableHeight
if (x in left..right && y in top..bottom) {
onDrawableClicked()
return@setOnTouchListener true
}
}
}
return@setOnTouchListener false
}
binding.flQueren.setOnClickListener { binding.flQueren.setOnClickListener {
if (messageUIBean.smsto.isEmpty()) { if (messageUIBean.smsto.isEmpty()) {
toast("Enter phone number", true) toast("Enter phone number", true)
...@@ -71,4 +105,39 @@ class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBind ...@@ -71,4 +105,39 @@ class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBind
finish() finish()
} }
} }
private fun onDrawableClicked() {
LogEx.logDebug(TAG, "onDrawableClicked")
if (!checkContactsReadPermission()) {
launcher.launch(arrayOf(android.Manifest.permission.READ_CONTACTS)) {
if (checkContactsReadPermission()) {
pickTel()
}
}
} else {
pickTel()
}
}
private fun pickTel() {
val intent = intentPickContacts()
try {
launcher.launch(intent) { result ->
val contactUri: Uri? = result.data?.data
LogEx.logDebug(TAG, "")
if (contactUri != null) {
lifecycleScope.launch(Dispatchers.IO) {
val tel = queryTel(contactUri) ?: ""
messageUIBean.smsto = tel
launch(Dispatchers.Main) {
binding.editPhone.setText(tel)
}
}
}
}
} catch (e: Exception) {
toast("No application was found to handle the contacts pick", true)
}
}
} }
\ No newline at end of file
...@@ -14,6 +14,7 @@ import com.base.scanqr.ui.widget.InputNameDialog.showInputNameDialog ...@@ -14,6 +14,7 @@ import com.base.scanqr.ui.widget.InputNameDialog.showInputNameDialog
import com.base.scanqr.utils.BarUtils import com.base.scanqr.utils.BarUtils
import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile
import com.base.scanqr.utils.ClipboardUtils.copyText import com.base.scanqr.utils.ClipboardUtils.copyText
import com.base.scanqr.utils.IntentUtils.intentSendSms
import com.base.scanqr.utils.IntentUtils.intentShareImage import com.base.scanqr.utils.IntentUtils.intentShareImage
import com.base.scanqr.utils.LogEx import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.QRCodeUtils.generateQRCode import com.base.scanqr.utils.QRCodeUtils.generateQRCode
...@@ -124,13 +125,13 @@ class MessageCodeActivity : BaseActivity<ActivityMessageCodeBinding>(ActivityMes ...@@ -124,13 +125,13 @@ class MessageCodeActivity : BaseActivity<ActivityMessageCodeBinding>(ActivityMes
toast("Copied to clipboard", true) toast("Copied to clipboard", true)
} }
binding.flSearch.setOnClickListener { binding.flSearch.setOnClickListener {
// val intent = intentAddCalendar(eventUIBean) val intent = intentSendSms(messageUIBean)
// try { try {
// startActivity(intent) startActivity(intent)
// finish() finish()
// } catch (e: Exception) { } catch (e: Exception) {
// toast("No application was found to handle the calendar event request", true) toast("No application was found to handle the send message request", true)
// } }
} }
} }
......
package com.base.scanqr.utils package com.base.scanqr.utils
import android.content.ContentValues import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
...@@ -12,6 +12,7 @@ import androidx.core.content.FileProvider ...@@ -12,6 +12,7 @@ import androidx.core.content.FileProvider
import com.base.scanqr.bean.ContractUIBean import com.base.scanqr.bean.ContractUIBean
import com.base.scanqr.bean.EmailUIBean import com.base.scanqr.bean.EmailUIBean
import com.base.scanqr.bean.EventUIBean import com.base.scanqr.bean.EventUIBean
import com.base.scanqr.bean.MessageUIBean
import java.io.File import java.io.File
import java.util.GregorianCalendar import java.util.GregorianCalendar
import java.util.TimeZone import java.util.TimeZone
...@@ -153,4 +154,14 @@ object IntentUtils { ...@@ -153,4 +154,14 @@ object IntentUtils {
val shareIntent = Intent.createChooser(intent, null) val shareIntent = Intent.createChooser(intent, null)
return shareIntent return shareIntent
} }
@SuppressLint("IntentReset")
fun intentSendSms(bean: MessageUIBean): Intent {
val smsIntent = Intent(Intent.ACTION_VIEW)
smsIntent.setType("vnd.android-dir/mms-sms")
smsIntent.setData(Uri.parse("smsto:" + bean.smsto))
smsIntent.putExtra("sms_body", bean.msg)
val chooserIntent = Intent.createChooser(smsIntent, null)
return chooserIntent
}
} }
\ No newline at end of file
...@@ -83,8 +83,10 @@ ...@@ -83,8 +83,10 @@
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:background="@drawable/bg_f4f4f4_15" android:background="@drawable/bg_f4f4f4_15"
android:drawableEnd="@mipmap/tianjia"
android:hint="@string/to" android:hint="@string/to"
android:inputType="phone" android:inputType="phone"
android:maxLength="25"
android:paddingHorizontal="14dp" android:paddingHorizontal="14dp"
android:textColor="@color/black" android:textColor="@color/black"
android:textColorHint="#999999" android:textColorHint="#999999"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment