Commit 93028a05 authored by yanglin's avatar yanglin

通知布局及similar页面功能完善

parent e8f694cc
......@@ -16,6 +16,8 @@ import com.applovin.sdk.AppLovinSdk
import com.applovin.sdk.AppLovinSdkInitializationConfiguration
import com.kongzue.dialogx.DialogX
import com.xm.test.myfilemaster.activity.HomeActivity
import com.xm.test.myfilemaster.notification.NotificationHelper
import com.xm.test.myfilemaster.notification.NotificationHelper.postNotification
import com.xm.test.myfilemaster.util.UrlManager
import java.util.concurrent.TimeUnit
......@@ -38,6 +40,8 @@ class MainActivity : AppCompatActivity(), MaxAdListener {
private fun initView() {
NotificationHelper.postNotification()
val isAgreeAppPage = MyApplication.mSp?.getBoolean("isAgreeAppPage", false) ?: false
if (isAgreeAppPage){
startAppPage()
......
......@@ -69,7 +69,7 @@ class MyApplication : Application() {
AppLovinSdk.getInstance(this).initializeSdk {
}
AppLovinSdk.getInstance(this).mediationProvider = AppLovinMediationProvider.MAX
// AppLovinSdk.getInstance(this).mediationProvider = AppLovinMediationProvider.MAX
initBroadcast()
}
......
......@@ -184,6 +184,7 @@ class MediaActivity : AppCompatActivity() {
MyApplication.mCleanSdk?.delete(File(fileBean.filePath))
mItemDataList.remove(fileBean)
}
customDialog.dismiss()
mItemAdapter?.notifyDataSetChanged()
}).show()
customDialog.isShowEditText(false)
......
package com.xm.test.myfilemaster.activity
import android.os.Bundle
import android.view.View
import android.widget.ListView
import com.kongzue.dialogx.dialogs.WaitDialog
import com.xm.test.myfilemaster.R
import com.xm.test.myfilemaster.base.BaseActivity
import com.xm.test.myfilemaster.databinding.ActivityScanLargeFilesBinding
import com.xm.test.myfilemaster.model.FileBean
import com.xm.test.myfilemaster.util.FileUtil
......@@ -12,8 +14,9 @@ class ScanLargeFilesActivity : BaseActivity() {
private lateinit var mFilesItemListView: ListView
private var mFileItemList = ArrayList<FileBean>()
private lateinit var mLargeAnimation : View
override fun getLayout(): Int {
return R.layout.activity_scan_large_files
}
......@@ -28,13 +31,13 @@ class ScanLargeFilesActivity : BaseActivity() {
fun mInitView(){
mFilesItemListView = findViewById<ListView>(R.id.files_item_listview)
mLargeAnimation = findViewById(R.id.large_files_animation)
WaitDialog.show("Please Wait!")
Thread(Runnable {
mFileItemList = FileUtil.search10MFiles(this, 10 * 1024 * 1024)
runOnUiThread {
mLargeAnimation.visibility = View.GONE
setAdapter(mFilesItemListView, mFileItemList)
WaitDialog.dismiss()
}
}).start()
setOnClickBtn()
......
......@@ -14,8 +14,10 @@ import androidx.core.view.isVisible
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.RecyclerView
import com.cloud.cleanjunksdk.similar.PicInfo
import com.cloud.cleanjunksdk.similar.PicSimilarInfo
import com.cloud.cleanjunksdk.task.SimilarScanCallBack
import com.trustlook.sdk.data.AppInfo
import com.xm.test.myfilemaster.MyApplication
import com.xm.test.myfilemaster.R
import com.xm.test.myfilemaster.adapter.ImageItemAdapter
......@@ -43,15 +45,10 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
private lateinit var mListView: ListView
private lateinit var mRecycleView: RecyclerView
private lateinit var mFileCheckedItemList: ArrayList<String>
private var mImageItemAdapter: ImageItemAdapter? = null
private var appInfoList = ArrayList<PicInfo>()
private var mSimilarBeanAdapter: SimilarBeanAdapter? = null
private var mDataBeans = ArrayList<ArrayList<FileBean>>()
private var mSimilarDatas = ArrayList<PicSimilarInfo>()
private var mSimilarDatas = ArrayList<ArrayList<FileBean>>()
companion object{
......@@ -88,6 +85,7 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
mCancelBtn.setOnClickListener(this)
mQuitBtn.setOnClickListener(this)
mEditBtn.setOnClickListener(this)
mDeleteBtn.setOnClickListener(this)
mCheckItemSelectAllBtn.setOnClickListener(this)
mListView = findViewById(R.id.files_item_listview)
......@@ -97,19 +95,10 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
mRecycleView.adapter = mSimilarBeanAdapter
setNumber(0)
// mImageItemAdapter = ImageItemAdapter(this, mDataBeans )
// mListView.adapter = mImageItemAdapter
startDuplicateImages()
// mBaseViewModel = ViewModelProvider(this)[BaseActivityViewModel::class.java]
// mBaseViewModel.setNumber(0)
// mBaseViewModel.myInt.observe(this, Observer {
// mSelectNumText.text = String.format(getString(R.string.select_0, it.toString()))
// })
// mDeleteBtn.setOnClickListener {
// }
}
private fun startDuplicateImages() {
......@@ -124,13 +113,13 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
override fun onSmilarEmitOne(p0: PicSimilarInfo?) {
var listPath = ArrayList<FileBean>()
// for (i in p0?.getmList()!!) {
// val fileBean = FileBean()
// fileBean.filePath = i.path
// listPath.add(fileBean)
// }
for (i in p0?.getmList()!!) {
val fileBean = FileBean()
fileBean.filePath = i.path
listPath.add(fileBean)
}
// mDataBeans.add(listPath)
mSimilarDatas.add(p0!!)
mSimilarDatas.add(listPath)
}
......@@ -190,15 +179,28 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
customDialog.setsCancel(View.OnClickListener {
customDialog.dismiss()
}).setsConfirm(View.OnClickListener {
for (fileBean in mImageItemAdapter?.mCheckedLists!!){
for (fileBean in mSimilarBeanAdapter?.mCheckedLists!!){
MyApplication.mCleanSdk?.delete(File(fileBean.filePath))
for (i in 0..<mSimilarDatas.size){
mSimilarDatas[i].forEach {
if (fileBean.filePath.contains(it.filePath)){
Log.e("yanglin", "onClick: ${mSimilarDatas[i]}", )
mSimilarDatas[i].remove(fileBean)
return@forEach
}
startDuplicateImages()
}
}
}
mEditBtn.visibility = View.GONE
mSimilarBeanAdapter?.setData(mSimilarDatas)
mSimilarBeanAdapter?.notifyDataSetChanged()
mSimilarBeanAdapter?.refreshItem()
setNumber(0)
customDialog.dismiss()
}).show()
customDialog.isShowEditText(false)
customDialog.setsTitle("Delete")
customDialog.setsHint("Are you sure you want to delete ${mImageItemAdapter?.mCheckedLists!!.size} item?")
customDialog.setsHint("Are you sure you want to delete ${mSimilarBeanAdapter?.mCheckedLists!!.size ?: 0} item?")
}
R.id.checkbox_item_all ->{
isClickCheckBoxAllBtn = !isClickCheckBoxAllBtn
......@@ -214,6 +216,7 @@ class SimilarImagesActivity : AppCompatActivity(), OnClickListener, SimilarBeanA
fun cancel(){
// setStateCheckedMap(false)
mSimilarBeanAdapter?.selectAll(false)
mNewBtn.visibility = View.VISIBLE
mQuitBtn.visibility = View.VISIBLE
mEditBtn.visibility =View.VISIBLE
......
package com.xm.test.myfilemaster.ad
import android.text.TextUtils
import com.xm.test.myfilemaster.MyApplicaiton
import com.xm.test.myfilemaster.MyApplication
object AdUtils {
......@@ -31,7 +31,7 @@ object AdUtils {
return false
}
val adNum = MyApplicaiton.fContext.queryDataStoreBlock(getIntString(slot + "_ad_show_num") , 0)
val adNum = MyApplication.fContext.queryDataStoreBlock(getIntString(slot + "_ad_show_num") , 0)
if (adNum >= adEntity.show_limit) {
return false
}
......@@ -45,7 +45,7 @@ object AdUtils {
* @param interval 单位分钟
*/
private fun canNextTime(key: String, interval: Int): Boolean {
val lastPushTime = MyApplicaiton.fContext.queryDataStoreBlock(getLongKey(key), 0)
val lastPushTime = MyApplication.fContext.queryDataStoreBlock(getLongKey(key), 0)
return (System.currentTimeMillis() - lastPushTime) / 1000 > interval
}
......
......@@ -8,6 +8,7 @@ import android.util.Log
import com.android.installreferrer.api.InstallReferrerClient
import com.android.installreferrer.api.InstallReferrerStateListener
import com.blankj.utilcode.util.GsonUtils
import com.trustlook.sdk.BuildConfig
import com.xm.test.myfilemaster.MyApplication
import com.xm.test.myfilemaster.ad.bean.AdUnitCfg
import com.xm.test.myfilemaster.ad.bean.AdsCfg
......@@ -26,7 +27,6 @@ import okhttp3.Response
import okhttp3.logging.HttpLoggingInterceptor
import org.json.JSONObject
import java.io.IOException
import com.xm.test.myfilemaster.BuildConfig
object ComUtils {
......@@ -44,6 +44,7 @@ object ComUtils {
private val configCall by lazy {
val client = OkHttpClient.Builder().apply {
if (BuildConfig.DEBUG) {
addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
})
......
......@@ -7,9 +7,9 @@ import com.blankj.utilcode.util.DeviceUtils
import com.blankj.utilcode.util.NetworkUtils
import com.blankj.utilcode.util.SPUtils
import com.blankj.utilcode.util.ScreenUtils
import com.trustlook.sdk.BuildConfig
import com.xm.test.myfilemaster.MyApplication
import com.xm.test.myfilemaster.ad.KokoReportHelper.isCharging
import com.xm.test.myfilemaster.BuildConfig
import okhttp3.Call
import okhttp3.Callback
import okhttp3.MediaType.Companion.toMediaTypeOrNull
......@@ -57,6 +57,7 @@ object EventHelper {
.put("${pkg}_14", "${AppUtils.getAppVersionCode()}")
.put("${pkg}_15", "google")
.put("${pkg}_24", BuildConfig.BUILD_TYPE)
// .put("${pkg}_25", PhoneTools.isRoot())
.put("${pkg}_25", KokoReportHelper.isShellRooted())
// .put("${pkg}_26", PhoneTools.isHooked())
......
......@@ -13,13 +13,14 @@ import com.cloud.cleanjunksdk.similar.PicSimilarInfo
import com.xm.test.myfilemaster.R
import com.xm.test.myfilemaster.activity.SimilarImagesActivity
import com.xm.test.myfilemaster.databinding.ImageItemLayoutBinding
import com.xm.test.myfilemaster.model.FileBean
import com.xm.test.myfilemaster.util.FileUtil
class SimilarBeanAdapter(context: Context, refreshNumListener: RefreshNumberText) : RecyclerView.Adapter<SimilarBeanAdapter.AA>() {
private val list = arrayListOf<PicSimilarInfo>()
private val list = arrayListOf<ArrayList<FileBean>>()
private var refreshNumListener: RefreshNumberText
private var context: Context
var mCheckedLists: MutableList<PicInfo> = mutableListOf<PicInfo>()
var mCheckedLists: ArrayList<FileBean> = ArrayList()
private var mItemCheckedArray = ArrayList<SparseBooleanArray>()
val mGridAdapters = ArrayList<SimilarGridAdapter>()
val holders = ArrayList<AA>()
......@@ -52,25 +53,25 @@ class SimilarBeanAdapter(context: Context, refreshNumListener: RefreshNumberText
// mItemCheckedArray.add(SparseBooleanArray())
//// itemAdapter.add(ItemAdapter(mDataList[position], mContext, mItemCheckedArray[position], position))
// }
mGridAdapters.add(SimilarGridAdapter(list[position].getmList(), context, mItemCheckedArray[position], position))
mGridAdapters.add(SimilarGridAdapter(list[position], context, mItemCheckedArray[position], position))
// val data = list[position]
holder.binding.similarImageNumText.text =
String.format(context.getString(R.string.similar, list[position].getmList().size.toString()))
String.format(context.getString(R.string.similar, list[position].size.toString()))
val layoutParams = holder.binding.imageItemGrid.layoutParams
if (list[position].getmList().size.toFloat() / 4.0 == 1.0){
layoutParams.height = FileUtil.dpToPx(80*(list[position].getmList().size / 4), context)
if (list[position].size.toFloat() / 4.0 == 1.0){
layoutParams.height = FileUtil.dpToPx(80*(list[position].size / 4), context)
}else{
layoutParams.height = FileUtil.dpToPx(80*(list[position].getmList().size / 4 + 1 ), context)
layoutParams.height = FileUtil.dpToPx(80*(list[position].size / 4 + 1 ), context)
}
holder.binding.imageItemGrid.setOnItemClickListener { parent, view, itemPosition, id ->
if (SimilarImagesActivity.isClickEditBtn){
println("yanglin positioin $position itemPostion $itemPosition")
updateCheckBoxStatus(position, view, itemPosition, holder.binding.imageItemGrid, list[position].getmList())
updateCheckBoxStatus(position, view, itemPosition, holder.binding.imageItemGrid, list[position])
}
}
......@@ -79,7 +80,7 @@ class SimilarBeanAdapter(context: Context, refreshNumListener: RefreshNumberText
holder.binding.imageItemGrid.adapter = mGridAdapters[position]
}
fun updateCheckBoxStatus(position: Int, view: View, itemPosition: Int, lv: GridView, fileBeanList: MutableList<PicInfo>){
fun updateCheckBoxStatus(position: Int, view: View, itemPosition: Int, lv: GridView, fileBeanList: ArrayList<FileBean>){
val viewHolder = view.tag as SimilarGridAdapter.ViewHolder
viewHolder.checkBox.toggle()
lv.setItemChecked(itemPosition, viewHolder.checkBox.isChecked)
......@@ -95,17 +96,19 @@ class SimilarBeanAdapter(context: Context, refreshNumListener: RefreshNumberText
refreshNumListener.setCheckBoxSelect(false)
}
fun setData(data: List<PicSimilarInfo>) {
fun setData(data: ArrayList<ArrayList<FileBean>>) {
list.clear()
list.addAll(data)
mItemCheckedArray.clear()
mCheckedLists.clear()
mGridAdapters.clear()
for (i in 0..<list.size){
mItemCheckedArray.add(SparseBooleanArray())
for (j in 0..<list[0].getmList().size){
for (j in 0..<list[0].size){
mItemCheckedArray[i].put(j, false)
}
}
notifyDataSetChanged()
refreshItem()
}
fun selectAll(isChecked: Boolean){
......@@ -124,9 +127,9 @@ class SimilarBeanAdapter(context: Context, refreshNumListener: RefreshNumberText
}
fun setStateCheckedMap(position: Int, isChecked: Boolean){
if (isChecked){
mCheckedLists.addAll(list[position].getmList())
mCheckedLists.addAll(list[position])
}
for(i in 0..< list[position].getmList().size){
for(i in 0..< list[position].size){
mItemCheckedArray[position].put(i, isChecked)
// holders[position].binding.imageItemGrid.setItemChecked(i, isChecked)
}
......
......@@ -14,14 +14,15 @@ import com.bumptech.glide.Glide
import com.cloud.cleanjunksdk.similar.PicInfo
import com.xm.test.myfilemaster.R
import com.xm.test.myfilemaster.activity.SimilarImagesActivity
import com.xm.test.myfilemaster.model.FileBean
import com.xm.test.myfilemaster.util.FileUtil
class SimilarGridAdapter(
list: MutableList<PicInfo>, context: Context,
list: MutableList<FileBean>, context: Context,
mStateCheckedMap: SparseBooleanArray, mPosition: Int): BaseAdapter(){
private var context: Context
private var dataList: MutableList<PicInfo>
private var dataList: MutableList<FileBean>
private var stateCheckedMap: SparseBooleanArray
private var inflater: LayoutInflater
private var mPosition: Int
......@@ -59,7 +60,7 @@ class SimilarGridAdapter(
}
// BitmapDrawable(context.resources, BitmapFactory.decodeFile(dataList[position].filePath))
itemHolder.checkBox.visibility = if (SimilarImagesActivity.isClickEditBtn) View.VISIBLE else View.GONE
Glide.with(context).load(dataList[position].path).centerCrop().into(itemHolder.imageView)
Glide.with(context).load(dataList[position].filePath).centerCrop().into(itemHolder.imageView)
// itemHolder.imageView.setImageDrawable(BitmapDrawable(context.resources, BitmapFactory.decodeFile(dataList[position].path)))
itemHolder.imageView.layoutParams.height = FileUtil.dpToPx(83, context)
......@@ -73,7 +74,7 @@ class SimilarGridAdapter(
}
fun setData(datas: MutableList<PicInfo>){
fun setData(datas: ArrayList<FileBean>){
this.dataList = datas
}
......
......@@ -212,15 +212,17 @@ abstract class BaseActivity : BaseAbsView(), BaseActivityListener{
}else{
mFilesItemListView.visibility = View.VISIBLE
mNotFileFoundLayout.visibility = View.GONE
mEditBtn.visibility = View.VISIBLE
mFileAdapter.setData(mItemDataList)
}
setStateCheckedMap(false)
customDialog.dismiss()
}).show()
customDialog.isShowEditText(false)
customDialog.setsTitle("Delete")
customDialog.setsHint("Are you sure you want to delete ${mFileCheckedItemList.size} item?")
customDialog.setsRightDelete("Delete")
cancel()
mNewBtn.visibility = View.GONE
mEditBtn.visibility = View.GONE
}
R.id.btn_share ->{
if (switchNumber > 1){
......@@ -385,10 +387,19 @@ abstract class BaseActivity : BaseAbsView(), BaseActivityListener{
}
fun setStateCheckedMap(isChecked: Boolean){
if (!isChecked) {
switchNumber = 0
mBaseViewModel.setNumber(0)
mFileCheckedItemList.clear()
}else{
mFileCheckedItemList.addAll(mItemDataList)
mBaseViewModel.setNumber(mFileCheckedItemList.size)
}
for(i in mItemDataList.indices){
mItemCheckedArray.put(i, isChecked)
mFilesItemListView.setItemChecked(i, isChecked)
}
mFileAdapter.notifyDataSetChanged()
}
fun setOnListViewItemClickListener(lv: ListView){
......@@ -469,7 +480,7 @@ abstract class BaseActivity : BaseAbsView(), BaseActivityListener{
}
mFileAdapter.notifyDataSetChanged()
switchNumber = mFileCheckedItemList.size
mBaseViewModel.setNumber(switchNumber)
mBaseViewModel.setNumber(mFileCheckedItemList.size)
}
fun selectAll(){
mFileCheckedItemList.clear()
......@@ -482,7 +493,6 @@ abstract class BaseActivity : BaseAbsView(), BaseActivityListener{
0
}
mFileAdapter.notifyDataSetChanged()
mBaseViewModel.setNumber(switchNumber)
// mSelectNumText.text = String.format(getString(R.string.select_0, mSelectNum.toString()))
}
......
......@@ -239,6 +239,7 @@ class InternalStorageFragment : Fragment(), View.OnClickListener {
MyApplication.mCleanSdk?.delete(File(fileBean.filePath))
}
mFileAdapter?.setData(mItemDataList)
customDialog.dismiss()
}).show()
customDialog.isShowEditText(false)
customDialog.setsTitle("Delete")
......
......@@ -40,7 +40,7 @@ import kotlin.random.Random
object NotificationHelper {
private const val CHANNEL_ID = "msjdhusjdsd"
private const val CHANNEL_ID = "uxm7okanmfth88nb"
private const val CHANNEL_NAME = "File Manager Select"
@SuppressLint("RemoteViewLayout")
......@@ -53,7 +53,7 @@ object NotificationHelper {
var myValue = 0
when (actionId) {
ID_JUNK_CLEAN_PUSH -> {
remoteViews = RemoteViews(packageName, R.layout.notification_junk_clean)
remoteViews = RemoteViews(packageName, R.layout.notification_scan_junk_layout)
}
ID_BOOST_PUSH -> {
......@@ -65,7 +65,7 @@ object NotificationHelper {
}
ID_BATTERY_PUSH -> {
remoteViews = RemoteViews(packageName, R.layout.notification_battery)
remoteViews = RemoteViews(packageName, R.layout.notification_battery_layout)
}
ID_COOL_PUSH -> {
......@@ -73,7 +73,7 @@ object NotificationHelper {
}
ID_BIGFILE_PUSH -> {
remoteViews = RemoteViews(packageName, R.layout.notification_large_file)
remoteViews = RemoteViews(packageName, R.layout.notification_large_layout)
}
ID_DUPLICATE_FILE_PUSH -> {
......@@ -93,19 +93,19 @@ object NotificationHelper {
}
ID_INSTALL_PACKAGE_PUSH -> {
remoteViews = RemoteViews(packageName, R.layout.notification_install)
remoteViews = RemoteViews(packageName, R.layout.notification_install_bar)
}
ID_UNINSTALL_PACKAGE_PUSH -> {
remoteViews = RemoteViews(packageName, R.layout.notification_uninstall)
remoteViews = RemoteViews(packageName, R.layout.notification_uninstall_bar)
}
ID_CHARGE -> {
remoteViews = RemoteViews(packageName, R.layout.notification_battery)
remoteViews = RemoteViews(packageName, R.layout.notification_low_battery_bar)
}
ID_LOW_BATTERY_PUSH -> {
remoteViews = RemoteViews(packageName, R.layout.notification_battery_low)
remoteViews = RemoteViews(packageName, R.layout.notification_low_battery_bar)
}
ID_LOW_JUNK_PUSH -> {
......@@ -166,8 +166,8 @@ object NotificationHelper {
)
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_logo24)
.setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.ic_logo24))
.setSmallIcon(R.mipmap.app_icon)
.setLargeIcon(BitmapFactory.decodeResource(context.resources, R.mipmap.app_icon))
.setCustomContentView(remoteViews)
.setCustomHeadsUpContentView(remoteViews)
......
......@@ -16,7 +16,8 @@ object HttpRequest {
val response = okHttpClient.newCall(request).execute()
if (response.isSuccessful){
Gson().fromJson(response.body().toString(), AdConfigData::class.java)
Gson().fromJson(response.body.toString(), AdConfigData::class.java)
}
......
package com.xm.test.myfilemaster.util
object UrlManager {
const val AD_APP_KEY = "GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW"
// const val AD_APP_KEY = "GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW"
const val AD_APP_KEY = "uxm7okanmfth88nb"
const val AD_UNIT_ID = ""
const val TEST_PLACEMENT_HERE = ""
......
......@@ -7,7 +7,18 @@
android:orientation="vertical"
android:background="#F8F8F8"
tools:context=".activity.InternalStorageActivity">
<FrameLayout
android:id="@+id/large_files_animation"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.airbnb.lottie.LottieAnimationView
android:layout_width="match_parent"
android:layout_height="248dp"
app:lottie_autoPlay="true"
android:layout_gravity="center"
app:lottie_loop="true"
app:lottie_rawRes="@raw/wenjian" />
</FrameLayout>
<include layout="@layout/title_bar_layout"/>
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@mipmap/notification_bg"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:src="@mipmap/notification_antivirus"/>
<TextView
android:layout_marginTop="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Timed completion of virus detection"
android:textColor="@color/black"
android:textStyle="bold"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Complete virus detection to protect phone privacy"
android:textColor="@color/black"/>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/notification_button">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="Scan"
android:layout_gravity="center"/>
</FrameLayout>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@mipmap/notification_bg"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:src="@mipmap/notifacation_battery"/>
<TextView
android:layout_marginTop="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="View detailed battery status"
android:textColor="@color/black"
android:textStyle="bold"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Check the condition of the battery to maintain its \nhealthy use"
android:textColor="@color/black"/>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/notification_button">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="Scan"
android:layout_gravity="center"/>
</FrameLayout>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@mipmap/notification_bg"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:src="@mipmap/notification_files"/>
<TextView
android:layout_marginTop="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scan large files on your phone"
android:textColor="@color/black"
android:textStyle="bold"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scan existing large fles to free up occupied storage"
android:textColor="@color/black"/>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/notification_button">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="Scan"
android:layout_gravity="center"/>
</FrameLayout>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@mipmap/notification_bg"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:src="@mipmap/notification_clean"/>
<TextView
android:layout_marginTop="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scan junk fles daily"
android:textColor="@color/black"
android:textStyle="bold"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Timely clean storage and maintain storage space"
android:textColor="@color/black"/>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/notification_button">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="Clean"
android:layout_gravity="center"/>
</FrameLayout>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@mipmap/notification_bg"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:src="@mipmap/notification_image"/>
<TextView
android:layout_marginTop="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scan similar images on your phone"
android:textColor="@color/black"
android:textStyle="bold"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scan similar pictures to free up occupied storage"
android:textColor="@color/black"/>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/notification_button">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:text="Scan"
android:layout_gravity="center"/>
</FrameLayout>
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
This diff is collapsed.
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