Commit 1dbf2cf7 authored by wanglei's avatar wanglei

------------同步到主包5.15 22:05分线上版本------------

parent e6d131ed
{"v":"5.8.1","fr":60,"ip":0,"op":240,"w":720,"h":1280,"nm":"4b","ddd":0,"assets":[{"id":"image_0","w":149,"h":214,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":419,"h":513,"u":"images/","p":"img_1.png","e":0},{"id":"image_2","w":259,"h":83,"u":"images/","p":"img_2.png","e":0},{"id":"image_3","w":259,"h":432,"u":"images/","p":"img_3.png","e":0},{"id":"image_4","w":44,"h":274,"u":"images/","p":"img_4.png","e":0},{"id":"comp_0","nm":"battery","fr":60,"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"lightning.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":47,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":133,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":149,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":182,"s":[0]},{"t":198,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400.25,573,0],"ix":2,"l":2},"a":{"a":0,"k":[74.5,107,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":720,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"4-battery-empty.png","cl":"png","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,584,0],"ix":2,"l":2},"a":{"a":0,"k":[209.5,256.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":720,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"full","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,640,0],"ix":2,"l":2},"a":{"a":0,"k":[360,640,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":720,"h":1280,"ip":145,"op":865,"st":145,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"full","refId":"comp_1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":145,"s":[100]},{"t":150,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,640,0],"ix":2,"l":2},"a":{"a":0,"k":[360,640,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":720,"h":1280,"ip":72,"op":792,"st":72,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"full","refId":"comp_1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":73,"s":[100]},{"t":78,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,640,0],"ix":2,"l":2},"a":{"a":0,"k":[360,640,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":720,"h":1280,"ip":0,"op":720,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"rise","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,640,0],"ix":2,"l":2},"a":{"a":0,"k":[360,640,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":720,"h":1280,"ip":118,"op":838,"st":118,"bm":0},{"ddd":0,"ind":7,"ty":0,"nm":"rise","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,640,0],"ix":2,"l":2},"a":{"a":0,"k":[360,640,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":720,"h":1280,"ip":0,"op":720,"st":0,"bm":0}]},{"id":"comp_1","nm":"full","fr":60,"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"4-cover.png","cl":"png","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[363,688.25,0],"to":[0,-49.833,0],"ti":[0,49.833,0]},{"t":76,"s":[363,389.25,0]}],"ix":2,"l":2},"a":{"a":0,"k":[129.5,41.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":720,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"4-full.png","cl":"png","refId":"image_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[363.25,563.75,0],"ix":2,"l":2},"a":{"a":0,"k":[129.5,216,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[272.5,307.25],[40,380.75],[-19.75,361.75],[-19.75,494.25],[290.25,494.25]],"c":true}]},{"t":76,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[272.5,8.25],[40,81.75],[-19.75,62.75],[-19.75,494.25],[290.25,494.25]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"蒙版 1"}],"ip":0,"op":720,"st":0,"bm":0}]},{"id":"comp_2","nm":"rise","fr":60,"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"2_rise.png","cl":"png","refId":"image_4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":75,"s":[70]},{"t":107,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[600,844,0],"to":[0,-86.667,0],"ti":[0,86.667,0]},{"t":107,"s":[600,324,0]}],"ix":2,"l":2},"a":{"a":0,"k":[22,137,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":45,"op":765,"st":45,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"2_rise.png","cl":"png","refId":"image_4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[20]},{"t":131,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":66,"s":[296,824,0],"to":[0,-86.667,0],"ti":[0,86.667,0]},{"t":131,"s":[296,304,0]}],"ix":2,"l":2},"a":{"a":0,"k":[22,137,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":66,"op":786,"st":66,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"2_rise.png","cl":"png","refId":"image_4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[20]},{"t":90,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":21,"s":[440,796,0],"to":[0,-86.667,0],"ti":[0,86.667,0]},{"t":90,"s":[440,276,0]}],"ix":2,"l":2},"a":{"a":0,"k":[22,137,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":21,"op":741,"st":21,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"2_rise.png","cl":"png","refId":"image_4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[90]},{"t":75,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[124,908,0],"to":[0,-86.667,0],"ti":[0,86.667,0]},{"t":75,"s":[124,388,0]}],"ix":2,"l":2},"a":{"a":0,"k":[22,137,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":720,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"battery","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":219,"s":[100]},{"t":240,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,640,0],"ix":2,"l":2},"a":{"a":0,"k":[360,640,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":720,"h":1280,"ip":0,"op":720,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
{"v":"5.8.1","fr":60,"ip":0,"op":240,"w":720,"h":1280,"nm":"4a","ddd":0,"assets":[{"id":"image_0","w":498,"h":497,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":498,"h":251,"u":"images/","p":"img_1.png","e":0},{"id":"image_2","w":419,"h":513,"u":"images/","p":"img_2.png","e":0},{"id":"comp_0","nm":"scan","fr":60,"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"scan.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[30]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":15,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":222,"s":[100]},{"t":239,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,552,0],"ix":2,"l":2},"a":{"a":0,"k":[249,248.5,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[0.731,0.731,-28.047]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.667,0.667,0.667],"y":[0.52,0.52,3.935]},"o":{"x":[0.333,0.333,0.333],"y":[-0.88,-0.88,10.562]},"t":11,"s":[108,108,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[-1.081,-1.081,-2.202]},"t":15,"s":[96,96,100]},{"t":18,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":720,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"sm.png","cl":"png","refId":"image_1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":81,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":111,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":126,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":143,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":160,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":175,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":190,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":205,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":222,"s":[100]},{"t":239,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":17,"s":[360,432,0],"to":[0,80,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":47,"s":[360,912,0],"to":[0,0,0],"ti":[0,80,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":81,"s":[360,432,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[360,432,0],"to":[0,80,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":126,"s":[360,912,0],"to":[0,0,0],"ti":[0,80,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":160,"s":[360,432,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":175,"s":[360,432,0],"to":[0,80,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":205,"s":[360,912,0],"to":[0,0,0],"ti":[0,80,0]},{"t":239,"s":[360,432,0]}],"ix":2,"l":2},"a":{"a":0,"k":[249,125.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":720,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"scan","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,640,0],"ix":2,"l":2},"a":{"a":0,"k":[360,640,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":720,"h":1280,"ip":0,"op":720,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"4-battery.png","cl":"png","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,584,0],"ix":2,"l":2},"a":{"a":0,"k":[209.5,256.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":720,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
This diff is collapsed.
package com.zxhyis.toolss.ui.page.applock
import android.graphics.drawable.Drawable
data class AppBean(val drawable: Drawable,val packname: String, val name: String, var isSelect: Boolean = false)
package com.zxhyis.toolss.ui.page.applock
import android.content.Intent
import com.github.ihsg.patternlocker.OnPatternChangeListener
import com.github.ihsg.patternlocker.PatternLockerView
import com.zxhyis.toolss.base.TopActivity
import com.zxhyis.toolss.databinding.ActivityLayoutAppLockBinding
class AppLockActivity:TopActivity<ActivityLayoutAppLockBinding>() {
override fun getViewBinding1(): ActivityLayoutAppLockBinding {
return ActivityLayoutAppLockBinding.inflate(layoutInflater)
}
override fun init() {
vb.patternLockView.setOnPatternChangedListener(object :OnPatternChangeListener{
override fun onChange(view: PatternLockerView, hitIndexList: List<Int>) {
}
override fun onClear(view: PatternLockerView) {
}
override fun onComplete(view: PatternLockerView, hitIndexList: List<Int>) {
startActivity(Intent(this@AppLockActivity,AppLockManagerActivity::class.java))
}
override fun onStart(view: PatternLockerView) {
}
})
}
}
\ No newline at end of file
package com.zxhyis.toolss.ui.page.applock
import android.text.TextUtils
import com.blankj.utilcode.util.SPUtils
import com.zxhyis.toolss.ui.page.applock.SecurityUtil.encrypt
open class PatternHelper {
var message: String? = null
private set
private var storagePwd: String? = null
private var tmpPwd: String? = null
private var times = 0
var isFinish = false
private set
var isOk = false
private set
fun validateForSetting(hitIndexList: List<Int>?) {
isFinish = false
isOk = false
if (hitIndexList == null || hitIndexList.size < MAX_SIZE) {
tmpPwd = null
message = sizeErrorMsg
return
}
//1. draw first time
if (TextUtils.isEmpty(tmpPwd)) {
tmpPwd = convert2String(hitIndexList)
message = reDrawMsg
isOk = true
return
}
//2. draw second times
if (tmpPwd == convert2String(hitIndexList)) {
message = settingSuccessMsg
saveToStorage(tmpPwd)
isOk = true
isFinish = true
} else {
tmpPwd = null
message = diffPreErrorMsg
}
}
fun validateForChecking(hitIndexList: List<Int>?) {
isOk = false
if (hitIndexList == null || hitIndexList.size < MAX_SIZE) {
times++
isFinish = times >= MAX_SIZE
message = pwdErrorMsg
return
}
storagePwd = fromStorage
if (!TextUtils.isEmpty(storagePwd) && storagePwd == convert2String(hitIndexList)) {
message = checkingSuccessMsg
isOk = true
isFinish = true
} else {
times++
isFinish = times >= MAX_SIZE
message = pwdErrorMsg
}
}
private val remainTimes: Int
get() = if (times < 5) MAX_TIMES - times else 0
private val reDrawMsg: String = "请再次绘制解锁图案"
private val settingSuccessMsg: String = "手势解锁图案设置成功!"
private val checkingSuccessMsg: String = "解锁成功!"
private val sizeErrorMsg: String = String.format("至少连接个%d点,请重新绘制", MAX_SIZE)
private val diffPreErrorMsg: String = "与上次绘制不一致,请重新绘制"
private val pwdErrorMsg: String
get() = String.format("密码错误,还剩%d次机会", remainTimes)
private fun convert2String(hitIndexList: List<Int>): String {
return hitIndexList.toString()
}
private fun saveToStorage(gesturePwd: String?) {
val encryptPwd = encrypt(gesturePwd!!)
SPUtils.getInstance().put(GESTURE_PWD_KEY, encryptPwd)
}
private val fromStorage: String? = SPUtils.getInstance().getString(GESTURE_PWD_KEY)?.let { SecurityUtil.decrypt(it) }
companion object {
const val MAX_SIZE = 4
const val MAX_TIMES = 5
private const val GESTURE_PWD_KEY = "gesture_pwd_key"
}
}
\ No newline at end of file
package com.zxhyis.toolss.ui.page.applock
import android.app.Service
import android.app.usage.UsageEvents
import android.app.usage.UsageStatsManager
import android.content.Context
import android.content.Intent
import android.os.Handler
import android.os.IBinder
import android.util.Log
import com.blankj.utilcode.util.SPUtils
class ProtectorService : Service() {
private var packageName: String? = ""
private val handler = Handler()
private val runnable: Runnable = object : Runnable {
override fun run() {
initProtector()
handler.postDelayed(this, 1000)
}
}
private val usageStatsManager by lazy { getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager }
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
handler.postDelayed(runnable, 1000)
return START_STICKY
}
override fun onDestroy() {
handler.removeCallbacks(runnable)
super.onDestroy()
}
private fun initProtector() {
var previousEventApp = ""
var recentEventApp = ""
var recentEventTime = 0L
var tempRecentEventApp = ""
var tempRecentEventTime = 0L
val currentTime = System.currentTimeMillis()
val usageEvents = usageStatsManager.queryEvents(currentTime - 5 * 1000, currentTime)
val scannedEvent = UsageEvents.Event()
while (usageEvents.hasNextEvent()) {
usageEvents.getNextEvent(scannedEvent)
val scannedEventType = scannedEvent.eventType
val scannedEventApp = scannedEvent.packageName
val scannedEventTime = scannedEvent.timeStamp
if (scannedEventType == UsageEvents.Event.ACTIVITY_RESUMED && scannedEventTime > recentEventTime) {
tempRecentEventApp = scannedEventApp
tempRecentEventTime = scannedEventTime
}
}
Log.e("MXL", "启动: ")
if (tempRecentEventTime > recentEventTime) {
if (tempRecentEventApp == recentEventApp) previousEventApp = packageName ?: ""
recentEventApp = tempRecentEventApp
recentEventTime = tempRecentEventTime
}
if (recentEventApp != previousEventApp) {
previousEventApp = recentEventApp
//在这里判断包名启动lockactivity
Log.e("MXL", "initProtector: " + previousEventApp)
val stringSet =
SPUtils.getInstance().getStringSet("lockApps", mutableSetOf())
stringSet.forEach {
if (previousEventApp == it) {
Log.e("MXL", "相同要跳转锁屏: " )
val intent = Intent(this, AppLockActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
}
}
//
}
}
override fun onBind(intent: Intent): IBinder? {
return null
}
}
fun startProtectorService(context: Context, packageName: String) {
val intent = Intent(context, ProtectorService::class.java)
intent.putExtra("package_name", packageName)
context.startService(intent)
}
fun stopProtectorService(context: Context) {
val intent = Intent(context, ProtectorService::class.java)
context.stopService(intent)
}
package com.zxhyis.toolss.ui.page.applock
import java.io.UnsupportedEncodingException
import java.util.Locale
import javax.crypto.Cipher
import javax.crypto.spec.SecretKeySpec
/**
* AES encrypt/decrypt utility
* Created by hsg on 14/10/2017.
*/
object SecurityUtil {
private const val CIPHER_MODE = "AES/ECB/PKCS5Padding"
private const val MASTER_PASSWORD = "Test123454321"
private fun createKey(password: String?): SecretKeySpec {
var data: ByteArray? = null
val sb = StringBuffer(32)
sb.append(password ?: "")
while (sb.length < 32) {
sb.append("0")
}
if (sb.length > 32) {
sb.setLength(32)
}
try {
data = sb.toString().toByteArray(charset("UTF-8"))
} catch (e: UnsupportedEncodingException) {
e.printStackTrace()
}
return SecretKeySpec(data, "AES")
}
private fun encrypt(content: ByteArray, password: String): ByteArray {
val key = createKey(password)
val cipher = Cipher.getInstance(CIPHER_MODE)
cipher.init(Cipher.ENCRYPT_MODE, key)
return cipher.doFinal(content)
}
fun encrypt(content: String, password: String = MASTER_PASSWORD): String {
var data = content.toByteArray(charset("UTF-8"))
data = encrypt(data, password)
return byte2hex(data)
}
private fun decrypt(content: ByteArray, password: String): ByteArray {
val key = createKey(password)
val cipher = Cipher.getInstance(CIPHER_MODE)
cipher.init(Cipher.DECRYPT_MODE, key)
return cipher.doFinal(content)
}
fun decrypt(content: String, password: String = MASTER_PASSWORD): String? {
var data = hex2byte(content)
data = decrypt(data, password)
return data.toString(charset("UTF-8"))
}
private fun byte2hex(b: ByteArray): String { // 一个字节的数,
val sb = StringBuffer(b.size * 2)
var tmp: String
for (n in b.indices) { // 整数转成十六进制表示
tmp = Integer.toHexString(b[n].toInt() and 0XFF)
if (tmp.length == 1) {
sb.append("0")
}
sb.append(tmp)
}
return sb.toString().toUpperCase(Locale.ROOT) // 转成大写
}
private fun hex2byte(inputString: String): ByteArray {
if (inputString.length < 2) {
return ByteArray(0)
}
val str = inputString.toLowerCase(Locale.ROOT)
val l = inputString.length / 2
val result = ByteArray(l)
for (i in 0 until l) {
val tmp = str.substring(2 * i, 2 * i + 2)
result[i] = (tmp.toInt(16) and 0xFF).toByte()
}
return result
}
}
\ No newline at end of file
package com.zxhyis.toolss.ui.page.speed
import android.animation.Animator
import android.content.Intent
import android.graphics.Color
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.zxhyis.toolss.base.TopActivity
import com.zxhyis.toolss.databinding.ActivityLayoutSpeedBinding
import com.zxhyis.toolss.ui.AFunOb.BATTERY_OPTIMIZER
class BatteryOptimizerActivity : TopActivity<ActivityLayoutSpeedBinding>() {
override fun getViewBinding1(): ActivityLayoutSpeedBinding {
return ActivityLayoutSpeedBinding.inflate(layoutInflater)
}
override fun init() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
vb.root.updatePadding(top = BarUtils.getStatusBarHeight())
vb.idOneLottie.imageAssetsFolder = "battery_scan/images/"
vb.idOneLottie.setAnimation("battery_scan/data.json")
vb.idOneLottie.playAnimation()
vb.root.postDelayed({
vb.idOneLottie.isVisible = false
vb.idScaning.text = "Optimizing"
playRocket()
}, 3000)
}
private fun playRocket() {
vb.idRocket.imageAssetsFolder = "battery_save/images/"
vb.idRocket.setAnimation("battery_save/data.json")
vb.idRocket.playAnimation()
vb.idRocket.addAnimatorListener(object : Animator.AnimatorListener {
override fun onAnimationStart(p0: Animator) {
}
override fun onAnimationEnd(p0: Animator) {
startActivity(Intent(this@BatteryOptimizerActivity, SpeedFinishActivity::class.java).putExtra("type", BATTERY_OPTIMIZER))
finish()
}
override fun onAnimationCancel(p0: Animator) {
}
override fun onAnimationRepeat(p0: Animator) {
}
})
}
}
\ No newline at end of file
package com.zxhyis.toolss.ui.page.speed
import android.animation.Animator
import android.content.Intent
import android.graphics.Color
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.AppUtils
import com.blankj.utilcode.util.BarUtils
import com.zxhyis.toolss.ad.ConfigHelper
import com.zxhyis.toolss.base.TopActivity
import com.zxhyis.toolss.databinding.ActivityLayoutSpeedBinding
import com.zxhyis.toolss.ui.AFunOb.APPP_SPEED
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlin.random.Random
class SpeedActivity : TopActivity<ActivityLayoutSpeedBinding>() {
override fun getViewBinding1(): ActivityLayoutSpeedBinding {
return ActivityLayoutSpeedBinding.inflate(layoutInflater)
}
override fun init() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
vb.root.updatePadding(top = BarUtils.getStatusBarHeight())
vb.idOneLottie.imageAssetsFolder = "appmanager/images/"
vb.idOneLottie.setAnimation("appmanager/data.json")
vb.idOneLottie.playAnimation()
vb.root.postDelayed({
vb.idOneLottie.isVisible = false
vb.idScaning.text = "Optimizing"
playRocket()
}, 3000)
}
private fun playRocket() {
vb.idRocket.imageAssetsFolder = "fast/images/"
vb.idRocket.setAnimation("fast/data.json")
vb.idRocket.playAnimation()
MainScope().launch(Dispatchers.Main) {
launch {
if (ConfigHelper.appList.isNullOrEmpty()) {
withContext(Dispatchers.IO) {
ConfigHelper.appList = AppUtils.getAppsInfo().shuffled()
}
}
val icons = ConfigHelper.appList?.filter { !it.isSystem }?.map { it.icon }
var index = 0
vb.idSpeedIcon.isVisible = true
while (vb.idRocket.isVisible) {
vb.idSpeedIcon.setImageDrawable(icons?.getOrNull(index++ % icons.size))
delay(Random.nextLong(100, 200))
}
}
}
vb.idRocket.addAnimatorListener(object : Animator.AnimatorListener {
override fun onAnimationStart(p0: Animator) {
}
override fun onAnimationEnd(p0: Animator) {
startActivity(Intent(this@SpeedActivity, SpeedFinishActivity::class.java).putExtra("type",APPP_SPEED))
finish()
}
override fun onAnimationCancel(p0: Animator) {
}
override fun onAnimationRepeat(p0: Animator) {
}
})
}
}
\ No newline at end of file
package com.zxhyis.toolss.ui.page.speed
import android.animation.Animator
import android.content.Intent
import android.graphics.Color
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.zxhyis.toolss.ad.AdmobUtils
import com.zxhyis.toolss.base.TopActivity
import com.zxhyis.toolss.databinding.ActivityLayoutSpeedFinishBinding
import com.zxhyis.toolss.ui.page.result.ResultActivity
class SpeedFinishActivity : TopActivity<ActivityLayoutSpeedFinishBinding>() {
override fun getViewBinding1(): ActivityLayoutSpeedFinishBinding {
return ActivityLayoutSpeedFinishBinding.inflate(layoutInflater)
}
override fun init() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
val type = intent.getStringExtra("type")
vb.root.updatePadding(top = BarUtils.getStatusBarHeight())
vb.idSpeedFinish.addAnimatorListener(object : Animator.AnimatorListener {
override fun onAnimationStart(p0: Animator) {
}
override fun onAnimationEnd(p0: Animator) {
AdmobUtils.showInterstitialAd(this@SpeedFinishActivity) {
startActivity(
Intent(
this@SpeedFinishActivity,
ResultActivity::class.java
).putExtra("from", type)
)
finish()
}
}
override fun onAnimationCancel(p0: Animator) {
}
override fun onAnimationRepeat(p0: Animator) {
}
})
}
}
\ 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:text="@string/app_name"
android:textColor="@color/white"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/id_icon"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_marginTop="180dp"
android:src="@mipmap/logo"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.github.ihsg.patternlocker.PatternLockerView
android:id="@+id/pattern_lock_view"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:plv_color="@color/white"
app:plv_hitColor="#4273FF"
app:plv_enableHapticFeedback="true" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ 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="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/id_back_lock_manager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:paddingHorizontal="14dp"
android:src="@drawable/fanhui"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="App Lock"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/id_back_lock_manager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/id_back_lock_manager" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/id_ll_no_enable"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/id_back_lock_manager"
tools:visibility="gone">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="22dp"
android:src="@drawable/applocktu" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="14dp"
android:layout_marginBottom="20dp"
android:text="Enable App Lock, prevent privacy leak."
android:textColor="#000000"
android:textSize="13sp"
android:textStyle="bold" />
<View
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="#F6F7FB" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/id_app_rl"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/id_back_lock_manager" />
<View
android:id="@+id/id_view_line"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#EEEEEE" />
<com.noober.background.view.BLTextView
android:id="@+id/id_enable"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginHorizontal="41dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="40dp"
android:gravity="center"
android:text="ENABLE(0)"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
app:bl_corners_radius="24dp"
app:bl_solid_color="#4772FF" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/id_draw_pattern"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/id_back_lock_manager"
tools:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="84dp"
android:text="Draw an unlock pattern"
android:textColor="#000000"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="7dp"
android:text="Connect at least 4 dots"
android:textColor="#666666"
android:textSize="13sp" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.github.ihsg.patternlocker.PatternLockerView
android:id="@+id/id_two_view"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_gravity="center_horizontal"
app:plv_color="#CCCDD1"
app:plv_enableAutoClean="false"
app:plv_enableHapticFeedback="true" />
<com.github.ihsg.patternlocker.PatternLockerView
android:id="@+id/id_one_view"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_gravity="center_horizontal"
app:plv_color="#CCCDD1"
app:plv_enableHapticFeedback="true" />
</FrameLayout>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
\ 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0ec897">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/id_rocket"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/id_one_lottie"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="46dp"
android:layout_marginTop="182dp"
app:layout_constraintBottom_toTopOf="@+id/id_scaning"
app:layout_constraintTop_toTopOf="parent"
app:lottie_autoPlay="true"
app:lottie_loop="true" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/id_speed_icon"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_marginBottom="15dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/id_scaning"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/id_scaning"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="19dp"
android:text="Scanning"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/id_scan"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/id_scan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:layout_marginBottom="140dp"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent">
<com.noober.background.view.BLView
android:layout_width="4dp"
android:layout_height="4dp"
app:bl_shape="oval"
app:bl_solid_color="@color/white" />
<com.noober.background.view.BLView
android:layout_width="4dp"
android:layout_height="4dp"
android:layout_marginHorizontal="2dp"
app:bl_shape="oval"
app:bl_solid_color="@color/white" />
<com.noober.background.view.BLView
android:layout_width="4dp"
android:layout_height="4dp"
app:bl_shape="oval"
app:bl_solid_color="@color/white" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
\ 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0ec897">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/id_speed_finish"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:lottie_autoPlay="true"
app:lottie_rawRes="@raw/finish" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="296dp"
android:text="Optimization completed"
android:textColor="@color/white"
android:textSize="15sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.noober.background.view.BLLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="41dp"
android:orientation="vertical"
app:bl_corners_radius="10dp"
app:bl_solid_color="@color/white">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="24dp"
android:text="Last Step"
android:textColor="#000000"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="23dp"
android:layout_marginTop="18dp"
android:gravity="center"
android:text="One step left to make App Lock work properly."
android:textColor="#000000"
android:textSize="13sp" />
<TextView
android:id="@+id/id_tv_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginTop="36dp"
android:layout_marginBottom="20dp"
android:paddingHorizontal="23dp"
android:text="OK"
android:textColor="#4772FF"
android:textSize="17sp" />
</com.noober.background.view.BLLinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="14dp"
android:layout_marginVertical="18dp"
android:gravity="center_vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/id_app_icon"
android:layout_width="28dp"
android:layout_height="28dp" />
<TextView
android:id="@+id/id_tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="9dp"
android:layout_weight="1"
android:textColor="#000000"
android:textSize="13sp" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/id_img_lock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/suo_n" />
</LinearLayout>
\ No newline at end of file
{"v":"5.4.4","fr":60,"ip":0,"op":90,"w":720,"h":1280,"nm":"finish","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"形状图层 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[0],"e":[100]},{"t":44}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[-18],"e":[18]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[18],"e":[-12]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[-12],"e":[10]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[10],"e":[0]},{"t":68}],"ix":10},"p":{"a":0,"k":[357,551.5,0],"ix":2},"a":{"a":0,"k":[-4,-66,0],"ix":1},"s":{"a":0,"k":[90,90,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-73.52,-119.272],[-9.086,-46.073],[49,-101]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":14,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":38,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":-28,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":240,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"形状图层 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,543,0],"ix":2},"a":{"a":0,"k":[3,-92,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[162,162],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":12,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[3,-92],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"椭圆 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[29],"e":[100]},{"t":31}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0],"e":[720]},{"t":31}],"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":240,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"形状图层 7","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,543,0],"ix":2},"a":{"a":0,"k":[3,-92,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[162,162],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":12,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[3,-92],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"椭圆 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":240,"st":0,"bm":0}],"markers":[]}
\ 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