Commit 18e3155e authored by wanglei's avatar wanglei

...

parent 89f6300b
......@@ -40,6 +40,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.ScanQR"
tools:targetApi="31">
<activity
android:name=".ui.whatsappqr.AreaCodeActivity"
android:exported="false" />
<activity
android:name=".qr.QrStyleResultActivity"
android:exported="false" />
......
package com.base.scanqrclear.bean
data class AreaCodeBean(
val code: Int,
val area: String
)
\ No newline at end of file
......@@ -22,5 +22,12 @@ class FunctionUIBean(
const val KEY_TELEPHONE = "key_telephone"
const val KEY_MESSAGE = "key_message"
const val KEY_PRODUCT = "key_product"
const val KEY_WHATSAPP = "key_whatsapp"
const val KEY_FACEBOOK = "key_facebook"
const val KEY_INSTAGRAM = "key_instagram"
const val KEY_X = "key_x"
const val KEY_SPOTIFY = "key_spotify"
const val KEY_PAYPAL = "key_paypal"
}
}
\ No newline at end of file
package com.base.scanqrclear.bean
data class WhatsappUIBean(val phone: String) : ScanBean(FunctionUIBean.KEY_WHATSAPP) {
companion object {
// whatsapp://send?phone=+861768923756
fun WhatsappUIBean.createWhatsappQrString(): String {
val qrContent = StringBuilder()
qrContent.append("whatsapp://send?")
.append("phone=").append(this.phone)
return qrContent.toString()
}
}
}
\ No newline at end of file
package com.base.scanqrclear.qr
import android.content.Intent
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import com.base.scanqrclear.base.BaseActivity
import com.base.scanqrclear.databinding.ActivityQrStyleBinding
......@@ -11,10 +12,12 @@ import com.gyf.immersionbar.ktx.immersionBar
class QrStyleActivity : BaseActivity<ActivityQrStyleBinding>(ActivityQrStyleBinding::inflate) {
private var qrString = ""
private val adapter = QrStyleAdapter()
override fun initView() {
super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
qrString = intent.extras?.getString("qrString", "") ?: ""
initAdapter()
}
......@@ -31,10 +34,18 @@ class QrStyleActivity : BaseActivity<ActivityQrStyleBinding>(ActivityQrStyleBind
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
finishToMainTop()
}
binding.flBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.tvConfirm.setOnClickListener {
startActivity(Intent(this, QrStyleResultActivity::class.java).apply {
val data = adapter.items.find { it.isSelect }
putExtra("data", Gson().toJson(data))
putExtra("qrString", qrString)
})
}
......
......@@ -21,11 +21,14 @@ import com.gyf.immersionbar.ktx.immersionBar
class QrStyleResultActivity : BaseActivity<ActivityQrStyleResultBinding>(ActivityQrStyleResultBinding::inflate) {
private var qrStyleBean: QrStyleBean? = null
private var qrString: String = ""
override fun initView() {
super.initView()
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
qrString = intent.extras?.getString("qrString", "") ?: ""
LogEx.logDebug(TAG, "qrString=$qrString")
val data = intent.extras?.getString("data", "")
data?.let {
qrStyleBean = Gson().fromJson(it, QrStyleBean::class.java)
......@@ -91,7 +94,7 @@ class QrStyleResultActivity : BaseActivity<ActivityQrStyleResultBinding>(Activit
if (bean.id == 24) {
scale = 0.7f
}
if (bean.id==28){
if (bean.id == 28) {
qrBgColor = Color.TRANSPARENT
}
if (bean.id == 38) {
......@@ -135,7 +138,7 @@ class QrStyleResultActivity : BaseActivity<ActivityQrStyleResultBinding>(Activit
LogEx.logDebug(TAG, "id=${bean.id} scale=$scale ${bean.color} ${bean.img_url}")
val qrBitmap = generateQRCodeWithBackground(
"aaaaaa", resource,
qrString, resource,
listOf(points1, points2, points3, points4), scale, qrColor, qrBgColor
)
......
package com.base.scanqrclear.ui.concatadapt
import android.content.Context
import android.view.ViewGroup
import com.base.scanqrclear.R
import com.base.scanqrclear.ads.AdsMgr
import com.base.scanqrclear.databinding.ItemAdBinding
import com.base.scanqrclear.ui.adapter.CommonViewHolder
import com.base.scanqrclear.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
class AdAdapter : BaseQuickAdapter<Any, CommonViewHolder>() {
override fun onBindViewHolder(holder: CommonViewHolder, position: Int, item: Any?) {
item ?: return
val binding = ItemAdBinding.bind(holder.itemView)
AdsMgr.showNative(binding.flAd,R.layout.layout_admob_item)
}
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): CommonViewHolder {
return CommonViewHolder(R.layout.item_ad.inflate(parent))
}
}
\ No newline at end of file
......@@ -4,7 +4,7 @@ import android.annotation.SuppressLint
import android.content.Intent
import android.view.View
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.ConcatAdapter
import com.base.scanqrclear.R
import com.base.scanqrclear.ads.AdsMgr
import com.base.scanqrclear.ads.AdsShowCallBack
......@@ -14,17 +14,24 @@ import com.base.scanqrclear.bean.FunctionUIBean
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
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_FACEBOOK
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_INSTAGRAM
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_MESSAGE
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_PAYPAL
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_SCAN
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_SPOTIFY
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_TELEPHONE
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_TEXT
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_WEBSITE
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_WHATSAPP
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_WIFI
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_X
import com.base.scanqrclear.bean.config.AdConfigBean.Companion.adsConfigBean
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.concatadapt.AdAdapter
import com.base.scanqrclear.ui.contact.ContractActivity
import com.base.scanqrclear.ui.email.EmailActivity
import com.base.scanqrclear.ui.event.EventActivity
......@@ -32,7 +39,7 @@ import com.base.scanqrclear.ui.message.MessageActivity
import com.base.scanqrclear.ui.telephone.TelephoneActivity
import com.base.scanqrclear.ui.text.TextActivity
import com.base.scanqrclear.ui.website.WebsiteActivity
import com.base.scanqrclear.ui.webview.WebBrowserActivity
import com.base.scanqrclear.ui.widget.WhatsappDialog.showWhatsappDialog
import com.base.scanqrclear.ui.widget.guideview.Component
import com.base.scanqrclear.ui.widget.guideview.GuideBuilder
import com.base.scanqrclear.ui.widget.guideview.LottieComponent
......@@ -44,9 +51,13 @@ import kotlin.random.Random
class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding::inflate) {
private var adapter: FunctionAdapter? = null
private val functions by lazy(LazyThreadSafetyMode.NONE) {
private val concatAdapter: ConcatAdapter = ConcatAdapter()
private var functionRvAdapter1: FunctionRvAdapter? = null
private var functionRvAdapter2: FunctionRvAdapter? = null
private val functions1 by lazy(LazyThreadSafetyMode.NONE) {
listOf(
FunctionUIBean(KEY_SCAN, R.mipmap.h_scan, resources.getString(R.string.scan)),
FunctionUIBean(KEY_WIFI, R.mipmap.h_wifi, resources.getString(R.string.wifi)),
......@@ -65,36 +76,38 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
)
}
private val functions2 by lazy(LazyThreadSafetyMode.NONE) {
listOf(
FunctionUIBean(KEY_WHATSAPP, R.mipmap.h_whatsapp, "Whatsapp"),
FunctionUIBean(KEY_FACEBOOK, R.mipmap.h_facebook, "Facebook"),
FunctionUIBean(KEY_INSTAGRAM, R.mipmap.h_instagram, "Instagram"),
FunctionUIBean(KEY_X, R.mipmap.h_x, "X"),
FunctionUIBean(KEY_SPOTIFY, R.mipmap.h_spotify, "Spotify"),
FunctionUIBean(KEY_PAYPAL, R.mipmap.h_paypal, "Paypal"),
)
}
override fun initView() {
super.initView()
binding.space.layoutParams.height = BarUtils.getStatusBarHeight()
// binding.ivVip.updatePadding(top = BarUtils.getStatusBarHeight())
adapter = FunctionAdapter()
binding.rv.layoutManager = GridLayoutManager(requireContext(), 3)
binding.rv.adapter = adapter
adapter?.submitList(functions)
adapter?.itemClick = { key ->
val activity = requireActivity() as MainActivity?
activity?.let {
if (adsConfigBean.functionInShowAd) {
AdsMgr.showInsert(it, false, object : AdsShowCallBack() {
override fun close(where: Int) {
itemKeyClick(key)
}
override fun failed(where: Int) {
itemKeyClick(key)
}
override fun googleFailed(where: Int) {
itemKeyClick(key)
}
})
} else {
itemKeyClick(key)
}
}
binding.rv.adapter = concatAdapter
functionRvAdapter1 = FunctionRvAdapter().apply {
itemClick = ::itemClick
concatAdapter.addAdapter(this)
submitList(arrayListOf(functions1))
}
concatAdapter.addAdapter(AdAdapter().apply { submitList(listOf("")) })
functionRvAdapter2 = FunctionRvAdapter().apply {
tittle = resources.getString(R.string.other)
itemClick = ::itemClick
concatAdapter.addAdapter(this)
submitList(arrayListOf(functions2))
}
if (adsConfigBean.homeShowNative) {
......@@ -104,6 +117,30 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
}
}
private fun itemClick(key: String) {
val activity = requireActivity() as MainActivity?
activity?.let {
if (adsConfigBean.functionInShowAd) {
AdsMgr.showInsert(it, false, object : AdsShowCallBack() {
override fun close(where: Int) {
itemKeyClick(key)
}
override fun failed(where: Int) {
itemKeyClick(key)
}
override fun googleFailed(where: Int) {
itemKeyClick(key)
}
})
} else {
itemKeyClick(key)
}
}
}
@SuppressLint("SetTextI18n")
private fun setWeather() {
val weatherEntity = WeatherUtils.getWeatherEntity()
......@@ -143,7 +180,7 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
@SuppressLint("NotifyDataSetChanged")
private fun itemKeyClick(key: String) {
val bean = functions.find { it.key == key }
val bean = functions1.find { it.key == key }
if (bean?.isPlaying == true) {
bean.showGuide = false
AppPreferences.getInstance().put("${key}_guide", false)
......@@ -184,13 +221,19 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
KEY_MESSAGE -> {
startActivity(Intent(requireContext(), MessageActivity::class.java))
}
KEY_WHATSAPP -> {
val activity = requireActivity() as MainActivity?
activity ?: return
activity.showWhatsappDialog(activity.launcher)
}
}
}
@SuppressLint("NotifyDataSetChanged")
override fun onResumeOneShoot() {
super.onResumeOneShoot()
adapter?.changeGuide()
functionRvAdapter1?.functionAdapter?.changeGuide()
binding.root.viewTreeObserver.addOnGlobalLayoutListener {
showGuideScan()
......
package com.base.scanqrclear.ui.main
import android.content.Context
import android.view.View
import android.view.ViewGroup
import com.base.scanqrclear.R
import com.base.scanqrclear.bean.FunctionUIBean
import com.base.scanqrclear.databinding.ItemFunctionRvBinding
import com.base.scanqrclear.ui.adapter.CommonViewHolder
import com.base.scanqrclear.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
class FunctionRvAdapter : BaseQuickAdapter<List<FunctionUIBean>, CommonViewHolder>() {
var itemClick: ((key: String) -> Unit)? = null
var functionAdapter: FunctionAdapter? = null
var tittle: String? = null
override fun onBindViewHolder(holder: CommonViewHolder, position: Int, item: List<FunctionUIBean>?) {
item ?: return
val binding = ItemFunctionRvBinding.bind(holder.itemView)
if (tittle == null) {
binding.tvTitle.visibility = View.GONE
} else {
binding.tvTitle.visibility = View.VISIBLE
binding.tvTitle.text = tittle
}
val adapter = FunctionAdapter()
adapter.itemClick = itemClick
binding.rv.adapter = adapter
adapter.submitList(item)
functionAdapter = adapter
}
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): CommonViewHolder {
return CommonViewHolder(R.layout.item_function_rv.inflate(parent))
}
}
\ No newline at end of file
package com.base.scanqrclear.ui.whatsappqr
import android.annotation.SuppressLint
import android.content.Context
import android.view.ViewGroup
import com.base.scanqrclear.R
import com.base.scanqrclear.bean.AreaCodeBean
import com.base.scanqrclear.databinding.ItemAreCodeBinding
import com.base.scanqrclear.ui.adapter.CommonViewHolder
import com.base.scanqrclear.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
class AreCodeAdapter : BaseQuickAdapter<AreaCodeBean, CommonViewHolder>() {
var itemClick: ((item: AreaCodeBean) -> Unit)? = null
@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: CommonViewHolder, position: Int, item: AreaCodeBean?) {
item ?: return
val binding = ItemAreCodeBinding.bind(holder.itemView)
binding.tvCode.text = "${item.code} ${item.area}"
binding.root.setOnClickListener {
itemClick?.invoke(item)
}
}
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): CommonViewHolder {
return CommonViewHolder(R.layout.item_are_code.inflate(parent))
}
}
\ No newline at end of file
package com.base.scanqrclear.ui.whatsappqr
import android.content.Intent
import android.text.Editable
import androidx.core.app.ActivityOptionsCompat
import androidx.core.widget.addTextChangedListener
import com.base.scanqrclear.R
import com.base.scanqrclear.base.BaseActivity
import com.base.scanqrclear.bean.AreaCodeBean
import com.base.scanqrclear.databinding.ActivityAreaCodeBinding
import com.base.scanqrclear.ui.widget.WhatsappDialog.showWhatsappDialog
import kotlin.random.Random
class AreaCodeActivity : BaseActivity<ActivityAreaCodeBinding>(ActivityAreaCodeBinding::inflate) {
override fun initView() {
super.initView()
val list = listOf(
AreaCodeBean(1, "Canada"),
AreaCodeBean(1, "United States of America"),
AreaCodeBean(7, "Russia"),
AreaCodeBean(20, "Egypt"),
AreaCodeBean(27, "South Africa"),
AreaCodeBean(30, "Greece"),
AreaCodeBean(31, "Netherlands"),
AreaCodeBean(32, "Belgium"),
AreaCodeBean(33, "France"),
AreaCodeBean(34, "Spain"),
AreaCodeBean(36, "Hungary"),
AreaCodeBean(39, "Italy"),
AreaCodeBean(40, "Romania"),
AreaCodeBean(41, "Switzerland"),
AreaCodeBean(43, "Austria"),
AreaCodeBean(44, "United Kingdom"),
AreaCodeBean(45, "Denmark"),
AreaCodeBean(46, "Sweden"),
AreaCodeBean(47, "Norway"),
AreaCodeBean(48, "Poland"),
AreaCodeBean(49, "Germany"),
AreaCodeBean(51, "Peru"),
AreaCodeBean(52, "Mexico"),
AreaCodeBean(53, "Cuba"),
AreaCodeBean(54, "Argentina"),
AreaCodeBean(55, "Brazil"),
AreaCodeBean(56, "Chile"),
AreaCodeBean(57, "Colombia"),
AreaCodeBean(60, "Malaysia"),
AreaCodeBean(61, "Australia"),
AreaCodeBean(62, "Indonesia"),
AreaCodeBean(63, "Philippines"),
AreaCodeBean(64, "New Zealand"),
AreaCodeBean(65, "Singapore"),
AreaCodeBean(66, "Thailand"),
AreaCodeBean(81, "Japan"),
AreaCodeBean(82, "South Korea"),
AreaCodeBean(84, "Vietnam"),
AreaCodeBean(86, "China"),
AreaCodeBean(90, "Turkey"),
AreaCodeBean(91, "India"),
AreaCodeBean(92, "Pakistan"),
AreaCodeBean(93, "Afghanistan"),
AreaCodeBean(94, "Sri Lanka"),
AreaCodeBean(95, "Myanmar"),
AreaCodeBean(98, "Iran"),
AreaCodeBean(210, "São Tomé and Príncipe"), // 圣多美和普林西比
AreaCodeBean(211, "South Sudan"), // 南苏丹
AreaCodeBean(212, "Morocco"), // 摩洛哥
AreaCodeBean(213, "Algeria"), // 阿尔及利亚
AreaCodeBean(216, "Tunisia"), // 突尼斯
AreaCodeBean(218, "Libya"), // 利比亚
AreaCodeBean(220, "The Gambia"), // 冈比亚
AreaCodeBean(221, "Senegal"), // 塞内加尔
AreaCodeBean(222, "Mauritania"), // 毛里塔尼亚
AreaCodeBean(223, "Mali"), // 马里
AreaCodeBean(224, "Guinea"), // 几内亚
AreaCodeBean(225, "Ivory Coast"), // 科特迪瓦
AreaCodeBean(226, "Burkina Faso"), // 布基纳法索
AreaCodeBean(227, "Niger"), // 尼日尔
AreaCodeBean(228, "Togo"), // 多哥
AreaCodeBean(229, "Benin"), // 贝宁
AreaCodeBean(230, "Mauritius"), // 毛里求斯
AreaCodeBean(231, "Liberia"), // 利比里亚
AreaCodeBean(232, "Sierra Leone"), // 塞拉利昂
AreaCodeBean(233, "Ghana"), // 加纳
AreaCodeBean(234, "Nigeria"), // 尼日利亚
AreaCodeBean(235, "Chad"), //乍得
AreaCodeBean(236, "Central African Republic"), // 中非共和国
AreaCodeBean(237, "Cameroon"), // 喀麦隆
AreaCodeBean(238, "Cape Verde"), // 佛得角
AreaCodeBean(239, "São Tomé and Príncipe"), // 圣多美和普林西比
AreaCodeBean(240, "Equatorial Guinea"), // 赤道几内亚
AreaCodeBean(241, "Gabon"), // 加蓬
AreaCodeBean(242, "Congo (Brazzaville)"), // 刚果(布)
AreaCodeBean(243, "Congo (Kinshasa)"), // 刚果(金)
AreaCodeBean(244, "Angola"), // 安哥拉
AreaCodeBean(245, "Guinea-Bissau"), // 几内亚比绍
AreaCodeBean(246, "British Indian Ocean Territory"), // 英属印度洋领地
AreaCodeBean(247, "Ascension Island"), // 圣诞岛
AreaCodeBean(248, "Seychelles"), // 塞舌尔
AreaCodeBean(249, "Sudan"), // 苏丹
AreaCodeBean(250, "Rwanda"), // 卢旺达
AreaCodeBean(251, "Ethiopia"), // 埃塞俄比亚
AreaCodeBean(252, "Somalia"), // 索马里
AreaCodeBean(253, "Djibouti"), // 吉布提
AreaCodeBean(254, "Kenya"), // 肯尼亚
AreaCodeBean(255, "Tanzania"), // 坦桑尼亚
AreaCodeBean(256, "Uganda"), // 乌干达
AreaCodeBean(257, "Burundi"), // 布隆迪
AreaCodeBean(258, "Mozambique"), // 莫桑比克
AreaCodeBean(260, "Zambia"), // 赞比亚
AreaCodeBean(261, "Madagascar"), // 马达加斯加
AreaCodeBean(262, "Réunion"), // 留尼汪
AreaCodeBean(263, "Zimbabwe"), // 津巴布韦
AreaCodeBean(264, "Namibia"), // 纳米比亚
AreaCodeBean(265, "Malawi"), // 马拉维
AreaCodeBean(266, "Lesotho"), // 莱索托
AreaCodeBean(267, "Botswana"), // 博茨瓦纳
// AreaCodeBean(268, "Eswatini"), // 埃斯瓦蒂尼
// AreaCodeBean(269, "Comoros"), // 科摩罗
// AreaCodeBean(290, "Saint Helena"), // 圣赫勒拿
// AreaCodeBean(291, "Eritrea"), // 厄立特里亚
// AreaCodeBean(297, "Aruba"), // 阿鲁巴
// AreaCodeBean(298, "Faroe Islands"), // 法罗群岛
// AreaCodeBean(299, "Greenland"), // 格陵兰
// AreaCodeBean(300, "Cyprus"),
// AreaCodeBean(327, "Kazakhstan"),
AreaCodeBean(350, "Gibraltar"),
AreaCodeBean(351, "Portugal"),
AreaCodeBean(352, "Luxembourg"),
AreaCodeBean(353, "Ireland"),
AreaCodeBean(354, "Iceland"),
AreaCodeBean(355, "Albania"),
AreaCodeBean(356, "Malta"),
AreaCodeBean(357, "Cyprus"),
AreaCodeBean(358, "Finland"),
AreaCodeBean(359, "Bulgaria"),
AreaCodeBean(370, "Lithuania"),
AreaCodeBean(371, "Latvia"),
AreaCodeBean(372, "Estonia"),
AreaCodeBean(373, "Moldova"),
AreaCodeBean(374, "Armenia"),
AreaCodeBean(375, "Belarus"),
AreaCodeBean(376, "Andorra"),
AreaCodeBean(377, "Monaco"),
AreaCodeBean(378, "San Marino"),
AreaCodeBean(380, "Ukraine"),
AreaCodeBean(381, "Serbia"),
AreaCodeBean(382, "Montenegro"),
// AreaCodeBean(383, "Kosovo"),
// AreaCodeBean(385, "Croatia"),
AreaCodeBean(386, "Slovenia"),
// AreaCodeBean(387, "Bosnia and Herzegovina"),
// AreaCodeBean(389, "North Macedonia"),
AreaCodeBean(420, "Czech Republic"),
AreaCodeBean(421, "Slovakia"),
AreaCodeBean(423, "Liechtenstein"),
// AreaCodeBean(500, "Falkland Islands"),
AreaCodeBean(501, "Belize"),
AreaCodeBean(502, "Guatemala"),
AreaCodeBean(503, "El Salvador"),
AreaCodeBean(504, "Honduras"),
AreaCodeBean(505, "Nicaragua"),
AreaCodeBean(506, "Costa Rica"),
AreaCodeBean(507, "Panama"),
// AreaCodeBean(508, "Saint Pierre and Miquelon"),
AreaCodeBean(509, "Haiti"),
// AreaCodeBean(590, "Guadeloupe"),
AreaCodeBean(591, "Bolivia"),
AreaCodeBean(592, "Guyana"),
AreaCodeBean(593, "Ecuador"),
AreaCodeBean(594, "French Guiana"),
AreaCodeBean(595, "Paraguay"),
AreaCodeBean(596, "Martinique"),
AreaCodeBean(597, "Suriname"),
AreaCodeBean(598, "Uruguay"),
// AreaCodeBean(670, "Timor-Leste"),
// AreaCodeBean(672, "Antarctica"),
AreaCodeBean(673, "Brunei"),
AreaCodeBean(674, "Nauru"),
AreaCodeBean(675, "Papua New Guinea"),
AreaCodeBean(676, "Tonga"),
AreaCodeBean(677, "Solomon Islands"),
AreaCodeBean(678, "Vanuatu"),
AreaCodeBean(679, "Fiji"),
// AreaCodeBean(680, "Palau"),
// AreaCodeBean(681, "Wallis and Futuna"),
AreaCodeBean(682, "Cook Islands"),
// AreaCodeBean(683, "Niue"),
AreaCodeBean(684, "American Samoa"),
AreaCodeBean(685, "Samoa"),
AreaCodeBean(686, "Kiribati"),
AreaCodeBean(687, "New Caledonia"),
AreaCodeBean(688, "Tuvalu"),
AreaCodeBean(689, "French Polynesia"),
AreaCodeBean(690, "Tokelau"),
// AreaCodeBean(691, "Federated States of Micronesia"),
// AreaCodeBean(692, "Marshall Islands"),
AreaCodeBean(850, "North Korea"), // 朝鲜
AreaCodeBean(852, "Hong Kong"), // 香港
AreaCodeBean(853, "Macau"), // 澳门
AreaCodeBean(855, "Cambodia"), // 柬埔寨
AreaCodeBean(856, "Laos"), // 老挝
AreaCodeBean(880, "Bangladesh"), // 孟加拉国
AreaCodeBean(886, "Taiwan"), // 台湾地区
AreaCodeBean(960, "Maldives"),
AreaCodeBean(961, "Lebanon"),
AreaCodeBean(962, "Jordan"),
AreaCodeBean(963, "Syria"),
AreaCodeBean(964, "Iraq"),
AreaCodeBean(965, "Kuwait"),
AreaCodeBean(966, "Saudi Arabia"),
AreaCodeBean(967, "Yemen"),
AreaCodeBean(968, "Oman"),
AreaCodeBean(971, "United Arab Emirates"),
AreaCodeBean(972, "Israel"),
AreaCodeBean(973, "Bahrain"),
AreaCodeBean(974, "Qatar"),
// AreaCodeBean(975, "Bhutan"),
AreaCodeBean(976, "Mongolia"),
AreaCodeBean(977, "Nepal"),
AreaCodeBean(992, "Tajikistan"),
AreaCodeBean(993, "Turkmenistan"),
AreaCodeBean(994, "Azerbaijan"),
AreaCodeBean(995, "Georgia"),
AreaCodeBean(1242, "The Bahamas"), // 巴哈马
AreaCodeBean(1246, "Barbados"), // 巴巴多斯
AreaCodeBean(1264, "Anguilla"), // 安圭拉
AreaCodeBean(1268, "Antigua and Barbuda"), // 安提瓜和巴布达
AreaCodeBean(1345, "Cayman IS"), // 开曼群岛
AreaCodeBean(1441, "Bermuda IS"), // 百慕大
AreaCodeBean(1664, "Montserrat IS"), // 蒙特塞拉特
AreaCodeBean(1670, "Mariana Is"), // 北马里亚纳群岛
AreaCodeBean(1671, "Guam"), // 关岛
AreaCodeBean(1758, "St.Lucia"), // 圣卢西亚
AreaCodeBean(1784, "Saint Vincent"), // 圣文森特和格林纳丁斯
AreaCodeBean(1787, "Puerto Rico"), // 波多黎各
AreaCodeBean(1876, "Jamaica"), // 牙买加
)
val adapter = AreCodeAdapter()
adapter.itemClick = { item ->
setResult(item.code, Intent())
finish()
overridePendingTransition(R.anim.slide_in_from_left, R.anim.slide_out_to_right);
}
binding.rv.adapter = adapter
adapter.submitList(list)
}
override fun initListener() {
super.initListener()
binding.edit.addTextChangedListener {
}
}
}
\ No newline at end of file
package com.base.scanqrclear.ui.widget
import android.annotation.SuppressLint
import android.app.Activity
import android.app.AlertDialog
import android.content.Context
import android.content.Intent
import android.text.Editable
import android.view.Gravity
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.app.ActivityOptionsCompat
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.WhatsappUIBean
import com.base.scanqrclear.bean.WhatsappUIBean.Companion.createWhatsappQrString
import com.base.scanqrclear.databinding.DialogWhastsppBinding
import com.base.scanqrclear.qr.QrStyleActivity
import com.base.scanqrclear.ui.whatsappqr.AreaCodeActivity
import com.base.scanqrclear.utils.ActivityLauncher
import com.base.scanqrclear.utils.LogEx
object WhatsappDialog {
private val TAG = "WhatsappDialog"
@SuppressLint("SetTextI18n")
fun Activity.showWhatsappDialog(launcher: ActivityLauncher) {
val dialog = AlertDialog.Builder(this).create()
val binding = DialogWhastsppBinding.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.editNumber.addTextChangedListener { s: Editable? ->
binding.tvBtn.isEnabled = !s.isNullOrEmpty()
}
var code = 1
binding.tvAreaCode.setOnClickListener {
val intent = Intent(this@showWhatsappDialog, AreaCodeActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NO_HISTORY
val options = ActivityOptionsCompat.makeCustomAnimation(
this,
R.anim.slide_in_from_right,
R.anim.slide_out_to_left
)
launcher.launch(intent, options) { result ->
LogEx.logDebug(TAG, "code=${result.resultCode}")
code = result.resultCode
binding.tvAreaCode.text = "+${code}"
}
}
val jump = {
dialog.dismiss()
val phone = "$code" + binding.editNumber.text.toString()
val bean = WhatsappUIBean(phone)
startActivity(Intent(this, QrStyleActivity::class.java).apply {
putExtra("qrString", bean.createWhatsappQrString())
})
}
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
package com.base.scanqrclear.utils
import android.R
import android.app.ActivityOptions
import android.content.Intent
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultCallback
import androidx.activity.result.ActivityResultCaller
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.app.ActivityOptionsCompat
class ActivityLauncher(activityResultCaller: ActivityResultCaller) {
......@@ -37,10 +41,12 @@ class ActivityLauncher(activityResultCaller: ActivityResultCaller) {
*/
fun launch(
intent: Intent,
activityResultCallback: ActivityResultCallback<ActivityResult>? = null
options: ActivityOptionsCompat? = null,
activityResultCallback: ActivityResultCallback<ActivityResult>? = null,
) {
this.activityResultCallback = activityResultCallback
intentLauncher.launch(intent)
intentLauncher.launch(intent, options)
}
//endregion
......
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="-100%"
android:toXDelta="0%"
android:interpolator="@android:anim/linear_interpolator"/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="100%"
android:toXDelta="0%"
android:interpolator="@android:anim/linear_interpolator"/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="0%"
android:toXDelta="-100%"
android:interpolator="@android:anim/linear_interpolator"/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="0%"
android:toXDelta="100%"
android:interpolator="@android:anim/linear_interpolator"/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#BDC1C9" android:state_enabled="false" />
<item android:color="#ffffff" android:state_enabled="true" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_6473f8_80" android:state_enabled="true" />
<item android:drawable="@drawable/bg_e5e6eb_80" android:state_enabled="false" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#E5E6EB" />
<corners android:radius="5dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#E5E6EB" />
<corners android:radius="80dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#F0F1F5" />
<corners
android:topLeftRadius="20dp"
android:topRightRadius="20dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff" />
<corners android:radius="5dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#EAE9EF" />
<corners android:radius="5dp" />
</shape>
\ No newline at end of file
<?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.whatsappqr.AreaCodeActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
android:id="@+id/flBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
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="5dp"
android:text="@string/app_name"
android:textColor="#000000"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/flBack"
app:layout_constraintStart_toEndOf="@id/flBack"
app:layout_constraintTop_toTopOf="@id/flBack"
tools:ignore="HardcodedText" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginHorizontal="26dp"
android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@id/flBack">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="18dp"
android:src="@mipmap/shousuo"
tools:ignore="ContentDescription" />
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="20dp"
android:layout_marginVertical="8dp"
android:background="@null"
android:hint="@string/search"
android:importantForAutofill="no"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="16sp"
tools:ignore="TextFields,TouchTargetSizeCheck,TextContrastCheck,VisualLintTextFieldSize" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/clTop"
tools:listitem="@layout/item_are_code" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?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_whatsapp"
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="Whatsapp"
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>
<TextView
android:id="@+id/tvAreaCode"
android:layout_width="wrap_content"
android:layout_height="110dp"
android:layout_marginStart="16dp"
android:layout_marginTop="30dp"
android:background="@drawable/bg_e5e6eb_5"
android:gravity="center"
android:minWidth="42dp"
android:paddingHorizontal="10dp"
android:text="+1"
android:textColor="@color/black"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv"
tools:ignore="HardcodedText" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="16dp"
android:background="@drawable/bg_ffffff_5"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@id/tvAreaCode"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tvAreaCode"
app:layout_constraintTop_toTopOf="@id/tvAreaCode">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="12dp"
android:text="@string/phone_number"
android:textColor="@color/black"
android:textSize="19sp" />
<EditText
android:id="@+id/editNumber"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="12dp"
android:background="@drawable/bg_stroke_eae9ef_5"
android:gravity="center_vertical"
android:hint="@string/please_enter_your_phone_number"
android:importantForAutofill="no"
android:paddingHorizontal="16dp"
android:singleLine="true"
android:textColor="#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/tvAreaCode" />
<com.base.scanqrclear.ads.NativeParentView
android:id="@+id/flAd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:layout_marginBottom="8dp"
android:background="@drawable/bg_ecf6ff_20"
android:minHeight="133dp"
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
......@@ -92,6 +92,7 @@
android:layout_height="0dp"
android:layout_marginHorizontal="10dp"
android:layout_marginTop="20dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintBottom_toTopOf="@id/fl_ad"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
......
<?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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<TextView
android:id="@+id/tvCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="14dp"
android:layout_marginBottom="10dp"
android:text="+86 China"
android:textColor="@color/black"
android:textSize="17sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_marginHorizontal="16dp"
android:background="#E5E9F3"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="17dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="12dp"
android:text="@string/other"
android:textColor="@color/black"
android:textSize="16sp"
android:visibility="gone" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="3"
tools:listitem="@layout/item_function" />
</LinearLayout>
\ No newline at end of file
......@@ -263,5 +263,7 @@
<string name="replace_style">Replace Style</string>
<string name="favorite">Favorite</string>
<string name="regenerate">Regenerate</string>
<string name="please_enter_your_phone_number">Please enter your phone number</string>
<string name="search">Search</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