Commit 103d3dbe authored by wanglei's avatar wanglei

...

parent d56ba35a
package com.base.scanqrclear.bean
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_ADDRESS
data class AddressUIBean(
val longitude: String,
val latitude: String,
) : ScanBean(KEY_ADDRESS) {
// 毛主席像:30.65889627699442, 104.0657291232703 google地图格式 latitude, longitude
// geo:104.065,30.658
companion object {
fun isAddressQR(qrCodeValue: String): Boolean {
return qrCodeValue.startsWith("geo:")
}
fun createAddressUIBean(qrCodeValue: String): AddressUIBean {
var longitude = ""
var latitude = ""
kotlin.runCatching {
val sub = qrCodeValue.subSequence("geo:".length, qrCodeValue.length)
val split = sub.split(",")
longitude = split[0]
latitude = split[1]
}
return AddressUIBean(longitude, latitude)
}
fun AddressUIBean.createAddressUIBeanQrString(): String {
return "geo:$longitude,$latitude"
}
}
}
......@@ -31,5 +31,6 @@ class FunctionUIBean(
const val KEY_X = "key_x"
const val KEY_SPOTIFY = "key_spotify"
const val KEY_PAYPAL = "key_paypal"
const val KEY_ADDRESS = "key_address"
}
}
\ No newline at end of file
......@@ -13,8 +13,11 @@ import androidx.core.view.updatePadding
import com.base.scanqrclear.R
import com.base.scanqrclear.ads.AdsMgr
import com.base.scanqrclear.base.BaseActivity
import com.base.scanqrclear.bean.AddressUIBean
import com.base.scanqrclear.bean.AddressUIBean.Companion.createAddressUIBeanQrString
import com.base.scanqrclear.bean.FacebookUIBean
import com.base.scanqrclear.bean.FacebookUIBean.Companion.createFacebookQrString
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_ADDRESS
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_FACEBOOK
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_FOOD
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_INSTAGRAM
......@@ -145,6 +148,53 @@ class QrResultsActivity : BaseActivity<ActivityQrResultsBinding>(ActivityQrResul
generateQR()
}
KEY_ADDRESS -> {
bean = Gson().fromJson(data, AddressUIBean::class.java)
qrString = (bean as AddressUIBean).createAddressUIBeanQrString()
binding.ivQrIcon.setImageResource(R.mipmap.h_address)
binding.tvQrTypeTitle.text = "Address"
val ss = SpannableStringBuilder("Longitude:${(bean as AddressUIBean).longitude}")
ss.setSpan(
ForegroundColorSpan(Color.parseColor("#666666")),
0, // 开始位置
"Longitude:".length, // 结束位置
Spanned.SPAN_INCLUSIVE_INCLUSIVE
)
ss.setSpan(
ForegroundColorSpan(Color.BLACK), // 设置颜色为黑色
"Longitude:".length, // 开始位置
ss.length, // 结束位置
Spanned.SPAN_INCLUSIVE_INCLUSIVE
)
binding.tvQrContent.text = ss
binding.tvQrContent.append("\n")
val ss2 = SpannableStringBuilder("Latitude:${(bean as AddressUIBean).latitude}")
ss2.setSpan(
ForegroundColorSpan(Color.parseColor("#666666")),
0, // 开始位置
"Latitude:".length, // 结束位置
Spanned.SPAN_INCLUSIVE_INCLUSIVE
)
ss2.setSpan(
ForegroundColorSpan(Color.BLACK), // 设置颜色为黑色
"Latitude:".length, // 开始位置
ss2.length, // 结束位置
Spanned.SPAN_INCLUSIVE_INCLUSIVE
)
binding.tvQrContent.append(ss2)
generateQR()
}
KEY_SPOTIFY -> {
bean = Gson().fromJson(data, SpotifyUIBean::class.java)
qrString = (bean as SpotifyUIBean).createSpotifyQrString()
......@@ -230,7 +280,7 @@ class QrResultsActivity : BaseActivity<ActivityQrResultsBinding>(ActivityQrResul
private fun generateQR() {
Thread {
LogEx.logDebug(TAG, "messageQrString=$qrString")
val bitmap = generateQRCode(qrString, 735, 735, 2)
val bitmap = generateQRCode(qrString, 735, 735, 0)
runOnUiThread {
binding.ivQr.setImageBitmap(bitmap)
val file = File(cacheDir, System.currentTimeMillis().toString() + ".jpg")
......
package com.base.scanqrclear.ui.addressqr
import android.app.Activity
import android.app.AlertDialog
import android.content.Intent
import android.text.Editable
import android.view.Gravity
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.widget.addTextChangedListener
import com.base.scanqrclear.R
import com.base.scanqrclear.ads.AdsMgr
import com.base.scanqrclear.ads.AdsShowCallBack
import com.base.scanqrclear.bean.AddressUIBean
import com.base.scanqrclear.bean.AddressUIBean.Companion.createAddressUIBeanQrString
import com.base.scanqrclear.databinding.DialogAddressBinding
import com.base.scanqrclear.qr.QrStyleActivity
object AddressDialog {
fun Activity.showAddressDialog() {
val dialog = AlertDialog.Builder(this).create()
val binding = DialogAddressBinding.inflate(LayoutInflater.from(this))
dialog.setView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val params = dialog.window?.attributes
params?.width = ConstraintLayout.LayoutParams.MATCH_PARENT
// params?.height = resources.getDimensionPixelOffset(R.dimen.dp_400)
params?.gravity = Gravity.BOTTOM
// params?.y = 50
dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom)
binding.flClose.setOnClickListener {
dialog.dismiss()
}
binding.editLongitude.addTextChangedListener { s: Editable? ->
binding.tvBtn.isEnabled = !s.isNullOrEmpty() && !binding.editLatitude.text.isNullOrEmpty()
}
binding.editLatitude.addTextChangedListener { s: Editable? ->
binding.tvBtn.isEnabled = !s.isNullOrEmpty() && !binding.editLongitude.text.isNullOrEmpty()
}
val jump = {
dialog.dismiss()
val longitude = binding.editLongitude.text.toString()
val latitude = binding.editLatitude.text.toString()
val bean = AddressUIBean(longitude, latitude)
startActivity(Intent(this, QrStyleActivity::class.java).apply {
putExtra("qrString", bean.createAddressUIBeanQrString())
})
}
binding.tvBtn.setOnClickListener {
AdsMgr.showInsert(this, false, object : AdsShowCallBack() {
override fun close(where: Int) {
jump.invoke()
}
override fun failed(where: Int) {
jump.invoke()
}
override fun googleFailed(where: Int) {
jump.invoke()
}
})
}
}
}
\ No newline at end of file
......@@ -11,6 +11,7 @@ import com.base.scanqrclear.ads.AdsMgr
import com.base.scanqrclear.ads.AdsShowCallBack
import com.base.scanqrclear.base.BaseFragment
import com.base.scanqrclear.bean.FunctionUIBean
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_ADDRESS
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_CONTACT
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_EMAIL
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_EVENT
......@@ -32,6 +33,7 @@ import com.base.scanqrclear.databinding.FragmentCreateBinding
import com.base.scanqrclear.luma.WeatherInterface
import com.base.scanqrclear.luma.WeatherUtils
import com.base.scanqrclear.qr.QrStyleActivity
import com.base.scanqrclear.ui.addressqr.AddressDialog.showAddressDialog
import com.base.scanqrclear.ui.concatadapt.AdAdapter
import com.base.scanqrclear.ui.contact.ContractActivity
import com.base.scanqrclear.ui.email.EmailActivity
......@@ -93,6 +95,7 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
FunctionUIBean(KEY_X, R.mipmap.h_x, "X"),
FunctionUIBean(KEY_SPOTIFY, R.mipmap.h_spotify, "Spotify"),
FunctionUIBean(KEY_PAYPAL, R.mipmap.h_paypal, "Paypal"),
FunctionUIBean(KEY_ADDRESS, R.mipmap.h_address, resources.getString(R.string.address)),
)
}
......@@ -270,6 +273,11 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
val activity = requireActivity() as MainActivity?
activity?.showYoutubeDialog()
}
KEY_ADDRESS -> {
val activity = requireActivity() as MainActivity?
activity?.showAddressDialog()
}
}
}
......
......@@ -14,6 +14,8 @@ import com.base.scanqrclear.R
import com.base.scanqrclear.ads.AdsMgr
import com.base.scanqrclear.ads.AdsShowCallBack
import com.base.scanqrclear.base.BaseFragment
import com.base.scanqrclear.bean.AddressUIBean.Companion.createAddressUIBean
import com.base.scanqrclear.bean.AddressUIBean.Companion.isAddressQR
import com.base.scanqrclear.bean.ContractUIBean.Companion.createContractBean
import com.base.scanqrclear.bean.ContractUIBean.Companion.isContractQR
import com.base.scanqrclear.bean.EmailUIBean.Companion.createEmailBean
......@@ -22,6 +24,7 @@ import com.base.scanqrclear.bean.EventUIBean.Companion.createEventBean
import com.base.scanqrclear.bean.EventUIBean.Companion.isEventQR
import com.base.scanqrclear.bean.FacebookUIBean.Companion.createFaceBookUIBean
import com.base.scanqrclear.bean.FacebookUIBean.Companion.isFacebookQR
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_ADDRESS
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_FACEBOOK
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_FOOD
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_INSTAGRAM
......@@ -354,12 +357,10 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
override fun failed(where: Int) {
jumpWebsiteCodeActivity(activity, qrCodeValue)
}
override fun googleFailed(where: Int) {
jumpWebsiteCodeActivity(activity, qrCodeValue)
}
})
return
......@@ -458,6 +459,25 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
return
}
if (isAddressQR(qrCodeValue)) {
if (scanJump.get()) return
scanJump.set(true)
AdsMgr.showInsert(activity, true, object : AdsShowCallBack() {
override fun close(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_ADDRESS)
}
override fun failed(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_ADDRESS)
}
override fun googleFailed(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_ADDRESS)
}
})
return
}
if (valueType == Barcode.TYPE_TEXT) {
if (scanJump.get()) return
scanJump.set(true)
......@@ -511,6 +531,7 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
KEY_SPOTIFY -> createSpotifyUIBean(qrCodeValue)
KEY_PAYPAL -> createPaypalUIBean(qrCodeValue)
KEY_YOUTUBE -> createYoutubeUIBean(qrCodeValue)
KEY_ADDRESS -> createAddressUIBean(qrCodeValue)
KEY_FOOD -> otherScanBean
else -> ScanBean()
}
......
<?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:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_f0f1f5_20">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:src="@mipmap/h_address"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription,ImageContrastCheck" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="Address"
android:textColor="@color/black"
android:textSize="19sp"
app:layout_constraintBottom_toBottomOf="@id/iv"
app:layout_constraintStart_toEndOf="@id/iv"
app:layout_constraintTop_toTopOf="@id/iv"
tools:ignore="HardcodedText" />
<FrameLayout
android:id="@+id/flClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:padding="10dp"
app:layout_constraintBottom_toBottomOf="@id/iv"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/iv">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/guanbi"
tools:ignore="ContentDescription,ImageContrastCheck" />
</FrameLayout>
<LinearLayout
android:id="@+id/llLongitude"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="12dp"
android:layout_marginTop="14dp"
android:layout_marginEnd="16dp"
android:background="@drawable/bg_ffffff_5"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@id/iv">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="12dp"
android:text="@string/longitude"
android:textColor="@color/black"
android:textSize="19sp" />
<EditText
android:id="@+id/editLongitude"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="12dp"
android:background="@drawable/bg_stroke_eae9ef_5"
android:gravity="center_vertical"
android:hint="@string/please_enter_longitude"
android:importantForAutofill="no"
android:paddingHorizontal="16dp"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="#999999"
android:textSize="16sp"
tools:ignore="TextFields,TextContrastCheck,VisualLintTextFieldSize" />
</LinearLayout>
<LinearLayout
android:id="@+id/llLatitude"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="12dp"
android:layout_marginTop="14dp"
android:layout_marginEnd="16dp"
android:background="@drawable/bg_ffffff_5"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@id/llLongitude">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="12dp"
android:text="@string/latitude"
android:textColor="@color/black"
android:textSize="19sp" />
<EditText
android:id="@+id/editLatitude"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="12dp"
android:background="@drawable/bg_stroke_eae9ef_5"
android:gravity="center_vertical"
android:hint="@string/please_enter_latitude"
android:importantForAutofill="no"
android:paddingHorizontal="16dp"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="#999999"
android:textSize="16sp"
tools:ignore="TextFields,TextContrastCheck,VisualLintTextFieldSize" />
</LinearLayout>
<TextView
android:id="@+id/tvBtn"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="22dp"
android:background="@drawable/bg_btn_enable"
android:enabled="false"
android:gravity="center"
android:text="@string/create"
android:textColor="@color/color_bdc1c9_ffffff"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@id/llLatitude" />
<com.base.scanqrclear.ads.NativeParentView
android:id="@+id/flAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:background="@drawable/bg_ecf6ff_20"
android:minHeight="120dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvBtn">
<io.supercharge.shimmerlayout.ShimmerLayout
android:id="@+id/shimmerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="16dp"
app:shimmer_angle="25"
app:shimmer_animation_duration="2000"
app:shimmer_auto_start="true"
app:shimmer_color="#33ffffff"
app:shimmer_mask_width="0.2">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/czhanweitu"
tools:ignore="ContentDescription,ImageContrastCheck" />
</io.supercharge.shimmerlayout.ShimmerLayout>
</com.base.scanqrclear.ads.NativeParentView>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -280,5 +280,9 @@
<string name="see_more">See More</string>
<string name="please_enter_the_video_id">Please enter the video ID</string>
<string name="please_enter_the_channel_id">Please enter the channel ID</string>
<string name="longitude">Longitude</string>
<string name="please_enter_longitude">Please enter longitude</string>
<string name="latitude">Latitude</string>
<string name="please_enter_latitude">Please enter latitude</string>
</resources>
\ 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