Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
S
scanqrwhite2copy1
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
scanqrwhite2copy1
Commits
18e3155e
Commit
18e3155e
authored
Feb 18, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
89f6300b
Show whitespace changes
Inline
Side-by-side
Showing
38 changed files
with
994 additions
and
36 deletions
+994
-36
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+3
-0
AreaCodeBean.kt
app/src/main/java/com/base/scanqrclear/bean/AreaCodeBean.kt
+6
-0
FunctionUIBean.kt
...src/main/java/com/base/scanqrclear/bean/FunctionUIBean.kt
+7
-0
WhatsappUIBean.kt
...src/main/java/com/base/scanqrclear/bean/WhatsappUIBean.kt
+16
-0
QrStyleActivity.kt
app/src/main/java/com/base/scanqrclear/qr/QrStyleActivity.kt
+11
-0
QrStyleResultActivity.kt
...ain/java/com/base/scanqrclear/qr/QrStyleResultActivity.kt
+5
-2
AdAdapter.kt
...ain/java/com/base/scanqrclear/ui/concatadapt/AdAdapter.kt
+25
-0
CreateFragment.kt
.../main/java/com/base/scanqrclear/ui/main/CreateFragment.kt
+75
-32
FunctionRvAdapter.kt
...in/java/com/base/scanqrclear/ui/main/FunctionRvAdapter.kt
+44
-0
AreCodeAdapter.kt
...java/com/base/scanqrclear/ui/whatsappqr/AreCodeAdapter.kt
+30
-0
AreaCodeActivity.kt
...va/com/base/scanqrclear/ui/whatsappqr/AreaCodeActivity.kt
+274
-0
WhatsappDialog.kt
...ain/java/com/base/scanqrclear/ui/widget/WhatsappDialog.kt
+107
-0
ActivityLauncher.kt
.../main/java/com/base/scanqrclear/utils/ActivityLauncher.kt
+8
-2
slide_in_from_left.xml
app/src/main/res/anim/slide_in_from_left.xml
+8
-0
slide_in_from_right.xml
app/src/main/res/anim/slide_in_from_right.xml
+8
-0
slide_out_to_left.xml
app/src/main/res/anim/slide_out_to_left.xml
+8
-0
slide_out_to_right.xml
app/src/main/res/anim/slide_out_to_right.xml
+8
-0
color_bdc1c9_ffffff.xml
app/src/main/res/color/color_bdc1c9_ffffff.xml
+7
-0
bg_btn_enable.xml
app/src/main/res/drawable/bg_btn_enable.xml
+7
-0
bg_e5e6eb_5.xml
app/src/main/res/drawable/bg_e5e6eb_5.xml
+5
-0
bg_e5e6eb_80.xml
app/src/main/res/drawable/bg_e5e6eb_80.xml
+5
-0
bg_f0f1f5_20.xml
app/src/main/res/drawable/bg_f0f1f5_20.xml
+7
-0
bg_ffffff_5.xml
app/src/main/res/drawable/bg_ffffff_5.xml
+5
-0
bg_stroke_eae9ef_5.xml
app/src/main/res/drawable/bg_stroke_eae9ef_5.xml
+9
-0
activity_area_code.xml
app/src/main/res/layout/activity_area_code.xml
+90
-0
dialog_whastspp.xml
app/src/main/res/layout/dialog_whastspp.xml
+150
-0
fragment_create.xml
app/src/main/res/layout/fragment_create.xml
+1
-0
item_are_code.xml
app/src/main/res/layout/item_are_code.xml
+32
-0
item_function_rv.xml
app/src/main/res/layout/item_function_rv.xml
+31
-0
guanbi.png
app/src/main/res/mipmap-xxhdpi/guanbi.png
+0
-0
h_facebook.png
app/src/main/res/mipmap-xxhdpi/h_facebook.png
+0
-0
h_instagram.png
app/src/main/res/mipmap-xxhdpi/h_instagram.png
+0
-0
h_paypal.png
app/src/main/res/mipmap-xxhdpi/h_paypal.png
+0
-0
h_spotify.png
app/src/main/res/mipmap-xxhdpi/h_spotify.png
+0
-0
h_whatsapp.png
app/src/main/res/mipmap-xxhdpi/h_whatsapp.png
+0
-0
h_x.png
app/src/main/res/mipmap-xxhdpi/h_x.png
+0
-0
shousuo.png
app/src/main/res/mipmap-xxhdpi/shousuo.png
+0
-0
strings.xml
app/src/main/res/values/strings.xml
+2
-0
No files found.
app/src/main/AndroidManifest.xml
View file @
18e3155e
...
...
@@ -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"
/>
...
...
app/src/main/java/com/base/scanqrclear/bean/AreaCodeBean.kt
0 → 100644
View file @
18e3155e
package
com.base.scanqrclear.bean
data class
AreaCodeBean
(
val
code
:
Int
,
val
area
:
String
)
\ No newline at end of file
app/src/main/java/com/base/scanqrclear/bean/FunctionUIBean.kt
View file @
18e3155e
...
...
@@ -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
app/src/main/java/com/base/scanqrclear/bean/WhatsappUIBean.kt
0 → 100644
View file @
18e3155e
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
app/src/main/java/com/base/scanqrclear/qr/QrStyleActivity.kt
View file @
18e3155e
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
)
})
}
...
...
app/src/main/java/com/base/scanqrclear/qr/QrStyleResultActivity.kt
View file @
18e3155e
...
...
@@ -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
)
...
...
app/src/main/java/com/base/scanqrclear/ui/concatadapt/AdAdapter.kt
0 → 100644
View file @
18e3155e
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
app/src/main/java/com/base/scanqrclear/ui/main/CreateFragment.kt
View file @
18e3155e
...
...
@@ -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.
GridLayoutManag
er
import
androidx.recyclerview.widget.
ConcatAdapt
er
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.w
ebview.WebBrowserActivity
import
com.base.scanqrclear.ui.w
idget.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,15 +76,48 @@ 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
->
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
)
{
AdsMgr
.
showNative
(
binding
.
flAd
,
R
.
layout
.
layout_admob_item
)
}
else
{
binding
.
flAd
.
visibility
=
View
.
GONE
}
}
private
fun
itemClick
(
key
:
String
)
{
val
activity
=
requireActivity
()
as
MainActivity
?
activity
?.
let
{
if
(
adsConfigBean
.
functionInShowAd
)
{
...
...
@@ -97,13 +141,6 @@ class CreateFragment : BaseFragment<FragmentCreateBinding>(FragmentCreateBinding
}
}
if
(
adsConfigBean
.
homeShowNative
)
{
AdsMgr
.
showNative
(
binding
.
flAd
,
R
.
layout
.
layout_admob_item
)
}
else
{
binding
.
flAd
.
visibility
=
View
.
GONE
}
}
@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
=
functions
1
.
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
()
a
dapter
?.
changeGuide
()
functionRvAdapter1
?.
functionA
dapter
?.
changeGuide
()
binding
.
root
.
viewTreeObserver
.
addOnGlobalLayoutListener
{
showGuideScan
()
...
...
app/src/main/java/com/base/scanqrclear/ui/main/FunctionRvAdapter.kt
0 → 100644
View file @
18e3155e
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
app/src/main/java/com/base/scanqrclear/ui/whatsappqr/AreCodeAdapter.kt
0 → 100644
View file @
18e3155e
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
app/src/main/java/com/base/scanqrclear/ui/whatsappqr/AreaCodeActivity.kt
0 → 100644
View file @
18e3155e
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
app/src/main/java/com/base/scanqrclear/ui/widget/WhatsappDialog.kt
0 → 100644
View file @
18e3155e
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
app/src/main/java/com/base/scanqrclear/utils/ActivityLauncher.kt
View file @
18e3155e
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
...
...
app/src/main/res/anim/slide_in_from_left.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/anim/slide_in_from_right.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/anim/slide_out_to_left.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/anim/slide_out_to_right.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/color/color_bdc1c9_ffffff.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/drawable/bg_btn_enable.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/drawable/bg_e5e6eb_5.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/drawable/bg_e5e6eb_80.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/drawable/bg_f0f1f5_20.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/drawable/bg_ffffff_5.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/drawable/bg_stroke_eae9ef_5.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/layout/activity_area_code.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/layout/dialog_whastspp.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/layout/fragment_create.xml
View file @
18e3155e
...
...
@@ -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"
...
...
app/src/main/res/layout/item_are_code.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/layout/item_function_rv.xml
0 → 100644
View file @
18e3155e
<?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
app/src/main/res/mipmap-xxhdpi/guanbi.png
0 → 100644
View file @
18e3155e
934 Bytes
app/src/main/res/mipmap-xxhdpi/h_facebook.png
0 → 100644
View file @
18e3155e
10.9 KB
app/src/main/res/mipmap-xxhdpi/h_instagram.png
0 → 100644
View file @
18e3155e
17.3 KB
app/src/main/res/mipmap-xxhdpi/h_paypal.png
0 → 100644
View file @
18e3155e
4.9 KB
app/src/main/res/mipmap-xxhdpi/h_spotify.png
0 → 100644
View file @
18e3155e
9.36 KB
app/src/main/res/mipmap-xxhdpi/h_whatsapp.png
0 → 100644
View file @
18e3155e
11.7 KB
app/src/main/res/mipmap-xxhdpi/h_x.png
0 → 100644
View file @
18e3155e
4.9 KB
app/src/main/res/mipmap-xxhdpi/shousuo.png
0 → 100644
View file @
18e3155e
2.53 KB
app/src/main/res/values/strings.xml
View file @
18e3155e
...
...
@@ -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
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