Commit acf8af8f authored by wanglei's avatar wanglei

...

parent bf7b8d56
......@@ -116,12 +116,18 @@ object AdmobMaxHelper {
}
}
fun admobMaxShowNativeAd(activity: Activity, parent: ViewGroup, where: Int = 0) {
fun admobMaxShowNativeAd(activity: Activity, parent: ViewGroup, where: String = "") {
if (isBlack) {
return
}
if (getSpAdmobTrueMaxFalse()) {
AdmobNativeUtils.showNativeAd(activity, parent)
var layout = R.layout.layout_admob_native_custom
when (where) {
"QrcResultActivity" -> layout = R.layout.layout_admob_native_qrcr
}
AdmobNativeUtils.showNativeAd(activity, parent, layout)
} else {
var layout = R.layout.layout_max_native_small
// if (where == 0) {
......
......@@ -29,6 +29,7 @@ object AdmobNativeUtils {
private var nativeLoadTime = Long.MAX_VALUE
private var loadingListener: (() -> Unit)? = null
private val mRequest = AdRequest.Builder().build()
var onAdLoaded: (() -> Unit)? = null
private fun loadNativeAd() {
if (nativeAd != null) {
......@@ -61,6 +62,12 @@ object AdmobNativeUtils {
pullAd(it.responseInfo, "nativeAd", reqId = reqId)
it.setOnPaidEventListener(AdmobEvent.EventOnPaidEventListener(it))
}.withAdListener(object : AdListener() {
override fun onAdLoaded() {
super.onAdLoaded()
onAdLoaded?.invoke()
onAdLoaded = null
}
override fun onAdClicked() {
clickAd(nativeAd?.responseInfo, "nativeAd")
}
......
......@@ -51,4 +51,14 @@ object ConstObject {
field = value
AppPreferences.getInstance().put("ifAgreePrivacy", value, true)
}
var searchEngineSp = "GOOGLE"
get() {
return AppPreferences.getInstance().getString("searchEngine", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("searchEngine", value, true)
}
}
\ No newline at end of file
......@@ -14,9 +14,6 @@ import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.browserwhite.databinding.ActivityMainBinding
import com.base.browserwhite.help.WeatherUtils
import com.base.browserwhite.ui.activity.scanqrc.QRImageAnalyzer
import com.base.browserwhite.ui.activity.scanqrc.ScanQRCActivity
import com.base.browserwhite.ui.fragment.FileFragment
import com.base.browserwhite.ui.fragment.HomeFragment
import com.base.browserwhite.ui.views.DialogViews.showMyAccountDialog
......
package com.base.browserwhite.ui.activity.scanqrc
import android.content.Intent
import android.graphics.Color
import android.view.View
import android.widget.Toast
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import com.base.browserwhite.ads.AdmobMaxHelper
import com.base.browserwhite.ads.admob.AdmobNativeUtils
import com.base.browserwhite.bean.ConstObject.searchEngineSp
import com.base.browserwhite.databinding.ActivityQrcResultBinding
import com.base.browserwhite.ui.activity.BaseActivity
import com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity
import com.base.browserwhite.utils.BarUtils
import com.base.browserwhite.utils.ClipboardUtils.copyText
import com.base.browserwhite.utils.LinkSearchUtils
import com.base.browserwhite.utils.LinkSearchUtils.getSearchUrl
class QrcResultActivity : BaseActivity<ActivityQrcResultBinding>() {
......@@ -13,10 +23,19 @@ class QrcResultActivity : BaseActivity<ActivityQrcResultBinding>() {
ActivityQrcResultBinding.inflate(layoutInflater)
}
private var qrCodeValue: String? = null
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
BarUtils.setStatusBarColor(this, Color.WHITE)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
qrCodeValue = intent.extras?.getString("qrCodeValue")
binding.tvQrcodevalue.text = qrCodeValue
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.flAd, "QrcResultActivity")
AdmobNativeUtils.onAdLoaded = {
binding.line2.visibility = View.VISIBLE
}
}
override fun initListener() {
......@@ -28,6 +47,37 @@ class QrcResultActivity : BaseActivity<ActivityQrcResultBinding>() {
onBackPressedDispatcher.onBackPressed()
}
binding.llCopy.setOnClickListener {
copyText("qrCodeValue", qrCodeValue ?: "")
Toast.makeText(this, "copy to clipboard", Toast.LENGTH_SHORT).show()
}
binding.llSearch.setOnClickListener {
LinkSearchUtils.handleInput(qrCodeValue ?: "",
loadUrl = { url ->
startActivity(Intent(this, WebBrowserActivity::class.java).apply {
putExtra("url", url)
putExtra("searchEngine", searchEngineSp)
})
},
performSearch = { search ->
startActivity(Intent(this, WebBrowserActivity::class.java).apply {
putExtra("url", getSearchUrl(search))
putExtra("searchEngine", searchEngineSp)
})
})
}
binding.llShare.setOnClickListener {
try {
val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.setType("text/plain")
shareIntent.putExtra(Intent.EXTRA_TEXT, qrCodeValue)
startActivity(Intent.createChooser(shareIntent, "share text"))
} catch (e: Exception) {
Toast.makeText(this, "no app can show", Toast.LENGTH_SHORT).show()
}
}
}
}
\ No newline at end of file
......@@ -156,7 +156,7 @@ class ScanQRCActivity : BaseActivity<ActivityScanQrcBinding>() {
// imageCapture = buildImageCapture(aspectRation, rotation)
qrImageAnalyzer = QRImageAnalyzer()
qrImageAnalyzer.parseAction = { qrCodeValue, valueType ->
// startActivity(Intent(this))
startActivity(Intent(this, QrcResultActivity::class.java).putExtra("qrCodeValue", qrCodeValue))
}
//构建图片分析器
......
......@@ -14,9 +14,16 @@ import com.base.browserwhite.bean.ConstObject
import com.base.browserwhite.bean.ConstObject.GOOGLE
import com.base.browserwhite.databinding.ActivityWebBrowserBinding
import com.base.browserwhite.ui.activity.BaseActivity
import com.base.browserwhite.ui.fragment.HomeFragment
import com.base.browserwhite.ui.views.DialogViews.showSearchEngineDialog
import com.base.browserwhite.utils.BarUtils
import com.base.browserwhite.utils.LinkSearchUtils.getBaiduSearch
import com.base.browserwhite.utils.LinkSearchUtils.getBingSearch
import com.base.browserwhite.utils.LinkSearchUtils.getDuckDuckGoSearch
import com.base.browserwhite.utils.LinkSearchUtils.getGoogleSearch
import com.base.browserwhite.utils.LinkSearchUtils.getSearchUrl
import com.base.browserwhite.utils.LinkSearchUtils.getYahooSearch
import com.base.browserwhite.utils.LinkSearchUtils.getYandexSearch
import com.base.browserwhite.utils.LinkSearchUtils.handleInput
class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
......@@ -26,7 +33,7 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
}
private val fragmentList = arrayListOf<Fragment>()
private var currentFragment: WebViewFragment? = null
private var searchAction: (context: String) -> String = HomeFragment.Companion::getBaiduSearch
private var searchAction: (context: String) -> String = ::getBaiduSearch
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
......@@ -40,32 +47,32 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
when (searchEngine) {
GOOGLE -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_google)
searchAction = HomeFragment.Companion::getGoogleSearch
searchAction = ::getGoogleSearch
}
ConstObject.BING -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_bing)
searchAction = HomeFragment.Companion::getBingSearch
searchAction = ::getBingSearch
}
ConstObject.YAHOO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yahoo)
searchAction = HomeFragment.Companion::getYahooSearch
searchAction = ::getYahooSearch
}
ConstObject.DUCKDUCKGO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_xuckd)
searchAction = HomeFragment.Companion::getDuckDuckGoSearch
searchAction = ::getDuckDuckGoSearch
}
ConstObject.YANDEX -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yandex)
searchAction = HomeFragment.Companion::getYandexSearch
searchAction = ::getYandexSearch
}
ConstObject.BAIDU -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_baidu)
searchAction = HomeFragment.Companion::getBaiduSearch
searchAction = ::getBaiduSearch
}
}
......@@ -90,9 +97,19 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
binding.editWeb.setOnEditorActionListener(object : TextView.OnEditorActionListener {
override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
if (actionId == EditorInfo.IME_ACTION_DONE) {
val content = HomeFragment.getWWWSearch(v?.text.toString()) ?: searchAction(v?.text.toString())
currentFragment?.loadWebView(content)
return true; // 返回true表示事件已处理
val input = v?.text?.toString()
if (input.isNullOrEmpty()) {
return true
}
handleInput(input,
loadUrl = { url ->
currentFragment?.loadWebView(url)
},
performSearch = { search ->
currentFragment?.loadWebView(getSearchUrl(search))
})
return true // 返回true表示事件已处理
}
return false
......@@ -127,32 +144,32 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
when (website) {
ConstObject.GOOGLE -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_google)
searchAction = HomeFragment.Companion::getGoogleSearch
searchAction = ::getGoogleSearch
}
ConstObject.BING -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_bing)
searchAction = HomeFragment.Companion::getBingSearch
searchAction = ::getBingSearch
}
ConstObject.YAHOO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yahoo)
searchAction = HomeFragment.Companion::getYahooSearch
searchAction = ::getYahooSearch
}
ConstObject.DUCKDUCKGO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_xuckd)
searchAction = HomeFragment.Companion::getDuckDuckGoSearch
searchAction = ::getDuckDuckGoSearch
}
ConstObject.YANDEX -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yandex)
searchAction = HomeFragment.Companion::getYandexSearch
searchAction =::getYandexSearch
}
ConstObject.BAIDU -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_baidu)
searchAction = HomeFragment.Companion::getBaiduSearch
searchAction = ::getBaiduSearch
}
}
......@@ -162,7 +179,7 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
}
private fun addNewWebSite(uri: String) {
val myFragment = WebViewFragment().apply { url=uri }
val myFragment = WebViewFragment().apply { url = uri }
val transaction: FragmentTransaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.container, myFragment)
transaction.commit()
......
package com.base.browserwhite.ui.fragment
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Intent
import android.text.TextUtils
import android.view.KeyEvent
import android.view.inputmethod.EditorInfo.IME_ACTION_DONE
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import com.base.browserwhite.R
......@@ -22,6 +19,7 @@ import com.base.browserwhite.bean.ConstObject.JUNK_CLEANER
import com.base.browserwhite.bean.ConstObject.NEWS
import com.base.browserwhite.bean.ConstObject.YAHOO
import com.base.browserwhite.bean.ConstObject.YANDEX
import com.base.browserwhite.bean.ConstObject.searchEngineSp
import com.base.browserwhite.bean.WebSiteBean
import com.base.browserwhite.bean.defaultValue
import com.base.browserwhite.bean.webSiteGroupBeanList
......@@ -40,15 +38,18 @@ import com.base.browserwhite.ui.adapter.HeaderAdapter
import com.base.browserwhite.ui.adapter.NewsAdapter
import com.base.browserwhite.ui.views.DialogViews.showSearchEngineDialog
import com.base.browserwhite.utils.AppPreferences
import com.base.browserwhite.utils.LinkMatchUtils
import com.base.browserwhite.utils.ClipboardUtils.copyText
import com.base.browserwhite.utils.LinkSearchUtils
import com.base.browserwhite.utils.LinkSearchUtils.getBaiduSearch
import com.base.browserwhite.utils.LinkSearchUtils.getBingSearch
import com.base.browserwhite.utils.LinkSearchUtils.getDuckDuckGoSearch
import com.base.browserwhite.utils.LinkSearchUtils.getGoogleSearch
import com.base.browserwhite.utils.LinkSearchUtils.getYahooSearch
import com.base.browserwhite.utils.LinkSearchUtils.getYandexSearch
import com.base.browserwhite.utils.LogEx
import com.chad.library.adapter4.QuickAdapterHelper
import com.chad.library.adapter4.loadState.LoadState
import com.chad.library.adapter4.loadState.trailing.TrailingLoadStateAdapter
import java.net.MalformedURLException
import java.net.URL
import java.net.URLEncoder
import java.nio.charset.StandardCharsets
class HomeFragment : BaseFragment<FragmentHomeBinding>() {
......@@ -186,42 +187,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
headWebsiteAdapter?.let {
helper.addBeforeAdapter(1, it)
}
// val file = File(Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS), "localImage")
// if (!file.exists()) {
// file.mkdirs()
// }
// webSiteGroupBeanList.flatMap { it.items }.forEach { bean: WebSiteBean ->
// val url = bean.icon_url
// val name = bean.name.lowercase(Locale.getDefault()).replace(" ", "_")
// val imageFile = File(file, "${name}_${bean.id}_local.png")
// download(url, imageFile)
// }
}
// fun download(imageUrl: String, file: File) {
// val client = OkHttpClient()
// val request: Request = Request.Builder().url(imageUrl).build()
//
// client.newCall(request).enqueue(object : Callback {
//
//
// override fun onFailure(call: Call, e: IOException) {
// }
//
// override fun onResponse(call: Call, response: Response) {
// if (response.isSuccessful) {
//
// // 将图片数据写入文件
// val fos: FileOutputStream = FileOutputStream(file)
// fos.write(response.body?.bytes())
// fos.flush()
// fos.close()
//
// }
// }
// })
// }
var i = 0
var lastClickTime = 0L
......@@ -234,6 +201,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
binding.flSearchEngine.setOnClickListener {
requireContext().showSearchEngineDialog { website ->
searchEngine = website
searchEngineSp = website
when (website) {
GOOGLE -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_google)
......@@ -277,7 +245,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
Toast.makeText(context, "input something please", Toast.LENGTH_SHORT).show()
return true
}
LinkMatchUtils.handleInput(
LinkSearchUtils.handleInput(
content,
loadUrl = { url ->
requireActivity().startActivity(Intent(requireContext(), WebBrowserActivity::class.java).apply {
......@@ -293,7 +261,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
})
})
return true; // 返回true表示事件已处理
return true // 返回true表示事件已处理
}
return false
......@@ -328,83 +296,10 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
private fun copyUuidGid() {
val uuid = AppPreferences.getInstance().getString("uuid", "")
val gid = AppPreferences.getInstance().getString("gid", "")
// 获取系统服务ClipboardManager
val clipboard: ClipboardManager =
requireContext().getSystemService(AppCompatActivity.CLIPBOARD_SERVICE) as ClipboardManager
// 创建一个ClipData对象,其中包含要复制的文本
val clip = ClipData.newPlainText("uuid", "uuid=$uuid gid=$gid")
// 将ClipData对象设置到剪贴板中
clipboard.setPrimaryClip(clip)
requireContext().copyText("uuid", "uuid=$uuid gid=$gid")
Toast.makeText(requireContext(), "copy", Toast.LENGTH_SHORT).show()
}
companion object {
fun isValidUrl(urlString: String?): Boolean {
return try {
// 尝试将字符串转换为URL对象
URL(urlString)
true
} catch (e: MalformedURLException) {
// 如果转换失败,说明不是有效的URL
false
}
}
fun isMatchesUrl(urlString: String): Boolean {
val pattern = "^(https?://)?(www\\.)?[a-z0-9]+\\.[a-z0-9.-]+\\.[a-z]{2,6}(:[0-9]{1,5})?(/.*)?$"
return urlString.matches(pattern.toRegex())
}
fun getWWWSearch(content: String): String? {
if (isValidUrl(content) || isMatchesUrl(content)) {
return if (content.contains("http") or content.contains("https")) {
content
} else {
"https://$content"
}
}
return null
}
fun getGoogleSearch(content: String): String {
val base = "https://www.google.com/"
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
val search = "search?q=${encodedQuery}&oq=${encodedQuery}"
return "$base$search"
}
fun getBingSearch(content: String): String {
//https://cn.bing.com/search?q=aaa&form=QBLHCN&sp=-1&lq=0&pq=aaa&sc=10-3&qs=n&sk=&cvid=CBA1E2A2A9124EBB9C9970DC69330095&ghsh=0&ghacc=0&ghpl=
val base = "https://cn.bing.com/"
val search = "search?q=${content}&form=QBLHCN&sp=-1&lq=0&pq=${content}"
return "$base$search"
}
fun getYahooSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://search.yahoo.com/search?p=$encodedQuery"
}
fun getDuckDuckGoSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://www.duckduckgo.com/?q=encodedQuery"
}
fun getYandexSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://yandex.com/search/?text=$encodedQuery"
}
fun getBaiduSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://www.baidu.com/s?wd=$encodedQuery"
}
}
}
\ No newline at end of file
package com.base.browserwhite.utils
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
object ClipboardUtils {
fun Context.copyText(label: String, text: String) {
val clipboard: ClipboardManager = getSystemService(AppCompatActivity.CLIPBOARD_SERVICE) as ClipboardManager
// 创建一个ClipData对象,其中包含要复制的文本
// val clip = ClipData.newPlainText("uuid", "uuid=$uuid gid=$gid")
val clip = ClipData.newPlainText(label, text)
// 将ClipData对象设置到剪贴板中
clipboard.setPrimaryClip(clip)
}
}
\ No newline at end of file
package com.base.browserwhite.utils
object LinkMatchUtils {
import com.base.browserwhite.bean.ConstObject
import java.net.MalformedURLException
import java.net.URL
import java.net.URLEncoder
import java.nio.charset.StandardCharsets
object LinkSearchUtils {
fun handleInput(
input: String,
loadUrl: (url: String) -> Unit,
......@@ -43,4 +49,85 @@ object LinkMatchUtils {
// 其他情况,无法确定是网址还是搜索词
return input
}
fun getSearchUrl(
searchText: String,
searchEngine: String = ConstObject.searchEngineSp
): String {
val action = when (searchEngine) {
ConstObject.GOOGLE -> ::getGoogleSearch
ConstObject.BING -> ::getBingSearch
ConstObject.YAHOO -> ::getYahooSearch
ConstObject.DUCKDUCKGO -> ::getDuckDuckGoSearch
ConstObject.YANDEX -> ::getYandexSearch
ConstObject.BAIDU -> ::getBaiduSearch
else -> ::getGoogleSearch
}
return action.invoke(searchText)
}
fun isValidUrl(urlString: String?): Boolean {
return try {
// 尝试将字符串转换为URL对象
URL(urlString)
true
} catch (e: MalformedURLException) {
// 如果转换失败,说明不是有效的URL
false
}
}
fun isMatchesUrl(urlString: String): Boolean {
val pattern = "^(https?://)?(www\\.)?[a-z0-9]+\\.[a-z0-9.-]+\\.[a-z]{2,6}(:[0-9]{1,5})?(/.*)?$"
return urlString.matches(pattern.toRegex())
}
fun getWWWSearch(content: String): String? {
if (isValidUrl(content) || isMatchesUrl(content)) {
return if (content.contains("http") or content.contains("https")) {
content
} else {
"https://$content"
}
}
return null
}
fun getGoogleSearch(content: String): String {
val base = "https://www.google.com/"
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
val search = "search?q=${encodedQuery}&oq=${encodedQuery}"
return "$base$search"
}
fun getBingSearch(content: String): String {
//https://cn.bing.com/search?q=aaa&form=QBLHCN&sp=-1&lq=0&pq=aaa&sc=10-3&qs=n&sk=&cvid=CBA1E2A2A9124EBB9C9970DC69330095&ghsh=0&ghacc=0&ghpl=
val base = "https://cn.bing.com/"
val search = "search?q=${content}&form=QBLHCN&sp=-1&lq=0&pq=${content}"
return "$base$search"
}
fun getYahooSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://search.yahoo.com/search?p=$encodedQuery"
}
fun getDuckDuckGoSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://www.duckduckgo.com/?q=encodedQuery"
}
fun getYandexSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://yandex.com/search/?text=$encodedQuery"
}
fun getBaiduSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://www.baidu.com/s?wd=$encodedQuery"
}
}
......@@ -95,6 +95,7 @@
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_qrcodevalue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
......@@ -110,6 +111,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="23dp"
android:layout_marginBottom="8dp"
android:orientation="horizontal">
<LinearLayout
......@@ -117,7 +119,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:orientation="vertical">
android:orientation="vertical"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
......@@ -140,7 +143,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:orientation="vertical">
android:orientation="vertical"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
......@@ -159,11 +163,12 @@
</LinearLayout>
<LinearLayout
android:id="@+id/ll_copy"
android:id="@+id/ll_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:orientation="vertical">
android:orientation="vertical"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
......@@ -184,6 +189,23 @@
</LinearLayout>
<View
android:id="@+id/line2"
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginTop="27dp"
android:background="#E5E6EB"
android:visibility="gone" />
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- <include layout="@layout/layout_admob_native_qrcr" />-->
</FrameLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
......
......@@ -52,6 +52,7 @@
</androidx.cardview.widget.CardView>
<TextView
android:layout_marginTop="12dp"
android:id="@+id/tv_tittle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
......@@ -63,7 +64,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="15dp"
android:layout_marginVertical="10dp"
android:orientation="horizontal">
<de.hdodenhof.circleimageview.CircleImageView
......
<com.google.android.gms.ads.nativead.NativeAdView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:baselineAligned="false"
android:orientation="vertical"
android:padding="10dp">
<com.google.android.gms.ads.nativead.MediaView
android:id="@+id/ad_media"
android:layout_width="match_parent"
android:layout_height="170dp"
android:layout_gravity="center_vertical" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/ad_app_icon"
android:layout_width="46dp"
android:layout_height="46dp"
android:layout_gravity="center_vertical"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="8dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="#FF923E"
android:padding="2dp"
android:text="Ad"
android:textColor="@color/white"
android:textSize="12sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<TextView
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:id="@+id/ad_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/ad_call_to_action"
android:layout_width="match_parent"
android:layout_height="38dp"
android:layout_gravity="center_vertical"
android:layout_marginTop="8dp"
android:background="@drawable/bg_0571ed_25"
android:gravity="center"
android:textAllCaps="false"
android:textColor="@color/white"
android:textSize="15sp"
tools:text="Install" />
</LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
\ 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