Commit 536500c0 authored by wanglei's avatar wanglei

[拆包]权限弹窗UI,移除无用功能

parent b2e8b470
...@@ -126,11 +126,6 @@ ...@@ -126,11 +126,6 @@
android:exported="false" android:exported="false"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.malware.MalwareCleanActivity"
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
......
...@@ -25,6 +25,7 @@ import java.util.UUID ...@@ -25,6 +25,7 @@ import java.util.UUID
import com.base.appzxhy.SpConstObject.appLanguageSp import com.base.appzxhy.SpConstObject.appLanguageSp
import com.base.appzxhy.SpConstObject.appLanguageCountrySp import com.base.appzxhy.SpConstObject.appLanguageCountrySp
import com.base.appzxhy.business.ads.AdsMgr import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.business.helper.EventUtils
import com.base.appzxhy.business.helper.NewComUtils.spConfig import com.base.appzxhy.business.helper.NewComUtils.spConfig
import com.base.appzxhy.business.push.fcm.FCMManager import com.base.appzxhy.business.push.fcm.FCMManager
import com.base.appzxhy.business.push.notification.MyNotificationManager import com.base.appzxhy.business.push.notification.MyNotificationManager
...@@ -98,9 +99,14 @@ class MyApplication : Application() { ...@@ -98,9 +99,14 @@ class MyApplication : Application() {
} }
private fun initGid() = MainScope().launch(Dispatchers.IO) { private fun initGid() = MainScope().launch(Dispatchers.IO) {
val info: AdvertisingIdClient.Info = AdvertisingIdClient.getAdvertisingIdInfo(applicationContext) try {
val advertisingId = info.id val info: AdvertisingIdClient.Info = AdvertisingIdClient.getAdvertisingIdInfo(applicationContext)
AppPreferences.getInstance().put("gid", advertisingId) val advertisingId = info.id
AppPreferences.getInstance().put("gid", advertisingId)
} catch (e: Exception) {
EventUtils.event("gid_exception")
}
} }
override fun attachBaseContext(base: Context?) { override fun attachBaseContext(base: Context?) {
......
...@@ -53,7 +53,6 @@ import com.base.appzxhy.ui.clean.JunkCleanActivity ...@@ -53,7 +53,6 @@ import com.base.appzxhy.ui.clean.JunkCleanActivity
import com.base.appzxhy.ui.dialog.FunctionBackDialog import com.base.appzxhy.ui.dialog.FunctionBackDialog
import com.base.appzxhy.ui.largefile.LargeFileCleanActivity import com.base.appzxhy.ui.largefile.LargeFileCleanActivity
import com.base.appzxhy.ui.main.MainActivity import com.base.appzxhy.ui.main.MainActivity
import com.base.appzxhy.ui.malware.MalwareCleanActivity
import com.base.appzxhy.ui.photocompression.PhotoCompressionActivity import com.base.appzxhy.ui.photocompression.PhotoCompressionActivity
import com.base.appzxhy.ui.screenshot.ScreenshotCleanActivity import com.base.appzxhy.ui.screenshot.ScreenshotCleanActivity
import com.base.appzxhy.ui.similar.SimilarPhotosActivity import com.base.appzxhy.ui.similar.SimilarPhotosActivity
...@@ -456,10 +455,6 @@ fun Activity.jumpAction(key: String) { ...@@ -456,10 +455,6 @@ fun Activity.jumpAction(key: String) {
PHOTO_COMPRESSION -> { PHOTO_COMPRESSION -> {
goToAc(PhotoCompressionActivity::class.java) goToAc(PhotoCompressionActivity::class.java)
} }
ANTIVIRUS -> {
goToAc(MalwareCleanActivity::class.java)
}
} }
} }
......
...@@ -5,6 +5,7 @@ import android.view.LayoutInflater ...@@ -5,6 +5,7 @@ import android.view.LayoutInflater
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.databinding.DialogConfirmBinding import com.base.appzxhy.databinding.DialogConfirmBinding
...@@ -23,8 +24,9 @@ class ConfirmDialog( ...@@ -23,8 +24,9 @@ class ConfirmDialog(
dialog.show() dialog.show()
val params = dialog.window?.attributes val params = dialog.window?.attributes
// params?.width = LinearLayout.LayoutParams.MATCH_PARENT // params?.width = ConstraintLayout.LayoutParams.MATCH_PARENT
// params?.height = LinearLayout.LayoutParams.WRAP_CONTENT params?.width = activity.resources.getDimensionPixelSize(R.dimen.dp_300)
params?.height = ConstraintLayout.LayoutParams.WRAP_CONTENT
params?.gravity = Gravity.CENTER params?.gravity = Gravity.CENTER
dialog.window?.attributes = params dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent) dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
......
...@@ -9,7 +9,6 @@ import com.base.appzxhy.databinding.DialogFunctionBackBinding ...@@ -9,7 +9,6 @@ import com.base.appzxhy.databinding.DialogFunctionBackBinding
import com.base.appzxhy.ui.batteryinfo.BatteryInfoActivity import com.base.appzxhy.ui.batteryinfo.BatteryInfoActivity
import com.base.appzxhy.ui.clean.JunkCleanActivity import com.base.appzxhy.ui.clean.JunkCleanActivity
import com.base.appzxhy.ui.largefile.LargeFileCleanActivity import com.base.appzxhy.ui.largefile.LargeFileCleanActivity
import com.base.appzxhy.ui.malware.MalwareCleanActivity
import com.base.appzxhy.ui.photocompression.PhotoCompressionActivity import com.base.appzxhy.ui.photocompression.PhotoCompressionActivity
import com.base.appzxhy.ui.screenshot.ScreenshotCleanActivity import com.base.appzxhy.ui.screenshot.ScreenshotCleanActivity
import com.base.appzxhy.ui.similar.SimilarPhotosActivity import com.base.appzxhy.ui.similar.SimilarPhotosActivity
...@@ -64,11 +63,6 @@ class FunctionBackDialog( ...@@ -64,11 +63,6 @@ class FunctionBackDialog(
binding.tvContent.text = activity.getString(R.string.exit_similar_photos_content) binding.tvContent.text = activity.getString(R.string.exit_similar_photos_content)
} }
is MalwareCleanActivity -> {
binding.tvTitle.text = activity.getString(R.string.exit_malware_clean)
binding.tvContent.text = activity.getString(R.string.exit_malware_clean_content)
}
else -> { else -> {
back.invoke() back.invoke()
return return
......
...@@ -10,6 +10,7 @@ import androidx.core.graphics.toColorInt ...@@ -10,6 +10,7 @@ import androidx.core.graphics.toColorInt
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.base.BaseActivity import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.base.jumpAction import com.base.appzxhy.base.jumpAction
import com.base.appzxhy.databinding.DialogStorage2Binding
import com.base.appzxhy.databinding.DialogStorageBinding import com.base.appzxhy.databinding.DialogStorageBinding
import com.base.appzxhy.utils.PermissionUtils.checkStorePermission import com.base.appzxhy.utils.PermissionUtils.checkStorePermission
import com.base.appzxhy.utils.PermissionUtils.requestStoragePermission import com.base.appzxhy.utils.PermissionUtils.requestStoragePermission
...@@ -43,7 +44,7 @@ class StoragePermissionDialog( ...@@ -43,7 +44,7 @@ class StoragePermissionDialog(
) { ) {
val dialog = AlertDialog.Builder(activity).create() val dialog = AlertDialog.Builder(activity).create()
val binding = DialogStorageBinding.inflate(LayoutInflater.from(activity)) val binding = DialogStorage2Binding.inflate(LayoutInflater.from(activity))
var action: (() -> Unit)? = null var action: (() -> Unit)? = null
...@@ -54,15 +55,16 @@ class StoragePermissionDialog( ...@@ -54,15 +55,16 @@ class StoragePermissionDialog(
dialog.show() dialog.show()
val params = dialog.window?.attributes val params = dialog.window?.attributes
params?.width = activity.resources.getDimensionPixelSize(R.dimen.dp_316) // params?.width = activity.resources.getDimensionPixelSize(R.dimen.dp_316)
params?.width = ConstraintLayout.LayoutParams.MATCH_PARENT
params?.height = ConstraintLayout.LayoutParams.WRAP_CONTENT params?.height = ConstraintLayout.LayoutParams.WRAP_CONTENT
params?.gravity = Gravity.CENTER params?.gravity = Gravity.BOTTOM
dialog.window?.attributes = params dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent) dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
val appName = activity.getString(R.string.app_name) val appName = activity.getString(R.string.app_name)
binding.tvContent.text = binding.tvContent.text =
highlightText(activity.getString(R.string.storage_permission_content, appName), appName, "#2DD29E".toColorInt()) highlightText(activity.getString(R.string.storage_permission_content, appName), appName, "#0456ed".toColorInt())
// binding.lottieAnimationView.let { // binding.lottieAnimationView.let {
// it.imageAssetsFolder = "permission_sc/images" // it.imageAssetsFolder = "permission_sc/images"
...@@ -71,10 +73,10 @@ class StoragePermissionDialog( ...@@ -71,10 +73,10 @@ class StoragePermissionDialog(
// it.playAnimation() // it.playAnimation()
// } // }
binding.tvDeny.setOnClickListener { // binding.tvDeny.setOnClickListener {
dialog.dismiss() // dialog.dismiss()
} // }
binding.tvAllow.setOnClickListener { binding.tvOpenSettings.setOnClickListener {
dialog.dismiss() dialog.dismiss()
action?.invoke() action?.invoke()
} }
......
...@@ -69,6 +69,10 @@ class GuideActivity : BaseActivity<ActivityGuideBinding>(ActivityGuideBinding::i ...@@ -69,6 +69,10 @@ class GuideActivity : BaseActivity<ActivityGuideBinding>(ActivityGuideBinding::i
binding.viewpager2.currentItem = 2 binding.viewpager2.currentItem = 2
return return
} }
if (page == 2) {
binding.viewpager2.currentItem = 3
return
}
if (page == 3) { if (page == 3) {
startActivity(Intent(this, MainActivity::class.java)) startActivity(Intent(this, MainActivity::class.java))
finish() finish()
......
...@@ -25,13 +25,13 @@ class GuideFragment : BaseFragment<FragmentGuideBinding>(FragmentGuideBinding::i ...@@ -25,13 +25,13 @@ class GuideFragment : BaseFragment<FragmentGuideBinding>(FragmentGuideBinding::i
} }
1 -> { 1 -> {
binding.iv.setImageResource(R.drawable.yingdaoye2) binding.iv.setImageResource(R.drawable.yindaoye2)
binding.ivDian.setImageResource(R.drawable.dian_2) binding.ivDian.setImageResource(R.drawable.dian_2)
binding.tvContent.text = getString(R.string.guide_tip_2) binding.tvContent.text = getString(R.string.guide_tip_2)
} }
3 -> { 3 -> {
binding.iv.setImageResource(R.drawable.yingdaoye3) binding.iv.setImageResource(R.drawable.yindaoye3)
binding.ivDian.setImageResource(R.drawable.dian_3) binding.ivDian.setImageResource(R.drawable.dian_3)
binding.tvContent.text = getString(R.string.guide_tip_3) binding.tvContent.text = getString(R.string.guide_tip_3)
binding.tvBtn.text = getString(R.string.get_started) binding.tvBtn.text = getString(R.string.get_started)
......
...@@ -8,6 +8,7 @@ import com.base.appzxhy.ui.guide.GuideActivity ...@@ -8,6 +8,7 @@ import com.base.appzxhy.ui.guide.GuideActivity
class NativeFullFragment : BaseFragment<FragmentNativeFullBinding>(FragmentNativeFullBinding::inflate) { class NativeFullFragment : BaseFragment<FragmentNativeFullBinding>(FragmentNativeFullBinding::inflate) {
var page: Int = 2
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
...@@ -23,7 +24,7 @@ class NativeFullFragment : BaseFragment<FragmentNativeFullBinding>(FragmentNativ ...@@ -23,7 +24,7 @@ class NativeFullFragment : BaseFragment<FragmentNativeFullBinding>(FragmentNativ
binding.ivClose.setOnClickListener { binding.ivClose.setOnClickListener {
val activity = requireActivity() as GuideActivity val activity = requireActivity() as GuideActivity
activity.next(3) activity.next(page)
} }
......
...@@ -24,7 +24,6 @@ import com.base.appzxhy.bean.FeatureBean.Companion.SIMILAR_PHOTOS ...@@ -24,7 +24,6 @@ import com.base.appzxhy.bean.FeatureBean.Companion.SIMILAR_PHOTOS
import com.base.appzxhy.bean.FeatureBean.Companion.VIDEO_CLEAN import com.base.appzxhy.bean.FeatureBean.Companion.VIDEO_CLEAN
import com.base.appzxhy.databinding.FragmentHome3Binding import com.base.appzxhy.databinding.FragmentHome3Binding
import com.base.appzxhy.ui.dialog.permissionStorageJump import com.base.appzxhy.ui.dialog.permissionStorageJump
import com.base.appzxhy.ui.malware.MalwareDialog
import com.base.appzxhy.ui.set.SettingActivity import com.base.appzxhy.ui.set.SettingActivity
import com.base.appzxhy.utils.BarUtils import com.base.appzxhy.utils.BarUtils
import com.base.appzxhy.utils.KotlinExt.toFormatSize import com.base.appzxhy.utils.KotlinExt.toFormatSize
...@@ -133,17 +132,6 @@ class HomeFragment : BaseFragment<FragmentHome3Binding>(FragmentHome3Binding::in ...@@ -133,17 +132,6 @@ class HomeFragment : BaseFragment<FragmentHome3Binding>(FragmentHome3Binding::in
(requireActivity() as MainActivity).goToAc(SettingActivity::class.java) (requireActivity() as MainActivity).goToAc(SettingActivity::class.java)
} }
ANTIVIRUS -> {
val dialog = MalwareDialog(requireActivity())
dialog.action = {
if (it) {
(requireActivity() as MainActivity).permissionStorageJump(ANTIVIRUS)
}
}
dialog.showDialog()
}
} }
} }
......
package com.base.appzxhy.ui.malware //package com.base.appzxhy.ui.malware
//
import com.base.appzxhy.MyApplication //import com.base.appzxhy.MyApplication
import com.trustlook.sdk.cloudscan.CloudScanClient //import com.trustlook.sdk.cloudscan.CloudScanClient
import com.trustlook.sdk.data.Region //import com.trustlook.sdk.data.Region
//
/** ///**
*Create by SleepDog on 2025-01-24 // *Create by SleepDog on 2025-01-24
*/ // */
object CloudScan { //object CloudScan {
val scanClient by lazy(LazyThreadSafetyMode.NONE) { // val scanClient by lazy(LazyThreadSafetyMode.NONE) {
CloudScanClient.Builder(MyApplication.appContext) // CloudScanClient.Builder(MyApplication.appContext)
// 设置服务地区, // // 设置服务地区,
// 海外地区设置:Region.INTL,百度用户设置:Region.BAIDU //// 海外地区设置:Region.INTL,百度用户设置:Region.BAIDU
.setRegion(Region.INTL) // .setRegion(Region.INTL)
// 设置连接超时时长,单位为毫秒 // // 设置连接超时时长,单位为毫秒
.setConnectionTimeout(30000) // .setConnectionTimeout(30000)
//设置传输超时时长,单位为毫秒 // //设置传输超时时长,单位为毫秒
.setSocketTimeout(30000) // .setSocketTimeout(30000)
.build() // .build()
} // }
} //}
\ No newline at end of file \ No newline at end of file
package com.base.appzxhy.ui.malware //package com.base.appzxhy.ui.malware
//
import android.app.Activity //import android.app.Activity
import android.view.LayoutInflater //import android.view.LayoutInflater
import androidx.appcompat.app.AlertDialog //import androidx.appcompat.app.AlertDialog
import androidx.constraintlayout.widget.ConstraintLayout //import androidx.constraintlayout.widget.ConstraintLayout
import com.base.appzxhy.R //import com.base.appzxhy.R
import com.base.appzxhy.business.ads.AdsMgr //import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.DialogErrBinding //import com.base.appzxhy.databinding.DialogErrBinding
//
class ErrorScanDialog( //class ErrorScanDialog(
val activity: Activity // val activity: Activity
) { //) {
val dialog = AlertDialog.Builder(activity).create() // val dialog = AlertDialog.Builder(activity).create()
val binding = DialogErrBinding.inflate(LayoutInflater.from(activity)) // val binding = DialogErrBinding.inflate(LayoutInflater.from(activity))
//
var action: (() -> Unit)? = null // var action: (() -> Unit)? = null
//
fun showDialog() { // fun showDialog() {
dialog.setView(binding.root) // dialog.setView(binding.root)
dialog.setCanceledOnTouchOutside(false) // dialog.setCanceledOnTouchOutside(false)
dialog.show() // dialog.show()
//
val params = dialog.window?.attributes // val params = dialog.window?.attributes
// params?.width = ConstraintLayout.LayoutParams.MATCH_PARENT //// params?.width = ConstraintLayout.LayoutParams.MATCH_PARENT
params?.width = activity.resources.getDimensionPixelSize(R.dimen.dp_295) // params?.width = activity.resources.getDimensionPixelSize(R.dimen.dp_295)
params?.height = ConstraintLayout.LayoutParams.WRAP_CONTENT // params?.height = ConstraintLayout.LayoutParams.WRAP_CONTENT
// params?.gravity = Gravity.BOTTOM //// params?.gravity = Gravity.BOTTOM
dialog.window?.attributes = params // dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent) // dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
//
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom) // AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom)
binding.tvSure.setOnClickListener { // binding.tvSure.setOnClickListener {
dialog.dismiss() // dialog.dismiss()
action?.invoke() // action?.invoke()
} // }
} // }
} //}
\ No newline at end of file \ No newline at end of file
package com.base.appzxhy.ui.malware //package com.base.appzxhy.ui.malware
//
import android.annotation.SuppressLint //import android.annotation.SuppressLint
import android.content.Intent //import android.content.Intent
import android.content.pm.PackageManager //import android.content.pm.PackageManager
import android.view.LayoutInflater //import android.view.LayoutInflater
import android.view.View //import android.view.View
import android.view.ViewGroup //import android.view.ViewGroup
import androidx.appcompat.content.res.AppCompatResources //import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.ContextCompat //import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope //import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager //import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView //import androidx.recyclerview.widget.RecyclerView
import com.base.appzxhy.R //import com.base.appzxhy.R
import com.base.appzxhy.base.BaseActivity //import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.bean.AppInfoBean //import com.base.appzxhy.bean.AppInfoBean
import com.base.appzxhy.business.ads.AdsMgr //import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.business.ads.AdsShowCallBack //import com.base.appzxhy.business.ads.AdsShowCallBack
import com.base.appzxhy.databinding.ActivityMalwareCleanBinding //import com.base.appzxhy.databinding.ActivityMalwareCleanBinding
import com.base.appzxhy.databinding.ItemMalwareCleanBinding //import com.base.appzxhy.databinding.ItemMalwareCleanBinding
import com.base.appzxhy.utils.FileUtils //import com.base.appzxhy.utils.FileUtils
import com.trustlook.sdk.cloudscan.CloudScanListener //import com.trustlook.sdk.cloudscan.CloudScanListener
import com.trustlook.sdk.data.AppInfo //import com.trustlook.sdk.data.AppInfo
import kotlinx.coroutines.Dispatchers //import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay //import kotlinx.coroutines.delay
import kotlinx.coroutines.launch //import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext //import kotlinx.coroutines.withContext
import kotlin.random.Random //import kotlin.random.Random
import androidx.core.net.toUri //import androidx.core.net.toUri
import androidx.core.view.ViewCompat //import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat //import androidx.core.view.WindowInsetsCompat
import com.base.appzxhy.BuildConfig //import com.base.appzxhy.BuildConfig
import com.base.appzxhy.base.LottieEnum //import com.base.appzxhy.base.LottieEnum
import com.base.appzxhy.bean.FeatureBean.Companion.ANTIVIRUS //import com.base.appzxhy.bean.FeatureBean.Companion.ANTIVIRUS
import com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN //import com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.setFunctionTodayUsed //import com.base.appzxhy.bean.FeatureBean.Companion.setFunctionTodayUsed
import com.base.appzxhy.ui.cleanresult.CleanResultActivity //import com.base.appzxhy.ui.cleanresult.CleanResultActivity
import com.base.appzxhy.utils.LogEx //import com.base.appzxhy.utils.LogEx
//
//
class MalwareCleanActivity : BaseActivity<ActivityMalwareCleanBinding>(ActivityMalwareCleanBinding::inflate) { //class MalwareCleanActivity : BaseActivity<ActivityMalwareCleanBinding>(ActivityMalwareCleanBinding::inflate) {
//
private var appList = mutableListOf<AppInfoBean>() // private var appList = mutableListOf<AppInfoBean>()
private val adapter by lazy(LazyThreadSafetyMode.NONE) { // private val adapter by lazy(LazyThreadSafetyMode.NONE) {
class ViewHolder(val binding: ItemMalwareCleanBinding) : // class ViewHolder(val binding: ItemMalwareCleanBinding) :
RecyclerView.ViewHolder(binding.root) // RecyclerView.ViewHolder(binding.root)
//
object : RecyclerView.Adapter<ViewHolder>() { // object : RecyclerView.Adapter<ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { // override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = ItemMalwareCleanBinding.inflate( // val binding = ItemMalwareCleanBinding.inflate(
LayoutInflater.from(parent.context), // LayoutInflater.from(parent.context),
parent, // parent,
false // false
) // )
return ViewHolder(binding) // return ViewHolder(binding)
} // }
//
override fun getItemCount(): Int = appList.size // override fun getItemCount(): Int = appList.size
//
override fun onBindViewHolder(holder: ViewHolder, position: Int) { // override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = appList[position] // val item = appList[position]
holder.binding.ivIcon.setImageDrawable(item.icon) // holder.binding.ivIcon.setImageDrawable(item.icon)
holder.binding.tvName.text = item.appName // holder.binding.tvName.text = item.appName
holder.binding.tvLevel.text = getLevel(item.score ?: 0) // holder.binding.tvLevel.text = getLevel(item.score ?: 0)
holder.binding.viewLine.visibility = // holder.binding.viewLine.visibility =
if (position == itemCount - 1) View.GONE else View.VISIBLE // if (position == itemCount - 1) View.GONE else View.VISIBLE
holder.itemView.setOnClickListener { // holder.itemView.setOnClickListener {
item.isSelected = !item.isSelected // item.isSelected = !item.isSelected
AdsMgr.showInsert(this@MalwareCleanActivity, showCallBack = object : AdsShowCallBack() { // AdsMgr.showInsert(this@MalwareCleanActivity, showCallBack = object : AdsShowCallBack() {
override fun next() { // override fun next() {
uninstall(0, listOf(item)) // uninstall(0, listOf(item))
} // }
}) // })
} // }
} // }
} // }
//
} // }
//
private fun getLevel(score: Int): String { // private fun getLevel(score: Int): String {
return if (score <= 5) { // return if (score <= 5) {
"safe" // "safe"
} else if (score in 6..7) { // } else if (score in 6..7) {
"Risk" // "Risk"
} else { // } else {
"malware" // "malware"
} // }
} // }
//
@SuppressLint("NotifyDataSetChanged") // @SuppressLint("NotifyDataSetChanged")
private fun uninstall(position: Int, list: List<AppInfoBean>) { // private fun uninstall(position: Int, list: List<AppInfoBean>) {
val packageName = list[position].packageName // val packageName = list[position].packageName
val intent = Intent(Intent.ACTION_DELETE, "package:$packageName".toUri()) // val intent = Intent(Intent.ACTION_DELETE, "package:$packageName".toUri())
launcher.launch(intent) { // launcher.launch(intent) {
if (isUninstall(packageName)) { // if (isUninstall(packageName)) {
appList.removeIf { // appList.removeIf {
it.packageName == packageName // it.packageName == packageName
} // }
runOnUiThread { // runOnUiThread {
adapter.notifyDataSetChanged() // adapter.notifyDataSetChanged()
updateUninstall() // updateUninstall()
} // }
} // }
if (position < list.size - 1) uninstall(position + 1, list) // if (position < list.size - 1) uninstall(position + 1, list)
else { // else {
updateView(false) // updateView(false)
} // }
} // }
} // }
//
private fun isUninstall(packageName: String): Boolean { // private fun isUninstall(packageName: String): Boolean {
val intent = packageManager.getLaunchIntentForPackage(packageName) // val intent = packageManager.getLaunchIntentForPackage(packageName)
return intent == null // return intent == null
} // }
//
@SuppressLint("SetTextI18n") // @SuppressLint("SetTextI18n")
private fun updateUninstall() { // private fun updateUninstall() {
val list = appList.filter { it.isSelected } // val list = appList.filter { it.isSelected }
val size = if (list.isEmpty()) "" else " ${list.size} ${getString(R.string.apps)}" // val size = if (list.isEmpty()) "" else " ${list.size} ${getString(R.string.apps)}"
} // }
//
@SuppressLint("NotifyDataSetChanged") // @SuppressLint("NotifyDataSetChanged")
private fun malwareClean(list: List<AppInfoBean>) { // private fun malwareClean(list: List<AppInfoBean>) {
lifecycleScope.launch(Dispatchers.Default) { // lifecycleScope.launch(Dispatchers.Default) {
val installApps = mutableListOf<AppInfoBean>() // val installApps = mutableListOf<AppInfoBean>()
list.forEach { // list.forEach {
if (it.isInstall == true) installApps.add(it) // if (it.isInstall == true) installApps.add(it)
else { // else {
it.apkPath?.also { // it.apkPath?.also {
launch(Dispatchers.IO) { // launch(Dispatchers.IO) {
FileUtils.deleteFile(it) // FileUtils.deleteFile(it)
} // }
} // }
appList.remove(it) // appList.remove(it)
} // }
} // }
//
if (installApps.isNotEmpty()) { // if (installApps.isNotEmpty()) {
uninstall(0, installApps) // uninstall(0, installApps)
} else { // } else {
withContext(Dispatchers.Main) { // withContext(Dispatchers.Main) {
adapter.notifyDataSetChanged() // adapter.notifyDataSetChanged()
updateUninstall() // updateUninstall()
} // }
} // }
} // }
} // }
//
private var isScanning = false // private var isScanning = false
private fun initData(isScan: Boolean = isScanning) { // private fun initData(isScan: Boolean = isScanning) {
if (isScan) return // if (isScan) return
isScanning = true // isScanning = true
CloudScan.scanClient.startQuickScan(object : CloudScanListener() { // CloudScan.scanClient.startQuickScan(object : CloudScanListener() {
override fun onScanStarted() { // override fun onScanStarted() {
LogEx.logDebug(TAG, "onScanStarted") // LogEx.logDebug(TAG, "onScanStarted")
} // }
//
override fun onScanCanceled() { // override fun onScanCanceled() {
LogEx.logDebug(TAG, "onScanCanceled") // LogEx.logDebug(TAG, "onScanCanceled")
scanFinish() // scanFinish()
} // }
//
override fun onScanProgress(p0: Int, p1: Int, p2: AppInfo?) { // override fun onScanProgress(p0: Int, p1: Int, p2: AppInfo?) {
LogEx.logDebug(TAG, "onScanProgress") // LogEx.logDebug(TAG, "onScanProgress")
} // }
//
@SuppressLint("NotifyDataSetChanged") // @SuppressLint("NotifyDataSetChanged")
override fun onScanFinished(dataList: MutableList<AppInfo>?) { // override fun onScanFinished(dataList: MutableList<AppInfo>?) {
//
//Log.e("CloudScan", "onScanFinished") // //Log.e("CloudScan", "onScanFinished")
scanFinishData(dataList) // scanFinishData(dataList)
} // }
//
override fun onScanError(p0: Int, p1: String?) { // override fun onScanError(p0: Int, p1: String?) {
LogEx.logDebug(TAG, "onScanError") // LogEx.logDebug(TAG, "onScanError")
isScanning = false // isScanning = false
scanError() // scanError()
} // }
//
override fun onScanInterrupt() { // override fun onScanInterrupt() {
isScanning = false // isScanning = false
scanError() // scanError()
} // }
}) // })
} // }
//
fun scanError() { // fun scanError() {
if (BuildConfig.DEBUG) return // if (BuildConfig.DEBUG) return
val dialog = ErrorScanDialog(this@MalwareCleanActivity) // val dialog = ErrorScanDialog(this@MalwareCleanActivity)
dialog.action = { // dialog.action = {
finish() // finish()
} // }
dialog.showDialog() // dialog.showDialog()
} // }
//
@SuppressLint("NotifyDataSetChanged") // @SuppressLint("NotifyDataSetChanged")
fun scanFinishData(dataList: MutableList<AppInfo>?) { // fun scanFinishData(dataList: MutableList<AppInfo>?) {
//
//
lifecycleScope.launch(Dispatchers.Default) { // lifecycleScope.launch(Dispatchers.Default) {
val realList = mutableListOf<AppInfoBean>() // val realList = mutableListOf<AppInfoBean>()
dataList?.forEach { // dataList?.forEach {
if (!it.isSystemApp && (it.score > 5 || BuildConfig.DEBUG)) { // if (!it.isSystemApp && (it.score > 5 || BuildConfig.DEBUG)) {
var isInstall: Boolean // var isInstall: Boolean
// Log.e("CloudScan", "${it.source} ${it.apkPath} ${it.toJSON(this@MalwareCleanActivity)}") // // Log.e("CloudScan", "${it.source} ${it.apkPath} ${it.toJSON(this@MalwareCleanActivity)}")
val icon = try { // val icon = try {
val res = packageManager.getApplicationIcon(it.packageName) // val res = packageManager.getApplicationIcon(it.packageName)
isInstall = true // isInstall = true
res // res
} catch (e: PackageManager.NameNotFoundException) { // } catch (e: PackageManager.NameNotFoundException) {
isInstall = false // isInstall = false
val info = packageManager.getPackageArchiveInfo( // val info = packageManager.getPackageArchiveInfo(
it.apkPath, // it.apkPath,
PackageManager.GET_ACTIVITIES // PackageManager.GET_ACTIVITIES
) // )
if (info != null) { // if (info != null) {
info.applicationInfo?.let { packageManager.getApplicationIcon(it) } // info.applicationInfo?.let { packageManager.getApplicationIcon(it) }
} else { // } else {
AppCompatResources.getDrawable(this@MalwareCleanActivity, R.drawable.icon_apk) // AppCompatResources.getDrawable(this@MalwareCleanActivity, R.drawable.icon_apk)
} // }
} // }
realList.add( // realList.add(
AppInfoBean( // AppInfoBean(
it.appName, // it.appName,
icon!!, // icon!!,
it.packageName, // it.packageName,
false, // false,
isInstall, // isInstall,
it.score, // it.score,
it.apkPath // it.apkPath
) // )
) // )
// withContext(Dispatchers.Main) { //// withContext(Dispatchers.Main) {
// adapter.notifyItemInserted(appList.size) //// adapter.notifyItemInserted(appList.size)
// } //// }
} // }
} // }
//
if (BuildConfig.DEBUG) { // if (BuildConfig.DEBUG) {
realList.add( // realList.add(
AppInfoBean( // AppInfoBean(
"AntiVirus Phone Manager", // "AntiVirus Phone Manager",
AppCompatResources.getDrawable(this@MalwareCleanActivity, R.drawable.icon_apk)!!, // AppCompatResources.getDrawable(this@MalwareCleanActivity, R.drawable.icon_apk)!!,
"com.tool.fast.phone", // "com.tool.fast.phone",
false, // false,
true, // true,
5, // 5,
"apkPath/apkPath/apkPath" // "apkPath/apkPath/apkPath"
) // )
) // )
} // }
//
withContext(Dispatchers.Main) { // withContext(Dispatchers.Main) {
val durationTime = Random.nextLong(3000, 3500) // val durationTime = Random.nextLong(3000, 3500)
delay(durationTime) // delay(durationTime)
appList.clear() // appList.clear()
appList.addAll(realList) // appList.addAll(realList)
scanFinish() // scanFinish()
adapter.notifyDataSetChanged() // adapter.notifyDataSetChanged()
updateView(true) // updateView(true)
//
} // }
} // }
} // }
//
private fun scanFinish() { // private fun scanFinish() {
isScanning = false // isScanning = false
stopAnimation() // stopAnimation()
} // }
//
fun stopAnimation() { // fun stopAnimation() {
binding.layoutAnimation.lottieAnimation.clearAnimation() // binding.layoutAnimation.lottieAnimation.clearAnimation()
binding.layoutAnimation.root.visibility = View.GONE // binding.layoutAnimation.root.visibility = View.GONE
isBackDisable = false // isBackDisable = false
} // }
//
@SuppressLint("SetTextI18n") // @SuppressLint("SetTextI18n")
private fun updateView(jump: Boolean) { // private fun updateView(jump: Boolean) {
binding.ivLogo.visibility = if (appList.isEmpty()) View.GONE else View.VISIBLE // binding.ivLogo.visibility = if (appList.isEmpty()) View.GONE else View.VISIBLE
binding.tvCount.visibility = if (appList.isEmpty()) View.GONE else { // binding.tvCount.visibility = if (appList.isEmpty()) View.GONE else {
binding.tvCount.text = getString(R.string.issue, appList.size.toString()) // binding.tvCount.text = getString(R.string.issue, appList.size.toString())
View.VISIBLE // View.VISIBLE
} // }
binding.tvUnit.visibility = if (appList.isEmpty()) View.GONE else View.VISIBLE // binding.tvUnit.visibility = if (appList.isEmpty()) View.GONE else View.VISIBLE
binding.rvMalware.visibility = if (appList.isEmpty()) View.GONE else View.VISIBLE // binding.rvMalware.visibility = if (appList.isEmpty()) View.GONE else View.VISIBLE
binding.ivEmpty.visibility = if (appList.isEmpty()) View.VISIBLE else View.GONE // binding.ivEmpty.visibility = if (appList.isEmpty()) View.VISIBLE else View.GONE
//
if (appList.isEmpty()) { // if (appList.isEmpty()) {
if (jump) { // if (jump) {
CleanResultActivity.functionKey = ANTIVIRUS // CleanResultActivity.functionKey = ANTIVIRUS
CleanResultActivity.titleName = getString(R.string.malware_scan) // CleanResultActivity.titleName = getString(R.string.malware_scan)
goToAc(CleanResultActivity::class.java) // goToAc(CleanResultActivity::class.java)
} // }
} else { // } else {
AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom) // AdsMgr.showNative(binding.flAd, R.layout.layout_admob_native_custom)
} // }
} // }
//
override fun useDefaultImmersive() { // override fun useDefaultImmersive() {
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets -> // ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) // val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, 0, systemBars.right, systemBars.bottom) // v.setPadding(systemBars.left, 0, systemBars.right, systemBars.bottom)
binding.clTop.setPadding(0, systemBars.top, 0, 0) // binding.clTop.setPadding(0, systemBars.top, 0, 0)
insets // insets
} // }
} // }
//
override fun initView() { // override fun initView() {
super.initView() // super.initView()
showAdAnimation(LottieEnum.MALWARE_SCAN) // showAdAnimation(LottieEnum.MALWARE_SCAN)
binding.rvMalware.adapter = adapter // binding.rvMalware.adapter = adapter
binding.rvMalware.layoutManager = LinearLayoutManager(this) // binding.rvMalware.layoutManager = LinearLayoutManager(this)
//
initData() // initData()
//
if (BuildConfig.DEBUG) { // if (BuildConfig.DEBUG) {
scanFinishData(null) // scanFinishData(null)
} // }
//
setFunctionTodayUsed(ANTIVIRUS) // setFunctionTodayUsed(ANTIVIRUS)
//
} // }
//
override fun initListener() { // override fun initListener() {
super.initListener() // super.initListener()
binding.flBack.setOnClickListener { onBackPressedDispatcher.onBackPressed() } // binding.flBack.setOnClickListener { onBackPressedDispatcher.onBackPressed() }
} // }
//
override fun handleBackCallBack() { // override fun handleBackCallBack() {
super.handleBackCallBack() // super.handleBackCallBack()
} // }
} //}
\ No newline at end of file \ No newline at end of file
package com.base.appzxhy.ui.malware //package com.base.appzxhy.ui.malware
//
import android.app.Activity //import android.app.Activity
import android.view.LayoutInflater //import android.view.LayoutInflater
import androidx.appcompat.app.AlertDialog //import androidx.appcompat.app.AlertDialog
import com.base.appzxhy.databinding.DialogMalwareTipBinding //import com.base.appzxhy.databinding.DialogMalwareTipBinding
import com.base.appzxhy.utils.AppPreferences //import com.base.appzxhy.utils.AppPreferences
//
//是否已经同意 ////是否已经同意
var malwareTipAgree = false //var malwareTipAgree = false
get() { // get() {
return AppPreferences.getInstance().getBoolean("malwareTipAgree", field) // return AppPreferences.getInstance().getBoolean("malwareTipAgree", field)
} // }
set(value) { // set(value) {
field = value // field = value
AppPreferences.getInstance().put("malwareTipAgree", value, true) // AppPreferences.getInstance().put("malwareTipAgree", value, true)
} // }
//
class MalwareDialog( //class MalwareDialog(
val activity: Activity // val activity: Activity
) { //) {
//
val dialog = AlertDialog.Builder(activity).create() // val dialog = AlertDialog.Builder(activity).create()
val binding = DialogMalwareTipBinding.inflate(LayoutInflater.from(activity)) // val binding = DialogMalwareTipBinding.inflate(LayoutInflater.from(activity))
//
var action: ((flag: Boolean) -> Unit)? = null // var action: ((flag: Boolean) -> Unit)? = null
//
fun showDialog() { // fun showDialog() {
//
if (malwareTipAgree) { // if (malwareTipAgree) {
action?.invoke(true) // action?.invoke(true)
return // return
} // }
//
dialog.setView(binding.root) // dialog.setView(binding.root)
dialog.setCanceledOnTouchOutside(false) // dialog.setCanceledOnTouchOutside(false)
dialog.show() // dialog.show()
//
val params = dialog.window?.attributes // val params = dialog.window?.attributes
// params?.width = ConstraintLayout.LayoutParams.MATCH_PARENT //// params?.width = ConstraintLayout.LayoutParams.MATCH_PARENT
// params?.width = activity.resources.getDimensionPixelSize(R.dimen.dp_295) //// params?.width = activity.resources.getDimensionPixelSize(R.dimen.dp_295)
// params?.height = ConstraintLayout.LayoutParams.WRAP_CONTENT //// params?.height = ConstraintLayout.LayoutParams.WRAP_CONTENT
// params?.gravity = Gravity.BOTTOM //// params?.gravity = Gravity.BOTTOM
dialog.window?.attributes = params // dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent) // dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
//
var flag = false // var flag = false
//
binding.tvCancel.setOnClickListener { // binding.tvCancel.setOnClickListener {
dialog.dismiss() // dialog.dismiss()
} // }
binding.tvSure.setOnClickListener { // binding.tvSure.setOnClickListener {
dialog.dismiss() // dialog.dismiss()
flag = true // flag = true
malwareTipAgree = true // malwareTipAgree = true
action?.invoke(true) // action?.invoke(true)
} // }
//
dialog.setOnDismissListener { // dialog.setOnDismissListener {
action?.invoke(flag) // action?.invoke(flag)
} // }
} // }
} //}
\ No newline at end of file \ No newline at end of file
...@@ -38,9 +38,7 @@ import com.base.appzxhy.business.service.StayJobService.Companion.startStayJobSe ...@@ -38,9 +38,7 @@ import com.base.appzxhy.business.service.StayJobService.Companion.startStayJobSe
import com.base.appzxhy.databinding.ActivitySplashBinding import com.base.appzxhy.databinding.ActivitySplashBinding
import com.base.appzxhy.ui.dialog.StoragePermissionDialog import com.base.appzxhy.ui.dialog.StoragePermissionDialog
import com.base.appzxhy.ui.guide.GuideCleanActivity import com.base.appzxhy.ui.guide.GuideCleanActivity
import com.base.appzxhy.ui.language.LanguageActivity
import com.base.appzxhy.ui.main.MainActivity import com.base.appzxhy.ui.main.MainActivity
import com.base.appzxhy.ui.malware.MalwareDialog
import com.base.appzxhy.utils.LogEx import com.base.appzxhy.utils.LogEx
import com.base.appzxhy.utils.PermissionUtils.checkStorePermission import com.base.appzxhy.utils.PermissionUtils.checkStorePermission
import com.base.appzxhy.utils.PermissionUtils.requestStoragePermission import com.base.appzxhy.utils.PermissionUtils.requestStoragePermission
...@@ -283,21 +281,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding ...@@ -283,21 +281,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
} }
} }
if (actionId == ANTIVIRUS) { actionStorage.invoke()
val dialog = MalwareDialog(this)
dialog.action = {
if (it) {
actionStorage.invoke()
} else {
goToAc(MainActivity::class.java)
finish()
}
}
dialog.showDialog()
} else {
actionStorage.invoke()
}
} }
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="@dimen/dp_1"
android:color="#AEB4BD" />
<corners android:radius="@dimen/dp_4" />
</shape>
\ No newline at end of file
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<item android:id="@android:id/progress"> <item android:id="@android:id/progress">
<scale android:scaleWidth="100%"> <scale android:scaleWidth="100%">
<shape> <shape>
<solid android:color="#2DD29E" /> <!-- 进度条颜色 --> <solid android:color="@color/colorPrimary" /> <!-- 进度条颜色 -->
<corners android:radius="@dimen/dp_10" /> <corners android:radius="@dimen/dp_10" />
</shape> </shape>
</scale> </scale>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/white_background"> android:background="@drawable/bg_ffffff_10">
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title" android:id="@+id/tv_title"
...@@ -41,18 +41,17 @@ ...@@ -41,18 +41,17 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_cancel" android:id="@+id/tv_cancel"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/dp_50" android:layout_height="@dimen/dp_40"
android:layout_marginStart="32dp" android:layout_marginStart="32dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_marginBottom="24dp" android:layout_marginBottom="24dp"
android:background="@drawable/bg_enable_no_50" android:background="@drawable/bg_stroke_aeb4bd_4"
android:foreground="?attr/selectableItemBackground" android:foreground="?attr/selectableItemBackground"
android:gravity="center" android:gravity="center"
android:paddingVertical="8dp"
android:text="@string/cancel" android:text="@string/cancel"
android:textColor="@color/colorPrimary" android:textColor="#AEB4BD"
android:textSize="14sp" android:textSize="@dimen/sp_14"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_confirm" app:layout_constraintEnd_toStartOf="@id/tv_confirm"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
...@@ -61,18 +60,17 @@ ...@@ -61,18 +60,17 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_confirm" android:id="@+id/tv_confirm"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/dp_50" android:layout_height="@dimen/dp_40"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="32dp" android:layout_marginEnd="32dp"
android:layout_marginBottom="24dp" android:layout_marginBottom="24dp"
android:background="@drawable/bg_enable_50" android:background="@drawable/bg_enable_4"
android:foreground="?attr/selectableItemBackground" android:foreground="?attr/selectableItemBackground"
android:gravity="center" android:gravity="center"
android:paddingVertical="8dp"
android:text="@string/confirm" android:text="@string/confirm"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="14sp" android:textSize="@dimen/sp_14"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/tv_cancel" app:layout_constraintStart_toEndOf="@id/tv_cancel"
......
<?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="@drawable/white_background_top"
android:paddingTop="24dp"
android:paddingBottom="40dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:text="@string/storage_permission_title"
android:textColor="@color/color_1a1a1a"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="8dp"
android:text="@string/storage_permission_content"
android:textColor="@color/color_666666"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_permission"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginTop="12dp"
android:adjustViewBounds="true"
android:src="@drawable/img_quanxian_pop"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvContent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvOpenSettings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:layout_marginTop="30dp"
android:background="@drawable/bg_btn_50"
android:gravity="center"
android:paddingVertical="12dp"
android:text="@string/open_settings"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@id/iv_permission" />
</androidx.constraintlayout.widget.ConstraintLayout>
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
android:layout_width="@dimen/dp_250" android:layout_width="@dimen/dp_250"
android:layout_height="@dimen/dp_250" android:layout_height="@dimen/dp_250"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_marginTop="-10dp"> android:layout_marginTop="-20dp">
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -121,6 +121,7 @@ ...@@ -121,6 +121,7 @@
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv" android:id="@+id/rv"
android:layout_marginTop="-10dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:overScrollMode="never" android:overScrollMode="never"
......
...@@ -70,4 +70,5 @@ ...@@ -70,4 +70,5 @@
<dimen name="dp_250">250dp</dimen> <dimen name="dp_250">250dp</dimen>
<dimen name="dp_28">28dp</dimen> <dimen name="dp_28">28dp</dimen>
<dimen name="dp_54">54dp</dimen> <dimen name="dp_54">54dp</dimen>
<dimen name="dp_32">32dp</dimen>
</resources> </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