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
6ec4c083
Commit
6ec4c083
authored
Dec 26, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...添加网页
parent
7c1e756f
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
730 additions
and
16 deletions
+730
-16
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+6
-1
WebsiteUIBean.kt
app/src/main/java/com/base/scanqr/bean/WebsiteUIBean.kt
+5
-0
QRImageAnalyzer.kt
app/src/main/java/com/base/scanqr/qr/QRImageAnalyzer.kt
+2
-2
CreateFragment.kt
app/src/main/java/com/base/scanqr/ui/main/CreateFragment.kt
+6
-6
HistoryAdapter.kt
app/src/main/java/com/base/scanqr/ui/main/HistoryAdapter.kt
+4
-2
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
+4
-0
MainActivity.kt
app/src/main/java/com/base/scanqr/ui/main/MainActivity.kt
+1
-1
ScanFragment.kt
app/src/main/java/com/base/scanqr/ui/main/ScanFragment.kt
+17
-1
TextCodeActivity.kt
...src/main/java/com/base/scanqr/ui/text/TextCodeActivity.kt
+1
-1
WebsiteActivity.kt
...c/main/java/com/base/scanqr/ui/website/WebsiteActivity.kt
+63
-0
WebsiteCodeActivity.kt
...in/java/com/base/scanqr/ui/website/WebsiteCodeActivity.kt
+103
-0
QRCodeUtils.kt
app/src/main/java/com/base/scanqr/utils/QRCodeUtils.kt
+16
-0
activity_email.xml
app/src/main/res/layout/activity_email.xml
+1
-0
activity_text.xml
app/src/main/res/layout/activity_text.xml
+1
-0
activity_website.xml
app/src/main/res/layout/activity_website.xml
+93
-0
activity_website_code.xml
app/src/main/res/layout/activity_website_code.xml
+296
-0
fragment_settings.xml
app/src/main/res/layout/fragment_settings.xml
+104
-2
jiantou.png
app/src/main/res/mipmap-xxhdpi/jiantou.png
+0
-0
scancontrol.png
app/src/main/res/mipmap-xxhdpi/scancontrol.png
+0
-0
xianhua.png
app/src/main/res/mipmap-xxhdpi/xianhua.png
+0
-0
No files found.
app/src/main/AndroidManifest.xml
View file @
6ec4c083
...
...
@@ -25,6 +25,12 @@
android:supportsRtl=
"true"
android:theme=
"@style/Theme.ScanQR"
tools:targetApi=
"31"
>
<activity
android:name=
".ui.website.WebsiteCodeActivity"
android:exported=
"false"
/>
<activity
android:name=
".ui.website.WebsiteActivity"
android:exported=
"false"
/>
<activity
android:name=
".ui.start.StartActivity"
android:exported=
"true"
...
...
@@ -75,7 +81,6 @@
android:screenOrientation=
"portrait"
tools:ignore=
"DiscouragedApi,LockedOrientationActivity"
/>
<provider
android:name=
"androidx.core.content.FileProvider"
android:authorities=
"${applicationId}.provider"
...
...
app/src/main/java/com/base/scanqr/bean/WebsiteUIBean.kt
0 → 100644
View file @
6ec4c083
package
com.base.scanqr.bean
data class
WebsiteUIBean
(
var
http
:
String
=
""
)
:
ScanBean
(
FunctionUIBean
.
KEY_WEBSITE
)
\ No newline at end of file
app/src/main/java/com/base/scanqr/qr/QRImageAnalyzer.kt
View file @
6ec4c083
...
...
@@ -22,7 +22,7 @@ class QRImageAnalyzer() : ImageAnalysis.Analyzer {
//如需仅检测 Aztec 码和 QR 码
private
val
options
=
BarcodeScannerOptions
.
Builder
().
setBarcodeFormats
(
Barcode
.
FORMAT_QR_CODE
,
Barcode
.
FORMAT_AZTEC
Barcode
.
FORMAT_QR_CODE
,
Barcode
.
FORMAT_AZTEC
,
Barcode
.
TYPE_URL
).
build
()
//获取解析器
...
...
@@ -60,7 +60,7 @@ class QRImageAnalyzer() : ImageAnalysis.Analyzer {
val
valueType
=
barcode
.
valueType
val
qrCodeValue
=
barcode
.
rawValue
?:
""
// Barcode.FORMAT_QR_CODE, FORMAT_CODABAR, FORMAT_AZTEC, TYPE_TEXT
LogEx
.
logDebug
(
TAG
,
"valueType=$valueType"
)
LogEx
.
logDebug
(
TAG
,
"valueType=$valueType
qrCodeValue=$qrCodeValue
"
)
parseAction
?.
invoke
(
qrCodeValue
,
valueType
)
}
}
...
...
app/src/main/java/com/base/scanqr/ui/main/CreateFragment.kt
View file @
6ec4c083
...
...
@@ -6,18 +6,14 @@ import androidx.recyclerview.widget.GridLayoutManager
import
com.base.scanqr.R
import
com.base.scanqr.base.BaseFragment
import
com.base.scanqr.bean.FunctionUIBean
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_CONTACT
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_EMAIL
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_EVENT
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_LOCATION
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_MESSAGE
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.databinding.FragmentCreateBinding
import
com.base.scanqr.ui.email.EmailActivity
import
com.base.scanqr.ui.text.TextActivity
import
com.base.scanqr.ui.website.WebsiteActivity
import
com.base.scanqr.ui.wifi.WifiActivity
import
com.base.scanqr.utils.BarUtils
import
com.gyf.immersionbar.ktx.immersionBar
...
...
@@ -38,9 +34,9 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
FunctionUIBean
(
KEY_WIFI
,
R
.
mipmap
.
h_wifi
,
resources
.
getString
(
R
.
string
.
wifi
)),
FunctionUIBean
(
KEY_TEXT
,
R
.
mipmap
.
h_text
,
resources
.
getString
(
R
.
string
.
text
)),
FunctionUIBean
(
KEY_EMAIL
,
R
.
mipmap
.
h_email
,
resources
.
getString
(
R
.
string
.
email
)),
FunctionUIBean
(
KEY_WEBSITE
,
R
.
mipmap
.
h_website
,
resources
.
getString
(
R
.
string
.
website
)),
// FunctionUIBean(KEY_EVENT, R.mipmap.h_event, resources.getString(R.string.event)),
// FunctionUIBean(KEY_CONTACT, R.mipmap.h_contact, resources.getString(R.string.contact)),
// FunctionUIBean(KEY_WEBSITE, R.mipmap.h_website, resources.getString(R.string.website)),
// FunctionUIBean(KEY_LOCATION, R.mipmap.h_loction, resources.getString(R.string.location)),
// FunctionUIBean(KEY_TELEPHONE, R.mipmap.h_telephone, resources.getString(R.string.telephone)),
// FunctionUIBean(KEY_MESSAGE, R.mipmap.h_message, resources.getString(R.string.message)),
...
...
@@ -62,6 +58,10 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
KEY_EMAIL
->
{
startActivity
(
Intent
(
requireContext
(),
EmailActivity
::
class
.
java
))
}
KEY_WEBSITE
->
{
startActivity
(
Intent
(
requireContext
(),
WebsiteActivity
::
class
.
java
))
}
}
}
...
...
app/src/main/java/com/base/scanqr/ui/main/HistoryAdapter.kt
View file @
6ec4c083
...
...
@@ -16,6 +16,7 @@ import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_WEBSITE
import
com.base.scanqr.bean.FunctionUIBean.Companion.KEY_WIFI
import
com.base.scanqr.bean.ScanBean
import
com.base.scanqr.bean.TextUIBean
import
com.base.scanqr.bean.WebsiteUIBean
import
com.base.scanqr.bean.WifiUIBean
import
com.base.scanqr.databinding.ItemHistoryBinding
import
com.base.scanqr.ui.adapter.CommonViewHolder
...
...
@@ -50,7 +51,6 @@ class HistoryAdapter : BaseQuickAdapter<ScanBean, CommonViewHolder>() {
KEY_EMAIL
->
{
if
(
item
is
EmailUIBean
)
{
binding
.
ivIcon
.
setImageResource
(
R
.
mipmap
.
h_email
)
}
}
...
...
@@ -63,7 +63,9 @@ class HistoryAdapter : BaseQuickAdapter<ScanBean, CommonViewHolder>() {
}
KEY_WEBSITE
->
{
if
(
item
is
WebsiteUIBean
)
{
binding
.
ivIcon
.
setImageResource
(
R
.
mipmap
.
h_website
)
}
}
KEY_LOCATION
->
{
...
...
app/src/main/java/com/base/scanqr/ui/main/HistoryFragment.kt
View file @
6ec4c083
...
...
@@ -13,6 +13,7 @@ import com.base.scanqr.bean.ScanBean
import
com.base.scanqr.databinding.FragmentHistoryBinding
import
com.base.scanqr.ui.email.EmailCodeActivity
import
com.base.scanqr.ui.text.TextCodeActivity
import
com.base.scanqr.ui.website.WebsiteCodeActivity
import
com.base.scanqr.ui.widget.DeleteQRDialog.showDeleteQRDialog
import
com.base.scanqr.ui.widget.HistoryMoreDialog.showHistoryMoreDialog
import
com.base.scanqr.ui.widget.SortByDialog.showSortByDialog
...
...
@@ -79,6 +80,12 @@ class HistoryFragment : BaseFragment<FragmentHistoryBinding>(FragmentHistoryBind
putExtra
(
"data"
,
Gson
().
toJson
(
item
))
})
}
FunctionUIBean
.
KEY_WEBSITE
->
{
activity
?.
startActivity
(
Intent
(
activity
,
WebsiteCodeActivity
::
class
.
java
).
apply
{
putExtra
(
"data"
,
Gson
().
toJson
(
item
))
})
}
}
}
...
...
app/src/main/java/com/base/scanqr/ui/main/HistoryViewModel.kt
View file @
6ec4c083
...
...
@@ -6,6 +6,7 @@ import com.base.scanqr.bean.EmailUIBean
import
com.base.scanqr.bean.FunctionUIBean
import
com.base.scanqr.bean.ScanBean
import
com.base.scanqr.bean.TextUIBean
import
com.base.scanqr.bean.WebsiteUIBean
import
com.base.scanqr.bean.WifiUIBean
import
com.base.scanqr.utils.LogEx
import
com.base.scanqr.utils.SpJsonUtils
...
...
@@ -30,10 +31,13 @@ class HistoryViewModel() : ViewModel() {
textList
.
forEach
{
it
.
listContent
=
it
.
content
}
val
emailList
=
SpJsonUtils
.
getSpJsonList
<
EmailUIBean
>(
FunctionUIBean
.
KEY_EMAIL
)
emailList
.
forEach
{
it
.
listContent
=
it
.
address
}
val
websiteList
=
SpJsonUtils
.
getSpJsonList
<
WebsiteUIBean
>(
FunctionUIBean
.
KEY_WEBSITE
)
websiteList
.
forEach
{
it
.
listContent
=
it
.
http
}
historyList
.
addAll
(
wifiList
)
historyList
.
addAll
(
textList
)
historyList
.
addAll
(
emailList
)
historyList
.
addAll
(
websiteList
)
historyList
.
forEach
{
LogEx
.
logDebug
(
TAG
,
"${it.scanType} ${it.createTime} ${it.createType} ${it.listContent}"
)
}
...
...
app/src/main/java/com/base/scanqr/ui/main/MainActivity.kt
View file @
6ec4c083
...
...
@@ -28,7 +28,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
HomeTabUIBean
(
R
.
drawable
.
bg_selector_create
,
getString
(
R
.
string
.
create
)),
HomeTabUIBean
(
R
.
drawable
.
bg_selector_scan
,
getString
(
R
.
string
.
scan
)),
HomeTabUIBean
(
R
.
drawable
.
bg_selector_history
,
getString
(
R
.
string
.
history
)),
//
HomeTabUIBean(R.drawable.bg_selector_settings, getString(R.string.settings)),
HomeTabUIBean
(
R
.
drawable
.
bg_selector_settings
,
getString
(
R
.
string
.
settings
)),
)
}
...
...
app/src/main/java/com/base/scanqr/ui/main/ScanFragment.kt
View file @
6ec4c083
...
...
@@ -12,12 +12,12 @@ import androidx.lifecycle.lifecycleScope
import
com.base.scanqr.R
import
com.base.scanqr.base.BaseFragment
import
com.base.scanqr.bean.ScanBean.Companion.CREATE_TYPE_SCAN
import
com.base.scanqr.bean.ScanBean.Companion.CREATE_TYPE_USER
import
com.base.scanqr.bean.TextUIBean
import
com.base.scanqr.databinding.FragmentScanBinding
import
com.base.scanqr.qr.QRImageAnalyzer
import
com.base.scanqr.ui.email.EmailCodeActivity
import
com.base.scanqr.ui.text.TextCodeActivity
import
com.base.scanqr.ui.website.WebsiteCodeActivity
import
com.base.scanqr.ui.wifi.WifiCodeActivity
import
com.base.scanqr.utils.BitmapUtils.uriToBitmap
import
com.base.scanqr.utils.IntentUtils.intentSafPickImage
...
...
@@ -116,6 +116,8 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
scanJump
.
set
(
true
)
activity
.
startActivity
(
Intent
(
activity
,
WifiCodeActivity
::
class
.
java
).
apply
{
val
bean
=
QRCodeUtils
.
createWifiBean
(
qrCodeValue
)
bean
.
needCreate
=
true
bean
.
createType
=
CREATE_TYPE_SCAN
putExtra
(
"data"
,
Gson
().
toJson
(
bean
))
})
return
...
...
@@ -126,6 +128,19 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
scanJump
.
set
(
true
)
activity
.
startActivity
(
Intent
(
activity
,
EmailCodeActivity
::
class
.
java
).
apply
{
val
bean
=
QRCodeUtils
.
createEmailBean
(
qrCodeValue
)
bean
.
needCreate
=
true
bean
.
createType
=
CREATE_TYPE_SCAN
putExtra
(
"data"
,
Gson
().
toJson
(
bean
))
})
return
}
if
(
QRCodeUtils
.
isWebsiteQR
(
qrCodeValue
))
{
if
(
scanJump
.
get
())
return
scanJump
.
set
(
true
)
activity
.
startActivity
(
Intent
(
activity
,
WebsiteCodeActivity
::
class
.
java
).
apply
{
val
bean
=
QRCodeUtils
.
createWebsiteBean
(
qrCodeValue
)
bean
.
needCreate
=
true
bean
.
createType
=
CREATE_TYPE_SCAN
putExtra
(
"data"
,
Gson
().
toJson
(
bean
))
})
return
...
...
@@ -137,6 +152,7 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
activity
.
startActivity
(
Intent
(
activity
,
TextCodeActivity
::
class
.
java
).
apply
{
val
bean
=
TextUIBean
()
bean
.
content
=
qrCodeValue
bean
.
needCreate
=
true
bean
.
createType
=
CREATE_TYPE_SCAN
putExtra
(
"data"
,
Gson
().
toJson
(
bean
))
})
...
...
app/src/main/java/com/base/scanqr/ui/text/TextCodeActivity.kt
View file @
6ec4c083
...
...
@@ -54,7 +54,7 @@ class TextCodeActivity : BaseActivity<ActivityTextCodeBinding>(ActivityTextCodeB
}
if
(
textUIBean
.
needCreate
)
{
textUIBean
.
needCreate
=
false
SpJsonUtils
.
addJsonBean
<
Scan
Bean
>(
FunctionUIBean
.
KEY_TEXT
,
textUIBean
)
SpJsonUtils
.
addJsonBean
<
TextUI
Bean
>(
FunctionUIBean
.
KEY_TEXT
,
textUIBean
)
}
}
}.
start
()
...
...
app/src/main/java/com/base/scanqr/ui/website/WebsiteActivity.kt
0 → 100644
View file @
6ec4c083
package
com.base.scanqr.ui.website
import
android.content.Intent
import
android.text.Editable
import
android.text.TextWatcher
import
androidx.activity.addCallback
import
androidx.core.view.updatePadding
import
com.base.scanqr.base.BaseActivity
import
com.base.scanqr.bean.WebsiteUIBean
import
com.base.scanqr.databinding.ActivityWebsiteBinding
import
com.base.scanqr.utils.BarUtils
import
com.base.scanqr.utils.ToastUtils.toast
import
com.google.gson.Gson
import
com.gyf.immersionbar.ktx.immersionBar
class
WebsiteActivity
:
BaseActivity
<
ActivityWebsiteBinding
>(
ActivityWebsiteBinding
::
inflate
)
{
private
var
websiteUIBean
=
WebsiteUIBean
()
override
fun
initView
()
{
super
.
initView
()
binding
.
clTop
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
}
override
fun
initListener
()
{
super
.
initListener
()
onBackPressedDispatcher
.
addCallback
{
finishToMainTop
()
}
binding
.
flBack
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
binding
.
edit
.
addTextChangedListener
(
object
:
TextWatcher
{
override
fun
beforeTextChanged
(
s
:
CharSequence
?,
start
:
Int
,
count
:
Int
,
after
:
Int
)
{
}
override
fun
onTextChanged
(
s
:
CharSequence
?,
start
:
Int
,
before
:
Int
,
count
:
Int
)
{
}
override
fun
afterTextChanged
(
s
:
Editable
?)
{
websiteUIBean
.
http
=
s
.
toString
()
}
})
binding
.
flQueren
.
setOnClickListener
{
if
(
websiteUIBean
.
http
.
startsWith
(
"http://"
)
||
websiteUIBean
.
http
.
startsWith
(
"https://"
))
{
startActivity
(
Intent
(
this
,
WebsiteCodeActivity
::
class
.
java
).
apply
{
putExtra
(
"data"
,
Gson
().
toJson
(
websiteUIBean
))
})
}
else
{
toast
(
"This is not a valid website address"
,
true
)
}
}
}
override
fun
configSystemBar
()
{
immersionBar
{
statusBarColor
(
"#FFFFFFFF"
)
statusBarDarkFont
(
true
)
}
}
}
\ No newline at end of file
app/src/main/java/com/base/scanqr/ui/website/WebsiteCodeActivity.kt
0 → 100644
View file @
6ec4c083
package
com.base.scanqr.ui.website
import
android.os.Environment
import
androidx.activity.addCallback
import
androidx.core.view.updatePadding
import
com.base.scanqr.BuildConfig
import
com.base.scanqr.R
import
com.base.scanqr.base.BaseActivity
import
com.base.scanqr.bean.FunctionUIBean
import
com.base.scanqr.bean.WebsiteUIBean
import
com.base.scanqr.databinding.ActivityWebsiteCodeBinding
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.intentShareImage
import
com.base.scanqr.utils.LogEx
import
com.base.scanqr.utils.QRCodeUtils.generateQRCode
import
com.base.scanqr.utils.SpJsonUtils
import
com.base.scanqr.utils.ToastUtils.toast
import
com.google.gson.Gson
import
java.io.File
class
WebsiteCodeActivity
:
BaseActivity
<
ActivityWebsiteCodeBinding
>(
ActivityWebsiteCodeBinding
::
inflate
)
{
private
var
websiteUIBean
=
WebsiteUIBean
()
private
var
tempImage
:
String
=
""
override
fun
initView
()
{
super
.
initView
()
binding
.
clTop
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
val
data
=
intent
.
extras
?.
getString
(
"data"
)
data
?.
let
{
websiteUIBean
=
Gson
().
fromJson
(
data
,
WebsiteUIBean
::
class
.
java
)
binding
.
tvHttp
.
text
=
websiteUIBean
.
http
}
Thread
{
val
bitmap
=
generateQRCode
(
websiteUIBean
.
http
,
735
,
735
,
5
)
runOnUiThread
{
binding
.
ivQr
.
setImageBitmap
(
bitmap
)
val
file
=
File
(
cacheDir
,
System
.
currentTimeMillis
().
toString
()
+
".jpg"
)
bitmap
?.
let
{
val
flag
=
saveBitmapToFile
(
it
,
file
.
absolutePath
)
LogEx
.
logDebug
(
TAG
,
"flag=$flag tempImage=${file.absolutePath}"
)
if
(
flag
)
{
tempImage
=
file
.
absolutePath
}
}
if
(
websiteUIBean
.
needCreate
)
{
websiteUIBean
.
needCreate
=
false
SpJsonUtils
.
addJsonBean
<
WebsiteUIBean
>(
FunctionUIBean
.
KEY_WEBSITE
,
websiteUIBean
)
}
}
}.
start
()
}
override
fun
initListener
()
{
super
.
initListener
()
onBackPressedDispatcher
.
addCallback
{
finishToMainTop
()
}
binding
.
flBack
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
binding
.
llShare
.
setOnClickListener
{
val
intent
=
intentShareImage
(
this
,
tempImage
)
runCatching
{
startActivity
(
intent
)
}
}
binding
.
llDownload
.
setOnClickListener
{
kotlin
.
runCatching
{
val
appFile
=
File
(
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DOWNLOADS
),
this
.
resources
.
getString
(
R
.
string
.
app_name
)
)
if
(!
appFile
.
exists
())
appFile
.
mkdirs
()
var
newName
=
File
(
tempImage
).
name
showInputNameDialog
(
newName
)
{
name
->
if
(
name
.
endsWith
(
".jpg"
))
{
name
.
also
{
newName
=
it
}
}
else
{
newName
=
"$name.jpg"
}
val
downFile
=
File
(
appFile
,
newName
)
downFile
.
createNewFile
()
File
(
tempImage
).
copyTo
(
downFile
,
true
)
toast
(
"Save to:${appFile.absolutePath}"
,
true
)
}
}
}
binding
.
llCopy
.
setOnClickListener
{
copyText
(
TAG
,
websiteUIBean
.
http
)
toast
(
"Copied to clipboard"
,
true
)
}
binding
.
flSearch
.
setOnClickListener
{
}
}
}
\ No newline at end of file
app/src/main/java/com/base/scanqr/utils/QRCodeUtils.kt
View file @
6ec4c083
...
...
@@ -4,7 +4,9 @@ import android.graphics.Bitmap
import
android.graphics.Color
import
com.base.scanqr.bean.EmailUIBean
import
com.base.scanqr.bean.ScanBean.Companion.CREATE_TYPE_SCAN
import
com.base.scanqr.bean.WebsiteUIBean
import
com.base.scanqr.bean.WifiUIBean
import
com.google.gson.JsonElement
import
com.google.zxing.BarcodeFormat
import
com.google.zxing.EncodeHintType
import
com.google.zxing.WriterException
...
...
@@ -145,4 +147,18 @@ object QRCodeUtils {
return
emailUIBean
}
fun
isWebsiteQR
(
qrCodeValue
:
String
):
Boolean
{
val
flag
=
qrCodeValue
.
startsWith
(
"http://"
)
||
qrCodeValue
.
startsWith
(
"https://"
)
if
(
flag
)
{
return
true
}
return
false
}
fun
createWebsiteBean
(
qrCodeValue
:
String
):
WebsiteUIBean
{
val
websiteUIBean
=
WebsiteUIBean
()
websiteUIBean
.
http
=
qrCodeValue
return
websiteUIBean
}
}
\ No newline at end of file
app/src/main/res/layout/activity_email.xml
View file @
6ec4c083
...
...
@@ -3,6 +3,7 @@
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/main"
android:background=
"@color/white"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".ui.email.EmailActivity"
>
...
...
app/src/main/res/layout/activity_text.xml
View file @
6ec4c083
...
...
@@ -3,6 +3,7 @@
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/main"
android:background=
"@color/white"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".ui.text.TextActivity"
>
...
...
app/src/main/res/layout/activity_website.xml
0 → 100644
View file @
6ec4c083
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/main"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".ui.website.WebsiteActivity"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/cl_top"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintTop_toTopOf=
"parent"
>
<FrameLayout
android:id=
"@+id/fl_back"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:paddingHorizontal=
"16dp"
android:paddingVertical=
"12dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@mipmap/fanhui"
tools:ignore=
"ContentDescription"
/>
</FrameLayout>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"4dp"
android:text=
"Website"
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textStyle=
"bold"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/fl_back"
app:layout_constraintTop_toTopOf=
"parent"
/>
<FrameLayout
android:id=
"@+id/fl_queren"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:padding=
"20dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@mipmap/queren"
tools:ignore=
"ContentDescription"
/>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
app:layout_constraintTop_toBottomOf=
"@id/cl_top"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"18dp"
android:text=
"Web address"
android:textColor=
"#6473F8"
android:textSize=
"16sp"
/>
<EditText
android:id=
"@+id/edit"
android:layout_width=
"match_parent"
android:layout_height=
"52dp"
android:layout_marginHorizontal=
"16dp"
android:layout_marginTop=
"8dp"
android:layout_marginBottom=
"8dp"
android:background=
"@drawable/bg_f4f4f4_15"
android:hint=
"http://"
android:inputType=
"textUri"
android:paddingHorizontal=
"14dp"
android:textColor=
"@color/black"
android:textColorHint=
"#999999"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/activity_website_code.xml
0 → 100644
View file @
6ec4c083
This diff is collapsed.
Click to expand it.
app/src/main/res/layout/fragment_settings.xml
View file @
6ec4c083
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".ui.main.SettingsFragment"
>
<FrameLayout
android:id=
"@+id/fl_top"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintTop_toTopOf=
"parent"
>
</FrameLayout>
\ No newline at end of file
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginVertical=
"8dp"
android:layout_marginStart=
"16dp"
android:text=
"@string/settings"
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textStyle=
"bold"
/>
</FrameLayout>
<androidx.core.widget.NestedScrollView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintTop_toBottomOf=
"@id/fl_top"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<androidx.cardview.widget.CardView
android:layout_width=
"match_parent"
android:layout_height=
"60dp"
android:layout_marginHorizontal=
"16dp"
android:layout_marginTop=
"20dp"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"3dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"15dp"
android:src=
"@mipmap/scancontrol"
/>
<TextView
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginHorizontal=
"13dp"
android:layout_weight=
"1"
android:includeFontPadding=
"false"
android:text=
"Scan control"
android:textColor=
"@color/black"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginEnd=
"14dp"
android:src=
"@mipmap/jiantou"
/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"20dp"
android:text=
"Notification"
android:textColor=
"#838383"
android:textSize=
"16sp"
/>
<androidx.cardview.widget.CardView
android:layout_width=
"match_parent"
android:layout_height=
"114dp"
android:layout_marginHorizontal=
"16dp"
android:layout_marginTop=
"15dp"
app:cardCornerRadius=
"10dp"
app:cardElevation=
"3dp"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/mipmap-xxhdpi/jiantou.png
0 → 100644
View file @
6ec4c083
649 Bytes
app/src/main/res/mipmap-xxhdpi/scancontrol.png
0 → 100644
View file @
6ec4c083
9.25 KB
app/src/main/res/mipmap-xxhdpi/xianhua.png
0 → 100644
View file @
6ec4c083
2 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