Commit 6ec4c083 authored by wanglei's avatar wanglei

...添加网页

parent 7c1e756f
...@@ -25,6 +25,12 @@ ...@@ -25,6 +25,12 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.ScanQR" android:theme="@style/Theme.ScanQR"
tools:targetApi="31"> tools:targetApi="31">
<activity
android:name=".ui.website.WebsiteCodeActivity"
android:exported="false" />
<activity
android:name=".ui.website.WebsiteActivity"
android:exported="false" />
<activity <activity
android:name=".ui.start.StartActivity" android:name=".ui.start.StartActivity"
android:exported="true" android:exported="true"
...@@ -75,7 +81,6 @@ ...@@ -75,7 +81,6 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider" android:authorities="${applicationId}.provider"
......
package com.base.scanqr.bean
data class WebsiteUIBean(
var http: String = ""
) : ScanBean(FunctionUIBean.KEY_WEBSITE)
\ No newline at end of file
...@@ -22,7 +22,7 @@ class QRImageAnalyzer() : ImageAnalysis.Analyzer { ...@@ -22,7 +22,7 @@ class QRImageAnalyzer() : ImageAnalysis.Analyzer {
//如需仅检测 Aztec 码和 QR 码 //如需仅检测 Aztec 码和 QR 码
private val options = BarcodeScannerOptions.Builder().setBarcodeFormats( private val options = BarcodeScannerOptions.Builder().setBarcodeFormats(
Barcode.FORMAT_QR_CODE, Barcode.FORMAT_AZTEC Barcode.FORMAT_QR_CODE, Barcode.FORMAT_AZTEC, Barcode.TYPE_URL
).build() ).build()
//获取解析器 //获取解析器
...@@ -60,7 +60,7 @@ class QRImageAnalyzer() : ImageAnalysis.Analyzer { ...@@ -60,7 +60,7 @@ class QRImageAnalyzer() : ImageAnalysis.Analyzer {
val valueType = barcode.valueType val valueType = barcode.valueType
val qrCodeValue = barcode.rawValue ?: "" val qrCodeValue = barcode.rawValue ?: ""
// Barcode.FORMAT_QR_CODE, FORMAT_CODABAR, FORMAT_AZTEC, TYPE_TEXT // 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) parseAction?.invoke(qrCodeValue, valueType)
} }
} }
......
...@@ -6,18 +6,14 @@ import androidx.recyclerview.widget.GridLayoutManager ...@@ -6,18 +6,14 @@ import androidx.recyclerview.widget.GridLayoutManager
import com.base.scanqr.R import com.base.scanqr.R
import com.base.scanqr.base.BaseFragment import com.base.scanqr.base.BaseFragment
import com.base.scanqr.bean.FunctionUIBean 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_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_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.databinding.FragmentCreateBinding import com.base.scanqr.databinding.FragmentCreateBinding
import com.base.scanqr.ui.email.EmailActivity import com.base.scanqr.ui.email.EmailActivity
import com.base.scanqr.ui.text.TextActivity 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.ui.wifi.WifiActivity
import com.base.scanqr.utils.BarUtils import com.base.scanqr.utils.BarUtils
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
...@@ -38,9 +34,9 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding ...@@ -38,9 +34,9 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
FunctionUIBean(KEY_WIFI, R.mipmap.h_wifi, resources.getString(R.string.wifi)), 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_TEXT, R.mipmap.h_text, resources.getString(R.string.text)),
FunctionUIBean(KEY_EMAIL, R.mipmap.h_email, resources.getString(R.string.email)), 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_EVENT, R.mipmap.h_event, resources.getString(R.string.event)),
// FunctionUIBean(KEY_CONTACT, R.mipmap.h_contact, resources.getString(R.string.contact)), // 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_LOCATION, R.mipmap.h_loction, resources.getString(R.string.location)),
// FunctionUIBean(KEY_TELEPHONE, R.mipmap.h_telephone, resources.getString(R.string.telephone)), // FunctionUIBean(KEY_TELEPHONE, R.mipmap.h_telephone, resources.getString(R.string.telephone)),
// FunctionUIBean(KEY_MESSAGE, R.mipmap.h_message, resources.getString(R.string.message)), // FunctionUIBean(KEY_MESSAGE, R.mipmap.h_message, resources.getString(R.string.message)),
...@@ -62,6 +58,10 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding ...@@ -62,6 +58,10 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
KEY_EMAIL -> { KEY_EMAIL -> {
startActivity(Intent(requireContext(), EmailActivity::class.java)) startActivity(Intent(requireContext(), EmailActivity::class.java))
} }
KEY_WEBSITE -> {
startActivity(Intent(requireContext(), WebsiteActivity::class.java))
}
} }
} }
......
...@@ -16,6 +16,7 @@ import com.base.scanqr.bean.FunctionUIBean.Companion.KEY_WEBSITE ...@@ -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.FunctionUIBean.Companion.KEY_WIFI
import com.base.scanqr.bean.ScanBean import com.base.scanqr.bean.ScanBean
import com.base.scanqr.bean.TextUIBean import com.base.scanqr.bean.TextUIBean
import com.base.scanqr.bean.WebsiteUIBean
import com.base.scanqr.bean.WifiUIBean import com.base.scanqr.bean.WifiUIBean
import com.base.scanqr.databinding.ItemHistoryBinding import com.base.scanqr.databinding.ItemHistoryBinding
import com.base.scanqr.ui.adapter.CommonViewHolder import com.base.scanqr.ui.adapter.CommonViewHolder
...@@ -50,7 +51,6 @@ class HistoryAdapter : BaseQuickAdapter<ScanBean, CommonViewHolder>() { ...@@ -50,7 +51,6 @@ class HistoryAdapter : BaseQuickAdapter<ScanBean, CommonViewHolder>() {
KEY_EMAIL -> { KEY_EMAIL -> {
if (item is EmailUIBean) { if (item is EmailUIBean) {
binding.ivIcon.setImageResource(R.mipmap.h_email) binding.ivIcon.setImageResource(R.mipmap.h_email)
} }
} }
...@@ -63,7 +63,9 @@ class HistoryAdapter : BaseQuickAdapter<ScanBean, CommonViewHolder>() { ...@@ -63,7 +63,9 @@ class HistoryAdapter : BaseQuickAdapter<ScanBean, CommonViewHolder>() {
} }
KEY_WEBSITE -> { KEY_WEBSITE -> {
if (item is WebsiteUIBean) {
binding.ivIcon.setImageResource(R.mipmap.h_website)
}
} }
KEY_LOCATION -> { KEY_LOCATION -> {
......
...@@ -13,6 +13,7 @@ import com.base.scanqr.bean.ScanBean ...@@ -13,6 +13,7 @@ import com.base.scanqr.bean.ScanBean
import com.base.scanqr.databinding.FragmentHistoryBinding import com.base.scanqr.databinding.FragmentHistoryBinding
import com.base.scanqr.ui.email.EmailCodeActivity import com.base.scanqr.ui.email.EmailCodeActivity
import com.base.scanqr.ui.text.TextCodeActivity 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.DeleteQRDialog.showDeleteQRDialog
import com.base.scanqr.ui.widget.HistoryMoreDialog.showHistoryMoreDialog import com.base.scanqr.ui.widget.HistoryMoreDialog.showHistoryMoreDialog
import com.base.scanqr.ui.widget.SortByDialog.showSortByDialog import com.base.scanqr.ui.widget.SortByDialog.showSortByDialog
...@@ -79,6 +80,12 @@ class HistoryFragment : BaseFragment<FragmentHistoryBinding>(FragmentHistoryBind ...@@ -79,6 +80,12 @@ class HistoryFragment : BaseFragment<FragmentHistoryBinding>(FragmentHistoryBind
putExtra("data", Gson().toJson(item)) putExtra("data", Gson().toJson(item))
}) })
} }
FunctionUIBean.KEY_WEBSITE -> {
activity?.startActivity(Intent(activity, WebsiteCodeActivity::class.java).apply {
putExtra("data", Gson().toJson(item))
})
}
} }
} }
......
...@@ -6,6 +6,7 @@ import com.base.scanqr.bean.EmailUIBean ...@@ -6,6 +6,7 @@ import com.base.scanqr.bean.EmailUIBean
import com.base.scanqr.bean.FunctionUIBean import com.base.scanqr.bean.FunctionUIBean
import com.base.scanqr.bean.ScanBean import com.base.scanqr.bean.ScanBean
import com.base.scanqr.bean.TextUIBean import com.base.scanqr.bean.TextUIBean
import com.base.scanqr.bean.WebsiteUIBean
import com.base.scanqr.bean.WifiUIBean import com.base.scanqr.bean.WifiUIBean
import com.base.scanqr.utils.LogEx import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.SpJsonUtils import com.base.scanqr.utils.SpJsonUtils
...@@ -30,10 +31,13 @@ class HistoryViewModel() : ViewModel() { ...@@ -30,10 +31,13 @@ class HistoryViewModel() : ViewModel() {
textList.forEach { it.listContent = it.content } textList.forEach { it.listContent = it.content }
val emailList = SpJsonUtils.getSpJsonList<EmailUIBean>(FunctionUIBean.KEY_EMAIL) val emailList = SpJsonUtils.getSpJsonList<EmailUIBean>(FunctionUIBean.KEY_EMAIL)
emailList.forEach { it.listContent = it.address } 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(wifiList)
historyList.addAll(textList) historyList.addAll(textList)
historyList.addAll(emailList) historyList.addAll(emailList)
historyList.addAll(websiteList)
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}")
} }
......
...@@ -28,7 +28,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl ...@@ -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_create, getString(R.string.create)),
HomeTabUIBean(R.drawable.bg_selector_scan, getString(R.string.scan)), 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_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)),
) )
} }
......
...@@ -12,12 +12,12 @@ import androidx.lifecycle.lifecycleScope ...@@ -12,12 +12,12 @@ import androidx.lifecycle.lifecycleScope
import com.base.scanqr.R import com.base.scanqr.R
import com.base.scanqr.base.BaseFragment 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_SCAN
import com.base.scanqr.bean.ScanBean.Companion.CREATE_TYPE_USER
import com.base.scanqr.bean.TextUIBean import com.base.scanqr.bean.TextUIBean
import com.base.scanqr.databinding.FragmentScanBinding import com.base.scanqr.databinding.FragmentScanBinding
import com.base.scanqr.qr.QRImageAnalyzer import com.base.scanqr.qr.QRImageAnalyzer
import com.base.scanqr.ui.email.EmailCodeActivity import com.base.scanqr.ui.email.EmailCodeActivity
import com.base.scanqr.ui.text.TextCodeActivity 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.ui.wifi.WifiCodeActivity
import com.base.scanqr.utils.BitmapUtils.uriToBitmap import com.base.scanqr.utils.BitmapUtils.uriToBitmap
import com.base.scanqr.utils.IntentUtils.intentSafPickImage import com.base.scanqr.utils.IntentUtils.intentSafPickImage
...@@ -116,6 +116,8 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl ...@@ -116,6 +116,8 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
scanJump.set(true) scanJump.set(true)
activity.startActivity(Intent(activity, WifiCodeActivity::class.java).apply { activity.startActivity(Intent(activity, WifiCodeActivity::class.java).apply {
val bean = QRCodeUtils.createWifiBean(qrCodeValue) val bean = QRCodeUtils.createWifiBean(qrCodeValue)
bean.needCreate = true
bean.createType = CREATE_TYPE_SCAN
putExtra("data", Gson().toJson(bean)) putExtra("data", Gson().toJson(bean))
}) })
return return
...@@ -126,6 +128,19 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl ...@@ -126,6 +128,19 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
scanJump.set(true) scanJump.set(true)
activity.startActivity(Intent(activity, EmailCodeActivity::class.java).apply { activity.startActivity(Intent(activity, EmailCodeActivity::class.java).apply {
val bean = QRCodeUtils.createEmailBean(qrCodeValue) 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)) putExtra("data", Gson().toJson(bean))
}) })
return return
...@@ -137,6 +152,7 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl ...@@ -137,6 +152,7 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
activity.startActivity(Intent(activity, TextCodeActivity::class.java).apply { activity.startActivity(Intent(activity, TextCodeActivity::class.java).apply {
val bean = TextUIBean() val bean = TextUIBean()
bean.content = qrCodeValue bean.content = qrCodeValue
bean.needCreate = true
bean.createType = CREATE_TYPE_SCAN bean.createType = CREATE_TYPE_SCAN
putExtra("data", Gson().toJson(bean)) putExtra("data", Gson().toJson(bean))
}) })
......
...@@ -54,7 +54,7 @@ class TextCodeActivity : BaseActivity<ActivityTextCodeBinding>(ActivityTextCodeB ...@@ -54,7 +54,7 @@ class TextCodeActivity : BaseActivity<ActivityTextCodeBinding>(ActivityTextCodeB
} }
if (textUIBean.needCreate) { if (textUIBean.needCreate) {
textUIBean.needCreate = false textUIBean.needCreate = false
SpJsonUtils.addJsonBean<ScanBean>(FunctionUIBean.KEY_TEXT, textUIBean) SpJsonUtils.addJsonBean<TextUIBean>(FunctionUIBean.KEY_TEXT, textUIBean)
} }
} }
}.start() }.start()
......
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
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
...@@ -4,7 +4,9 @@ import android.graphics.Bitmap ...@@ -4,7 +4,9 @@ import android.graphics.Bitmap
import android.graphics.Color import android.graphics.Color
import com.base.scanqr.bean.EmailUIBean import com.base.scanqr.bean.EmailUIBean
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.WebsiteUIBean
import com.base.scanqr.bean.WifiUIBean import com.base.scanqr.bean.WifiUIBean
import com.google.gson.JsonElement
import com.google.zxing.BarcodeFormat import com.google.zxing.BarcodeFormat
import com.google.zxing.EncodeHintType import com.google.zxing.EncodeHintType
import com.google.zxing.WriterException import com.google.zxing.WriterException
...@@ -145,4 +147,18 @@ object QRCodeUtils { ...@@ -145,4 +147,18 @@ object QRCodeUtils {
return emailUIBean 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
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main" android:id="@+id/main"
android:background="@color/white"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.email.EmailActivity"> tools:context=".ui.email.EmailActivity">
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main" android:id="@+id/main"
android:background="@color/white"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.text.TextActivity"> tools:context=".ui.text.TextActivity">
......
<?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
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?> <?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" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.main.SettingsFragment"> 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">
<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>
</FrameLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file \ No newline at end of file
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