Commit 5c670b57 authored by wanglei's avatar wanglei

[迭代]引导功能弹窗

parent e2d3b641
This diff is collapsed.
...@@ -36,6 +36,7 @@ import com.facebook.appevents.AppEventsLogger ...@@ -36,6 +36,7 @@ import com.facebook.appevents.AppEventsLogger
import com.rgt.superr.SpConstObject.appUuid import com.rgt.superr.SpConstObject.appUuid
import com.rgt.superr.SpConstObject.gid import com.rgt.superr.SpConstObject.gid
import com.rgt.superr.business.push.receiver.AlarmReceiver.Companion.startAlarm import com.rgt.superr.business.push.receiver.AlarmReceiver.Companion.startAlarm
import com.rgt.superr.business.push.receiver.PackageReceiver
import com.rgt.superr.business.push.timer.TimerManager.Companion.changeTimer import com.rgt.superr.business.push.timer.TimerManager.Companion.changeTimer
import com.rgt.superr.business.push.work.RepeatingWorker.Companion.schedulePeriodicWork import com.rgt.superr.business.push.work.RepeatingWorker.Companion.schedulePeriodicWork
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
...@@ -164,7 +165,7 @@ class MyApplication : Application() { ...@@ -164,7 +165,7 @@ class MyApplication : Application() {
changeTimer() changeTimer()
ScreenStatusReceiver.registerScreenStatusReceiver(this) ScreenStatusReceiver.registerScreenStatusReceiver(this)
// PackageStatusReceiver.registerPackageStatusReceiver(this) PackageReceiver.register(this)
registerBatteryReceiver(this) registerBatteryReceiver(this)
//workManager //workManager
......
...@@ -64,6 +64,7 @@ import com.rgt.superr.utils.MediaUtils ...@@ -64,6 +64,7 @@ import com.rgt.superr.utils.MediaUtils
import com.rgt.superr.utils.VpnStatusListener import com.rgt.superr.utils.VpnStatusListener
import com.rgt.superr.utils.VpnStatusListener.Companion.vpnFlow import com.rgt.superr.utils.VpnStatusListener.Companion.vpnFlow
import com.hjq.language.MultiLanguages import com.hjq.language.MultiLanguages
import com.rgt.superr.bean.FeatureBean.Companion.setFunctionTodayUsed
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
...@@ -432,6 +433,7 @@ fun Activity.jumpAction(key: String) { ...@@ -432,6 +433,7 @@ fun Activity.jumpAction(key: String) {
if (this !is BaseActivity<*>) { if (this !is BaseActivity<*>) {
throw Exception("") throw Exception("")
} }
setFunctionTodayUsed(key, true)
when (key) { when (key) {
BATTERY_INFO -> { BATTERY_INFO -> {
goToAc(BatteryInfoActivity::class.java) goToAc(BatteryInfoActivity::class.java)
......
...@@ -23,15 +23,28 @@ class FeatureBean( ...@@ -23,15 +23,28 @@ class FeatureBean(
const val VIDEO_CLEAN = "video_clean" const val VIDEO_CLEAN = "video_clean"
const val UNINSTALL_APP = "uninstall_app" const val UNINSTALL_APP = "uninstall_app"
const val RECOVERY_PHOTOS = "recovery_photos" // const val RECOVERY_PHOTOS = "recovery_photos"
const val RECOVERY_VIDEOS = "recovery_videos" // const val RECOVERY_VIDEOS = "recovery_videos"
const val RECOVERY_AUDIOS = "recovery_audios" // const val RECOVERY_AUDIOS = "recovery_audios"
const val RECOVERY_DOCUMENTS = "recovery_documents" // const val RECOVERY_DOCUMENTS = "recovery_documents"
const val ANTIVIRUS = "antivirus" const val ANTIVIRUS = "antivirus"
const val SETTINGS = "settings" const val SETTINGS = "settings"
fun isTodayUsedFunction(): Boolean {
val flag1 = getFunctionTodayUsed(BATTERY_INFO)
val flag2 = listOf(
JUNK_CLEAN,
SCREENSHOT_CLEAN,
LARGE_FILE_CLEAN,
PHOTO_COMPRESSION,
SIMILAR_PHOTOS,
UNINSTALL_APP
).filter { getFunctionTodayUsed(it) }.size >= 2
return flag1 || flag2
}
/** /**
* 今天功能使用过否 * 今天功能使用过否
*/ */
...@@ -46,5 +59,6 @@ class FeatureBean( ...@@ -46,5 +59,6 @@ class FeatureBean(
return AppPreferences.getInstance().put("${key}_${System.currentTimeMillis().toFormatTime4()}", used) return AppPreferences.getInstance().put("${key}_${System.currentTimeMillis().toFormatTime4()}", used)
} }
} }
} }
\ No newline at end of file
...@@ -28,6 +28,7 @@ import com.rgt.superr.utils.ToastUtils.toast ...@@ -28,6 +28,7 @@ import com.rgt.superr.utils.ToastUtils.toast
import com.google.android.gms.ads.MobileAds import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.identifier.AdvertisingIdClient import com.google.android.gms.ads.identifier.AdvertisingIdClient
import com.google.android.gms.ads.initialization.AdapterStatus import com.google.android.gms.ads.initialization.AdapterStatus
import com.rgt.superr.business.ads.AdsType.Companion.NATIVE
import java.util.Collections import java.util.Collections
import java.util.concurrent.Executors import java.util.concurrent.Executors
...@@ -243,7 +244,7 @@ object AdsMgr { ...@@ -243,7 +244,7 @@ object AdsMgr {
@LayoutRes layout: Int, @LayoutRes layout: Int,
nativeCallBack: ((Any?) -> Unit)? = null nativeCallBack: ((Any?) -> Unit)? = null
) { ) {
if (!adsConfigBean.isAdShow) { if (!adsConfigBean.isAdShow || !LimitUtils.isShowNative(NATIVE, null)) {
nativeView.visibility = View.GONE nativeView.visibility = View.GONE
nativeCallBack?.invoke(null) nativeCallBack?.invoke(null)
return return
......
package com.rgt.superr.business.push.receiver
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Build
import com.rgt.superr.bean.push.NotificationSendBean
import com.rgt.superr.bean.push.NotificationSendBean.Companion.POPUP_WHERE_PACKAGE
import com.rgt.superr.business.push.notification.MyNotificationManager
class PackageReceiver : BroadcastReceiver() {
companion object {
fun register(context: Context) {
val intentFilter = IntentFilter().apply {
addAction(Intent.ACTION_PACKAGE_REMOVED)
addAction(Intent.ACTION_PACKAGE_ADDED)
addDataScheme("package")
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
context.registerReceiver(PackageReceiver(), intentFilter, Context.RECEIVER_EXPORTED)
} else {
context.registerReceiver(PackageReceiver(), intentFilter)
}
}
}
override fun onReceive(context: Context, intent: Intent?) {
MyNotificationManager.submitSendBean(NotificationSendBean(context, POPUP_WHERE_PACKAGE))
}
}
...@@ -19,6 +19,7 @@ import com.rgt.superr.bean.FeatureBean.Companion.JUNK_CLEAN ...@@ -19,6 +19,7 @@ import com.rgt.superr.bean.FeatureBean.Companion.JUNK_CLEAN
import com.rgt.superr.bean.FeatureBean.Companion.setFunctionTodayUsed import com.rgt.superr.bean.FeatureBean.Companion.setFunctionTodayUsed
import com.rgt.superr.bean.FileBean import com.rgt.superr.bean.FileBean
import com.rgt.superr.business.ads.AdsMgr import com.rgt.superr.business.ads.AdsMgr
import com.rgt.superr.business.ads.AdsShowCallBack
import com.rgt.superr.databinding.ActivityJunkCleanBinding import com.rgt.superr.databinding.ActivityJunkCleanBinding
import com.rgt.superr.databinding.ItemJunkCleanChildBinding import com.rgt.superr.databinding.ItemJunkCleanChildBinding
import com.rgt.superr.databinding.ItemJunkCleanGroupBinding import com.rgt.superr.databinding.ItemJunkCleanGroupBinding
...@@ -273,6 +274,13 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle ...@@ -273,6 +274,13 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
binding.tvClean.visibility = View.VISIBLE binding.tvClean.visibility = View.VISIBLE
binding.tvPath.text = getString(R.string.clean_tips) binding.tvPath.text = getString(R.string.clean_tips)
updateSelection() updateSelection()
AdsMgr.showInsert(this, false, object : AdsShowCallBack() {
override fun next() {
if (total > 0L) {
binding.idShouzhi.visibility = View.VISIBLE
}
}
})
} }
private fun setSize(size: Long) { private fun setSize(size: Long) {
......
package com.rgt.superr.ui.dialog
import android.app.Activity
import android.view.LayoutInflater
import androidx.appcompat.app.AlertDialog
import com.rgt.superr.databinding.DialogBatteryUseBinding
class BatteryUseDialog(
activity: Activity
) {
val dialog = AlertDialog.Builder(activity).create()
val binding = DialogBatteryUseBinding.inflate(LayoutInflater.from(activity))
var action: (() -> Unit)? = null
fun showDialog(
dl: Int = 0,
) {
dialog.setView(binding.root)
dialog.setCanceledOnTouchOutside(true)
val params = dialog.window?.attributes
// params?.width = activity.resources.getDimensionPixelSize(R.dimen.dp_300)
// params?.width = FrameLayout.LayoutParams.WRAP_CONTENT
// params?.height = FrameLayout.LayoutParams.WRAP_CONTENT
// params?.gravity = Gravity.CENTER
dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
dialog.show()
binding.idLottie.setAnimation("scan/battery_info.json")
binding.idLottie.playAnimation()
binding.idTv01.text = "${dl}%"
binding.idImgClose.setOnClickListener {
dialog.dismiss()
}
binding.idTvScan.setOnClickListener {
dialog.dismiss()
action?.invoke()
}
}
}
...@@ -12,8 +12,10 @@ import com.rgt.superr.bean.FeatureBean.Companion.SCREENSHOT_CLEAN ...@@ -12,8 +12,10 @@ import com.rgt.superr.bean.FeatureBean.Companion.SCREENSHOT_CLEAN
import com.rgt.superr.bean.FeatureBean.Companion.SIMILAR_PHOTOS import com.rgt.superr.bean.FeatureBean.Companion.SIMILAR_PHOTOS
import com.rgt.superr.bean.FeatureBean.Companion.UNINSTALL_APP import com.rgt.superr.bean.FeatureBean.Companion.UNINSTALL_APP
import com.rgt.superr.business.ads.AdsMgr import com.rgt.superr.business.ads.AdsMgr
import com.rgt.superr.business.ads.AdsShowCallBack
import com.rgt.superr.databinding.ActivityGuideExperienceBinding import com.rgt.superr.databinding.ActivityGuideExperienceBinding
import com.rgt.superr.ui.dialog.StoragePermissionDialog import com.rgt.superr.ui.dialog.StoragePermissionDialog
import com.rgt.superr.ui.main.MainActivity
import com.rgt.superr.utils.PermissionUtils.requestStoragePermission import com.rgt.superr.utils.PermissionUtils.requestStoragePermission
class GuideExperienceActivity : BaseActivity<ActivityGuideExperienceBinding>( class GuideExperienceActivity : BaseActivity<ActivityGuideExperienceBinding>(
...@@ -29,12 +31,20 @@ class GuideExperienceActivity : BaseActivity<ActivityGuideExperienceBinding>( ...@@ -29,12 +31,20 @@ class GuideExperienceActivity : BaseActivity<ActivityGuideExperienceBinding>(
} }
override fun handleBackCallBack() { override fun handleBackCallBack() {
binding.tvSkip.callOnClick()
} }
override fun initListener() { override fun initListener() {
super.initListener() super.initListener()
binding.tvSkip.setOnClickListener {
AdsMgr.showInsert(this, true, object : AdsShowCallBack() {
override fun next() {
goToAc(MainActivity::class.java)
}
})
}
binding.tvBtn.setOnClickListener { binding.tvBtn.setOnClickListener {
val dialog = StoragePermissionDialog(this) val dialog = StoragePermissionDialog(this)
......
...@@ -34,6 +34,10 @@ import com.google.android.material.tabs.TabLayout.OnTabSelectedListener ...@@ -34,6 +34,10 @@ import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import androidx.core.graphics.toColorInt import androidx.core.graphics.toColorInt
import com.rgt.superr.base.jumpAction
import com.rgt.superr.bean.FeatureBean.Companion.BATTERY_INFO
import com.rgt.superr.ui.batteryinfo.BatteryReceiver
import com.rgt.superr.ui.dialog.BatteryUseDialog
class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) { class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) {
...@@ -90,6 +94,17 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl ...@@ -90,6 +94,17 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
val dialog = RateDialog(this@MainActivity) val dialog = RateDialog(this@MainActivity)
dialog.showDialog(false) dialog.showDialog(false)
} }
"BatteryDialog" -> {
val percent = BatteryReceiver.level / BatteryReceiver.scale.toFloat()
val dl = (percent * 100).toInt()
val dialog = BatteryUseDialog(this@MainActivity)
dialog.action = {
jumpAction(BATTERY_INFO)
}
dialog.showDialog(dl)
}
} }
} }
} }
......
...@@ -4,6 +4,7 @@ import android.content.Context ...@@ -4,6 +4,7 @@ import android.content.Context
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.rgt.superr.SpConstObject.isScoreRated import com.rgt.superr.SpConstObject.isScoreRated
import com.rgt.superr.SpConstObject.mainPageCount import com.rgt.superr.SpConstObject.mainPageCount
import com.rgt.superr.bean.FeatureBean.Companion.isTodayUsedFunction
import com.rgt.superr.utils.PermissionUtils.areNotificationsEnabled import com.rgt.superr.utils.PermissionUtils.areNotificationsEnabled
import com.rgt.superr.utils.PermissionUtils.checkNotificationPermission import com.rgt.superr.utils.PermissionUtils.checkNotificationPermission
import com.rgt.superr.utils.PermissionUtils.checkStorePermission import com.rgt.superr.utils.PermissionUtils.checkStorePermission
...@@ -22,6 +23,12 @@ class MainViewModel : ViewModel() { ...@@ -22,6 +23,12 @@ class MainViewModel : ViewModel() {
return return
} }
if (!isTodayUsedFunction()) {
dialogFlow.update { "BatteryDialog" }
return
}
if (!context.checkStorePermission()) { if (!context.checkStorePermission()) {
dialogFlow.update { "StoreDialog" } dialogFlow.update { "StoreDialog" }
return return
......
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:startColor="#0456ED" android:endColor="#79A8FF" android:angle="-90"/>
<corners android:radius="@dimen/dp_20"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff" />
<corners android:radius="@dimen/dp_20" />
</shape>
\ No newline at end of file
...@@ -7,6 +7,18 @@ ...@@ -7,6 +7,18 @@
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.guide.GuideExperienceActivity"> tools:context=".ui.guide.GuideExperienceActivity">
<TextView
android:id="@+id/tvSkip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="56dp"
android:layout_marginEnd="@dimen/dp_16"
android:text="@string/skip"
android:textColor="#9898A2"
android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
......
...@@ -25,9 +25,9 @@ ...@@ -25,9 +25,9 @@
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivBack" android:id="@+id/ivBack"
android:padding="@dimen/dp_16"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="@dimen/dp_16"
android:src="@drawable/icon_return_w" /> android:src="@drawable/icon_return_w" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
...@@ -172,6 +172,21 @@ ...@@ -172,6 +172,21 @@
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent" /> app:layout_constraintBottom_toBottomOf="parent" />
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/id_shouzhi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/tv_clean"
app:layout_constraintEnd_toEndOf="@id/tv_clean"
app:layout_constraintTop_toTopOf="@id/tv_clean"
app:lottie_autoPlay="true"
app:lottie_loop="true"
app:lottie_rawRes="@raw/junk_shouzhi"
tools:visibility="visible" />
<include <include
android:id="@+id/layout_animation" android:id="@+id/layout_animation"
layout="@layout/layout_animation" layout="@layout/layout_animation"
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:background="@drawable/bg_0456ed_79a8ff_20"
android:gravity="center_horizontal"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="280dp"
android:paddingTop="60dp">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/id_lottie"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:scaleX="1.8"
android:scaleY="1.8"
app:layout_constraintBottom_toBottomOf="parent"
app:lottie_autoPlay="true"
app:lottie_loop="true" />
</FrameLayout>
<TextView
android:id="@+id/id_tv_01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:textColor="@color/white"
android:textSize="31sp"
android:textStyle="bold"
tools:text="75%" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="40dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="6dp"
android:gravity="center"
android:includeFontPadding="false"
android:text="Phone battery has reached"
android:textColor="@color/white"
android:textSize="19sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="Check battery status and details"
android:textColor="@color/white"
android:textSize="13sp"
android:textStyle="bold" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="45dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="26dp">
<TextView
android:id="@+id/id_tv_scan"
android:layout_width="match_parent"
android:layout_height="46dp"
android:layout_gravity="center"
android:background="@drawable/bg_ffffff_20"
android:gravity="center"
android:text="SCAN"
android:textColor="@color/colorPrimary"
android:textSize="23sp"
android:textStyle="bold" />
<com.airbnb.lottie.LottieAnimationView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:lottie_autoPlay="true"
app:lottie_loop="true"
app:lottie_rawRes="@raw/dialogbtn3" />
</FrameLayout>
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/id_img_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="12dp"
android:src="@drawable/guan6" />
</LinearLayout>
{"nm":"Main Scene","h":46,"w":270,"meta":{"g":"@lottiefiles/creator 1.42.2"},"layers":[{"ty":4,"nm":"Rectangle 187","sr":1,"st":10,"op":160,"ip":10,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[78.13,12.78]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.42,"y":0},"i":{"x":0.58,"y":1},"s":[-215.3,48.56],"t":10},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[157.92,26.18],"t":22},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[162.28,25.91],"t":23},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[198.74,23.73],"t":26},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[210.9,23],"t":27},{"s":[479.22,48.56],"t":40}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":17},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[50],"t":25},{"s":[0],"t":33}]}},"ef":[{"ty":29,"nm":"高斯模糊","en":1,"ef":[{"ty":0,"nm":"模糊度","v":{"a":0,"k":32}},{"ty":7,"nm":"模糊方向","v":{"a":0,"k":1}},{"ty":7,"nm":"重复边缘像素","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"gr","nm":"Rectangle 185","it":[{"ty":"sh","nm":"路径 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[51.5,-180],[8.5,-180],[-51.5,180],[-8.5,180]]}}},{"ty":"fl","nm":"填充 1","c":{"a":0,"k":[0.851,0.91,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0.022]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0.022]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"Rectangle 186","sr":1,"st":0,"op":150,"ip":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[78.13,12.78]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.42,"y":0},"i":{"x":0.58,"y":1},"s":[-215.3,48.56],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[109.81,25.56],"t":13},{"s":[479.22,48.56],"t":27}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":6},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[50],"t":13.5},{"s":[0],"t":20.7}]}},"ef":[{"ty":29,"nm":"高斯模糊","en":1,"ef":[{"ty":0,"nm":"模糊度","v":{"a":0,"k":32}},{"ty":7,"nm":"模糊方向","v":{"a":0,"k":1}},{"ty":7,"nm":"重复边缘像素","v":{"a":0,"k":0}}]}],"shapes":[{"ty":"gr","nm":"Rectangle 185","it":[{"ty":"sh","nm":"路径 1","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[51.5,-180],[8.5,-180],[-51.5,180],[-8.5,180]]}}},{"ty":"fl","nm":"填充 1","c":{"a":0,"k":[0.851,0.91,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2}],"v":"5.7.0","fr":26,"op":50,"ip":0,"assets":[]}
\ No newline at end of file
{"nm":"phoneclean按钮","h":86,"w":375,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":2,"nm":"image 557.png","sr":1,"st":0,"op":300,"ip":0,"cl":"png","hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[83,88.5,0]},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[50,50,100],"t":60},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[40,40,100],"t":75},{"s":[50,50,100],"t":90}]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[328.5,40,0],"t":0,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[348.5,55,0],"t":15,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[328.5,40,0],"t":30,"ti":[0,0,0],"to":[0,0,0]},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[348.5,55,0],"t":45,"ti":[0,0,0],"to":[0,0,0]},{"s":[328.5,40,0],"t":60}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"refId":"image 557.png","ind":1},{"ty":4,"nm":"底色 4","sr":1,"st":0,"op":300,"ip":0,"hd":true,"hasMask":false,"td":1,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[187.5,30,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","nm":"Rectangle 4555","it":[{"ty":"rc","nm":"矩形路径 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":14},"s":{"a":0,"k":[315,55]}},{"ty":"fl","nm":"填充 1","c":{"a":0,"k":[0.114,0.306,0.973]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"形状图层 1","sr":1,"st":0,"op":300,"ip":0,"hd":true,"tt":1,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[14.051,75.051,0]},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0,0,100],"t":60},{"s":[170,170,100],"t":120}]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[317.845,30,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[40],"t":60},{"s":[0],"t":120}]}},"ef":[],"shapes":[{"ty":"gr","nm":"椭圆 1","it":[{"ty":"el","nm":"椭圆路径 1","d":1,"p":{"a":0,"k":[0,0]},"s":{"a":0,"k":[353.102,353.102]}},{"ty":"fl","nm":"填充 1","c":{"a":0,"k":[1,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[14.051,75.051]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3},{"ty":4,"nm":"底色","sr":1,"st":0,"op":300,"ip":0,"hd":true,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[187.5,30,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","nm":"Rectangle 4555","it":[{"ty":"rc","nm":"矩形路径 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":14},"s":{"a":0,"k":[315,55]}},{"ty":"fl","nm":"填充 1","c":{"a":0,"k":[0.114,0.306,0.973]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":4}],"v":"5.9.4","fr":60,"op":120,"ip":0,"assets":[{"id":"image 557.png","u":"","e":1,"w":166,"h":177,"p":"data:image/webp;base64,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"}]}
\ No newline at end of file
...@@ -166,6 +166,7 @@ Please rest assured that we will handle your information in strict accordance wi ...@@ -166,6 +166,7 @@ Please rest assured that we will handle your information in strict accordance wi
<string name="screenshot">Screenshot</string> <string name="screenshot">Screenshot</string>
<string name="exit_uninstall_app_content">Exit Uninstall App? Unused applications may occupy phone storage</string> <string name="exit_uninstall_app_content">Exit Uninstall App? Unused applications may occupy phone storage</string>
<string name="notify_uninstall_app">Uninstall unused applications save phone storage.</string> <string name="notify_uninstall_app">Uninstall unused applications save phone storage.</string>
<string name="skip">Skip</string>
</resources> </resources>
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