Commit de79c5a2 authored by wanglei's avatar wanglei

...

parent 0cb86fee
......@@ -40,6 +40,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.ScanQR"
tools:targetApi="31">
<activity
android:name=".qr.QrResultsActivity"
android:exported="false" />
<activity
android:name=".ui.insqr.InsActivity"
android:exported="false" />
......
......@@ -39,6 +39,7 @@ object GlobalConfig {
const val KEY_SOLAR = ""
// admob广告位id
inline val ID_ADMOB_APPLICATION get() = if (BuildConfig.DEBUG) "ca-app-pub-3940256099942544~3347511713" else "ca-app-pub-3940256099942544~3347511713"
inline val ID_ADMOB_INTER get() = if (BuildConfig.DEBUG) "ca-app-pub-3940256099942544/1033173712" else "ca-app-pub-3940256099942544/1033173712"
inline val ID_ADMOB_NATIVE get() = if (BuildConfig.DEBUG) "ca-app-pub-3940256099942544/2247696110" else "ca-app-pub-3940256099942544/2247696110"
inline val ID_ADMOB_OPEN get() = if (BuildConfig.DEBUG) "ca-app-pub-3940256099942544/9257395921" else "ca-app-pub-3940256099942544/9257395921"
......
package com.base.scanqrclear.ads
import com.base.scanqrclear.GlobalConfig
import com.google.android.gms.ads.appopen.AppOpenAd
import com.google.android.gms.ads.interstitial.InterstitialAd
import com.google.android.gms.ads.nativead.NativeAd
import com.google.android.gms.ads.rewarded.RewardedAd
import com.reyun.solar.engine.SolarEngineManager
import com.reyun.solar.engine.infos.SEAdImpEventModel
import org.json.JSONObject
/**
* https://help.solar-engine.com/cn/docs/yu-ding-yi-shi-jian
*/
object SolarEngineEvent {
fun eventSolar(ad: Any?, valueMicros: Long) = Thread {
val json = JSONObject()
//变现平台
val adNetworkPlatform = "AdMob"
//聚合平台标识
val mediationPlatform = "admob"
//广告的类型
// adType 为激励视频时,只需要传入 1
// 1:激励视频
// 2:开屏
// 3:插屏
// 4:全屏视频
// 5:Banner
// 6:信息流
// 7:短视频信息流
// 8:大横幅
// 9:视频贴片
// 10:中等尺寸横幅
// 0:其它
var adType = -1
//变现平台的应用 ID
val adNetworkAppID = GlobalConfig.ID_ADMOB_APPLICATION
//变现平台的变现广告位 ID
var adNetworkADID = ""
//广告 ecpm,单位:元(广告千次展现的变现收入,0或负值表示没传,单位为元)
val ecpm = valueMicros / 1000.0
//货币种类
val currencyType = "USD"
when (ad) {
is AppOpenAd -> {
adType = 2
adNetworkADID = ad.adUnitId
}
is InterstitialAd -> {
adType = 3
adNetworkADID = ad.adUnitId
}
is NativeAd -> {
adType = 6
adNetworkADID = GlobalConfig.ID_ADMOB_NATIVE
}
is RewardedAd -> {
adType = 1
adNetworkADID = ad.adUnitId
}
else -> {//banner
adType = 5
adNetworkADID = GlobalConfig.ID_ADMOB_BANNER
}
}
try {
} catch (e: Exception) {
//
}
val seAdImpEventModel = SEAdImpEventModel(
adNetworkPlatform,
mediationPlatform,
adType,
adNetworkAppID,
adNetworkADID,
ecpm,
currencyType,
true,
json
)
SolarEngineManager.getInstance().trackAdImpression(seAdImpEventModel)
}.start()
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import android.app.Activity
import android.os.Bundle
import com.base.scanqrclear.MyApplication
import com.base.scanqrclear.ads.AdEvent
import com.base.scanqrclear.ads.SolarEngineEvent
import com.base.scanqrclear.ads.taichiPref
import com.base.scanqrclear.ads.taichiSharedPreferencesEditor
import com.base.scanqrclear.bean.config.AdConfigBean
......@@ -121,7 +122,7 @@ class AdmobEvent : AdEvent {
class EventOnPaidEventListener(private val ad: Any?) : OnPaidEventListener {
override fun onPaidEvent(adValue: AdValue) {
SolarEngineEvent.eventSolar(ad, adValue.valueMicros)
val adRatio = AdConfigBean.adsConfigBean.adRatio
val random = Random.Default.nextInt(1, 100)
if (random > adRatio) {
......
......@@ -3,21 +3,25 @@ package com.base.scanqrclear.bean
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_FACEBOOK
data class FacebookUIBean(
val url: String? = null,
val id: String? = null
val urlOrId: String
) : ScanBean(KEY_FACEBOOK) {
companion object {
// fb://profile/www.baidu.con
fun FacebookUIBean.createFacebookUrlQrString(): String {
return "fb://profile/$url"
fun createFaceBookUIBean(qrCodeValue: String): FacebookUIBean {
val urlOrId = qrCodeValue.substring(13, qrCodeValue.length)
return FacebookUIBean(urlOrId)
}
fun isFacebookQR(qrCodeValue: String): Boolean {
return qrCodeValue.startsWith("fb://profile")
}
// fb://profile/www.baidu.con
// fb://profile/123456
fun FacebookUIBean.createFacebookIdQrString(): String {
return "fb://profile/$id"
fun FacebookUIBean.createFacebookQrString(): String {
return "fb://profile/$urlOrId"
}
}
}
\ No newline at end of file
......@@ -3,21 +3,25 @@ package com.base.scanqrclear.bean
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_INSTAGRAM
data class InstagramUIBean(
val url: String? = null,
val id: String? = null
val username: String? = null,
) : ScanBean(KEY_INSTAGRAM) {
companion object {
// instagram://user?username=www.baidu.com
fun InstagramUIBean.createInstagramUrlQrString(): String {
return "instagram://user?username=$url"
fun createInstagramUIBean(qrCodeValue: String): InstagramUIBean {
val split = qrCodeValue.split("=")
val username = if (split.size == 2) split[1] else ""
return InstagramUIBean(username)
}
fun isInstagramQR(qrCodeValue: String): Boolean {
return qrCodeValue.startsWith("instagram://")
}
// instagram://user?username=www.baidu.com
// instagram://user?username=123456
fun InstagramUIBean.createInstagramIdQrString(): String {
return "instagram://user?username=$id"
fun InstagramUIBean.createInstagramQrString(): String {
return "instagram://user?username=$username"
}
}
......
......@@ -4,6 +4,12 @@ data class WhatsappUIBean(val phone: String) : ScanBean(FunctionUIBean.KEY_WHATS
companion object {
fun createWhatsappUIBean(qrCodeValue: String): WhatsappUIBean {
val split = qrCodeValue.split("=")
val phone = if (split.size == 2) split[1] else ""
return WhatsappUIBean(phone)
}
// whatsapp://send?phone=+861768923756
fun WhatsappUIBean.createWhatsappQrString(): String {
val qrContent = StringBuilder()
......@@ -12,5 +18,8 @@ data class WhatsappUIBean(val phone: String) : ScanBean(FunctionUIBean.KEY_WHATS
return qrContent.toString()
}
fun isWhatsappQR(qrCodeValue: String): Boolean {
return qrCodeValue.startsWith("whatsapp://")
}
}
}
\ No newline at end of file
......@@ -3,21 +3,25 @@ package com.base.scanqrclear.bean
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_X
data class XUIBean(
val username: String? = null,
val url: String? = null
val screenName: String
) : ScanBean(KEY_X) {
companion object {
// twitter://user?screen_name=koko
fun XUIBean.createXUsernameQrString(): String {
return "twitter://user?screen_name=$username"
fun isXUIBeanQR(qrCodeValue: String): Boolean {
return qrCodeValue.startsWith("twitter://")
}
fun createXUIBean(qrCodeValue: String): XUIBean {
val split = qrCodeValue.split("=")
val screenName = if (split.size == 2) split[1] else ""
return XUIBean(screenName)
}
// twitter://user?screen_name=www.baidu.com
fun XUIBean.createXUrlQrString(): String {
return "twitter://user?screen_name=$url"
// twitter://user?screen_name=koko
// twitter://user?screen_name=www.baidu.com
fun XUIBean.createXUIBeanQrString(): String {
return "twitter://user?screen_name=$screenName"
}
}
......
package com.base.scanqrclear.qr
import android.annotation.SuppressLint
import android.graphics.Color
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.style.ForegroundColorSpan
import androidx.core.view.isVisible
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.FacebookUIBean
import com.base.scanqrclear.bean.FacebookUIBean.Companion.createFacebookQrString
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_WHATSAPP
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_X
import com.base.scanqrclear.bean.InstagramUIBean
import com.base.scanqrclear.bean.InstagramUIBean.Companion.createInstagramQrString
import com.base.scanqrclear.bean.ScanBean
import com.base.scanqrclear.bean.WhatsappUIBean
import com.base.scanqrclear.bean.WhatsappUIBean.Companion.createWhatsappQrString
import com.base.scanqrclear.bean.XUIBean
import com.base.scanqrclear.bean.XUIBean.Companion.createXUIBeanQrString
import com.base.scanqrclear.databinding.ActivityQrResultsBinding
import com.base.scanqrclear.utils.BarUtils
import com.base.scanqrclear.utils.BitmapUtils.saveBitmapToFile
import com.base.scanqrclear.utils.KotlinExt.toFormatTime6
import com.base.scanqrclear.utils.LogEx
import com.base.scanqrclear.utils.QRCodeUtils.generateQRCode
import com.google.gson.Gson
import com.gyf.immersionbar.ktx.immersionBar
import java.io.File
class QrResultsActivity : BaseActivity<ActivityQrResultsBinding>(ActivityQrResultsBinding::inflate) {
private var bean: ScanBean? = null
private var scanType: String = ""
private var qrString = ""
private var tempImagePath: String = ""
@SuppressLint("SetTextI18n")
override fun initView() {
super.initView()
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
scanType = intent.extras?.getString("scanType", "") ?: ""
val data = intent.extras?.getString("data") ?: ""
title = ""
when (scanType) {
KEY_WHATSAPP -> {
bean = Gson().fromJson(data, WhatsappUIBean::class.java)
qrString = (bean as WhatsappUIBean).createWhatsappQrString()
binding.ivQrIcon.setImageResource(R.mipmap.h_whatsapp)
binding.tvQrTypeTitle.text = "Whatsapp"
title = "Phone number:"
}
KEY_FACEBOOK -> {
bean = Gson().fromJson(data, FacebookUIBean::class.java)
qrString = (bean as FacebookUIBean).createFacebookQrString()
binding.ivQrIcon.setImageResource(R.mipmap.h_facebook)
binding.tvQrTypeTitle.text = "Facebook"
title = "Content:"
}
KEY_INSTAGRAM -> {
bean = Gson().fromJson(data, InstagramUIBean::class.java)
qrString = (bean as InstagramUIBean).createInstagramQrString()
binding.ivQrIcon.setImageResource(R.mipmap.h_instagram)
binding.tvQrTypeTitle.text = "Instagram"
title = "Content:"
}
KEY_X -> {
bean = Gson().fromJson(data, XUIBean::class.java)
qrString = (bean as XUIBean).createXUIBeanQrString()
binding.ivQrIcon.setImageResource(R.mipmap.h_x)
binding.tvQrTypeTitle.text = "X"
title = "Content:"
}
}
binding.tvTime.text = System.currentTimeMillis().toFormatTime6()
val ss = SpannableStringBuilder("$title$qrString")
ss.setSpan(
ForegroundColorSpan(Color.parseColor("#666666")), // 设置颜色为红色
0, // 开始位置
title.length, // 结束位置
Spanned.SPAN_INCLUSIVE_INCLUSIVE
)
ss.setSpan(
ForegroundColorSpan(Color.BLACK), // 设置颜色为黑色
title.length, // 开始位置
ss.length, // 结束位置
Spanned.SPAN_INCLUSIVE_INCLUSIVE
)
binding.tvQrContent.text = ss
Thread {
LogEx.logDebug(TAG, "messageQrString=$qrString")
val bitmap = generateQRCode(qrString, 735, 735, 2)
runOnUiThread {
binding.ivQr.setImageBitmap(bitmap)
val file = File(cacheDir, System.currentTimeMillis().toString() + ".jpg")
bitmap?.let {
val flag = saveBitmapToFile(it, file.absolutePath)
LogEx.logDebug(TAG, "flag=$flag tempImage=${file.absolutePath}")
if (flag) {
tempImagePath = file.absolutePath
}
}
}
}.start()
if (binding.flAd.isVisible) {
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_item)
}
if (binding.flAd2.isVisible) {
AdsMgr.showNative(binding.flAd2, R.layout.layout_admob_item)
}
}
@SuppressLint("SetTextI18n")
override fun initListener() {
super.initListener()
}
override fun configSystemBar() {
immersionBar {
statusBarColor("#FFFFFFFF")
statusBarDarkFont(false)
}
}
}
\ No newline at end of file
......@@ -12,10 +12,10 @@ import com.base.scanqrclear.R
import com.base.scanqrclear.ads.AdsMgr
import com.base.scanqrclear.ads.AdsShowCallBack
import com.base.scanqrclear.bean.FacebookUIBean
import com.base.scanqrclear.bean.FacebookUIBean.Companion.createFacebookIdQrString
import com.base.scanqrclear.bean.FacebookUIBean.Companion.createFacebookUrlQrString
import com.base.scanqrclear.bean.FacebookUIBean.Companion.createFacebookQrString
import com.base.scanqrclear.databinding.DialogFacebookBinding
import com.base.scanqrclear.qr.QrStyleActivity
import com.google.gson.Gson
object FacebookDialog {
......@@ -65,10 +65,10 @@ object FacebookDialog {
dialog.dismiss()
val content = binding.editContent.text.toString()
val bean = if (isUrlOrId) FacebookUIBean(url = content) else FacebookUIBean(id = content)
val bean = FacebookUIBean(content)
startActivity(Intent(this, QrStyleActivity::class.java).apply {
putExtra("qrString", if (isUrlOrId) bean.createFacebookUrlQrString() else bean.createFacebookIdQrString())
putExtra("qrString", bean.createFacebookQrString())
})
}
......
......@@ -12,8 +12,7 @@ import com.base.scanqrclear.R
import com.base.scanqrclear.ads.AdsMgr
import com.base.scanqrclear.ads.AdsShowCallBack
import com.base.scanqrclear.bean.InstagramUIBean
import com.base.scanqrclear.bean.InstagramUIBean.Companion.createInstagramIdQrString
import com.base.scanqrclear.bean.InstagramUIBean.Companion.createInstagramUrlQrString
import com.base.scanqrclear.bean.InstagramUIBean.Companion.createInstagramQrString
import com.base.scanqrclear.databinding.DialogFacebookBinding
import com.base.scanqrclear.qr.QrStyleActivity
......@@ -64,10 +63,10 @@ object InstagramDialog {
dialog.dismiss()
val content = binding.editContent.text.toString()
val bean = if (isUrlOrId) InstagramUIBean(url = content) else InstagramUIBean(id = content)
val bean = InstagramUIBean(content)
startActivity(Intent(this, QrStyleActivity::class.java).apply {
putExtra("qrString", if (isUrlOrId) bean.createInstagramUrlQrString() else bean.createInstagramIdQrString())
putExtra("qrString", bean.createInstagramQrString())
})
}
......
......@@ -20,19 +20,33 @@ import com.base.scanqrclear.bean.EmailUIBean.Companion.createEmailBean
import com.base.scanqrclear.bean.EmailUIBean.Companion.isEmailQR
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_FACEBOOK
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_INSTAGRAM
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_WHATSAPP
import com.base.scanqrclear.bean.FunctionUIBean.Companion.KEY_X
import com.base.scanqrclear.bean.InstagramUIBean.Companion.createInstagramUIBean
import com.base.scanqrclear.bean.InstagramUIBean.Companion.isInstagramQR
import com.base.scanqrclear.bean.MessageUIBean.Companion.createMessageBean
import com.base.scanqrclear.bean.MessageUIBean.Companion.isMessageQR
import com.base.scanqrclear.bean.ProductUIBean
import com.base.scanqrclear.bean.ScanBean
import com.base.scanqrclear.bean.ScanBean.Companion.CREATE_TYPE_SCAN
import com.base.scanqrclear.bean.TelephoneUIBean.Companion.createTelephoneBean
import com.base.scanqrclear.bean.TelephoneUIBean.Companion.isTelephoneQR
import com.base.scanqrclear.bean.TextUIBean
import com.base.scanqrclear.bean.WebsiteUIBean.Companion.createWebsiteBean
import com.base.scanqrclear.bean.WebsiteUIBean.Companion.isWebsiteQR
import com.base.scanqrclear.bean.WhatsappUIBean.Companion.createWhatsappUIBean
import com.base.scanqrclear.bean.WhatsappUIBean.Companion.isWhatsappQR
import com.base.scanqrclear.bean.WifiUIBean.Companion.createWifiBean
import com.base.scanqrclear.bean.WifiUIBean.Companion.isWifiQR
import com.base.scanqrclear.bean.XUIBean.Companion.createXUIBean
import com.base.scanqrclear.bean.XUIBean.Companion.isXUIBeanQR
import com.base.scanqrclear.databinding.FragmentScanBinding
import com.base.scanqrclear.qr.QRImageAnalyzer
import com.base.scanqrclear.qr.QrResultsActivity
import com.base.scanqrclear.ui.contact.ContractCodeActivity
import com.base.scanqrclear.ui.email.EmailCodeActivity
import com.base.scanqrclear.ui.event.EventCodeActivity
......@@ -287,6 +301,83 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
return
}
if (isWhatsappQR(qrCodeValue)) {
if (scanJump.get()) return
scanJump.set(true)
AdsMgr.showInsert(activity, true, object : AdsShowCallBack() {
override fun close(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_WHATSAPP)
}
override fun failed(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_WHATSAPP)
}
override fun googleFailed(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_WHATSAPP)
}
})
return
}
if (isFacebookQR(qrCodeValue)) {
if (scanJump.get()) return
scanJump.set(true)
AdsMgr.showInsert(activity, true, object : AdsShowCallBack() {
override fun close(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_FACEBOOK)
}
override fun failed(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_FACEBOOK)
}
override fun googleFailed(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_FACEBOOK)
}
})
return
}
if (isInstagramQR(qrCodeValue)) {
if (scanJump.get()) return
scanJump.set(true)
AdsMgr.showInsert(activity, true, object : AdsShowCallBack() {
override fun close(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_INSTAGRAM)
}
override fun failed(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_INSTAGRAM)
}
override fun googleFailed(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_INSTAGRAM)
}
})
return
}
if (isXUIBeanQR(qrCodeValue)) {
if (scanJump.get()) return
scanJump.set(true)
AdsMgr.showInsert(activity, true, object : AdsShowCallBack() {
override fun close(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_X)
}
override fun failed(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_X)
}
override fun googleFailed(where: Int) {
jumpQrResultsActivity(activity, qrCodeValue, KEY_X)
}
})
return
}
if (valueType == Barcode.TYPE_TEXT) {
if (scanJump.get()) return
scanJump.set(true)
......@@ -306,6 +397,24 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
})
return
}
}
private fun jumpQrResultsActivity(activity: ScanAc, qrCodeValue: String, scanType: String) {
activity.startActivity(Intent(activity, QrResultsActivity::class.java).apply {
val bean: ScanBean =
when (scanType) {
KEY_WHATSAPP -> createWhatsappUIBean(qrCodeValue)
KEY_FACEBOOK -> createFaceBookUIBean(qrCodeValue)
KEY_INSTAGRAM -> createInstagramUIBean(qrCodeValue)
KEY_X -> createXUIBean(qrCodeValue)
else -> ScanBean()
}
bean.needCreate = true
bean.createType = CREATE_TYPE_SCAN
putExtra("data", Gson().toJson(bean))
putExtra("scanType", scanType)
})
}
private fun jumpMessageCodeActivity(activity: Activity, qrCodeValue: String) {
......
......@@ -12,8 +12,7 @@ import com.base.scanqrclear.R
import com.base.scanqrclear.ads.AdsMgr
import com.base.scanqrclear.ads.AdsShowCallBack
import com.base.scanqrclear.bean.XUIBean
import com.base.scanqrclear.bean.XUIBean.Companion.createXUrlQrString
import com.base.scanqrclear.bean.XUIBean.Companion.createXUsernameQrString
import com.base.scanqrclear.bean.XUIBean.Companion.createXUIBeanQrString
import com.base.scanqrclear.databinding.DialogXBinding
import com.base.scanqrclear.qr.QrStyleActivity
......@@ -64,10 +63,10 @@ object XDialog {
dialog.dismiss()
val content = binding.editContent.text.toString()
val bean = if (isUsernameOrURL) XUIBean(username = content) else XUIBean(url = content)
val bean = XUIBean(content)
startActivity(Intent(this, QrStyleActivity::class.java).apply {
putExtra("qrString", if (isUsernameOrURL) bean.createXUsernameQrString() else bean.createXUrlQrString())
putExtra("qrString", bean.createXUIBeanQrString())
})
}
......
......@@ -53,6 +53,10 @@ object KotlinExt {
return SimpleDateFormat("HH:mm", Locale.ENGLISH).format(this)
}
fun Long.toFormatTime6(): String {
return SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH).format(this)
}
fun Array<String>.array2String(): String {
val stringBuilder = StringBuilder()
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#F0F1F7" />
<corners android:radius="5dp" />
</shape>
\ No newline at end of file
This diff is collapsed.
......@@ -5,10 +5,10 @@
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginHorizontal="8dp"
android:layout_marginVertical="8dp"
android:background="@drawable/bg_ecf6ff_20"
android:minHeight="133dp"
android:minHeight="120dp"
app:removeAll="false">
<io.supercharge.shimmerlayout.ShimmerLayout
......@@ -16,7 +16,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="16dp"
android:layout_marginHorizontal="8dp"
app:shimmer_angle="25"
app:shimmer_animation_duration="2000"
app:shimmer_auto_start="true"
......
......@@ -9,7 +9,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="20dp"
android:layout_margin="10dp"
android:baselineAligned="false"
android:orientation="horizontal">
......
......@@ -272,5 +272,11 @@
<string name="please_enter_the_song_name">Please enter the song name</string>
<string name="please_enter_your_id">Please enter your ID</string>
<string name="please_enter_your_username">Please enter your username</string>
<string name="scan_results">Scan Results</string>
<string name="barcode">Barcode</string>
<string name="barcode_">Barcode:</string>
<string name="save_as_image">Save as Image</string>
<string name="web_search">Web Search</string>
<string name="see_more">See More</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