Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
S
Scan QR Code Barcode Reader
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanglei
Scan QR Code Barcode Reader
Commits
9714c385
Commit
9714c385
authored
Jan 06, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
2e4888a5
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
146 additions
and
11 deletions
+146
-11
BaseActivity.kt
app/src/main/java/com/base/scanqr/base/BaseActivity.kt
+1
-2
HistoryAdapter.kt
app/src/main/java/com/base/scanqr/ui/main/HistoryAdapter.kt
+7
-1
HistoryFragment.kt
app/src/main/java/com/base/scanqr/ui/main/HistoryFragment.kt
+7
-0
HistoryViewModel.kt
...src/main/java/com/base/scanqr/ui/main/HistoryViewModel.kt
+10
-0
ScanFragment.kt
app/src/main/java/com/base/scanqr/ui/main/ScanFragment.kt
+30
-0
MessageActivity.kt
...c/main/java/com/base/scanqr/ui/message/MessageActivity.kt
+69
-0
MessageCodeActivity.kt
...in/java/com/base/scanqr/ui/message/MessageCodeActivity.kt
+8
-7
IntentUtils.kt
app/src/main/java/com/base/scanqr/utils/IntentUtils.kt
+12
-1
activity_message.xml
app/src/main/res/layout/activity_message.xml
+2
-0
tianjia.png
app/src/main/res/mipmap-xxhdpi/tianjia.png
+0
-0
No files found.
app/src/main/java/com/base/scanqr/base/BaseActivity.kt
View file @
9714c385
...
...
@@ -5,7 +5,6 @@ import android.content.Context
import
android.content.Intent
import
android.os.Bundle
import
android.view.LayoutInflater
import
androidx.activity.enableEdgeToEdge
import
androidx.appcompat.app.AppCompatActivity
import
androidx.lifecycle.lifecycleScope
import
androidx.viewbinding.ViewBinding
...
...
@@ -42,7 +41,7 @@ abstract class BaseActivity<VB : ViewBinding>(
var
onCreateI
=
0
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
enableEdgeToEdge
()
//
enableEdgeToEdge()
configSystemBar
()
onCreateI
++
LogEx
.
logDebug
(
TAG
,
"lifecycle $tagNo onCreate ${javaClass.simpleName} $onCreateI"
)
...
...
app/src/main/java/com/base/scanqr/ui/main/HistoryAdapter.kt
View file @
9714c385
...
...
@@ -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_WEBSITE
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.ScanBean
import
com.base.scanqr.bean.TelephoneUIBean
...
...
@@ -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
->
{
if
(
item
is
ProductUIBean
)
{
binding
.
ivIcon
.
setImageResource
(
R
.
mipmap
.
h_product
)
...
...
app/src/main/java/com/base/scanqr/ui/main/HistoryFragment.kt
View file @
9714c385
...
...
@@ -15,6 +15,7 @@ import com.base.scanqr.databinding.FragmentHistoryBinding
import
com.base.scanqr.ui.contact.ContractCodeActivity
import
com.base.scanqr.ui.email.EmailCodeActivity
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.telephone.TelephoneCodeActivity
import
com.base.scanqr.ui.text.TextCodeActivity
...
...
@@ -120,6 +121,12 @@ class HistoryFragment : BaseFragment<FragmentHistoryBinding>(FragmentHistoryBind
putExtra
(
"data"
,
Gson
().
toJson
(
item
))
})
}
FunctionUIBean
.
KEY_MESSAGE
->
{
activity
?.
startActivity
(
Intent
(
activity
,
MessageCodeActivity
::
class
.
java
).
apply
{
putExtra
(
"data"
,
Gson
().
toJson
(
item
))
})
}
}
}
...
...
app/src/main/java/com/base/scanqr/ui/main/HistoryViewModel.kt
View file @
9714c385
...
...
@@ -6,6 +6,7 @@ import com.base.scanqr.bean.ContractUIBean
import
com.base.scanqr.bean.EmailUIBean
import
com.base.scanqr.bean.EventUIBean
import
com.base.scanqr.bean.FunctionUIBean
import
com.base.scanqr.bean.MessageUIBean
import
com.base.scanqr.bean.ProductUIBean
import
com.base.scanqr.bean.ScanBean
import
com.base.scanqr.bean.TelephoneUIBean
...
...
@@ -45,6 +46,8 @@ class HistoryViewModel() : ViewModel() {
telephoneList
.
forEach
{
it
.
listContent
=
it
.
tel
}
val
contractList
=
SpJsonUtils
.
getSpJsonList
<
ContractUIBean
>(
FunctionUIBean
.
KEY_CONTACT
)
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
(
textList
)
...
...
@@ -54,6 +57,7 @@ class HistoryViewModel() : ViewModel() {
historyList
.
addAll
(
eventList
)
historyList
.
addAll
(
telephoneList
)
historyList
.
addAll
(
contractList
)
historyList
.
addAll
(
messageList
)
historyList
.
forEach
{
LogEx
.
logDebug
(
TAG
,
"${it.scanType} ${it.createTime} ${it.createType} ${it.listContent}"
)
...
...
@@ -117,6 +121,12 @@ class HistoryViewModel() : ViewModel() {
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
)
...
...
app/src/main/java/com/base/scanqr/ui/main/ScanFragment.kt
View file @
9714c385
...
...
@@ -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.EventUIBean.Companion.createEventBean
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.ScanBean.Companion.CREATE_TYPE_SCAN
import
com.base.scanqr.bean.TelephoneUIBean.Companion.createTelephoneBean
...
...
@@ -33,6 +35,7 @@ import com.base.scanqr.qr.QRImageAnalyzer
import
com.base.scanqr.ui.contact.ContractCodeActivity
import
com.base.scanqr.ui.email.EmailCodeActivity
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.telephone.TelephoneCodeActivity
import
com.base.scanqr.ui.text.TextCodeActivity
...
...
@@ -149,6 +152,24 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
})
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
(
scanJump
.
get
())
return
scanJump
.
set
(
true
)
...
...
@@ -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
)
{
activity
.
startActivity
(
Intent
(
activity
,
ContractCodeActivity
::
class
.
java
).
apply
{
val
bean
=
createContractBean
(
qrCodeValue
)
...
...
app/src/main/java/com/base/scanqr/ui/message/MessageActivity.kt
View file @
9714c385
package
com.base.scanqr.ui.message
import
android.annotation.SuppressLint
import
android.content.Intent
import
android.net.Uri
import
android.view.MotionEvent
import
androidx.activity.addCallback
import
androidx.core.view.updatePadding
import
androidx.core.widget.addTextChangedListener
import
androidx.lifecycle.lifecycleScope
import
com.base.scanqr.R
import
com.base.scanqr.ads.AdsMgr
import
com.base.scanqr.ads.AdsShowCallBack
...
...
@@ -11,8 +15,14 @@ import com.base.scanqr.base.BaseActivity
import
com.base.scanqr.bean.MessageUIBean
import
com.base.scanqr.databinding.ActivityMessageBinding
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.google.gson.Gson
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.launch
class
MessageActivity
:
BaseActivity
<
ActivityMessageBinding
>(
ActivityMessageBinding
::
inflate
)
{
...
...
@@ -30,6 +40,7 @@ class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBind
AdsMgr
.
showNative
(
binding
.
flAd
,
R
.
layout
.
layout_admob_app_exit
)
}
@SuppressLint
(
"ClickableViewAccessibility"
)
override
fun
initListener
()
{
super
.
initListener
()
onBackPressedDispatcher
.
addCallback
{
...
...
@@ -56,6 +67,29 @@ class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBind
binding
.
editContent
.
addTextChangedListener
{
s
->
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
{
if
(
messageUIBean
.
smsto
.
isEmpty
())
{
toast
(
"Enter phone number"
,
true
)
...
...
@@ -71,4 +105,39 @@ class MessageActivity : BaseActivity<ActivityMessageBinding>(ActivityMessageBind
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
app/src/main/java/com/base/scanqr/ui/message/MessageCodeActivity.kt
View file @
9714c385
...
...
@@ -14,6 +14,7 @@ import com.base.scanqr.ui.widget.InputNameDialog.showInputNameDialog
import
com.base.scanqr.utils.BarUtils
import
com.base.scanqr.utils.BitmapUtils.saveBitmapToFile
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.LogEx
import
com.base.scanqr.utils.QRCodeUtils.generateQRCode
...
...
@@ -124,13 +125,13 @@ class MessageCodeActivity : BaseActivity<ActivityMessageCodeBinding>(ActivityMes
toast
(
"Copied to clipboard"
,
true
)
}
binding
.
flSearch
.
setOnClickListener
{
// val intent = intentAddCalendar(event
UIBean)
//
try {
//
startActivity(intent)
//
finish()
//
} catch (e: Exception) {
// toast("No application was found to handle the calendar event
request", true)
//
}
val
intent
=
intentSendSms
(
message
UIBean
)
try
{
startActivity
(
intent
)
finish
()
}
catch
(
e
:
Exception
)
{
toast
(
"No application was found to handle the send message
request"
,
true
)
}
}
}
...
...
app/src/main/java/com/base/scanqr/utils/IntentUtils.kt
View file @
9714c385
package
com.base.scanqr.utils
import
android.
content.ContentValues
import
android.
annotation.SuppressLint
import
android.content.Context
import
android.content.Intent
import
android.net.Uri
...
...
@@ -12,6 +12,7 @@ import androidx.core.content.FileProvider
import
com.base.scanqr.bean.ContractUIBean
import
com.base.scanqr.bean.EmailUIBean
import
com.base.scanqr.bean.EventUIBean
import
com.base.scanqr.bean.MessageUIBean
import
java.io.File
import
java.util.GregorianCalendar
import
java.util.TimeZone
...
...
@@ -153,4 +154,14 @@ object IntentUtils {
val
shareIntent
=
Intent
.
createChooser
(
intent
,
null
)
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
app/src/main/res/layout/activity_message.xml
View file @
9714c385
...
...
@@ -83,8 +83,10 @@
android:layout_marginTop=
"8dp"
android:layout_marginBottom=
"8dp"
android:background=
"@drawable/bg_f4f4f4_15"
android:drawableEnd=
"@mipmap/tianjia"
android:hint=
"@string/to"
android:inputType=
"phone"
android:maxLength=
"25"
android:paddingHorizontal=
"14dp"
android:textColor=
"@color/black"
android:textColorHint=
"#999999"
...
...
app/src/main/res/mipmap-xxhdpi/tianjia.png
0 → 100644
View file @
9714c385
3.12 KB
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment