Commit ea161f3e authored by wanglei's avatar wanglei

...

parent f60cbf70
package com.base.filerecoveryrecyclebin.activity package com.base.filerecoveryrecyclebin.activity
import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.graphics.Typeface import android.graphics.Typeface
import androidx.activity.addCallback
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
...@@ -13,8 +15,10 @@ import com.base.filerecoveryrecyclebin.fragment.HomeFragment ...@@ -13,8 +15,10 @@ import com.base.filerecoveryrecyclebin.fragment.HomeFragment
import com.base.filerecoveryrecyclebin.fragment.RecycleBinFragment import com.base.filerecoveryrecyclebin.fragment.RecycleBinFragment
import com.base.filerecoveryrecyclebin.help.BaseActivity import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.help.PermissionHelp.checkStorePermission import com.base.filerecoveryrecyclebin.help.PermissionHelp.checkStorePermission
import com.base.filerecoveryrecyclebin.service.StayNotificationService
import com.base.filerecoveryrecyclebin.utils.BarUtils import com.base.filerecoveryrecyclebin.utils.BarUtils
import com.base.filerecoveryrecyclebin.utils.LogEx import com.base.filerecoveryrecyclebin.utils.LogEx
import com.base.filerecoveryrecyclebin.view.DialogViews.showExitDialog
import com.base.filerecoveryrecyclebin.view.PermissionDialog.showPermissionBottomSheet import com.base.filerecoveryrecyclebin.view.PermissionDialog.showPermissionBottomSheet
import com.base.filerecoveryrecyclebin.view.RateStarPop.showRateStarPopDialog import com.base.filerecoveryrecyclebin.view.RateStarPop.showRateStarPopDialog
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
...@@ -40,11 +44,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -40,11 +44,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
override fun initView() { override fun initView() {
BarUtils.setStatusBarLightMode(this, true) BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT) BarUtils.setStatusBarColor(this, Color.parseColor("#F2F3F7"))
binding.root.updatePadding(top = BarUtils.getStatusBarHeight()) binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
// showRateStarPopDialog()
// showExitFunctionDialog()
binding.viewpager2.run { binding.viewpager2.run {
adapter = object : FragmentStateAdapter(this@MainActivity) { adapter = object : FragmentStateAdapter(this@MainActivity) {
...@@ -67,11 +68,25 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -67,11 +68,25 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
binding.ll1.setOnClickListener { binding.ll1.setOnClickListener {
binding.viewpager2.currentItem = 0 binding.viewpager2.currentItem = 0
BarUtils.setStatusBarColor(this, Color.parseColor("#F2F3F7"))
} }
binding.ll2.setOnClickListener { binding.ll2.setOnClickListener {
binding.viewpager2.currentItem = 1 binding.viewpager2.currentItem = 1
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
} }
}
private fun initStayServiceObserver() {
startService(Intent(this, StayNotificationService::class.java).apply {
this.action = StayNotificationService.MEDIA_OBSERVER_ACTION
})
startService(Intent(this, StayNotificationService::class.java).apply {
this.action = StayNotificationService.FILE_OBSERVER_ACTION
putExtra("isStart", true)
})
} }
private fun setPage(p: Int) { private fun setPage(p: Int) {
...@@ -94,7 +109,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -94,7 +109,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
override fun initListener() { override fun initListener() {
super.initListener() super.initListener()
onBackPressedDispatcher.addCallback {
showExitDialog()
}
} }
override fun onResume() { override fun onResume() {
...@@ -103,6 +120,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -103,6 +120,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
if (dialog == null) { if (dialog == null) {
dialog = showPermissionBottomSheet(launcher) dialog = showPermissionBottomSheet(launcher)
} }
} else {
initStayServiceObserver()
} }
lifecycleScope.launch(Dispatchers.Main) { lifecycleScope.launch(Dispatchers.Main) {
......
...@@ -5,6 +5,7 @@ import android.graphics.Color ...@@ -5,6 +5,7 @@ import android.graphics.Color
import android.os.Environment import android.os.Environment
import androidx.activity.addCallback import androidx.activity.addCallback
import com.base.filerecoveryrecyclebin.R import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_AUDIOS import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_AUDIOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS
...@@ -51,10 +52,14 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() { ...@@ -51,10 +52,14 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() {
onBackPressedDispatcher.onBackPressed() onBackPressedDispatcher.onBackPressed()
} }
onBackPressedDispatcher.addCallback { onBackPressedDispatcher.addCallback {
finishToMain() AdmobMaxHelper.admobMaxShowInterstitialAd(this@FileRecoveredActivity) {
finishToMain()
}
} }
binding.tvContinue.setOnClickListener { binding.tvContinue.setOnClickListener {
finish() AdmobMaxHelper.admobMaxShowInterstitialAd(this) {
finish()
}
} }
binding.tvFinish.setOnClickListener { binding.tvFinish.setOnClickListener {
onBackPressedDispatcher.onBackPressed() onBackPressedDispatcher.onBackPressed()
......
...@@ -114,9 +114,11 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() { ...@@ -114,9 +114,11 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
filterDismiss(bean) filterDismiss(bean)
} }
binding.rvFilter.adapter = filterAdapter binding.rvFilter.adapter = filterAdapter
}
override fun onResume() {
super.onResume()
initData() initData()
} }
override fun initListener() { override fun initListener() {
...@@ -168,7 +170,6 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() { ...@@ -168,7 +170,6 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
showRecoveringDialog(lifecycleScope, list, dir, copyProgressAction = { showRecoveringDialog(lifecycleScope, list, dir, copyProgressAction = {
}, finish = { }, finish = {
adapter.toggleAllSelect(false)
startActivity(Intent(this, FileRecoveredActivity::class.java).apply { startActivity(Intent(this, FileRecoveredActivity::class.java).apply {
putExtra("Number", list.size) putExtra("Number", list.size)
putExtra("ScanType", scanType) putExtra("ScanType", scanType)
......
...@@ -12,7 +12,9 @@ import com.base.filerecoveryrecyclebin.utils.LogEx ...@@ -12,7 +12,9 @@ import com.base.filerecoveryrecyclebin.utils.LogEx
import com.google.gson.Gson import com.google.gson.Gson
import java.io.File import java.io.File
/**
* Observer MediaContent add
*/
class MediaContentObserver(val context: Context, val handler: Handler? = null) : ContentObserver(null) { class MediaContentObserver(val context: Context, val handler: Handler? = null) : ContentObserver(null) {
private val TAG = "MediaContentObserver" private val TAG = "MediaContentObserver"
...@@ -21,9 +23,16 @@ class MediaContentObserver(val context: Context, val handler: Handler? = null) : ...@@ -21,9 +23,16 @@ class MediaContentObserver(val context: Context, val handler: Handler? = null) :
override fun onChange(selfChange: Boolean, uri: Uri?) { override fun onChange(selfChange: Boolean, uri: Uri?) {
super.onChange(selfChange, uri) super.onChange(selfChange, uri)
LogEx.logDebug(TAG, "uri=${uri.toString()}") LogEx.logDebug(TAG, "uri=${uri.toString()}")
if (uri.toString().contains("images")) {
}
if (uri.toString().contains("video")) {
}
uri?.let { queryNewMediaFiles(it) } uri?.let { queryNewMediaFiles(it) }
} }
@SuppressLint("Range") @SuppressLint("Range")
private fun queryNewMediaFiles(uri: Uri) { private fun queryNewMediaFiles(uri: Uri) {
// 查询新添加的媒体文件 // 查询新添加的媒体文件
......
...@@ -82,6 +82,11 @@ object AdMaxInterstitialUtils { ...@@ -82,6 +82,11 @@ object AdMaxInterstitialUtils {
override fun onAdDisplayFailed(p0: MaxAd, p1: MaxError) { override fun onAdDisplayFailed(p0: MaxAd, p1: MaxError) {
LogEx.logDebug(TAG, "onAdDisplayFailed") LogEx.logDebug(TAG, "onAdDisplayFailed")
val obj2 = JSONObject()
obj2.put("code", p1.code)
obj2.put("reason", p1.message)
obj2.put("ad_unit", "openAd")
EventUtils.event("ad_show_error", ext = obj2)
} }
}) })
} }
......
...@@ -65,6 +65,7 @@ object AdMaxOpenUtils { ...@@ -65,6 +65,7 @@ object AdMaxOpenUtils {
onHidden?.invoke() onHidden?.invoke()
appOpenAd?.loadAd() appOpenAd?.loadAd()
val obj = JSONObject() val obj = JSONObject()
obj.put("code", p1.code)
obj.put("reason", p1.message) obj.put("reason", p1.message)
obj.put("ad_unit", "openAd") obj.put("ad_unit", "openAd")
EventUtils.event("ad_show_error", ext = obj) EventUtils.event("ad_show_error", ext = obj)
......
...@@ -2,9 +2,7 @@ package com.base.filerecoveryrecyclebin.fragment ...@@ -2,9 +2,7 @@ package com.base.filerecoveryrecyclebin.fragment
import android.content.Intent import android.content.Intent
import android.os.Build import android.os.Build
import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.view.View
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
...@@ -52,13 +50,7 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() { ...@@ -52,13 +50,7 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() {
} }
StayNotificationService.mainHandler = handler StayNotificationService.mainHandler = handler
requireActivity().startService(Intent(requireActivity(), StayNotificationService::class.java).apply {
this.action = StayNotificationService.MEDIA_OBSERVER_ACTION
})
requireActivity().startService(Intent(requireContext(), StayNotificationService::class.java).apply {
this.action = StayNotificationService.FILE_OBSERVER_ACTION
putExtra("isStart", true)
})
recycleBinAdapter = RecycleBinAdapter { bean -> recycleBinAdapter = RecycleBinAdapter { bean ->
startActivity(Intent(requireContext(), RecycleBinDetailActivity::class.java).apply { startActivity(Intent(requireContext(), RecycleBinDetailActivity::class.java).apply {
putExtra("Json", Gson().toJson(bean)) putExtra("Json", Gson().toJson(bean))
...@@ -80,6 +72,7 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() { ...@@ -80,6 +72,7 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() {
} }
} }
@RequiresApi(Build.VERSION_CODES.Q)
override fun setListener() { override fun setListener() {
super.setListener() super.setListener()
binding.flGengduo.setOnClickListener { binding.flGengduo.setOnClickListener {
......
...@@ -18,9 +18,9 @@ object ConfigHelper { ...@@ -18,9 +18,9 @@ object ConfigHelper {
const val nativeAdmobId = "ca-app-pub-3940256099942544/2247696110" const val nativeAdmobId = "ca-app-pub-3940256099942544/2247696110"
const val openAdmobId = "/6499/example/app-open" const val openAdmobId = "/6499/example/app-open"
const val interAdMaxId = "ca-app-pub-3940256099942544/1033173712" const val interAdMaxId = "YOUR_AD_UNIT_ID"
const val nativeAdMaxId = "YOUR_AD_UNIT_ID" const val nativeAdMaxId = "YOUR_AD_UNIT_ID"
const val openAdMaxId = "/6499/example/app-open" const val openAdMaxId = "YOUR_AD_UNIT_ID"
//一定展示大图广告 //一定展示大图广告
var mustShowNativeAd: Boolean = false var mustShowNativeAd: Boolean = false
......
...@@ -73,20 +73,14 @@ class StayNotificationService : Service() { ...@@ -73,20 +73,14 @@ class StayNotificationService : Service() {
} }
if (action == FILE_OBSERVER_ACTION) { if (action == FILE_OBSERVER_ACTION) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val flag = intent.extras?.getBoolean("isStart") ?: false startMyFileObserver()
LogEx.logDebug(TAG, "action=$action flag=$flag")
startMyFileObserver(flag)
} }
} }
if (!isRunning) {
if (isRunning) { val notification = createPermanentNotification(applicationContext)
stopSelf() startForeground(1, notification)
return START_NOT_STICKY isRunning = true
} }
val notification = createPermanentNotification(applicationContext)
startForeground(1, notification)
return START_STICKY return START_STICKY
} }
...@@ -94,12 +88,18 @@ class StayNotificationService : Service() { ...@@ -94,12 +88,18 @@ class StayNotificationService : Service() {
private fun observerMediaContentObserver() { private fun observerMediaContentObserver() {
if (mediaContentObserver == null) { if (mediaContentObserver == null) {
mediaContentObserver = MediaContentObserver(this,mainHandler) LogEx.logDebug(TAG, "observerMediaContentObserver")
mediaContentObserver = MediaContentObserver(this, mainHandler)
mediaContentObserver?.let { mediaContentObserver?.let {
this.contentResolver.registerContentObserver( this.contentResolver.registerContentObserver(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, it MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, it
) )
this.contentResolver.registerContentObserver(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, true, it
)
} }
} }
} }
...@@ -107,23 +107,25 @@ class StayNotificationService : Service() { ...@@ -107,23 +107,25 @@ class StayNotificationService : Service() {
private var myFileObserver: MyFileObserver? = null private var myFileObserver: MyFileObserver? = null
@RequiresApi(Build.VERSION_CODES.Q) @RequiresApi(Build.VERSION_CODES.Q)
fun startMyFileObserver(isStart: Boolean) { fun startMyFileObserver() {
if (myFileObserver == null) { if (myFileObserver == null) {
LogEx.logDebug(TAG, "startMyFileObserver")
val dcimList = FileHelp.getFileFolder(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)) val dcimList = FileHelp.getFileFolder(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM))
val pictureList = FileHelp.getFileFolder(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES))
val downloadList = FileHelp.getFileFolder(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS))
val videoList = FileHelp.getFileFolder(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES))
val watchList = arrayListOf<File>() val watchList = arrayListOf<File>()
watchList.addAll(dcimList) watchList.addAll(dcimList)
watchList.addAll(pictureList)
watchList.addAll(downloadList)
watchList.addAll(videoList)
watchList.forEach { watchList.forEach {
LogEx.logDebug(TAG, "watchList=${it.absolutePath}") LogEx.logDebug(TAG, "watchList=${it.absolutePath}")
} }
myFileObserver = MyFileObserver(handler = mainHandler, watchList) myFileObserver = MyFileObserver(handler = mainHandler, watchList)
LogEx.logDebug(TAG, "watchList=${dcimList.size}") LogEx.logDebug(TAG, "watchList=${dcimList.size}")
}
if (isStart) {
myFileObserver?.startWatching() myFileObserver?.startWatching()
} else {
myFileObserver?.stopWatching()
} }
} }
......
package com.base.filerecoveryrecyclebin.view package com.base.filerecoveryrecyclebin.view
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity
import android.app.AlertDialog import android.app.AlertDialog
import android.app.Dialog import android.app.Dialog
import android.content.Context import android.content.Context
import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.view.Gravity import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.WindowManager
import androidx.lifecycle.LifecycleCoroutineScope import androidx.lifecycle.LifecycleCoroutineScope
import com.base.filerecoveryrecyclebin.R import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils.showInterAdSp import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils.showInterAdSp
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import com.base.filerecoveryrecyclebin.databinding.DialogCameraSettingBinding import com.base.filerecoveryrecyclebin.databinding.DialogCameraSettingBinding
import com.base.filerecoveryrecyclebin.databinding.DialogDeletePermanentlyBinding import com.base.filerecoveryrecyclebin.databinding.DialogDeletePermanentlyBinding
import com.base.filerecoveryrecyclebin.databinding.DialogExitAppBinding
import com.base.filerecoveryrecyclebin.databinding.DialogExitFunctionBinding import com.base.filerecoveryrecyclebin.databinding.DialogExitFunctionBinding
import com.base.filerecoveryrecyclebin.databinding.DialogImageTakeBinding import com.base.filerecoveryrecyclebin.databinding.DialogImageTakeBinding
import com.base.filerecoveryrecyclebin.databinding.DialogPermissonOpenBinding import com.base.filerecoveryrecyclebin.databinding.DialogPermissonOpenBinding
...@@ -24,7 +29,6 @@ import com.base.filerecoveryrecyclebin.databinding.DialogRemoveFileTipBinding ...@@ -24,7 +29,6 @@ import com.base.filerecoveryrecyclebin.databinding.DialogRemoveFileTipBinding
import com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize import com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize
import com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatTime import com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatTime
import com.base.filerecoveryrecyclebin.utils.LogEx import com.base.filerecoveryrecyclebin.utils.LogEx
import com.base.filerecoveryrecyclebin.view.DialogViews.showDeletePermanentlyDialog
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
...@@ -38,6 +42,7 @@ import kotlinx.coroutines.launch ...@@ -38,6 +42,7 @@ import kotlinx.coroutines.launch
import java.io.File import java.io.File
import kotlin.random.Random import kotlin.random.Random
object DialogViews { object DialogViews {
private val TAG = "DialogViews" private val TAG = "DialogViews"
...@@ -312,5 +317,39 @@ object DialogViews { ...@@ -312,5 +317,39 @@ object DialogViews {
} }
} }
fun Activity.showExitDialog() {
val dialog = BottomSheetDialog(this)
val binding = DialogExitAppBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.setCancelable(false)
dialog.show()
// dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
// dialog.window?.findViewById<View?>(com.google.android.material.R.id.design_bottom_sheet)
// ?.setBackgroundResource(android.R.color.transparent)
// (binding.root.parent as ViewGroup).background =
// ColorDrawable(Color.TRANSPARENT)
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
val lp: WindowManager.LayoutParams? = dialog.window?.attributes
lp?.alpha = 0f
lp?.dimAmount = 0.0f
window.setAttributes(lp)
// val parentView = binding.root.parent as View
// BottomSheetBehavior.from(parentView).state = BottomSheetBehavior.STATE_EXPANDED
binding.tvY.setOnClickListener {
startActivity(Intent(this, ScanJunkActivity::class.java))
}
binding.tvExit.setOnClickListener {
this.finish()
}
}
} }
...@@ -3,6 +3,7 @@ package com.base.filerecoveryrecyclebin.view ...@@ -3,6 +3,7 @@ package com.base.filerecoveryrecyclebin.view
import android.content.Context import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import com.base.filerecoveryrecyclebin.activity.MainActivity
import com.base.filerecoveryrecyclebin.databinding.DialogPermissionBottomsheetBinding import com.base.filerecoveryrecyclebin.databinding.DialogPermissionBottomsheetBinding
import com.base.filerecoveryrecyclebin.help.ActivityLauncher import com.base.filerecoveryrecyclebin.help.ActivityLauncher
import com.base.filerecoveryrecyclebin.help.PermissionHelp.requestStorePermission import com.base.filerecoveryrecyclebin.help.PermissionHelp.requestStorePermission
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/transparent" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:background="@drawable/bg_ffffff_tlr20"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_tittle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="25dp"
android:layout_marginTop="100dp"
android:text="Junk files are slowing down your phone"
android:textColor="@android:color/black"
android:textSize="22sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="25dp"
android:layout_marginTop="30dp"
android:text="Remove them now and release your phone space with one click!"
android:textColor="@color/black"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_y"
android:layout_width="300dp"
android:layout_height="45dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"
android:background="@drawable/bg_4773ff_22"
android:gravity="center"
android:text="Remove now"
android:textColor="@color/white"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_exit"
android:layout_width="300dp"
android:layout_height="45dp"
android:layout_gravity="center_horizontal"
android:layout_marginVertical="15dp"
android:gravity="center"
android:text="Exit"
android:textColor="#999999"
android:textSize="17sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<ImageView
android:id="@+id/iv"
android:layout_width="95dp"
android:layout_height="95dp"
android:layout_marginStart="30dp"
android:layout_marginBottom="-30dp"
android:src="@mipmap/junk_exit"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -103,87 +103,6 @@ ...@@ -103,87 +103,6 @@
android:visibility="gone" android:visibility="gone"
tools:text="Scanned junk files 29.69MB" /> tools:text="Scanned junk files 29.69MB" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:text="File"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_marginTop="8dp"
android:orientation="horizontal"
tools:ignore="DisableBaselineAlignment">
<androidx.cardview.widget.CardView
android:id="@+id/card_screenshot"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="@mipmap/photo"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="10dp"
app:cardElevation="0dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:text="Screenshot\nCleaner"
android:textColor="@color/black"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="8dp"
android:src="@mipmap/h_screenshot"
tools:ignore="ContentDescription" />
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/card_repeat_photos"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="@mipmap/videos"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="10dp"
app:cardElevation="0dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:text="Duplicate\nPhotos"
android:textColor="@color/black"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="8dp"
android:src="@mipmap/h_similar" />
</androidx.cardview.widget.CardView>
</LinearLayout>
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -439,6 +358,90 @@ ...@@ -439,6 +358,90 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" /> android:layout_marginTop="8dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:text="File"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_marginTop="8dp"
android:orientation="horizontal"
tools:ignore="DisableBaselineAlignment">
<androidx.cardview.widget.CardView
android:id="@+id/card_screenshot"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="@mipmap/photo"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="10dp"
app:cardElevation="0dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:text="Screenshot\nCleaner"
android:textColor="@color/black"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="8dp"
android:src="@mipmap/h_screenshot"
tools:ignore="ContentDescription" />
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/card_repeat_photos"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="@mipmap/videos"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="10dp"
app:cardElevation="0dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:text="Duplicate\nPhotos"
android:textColor="@color/black"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="8dp"
android:src="@mipmap/h_similar"
tools:ignore="ContentDescription" />
</androidx.cardview.widget.CardView>
</LinearLayout>
</LinearLayout> </LinearLayout>
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
......
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