Commit 89d3397c authored by wanglei's avatar wanglei

合并清理功能

parent 6c66fbcf
*.iml *.iml
.gradle .gradle
/local.properties /local.properties
/.idea /.idea/
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store .DS_Store
/build /build
/captures /captures
.externalNativeBuild .externalNativeBuild
.cxx .cxx
local.properties local.properties
/app/build/
# smart file manager
文件管理过包,过包后换文件清理
# vps
47.243.82.221:11969
admin_ldzb6s
xSKfayzu1O
```json
{
"project_info": {
"project_number": "999706837181",
"project_id": "super-file-manager-fb486",
"storage_bucket": "super-file-manager-fb486.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:999706837181:android:bc4406613dbce941e7f7d4",
"android_client_info": {
"package_name": "com.kktq.superfilemanager.cba"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyBTWVSmiNwHeN11xx8J9Y9-YKv-g1g0pHc"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": []
}
}
}
],
"configuration_version": "1"
}
```
\ No newline at end of file
/build
\ No newline at end of file
plugins { plugins {
alias(libs.plugins.androidApplication) id 'com.android.application'
alias(libs.plugins.jetbrainsKotlinAndroid) id 'org.jetbrains.kotlin.android'
id 'com.google.gms.google-services'
id 'kotlin-kapt'
} }
android { android {
...@@ -18,15 +20,14 @@ android { ...@@ -18,15 +20,14 @@ android {
defaultConfig { defaultConfig {
applicationId "com.base.superfilemanager" applicationId "com.base.superfilemanager"
minSdk 24 minSdk 24
targetSdk 34 targetSdk 33
versionCode 1 versionCode 6
versionName "1.0" versionName "1.5"
ndk { ndk {
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64' abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
} }
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
setProperty("archivesBaseName", "superfilemanager-v${versionName}") setProperty("archivesBaseName", "cleanmastermax-v${versionName}")
} }
buildTypes { buildTypes {
...@@ -51,24 +52,44 @@ android { ...@@ -51,24 +52,44 @@ android {
} }
dependencies { dependencies {
implementation(fileTree("libs"))
implementation libs.androidx.core.ktx implementation 'androidx.core:core-ktx:1.9.0'
implementation libs.androidx.appcompat implementation 'androidx.appcompat:appcompat:1.6.1'
implementation libs.material implementation 'com.google.android.material:material:1.12.0'
implementation libs.androidx.activity implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation libs.androidx.constraintlayout testImplementation 'junit:junit:4.13.2'
testImplementation libs.junit androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation libs.androidx.junit androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation libs.androidx.espresso.core implementation("com.google.android.gms:play-services-ads:23.1.0")
implementation 'com.google.ads.mediation:applovin:12.4.3.0'
implementation("com.facebook.android:facebook-android-sdk:[8,9)") implementation 'com.google.ads.mediation:fyber:8.2.7.0'
implementation 'com.google.ads.mediation:ironsource:8.0.0.1'
implementation 'com.google.ads.mediation:vungle:7.3.1.0'
implementation 'com.google.ads.mediation:facebook:6.17.0.0'
implementation 'com.google.ads.mediation:mintegral:16.7.21.0'
implementation 'com.google.ads.mediation:pangle:5.9.0.4.0'
implementation("com.blankj:utilcodex:1.31.1")
implementation 'com.github.bumptech.glide:glide:4.16.0'
implementation 'com.airbnb.android:lottie:6.4.0'
implementation platform('com.google.firebase:firebase-bom:32.3.1') implementation platform('com.google.firebase:firebase-bom:32.3.1')
implementation 'com.google.firebase:firebase-analytics:21.6.2' implementation 'com.google.firebase:firebase-analytics:21.6.2'
implementation("com.google.firebase:firebase-messaging")
implementation("com.blankj:utilcodex:1.31.1")
implementation("com.squareup.okhttp3:okhttp:4.9.0") implementation("com.squareup.okhttp3:okhttp:4.9.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.9.0") implementation("com.squareup.okhttp3:logging-interceptor:4.9.0")
implementation 'com.github.bumptech.glide:glide:4.16.0' // implementation("com.github.JavaNoober.BackgroundLibrary:libraryx:1.7.6")
implementation("com.github.JavaNoober.BackgroundLibrary:libraryx:1.7.6") implementation("com.github.JavaNoober.BackgroundLibrary:libraryx:1.7.6")
implementation("com.github.pokercc:ExpandableRecyclerView:0.9.3")
def roomVersion = "2.5.0"
implementation("androidx.room:room-runtime:$roomVersion")
annotationProcessor("androidx.room:room-compiler:$roomVersion")
kapt("androidx.room:room-compiler:$roomVersion")
implementation("androidx.room:room-ktx:$roomVersion")
implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1'
implementation 'com.belerweb:pinyin4j:2.5.1'
implementation("com.google.firebase:firebase-messaging")
implementation("com.facebook.android:facebook-android-sdk:[8,9)")
implementation 'com.makeramen:roundedimageview:2.3.0'
} }
\ No newline at end of file
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -26,6 +26,9 @@ ...@@ -26,6 +26,9 @@
-keep class com.google.gson.stream.** { *; } -keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.** { *; } -keep class com.google.gson.** { *; }
-keep class com.alibaba.idst.** { *; } -keep class com.alibaba.idst.** { *; }
#-keep class * extends com.google.gson.reflect.TypeToken -keep class * extends com.google.gson.reflect.TypeToken
-keepattributes AnnotationDefault, RuntimeVisibleAnnotations -keepattributes AnnotationDefault, RuntimeVisibleAnnotations
-keep class com.bytedance.sdk.** { *; } -keep class com.bytedance.sdk.** { *; }
\ No newline at end of file -obfuscationdictionary dictionary.txt
-classobfuscationdictionary dictionary.txt
-packageobfuscationdictionary dictionary.txt
\ No newline at end of file
package com.base.superfilemanager
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.base.smartfilemanager", appContext.packageName)
}
}
\ No newline at end of file
This diff is collapsed.
package android.content.pm;
import android.content.pm.PackageStats;
interface IPackageStatsObserver {
oneway void onGetStatsCompleted(in PackageStats pStats, boolean succeeded);
}
package android.content.pm;
parcelable PackageStats;
{"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.
{"v":"5.4.4","fr":60,"ip":0,"op":240,"w":720,"h":1280,"nm":"2a","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":512,"h":497,"u":"images/","p":"img_2.png","e":0},{"id":"comp_0","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],"e":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":15,"s":[100],"e":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":222,"s":[100],"e":[0]},{"t":239}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,552,0],"ix":2},"a":{"a":0,"k":[249,248.5,0],"ix":1},"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],"e":[108,108,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],"e":[96,96,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],"e":[100,100,100]},{"t":18}],"ix":6}},"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],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[100],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[100],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":81,"s":[0],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":111,"s":[100],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":126,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":143,"s":[100],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":160,"s":[0],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":175,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":190,"s":[100],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":205,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":222,"s":[100],"e":[0]},{"t":239}],"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],"e":[360,912,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],"e":[360,432,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],"e":[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],"e":[360,912,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],"e":[360,432,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],"e":[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],"e":[360,912,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],"e":[360,432,0],"to":[0,0,0],"ti":[0,80,0]},{"t":239}],"ix":2},"a":{"a":0,"k":[249,125.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"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},"a":{"a":0,"k":[360,640,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":720,"h":1280,"ip":0,"op":720,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"2-phone.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,552,0],"ix":2},"a":{"a":0,"k":[256,248.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":720,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
{"v":"5.5.7","fr":60,"ip":0,"op":60,"w":640,"h":140,"nm":"合成 1","ddd":0,"assets":[{"id":"image_0","w":157,"h":175,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":86,"h":50,"u":"images/","p":"img_1.png","e":0},{"id":"image_2","w":540,"h":114,"u":"images/","p":"img_2.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"bu.png","cl":"png","refId":"image_0","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":0,"s":[518,94.5,0],"to":[5.917,0,0],"ti":[-5.917,0,0]},{"t":30,"s":[553.5,94.5,0]}],"ix":2},"a":{"a":0,"k":[78.5,87.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"on.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":22,"s":[0]},{"t":31,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[502.25,57.5,0],"ix":2},"a":{"a":0,"k":[43,25,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"qx2.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":[320,57,0],"ix":2},"a":{"a":0,"k":[270,57,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
{"v":"5.4.4","fr":60,"ip":0,"op":60,"w":680,"h":130,"nm":"switch","ddd":0,"assets":[{"id":"image_0","w":138,"h":153,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":52,"h":52,"u":"images/","p":"img_1.png","e":0},{"id":"image_2","w":52,"h":52,"u":"images/","p":"img_2.png","e":0},{"id":"image_3","w":680,"h":130,"u":"images/","p":"img_3.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"hand.png","cl":"png","refId":"image_0","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":0,"s":[605.5,95,0],"e":[649.5,95,0],"to":[7.333,0,0],"ti":[-7.333,0,0]},{"t":33}],"ix":2},"a":{"a":0,"k":[69,76.5,0],"ix":1},"s":{"a":0,"k":[86,86,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"on.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":15,"s":[0],"e":[100]},{"t":25}],"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":[582.5,68.5,0],"e":[626.5,68.5,0],"to":[7.333,0,0],"ti":[-7.333,0,0]},{"t":33}],"ix":2},"a":{"a":0,"k":[26,26,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"off.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":0,"s":[582.5,68.5,0],"e":[626.5,68.5,0],"to":[7.333,0,0],"ti":[-7.333,0,0]},{"t":33}],"ix":2},"a":{"a":0,"k":[26,26,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"permission_tips.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":[340,65,0],"ix":2},"a":{"a":0,"k":[340,65,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
{"v":"5.9.2","fr":30,"ip":0,"op":60,"w":1020,"h":1020,"nm":"合成 1","ddd":0,"assets":[{"id":"image_0","w":270,"h":270,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":729,"h":729,"u":"images/","p":"img_1.png","e":0},{"id":"comp_0","nm":"外圆","fr":30,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"形状图层 6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[10],"e":[0]},{"t":40}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,510,0],"ix":2,"l":2},"a":{"a":0,"k":[-23.227,28.773,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[100,100,100],"e":[140,140,100]},{"t":40}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[729,729],"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":[0.16470600203,0.431372997808,0.96470600203,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"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":[-23.227,28.773],"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":40,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"形状图层 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[10],"e":[0]},{"t":60}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,510,0],"ix":2,"l":2},"a":{"a":0,"k":[-23.227,28.773,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":20,"s":[100,100,100],"e":[140,140,100]},{"t":60}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[729,729],"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":[0.16470600203,0.431372997808,0.96470600203,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"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":[-23.227,28.773],"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":20,"op":60,"st":20,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"形状图层 8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[10],"e":[0]},{"t":80}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,510,0],"ix":2,"l":2},"a":{"a":0,"k":[-23.227,28.773,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[100,100,100],"e":[140,140,100]},{"t":80}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[729,729],"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":[0.16470600203,0.431372997808,0.96470600203,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"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":[-23.227,28.773],"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":40,"op":80,"st":40,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"Group 153.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,510,0],"ix":2,"l":2},"a":{"a":0,"k":[135,135,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"Group 159.png","cl":"png","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0],"e":[360]},{"t":60}],"ix":10},"p":{"a":0,"k":[510,510,0],"ix":2,"l":2},"a":{"a":0,"k":[364.5,364.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"外圆","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,510,0],"ix":2,"l":2},"a":{"a":0,"k":[510,510,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1020,"h":1020,"ip":0,"op":20,"st":-20,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"外圆","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,510,0],"ix":2,"l":2},"a":{"a":0,"k":[510,510,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1020,"h":1020,"ip":20,"op":40,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"外圆","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[510,510,0],"ix":2,"l":2},"a":{"a":0,"k":[510,510,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1020,"h":1020,"ip":40,"op":60,"st":20,"bm":0}],"markers":[]}
\ No newline at end of file
This diff is collapsed.
{"v":"5.9.2","fr":29.9700012207031,"ip":0,"op":30.0000012219251,"w":336,"h":602,"nm":"合成 1","ddd":0,"assets":[{"id":"image_0","w":192,"h":192,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":192,"h":192,"u":"images/","p":"img_1.png","e":0},{"id":"image_2","w":192,"h":192,"u":"images/","p":"img_2.png","e":0},{"id":"image_3","w":312,"h":585,"u":"images/","p":"img_3.png","e":0},{"id":"comp_0","nm":"Wi-Fi","fr":29.9700012207031,"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"wifi_6","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540,962,0],"ix":2,"l":2},"a":{"a":0,"k":[96,96,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":240.0000097754,"st":-3.00000012219251,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"wifi_5","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540,962,0],"ix":2,"l":2},"a":{"a":0,"k":[96,96,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":240.0000097754,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"wifi_4","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540,962,0],"ix":2,"l":2},"a":{"a":0,"k":[96,96,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":240.0000097754,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"wifi_1","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[166,304,0],"ix":2,"l":2},"a":{"a":0,"k":[96,96,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":7.00000028511585,"op":30.0000012219251,"st":17.0000006924242,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"wifi_2","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[166,304,0],"ix":2,"l":2},"a":{"a":0,"k":[96,96,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":14.0000005702317,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"wifi_3","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[166,304,0],"ix":2,"l":2},"a":{"a":0,"k":[96,96,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":21.0000008553475,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"Wi-Fi","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":35,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[166,542,0],"ix":2,"l":2},"a":{"a":0,"k":[540,1200,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":1080,"h":2400,"ip":0,"op":30.0000012219251,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":2,"nm":"phone.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":[166,302,0],"ix":2,"l":2},"a":{"a":0,"k":[156,292.5,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":30.0000012219251,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
{"v":"5.4.4","fr":60,"ip":0,"op":60,"w":720,"h":560,"nm":"compression_scan","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":344,"h":335,"u":"images/","p":"img_2.png","e":0}],"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.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0],"e":[88]},{"t":9}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,280,0],"ix":2},"a":{"a":0,"k":[249,248.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[66,66,100],"e":[100,100,100]},{"t":8}],"ix":6}},"ao":0,"ip":0,"op":240,"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":[0.773]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[31.782]},"t":28,"s":[100],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":49,"s":[100],"e":[0]},{"t":57}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.82},"o":{"x":0.333,"y":0},"t":10,"s":[360,23,0],"e":[360,560.613,0],"to":[0,48.472,0],"ti":[0,-91.539,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.202,"y":1},"t":47,"s":[360,560.613,0],"e":[360,578,0],"to":[0,20.198,0],"ti":[0,-10.695,0]},{"t":58}],"ix":2},"a":{"a":0,"k":[249,125.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":240,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"photo.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":[350,328,0],"ix":2},"a":{"a":0,"k":[172,167.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":242,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
This diff is collapsed.
{"v":"5.4.4","fr":60,"ip":0,"op":360,"w":720,"h":1130,"nm":"launch","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":348,"h":552,"u":"images/","p":"img_2.png","e":0},{"id":"image_3","w":348,"h":566,"u":"images/","p":"img_3.png","e":0}],"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":[0],"e":[100]},{"t":7.5}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,497,0],"ix":2},"a":{"a":0,"k":[249,248.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":360,"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":0,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7.5,"s":[100],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":94.5,"s":[100],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":102,"s":[0],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":129,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":136.5,"s":[100],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":223.5,"s":[100],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":231,"s":[0],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":258,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":265.5,"s":[100],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":352.5,"s":[100],"e":[0]},{"t":360}],"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.443},"t":0,"s":[360,330.353,0],"e":[360,927,0],"to":[0,174.642,0],"ti":[0,-10.553,0]},{"i":{"x":0.833,"y":0.78},"o":{"x":0.333,"y":0},"t":51,"s":[360,927,0],"e":[360,330.353,0],"to":[0,16.833,0],"ti":[0,-43.562,0]},{"i":{"x":0.833,"y":0.532},"o":{"x":0.333,"y":0.936},"t":102,"s":[360,330.353,0],"e":[360,330.353,0],"to":[0,174.642,0],"ti":[0,-43.562,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.443},"t":129,"s":[360,330.353,0],"e":[360,927,0],"to":[0,174.642,0],"ti":[0,-10.553,0]},{"i":{"x":0.833,"y":0.78},"o":{"x":0.333,"y":0},"t":180,"s":[360,927,0],"e":[360,330.353,0],"to":[0,16.833,0],"ti":[0,-43.562,0]},{"i":{"x":0.833,"y":0.532},"o":{"x":0.333,"y":0.936},"t":231,"s":[360,330.353,0],"e":[360,330.353,0],"to":[0,174.642,0],"ti":[0,-43.562,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0.443},"t":258,"s":[360,330.353,0],"e":[360,927,0],"to":[0,174.642,0],"ti":[0,-10.553,0]},{"i":{"x":0.833,"y":0.785},"o":{"x":0.333,"y":0},"t":309,"s":[360,927,0],"e":[360,330.353,0],"to":[0,16.833,0],"ti":[0,-43.562,0]},{"t":359}],"ix":2},"a":{"a":0,"k":[249,199.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":360,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"phone_b.png","cl":"png","refId":"image_2","sr":1.5,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,481,0],"ix":2},"a":{"a":0,"k":[174,276,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"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":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,13],[368,13]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,589],[368,589]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":51,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,589],[368,589]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,9],[368,9]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":102,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,9],[368,9]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,13],[368,13]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":129,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,13],[368,13]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,589],[368,589]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":180,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,589],[368,589]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,9],[368,9]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":231,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,9],[368,9]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,13],[368,13]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":258,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,13],[368,13]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,589],[368,589]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":309,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,589],[368,589]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[368,-41],[-22,-41],[-22,9],[368,9]],"c":true}]},{"t":360}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"蒙版 1"}],"ip":0,"op":360,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"phone_a.png","cl":"png","refId":"image_3","sr":1.5,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,474.5,0],"ix":2},"a":{"a":0,"k":[174,283,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":360,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
This image diff could not be displayed because it is too large. You can view the blob instead.
package com.base.superfilemanager package com.base.superfilemanager
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.os.Process
import android.util.Log
import com.blankj.utilcode.util.ActivityUtils
import com.blankj.utilcode.util.AppUtils
import com.google.android.gms.ads.MobileAds
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import com.google.firebase.FirebaseApp
import com.base.superfilemanager.activity.splash.NewSplashActivity
import com.base.superfilemanager.display.ActionBroadcast.Companion.initBroadcast
import com.base.superfilemanager.display.NotificationService
import com.base.superfilemanager.display.NotificationUtils
import com.base.superfilemanager.display.fcm.FcmHelper
import com.base.superfilemanager.helps.BaseApplication
import com.base.superfilemanager.helps.ComUtils.requestCfg
import com.base.superfilemanager.helps.ConfigHelper
import com.base.superfilemanager.helps.InstallHelps
import com.base.superfilemanager.helps.ads.AdmobUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
class MyApplication : BaseApplication() { class MyApplication : BaseApplication() {
companion object {
var PAUSED_VALUE = 0
}
override fun init() { override fun init() {
initApp()
}
fun initApp() {
if (ConfigHelper.ifAgreePrivacy) {
MainScope().launch(Dispatchers.IO) {
try {
ConfigHelper.gid = AdvertisingIdClient.getAdvertisingIdInfo(context).id ?: ""
} catch (_: Exception) {
}
}
initNotificationWork()
context.initBroadcast()
MainScope().launch {
requestCfg()
InstallHelps.init()
}
}
MobileAds.initialize(this) { initializationStatus ->
val statusMap =
initializationStatus.adapterStatusMap
for (adapterClass in statusMap.keys) {
val status = statusMap[adapterClass]
Log.d(
"MyApp", String.format(
"Adapter name: %s, Description: %s, Latency: %d",
adapterClass, status!!.description, status.latency
)
)
}
}
initLifeListener()
}
private fun initNotificationWork() {
FirebaseApp.initializeApp(this)
FcmHelper.getToken()
FcmHelper.subscribeToTopic()
val isBoolean = NotificationUtils.isNotificationExist(this, 1)
if (isBoolean) {
Log.d("MyService", "常驻通知栏存在");
return
}
val intent = Intent(this, NotificationService::class.java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent)
} else {
startService(intent)
}
initBroadcast()
Log.d("MyService", "startService:" + Process.myPid());
}
@SuppressLint("UnspecifiedRegisterReceiverFlag")
private fun initLifeListener() {
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
private var count = 0
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
override fun onActivityStarted(activity: Activity) {
// Log.e("onActivityStarted", "activity=$activity")
count++
if (count == 1 && !AppUtils.isAppForeground()) {
val topActivity = ActivityUtils.getTopActivity()
if (ConfigHelper.noLoadingActivities.all {
!topActivity.localClassName.contains(
it, true
)
}) {
if (AdmobUtils.isOpenAdLoaded()) {
AdmobUtils.showAppOpenAd(activity)
} else {
topActivity.startActivity(
Intent(
topActivity,
NewSplashActivity::class.java
).apply {
putExtra("isHotLaunch", true)
})
}
}
}
}
override fun onActivityResumed(activity: Activity) {
PAUSED_VALUE = 1
}
override fun onActivityPaused(activity: Activity) {
PAUSED_VALUE = 2
}
override fun onActivityStopped(activity: Activity) {
count--
}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
})
} }
} }
\ No newline at end of file
package com.base.superfilemanager.activity
import android.animation.Animator
import android.annotation.SuppressLint
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.hardware.camera2.CameraAccessException
import android.hardware.camera2.CameraManager
import android.location.LocationManager
import android.os.BatteryManager
import android.os.Build
import android.os.SystemClock
import android.provider.Settings
import android.view.View
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.activity.addCallback
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.view.isVisible
import com.base.superfilemanager.R
import com.base.superfilemanager.databinding.ActivityBatteryInfoBinding
import com.base.superfilemanager.helps.BaseActivity
import com.base.superfilemanager.helps.ads.AdmobUtils
import com.base.superfilemanager.view.AFunOb
import java.util.Calendar
import java.util.Date
import kotlin.math.roundToInt
@SuppressLint("SetTextI18n")
class BatteryInfoActivity : BaseActivity<ActivityBatteryInfoBinding>() {
override val isLightMode = true
private lateinit var receiver: BatteryReceiver
private lateinit var cm: CameraManager
private lateinit var cameraId: String
private var isTorchOn = false
override val binding: ActivityBatteryInfoBinding by lazy {
ActivityBatteryInfoBinding.inflate(layoutInflater)
}
override fun initView() {
receiver = BatteryReceiver()
val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
registerReceiver(receiver, filter)
cm = getSystemService(Context.CAMERA_SERVICE) as CameraManager
try {
cameraId = cm.cameraIdList[0]
} catch (e: CameraAccessException) {
e.printStackTrace()
}
setFilter()
binding.idBatteryLottie.imageAssetsFolder = "dian_go_chi/images/"
binding.idBatteryLottie.setAnimation("dian_go_chi/data.json")
binding.idBatteryLottie.playAnimation()
binding.root.postDelayed({
playFinish()
}, 5000)
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
AdmobUtils.showInterstitialAd(this@BatteryInfoActivity) {
finishToMain()
}
}
})
binding.switchTwo.setOnClickListener {
turnOnBluetooth()
}
binding.switchThree.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
turnOnFlashLight()
} else {
turnOffFlashLight()
}
}
binding.switchFour.setOnClickListener {
jumpLocationSettings()
}
binding.btOk.setOnClickListener {
binding.btOk.setBackgroundResource(R.drawable.bg_shape_set_click)
startActivity(Intent(this, ResultActivity::class.java).apply {
putExtra("from", AFunOb.BATTERY_INFO)
})
finish()
}
binding.ivBack.setOnClickListener {
AdmobUtils.showInterstitialAd(this@BatteryInfoActivity) {
finishToMain()
}
}
onBackPressedDispatcher.addCallback {
AdmobUtils.showInterstitialAd(this@BatteryInfoActivity) {
finishToMain()
}
}
}
private val result1 =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
}
private val result2 =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
}
private val settingResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
}
private inner class BatteryReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val current = intent?.extras!!.getInt("level")
val total = intent.extras!!.getInt("scale")
val percent = current * 100 / total
if (percent >= 30) {
binding.imagePower.setImageResource(R.drawable.batteryl)
} else {
binding.imagePower.setImageResource(R.drawable.batteryh)
}
binding.tvLevel.text = "$percent%"
}
}
private fun playFinish() {
binding.idConsOne.isVisible = false
binding.idConsBatteryFinish.isVisible = true
binding.idBatteryFinish.addAnimatorListener(object : Animator.AnimatorListener {
override fun onAnimationStart(p0: Animator) {
}
override fun onAnimationEnd(p0: Animator) {
AdmobUtils.showInterstitialAd(this@BatteryInfoActivity) {
updateUI()
}
}
override fun onAnimationCancel(p0: Animator) {
}
override fun onAnimationRepeat(p0: Animator) {
}
})
}
private fun checkFlashLight() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
cm.registerTorchCallback(object : CameraManager.TorchCallback() {
override fun onTorchModeChanged(cameraId: String, enabled: Boolean) {
super.onTorchModeChanged(cameraId, enabled)
if (cameraId == this@BatteryInfoActivity.cameraId) {
if (enabled && !isTorchOn) {
isTorchOn = true
binding.switchThree.isChecked = true
} else if (!enabled && isTorchOn) {
isTorchOn = false
binding.switchThree.isChecked = false
}
}
}
}, null)
} else {
Toast.makeText(this, "don't support you phone", Toast.LENGTH_SHORT).show()
}
}
private fun turnOnFlashLight() {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
cm.setTorchMode(cameraId, true)
} // 打开手电筒
} catch (e: CameraAccessException) {
e.printStackTrace()
}
}
private fun turnOffFlashLight() {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
cm.setTorchMode(cameraId, false)
} // 打开手电筒
} catch (e: CameraAccessException) {
e.printStackTrace()
}
}
private fun jumpLocationSettings() {
val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
settingResult.launch(intent)
}
private fun checkLocation() {
binding.switchFour.isChecked = isLocationEnabled(this)
}
private fun isLocationEnabled(context: Context): Boolean {
val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ||
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
}
private fun setFilter() {
val filter1 = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
binding.tvVo.text = "${
(registerReceiver(null, filter1)?.getIntExtra("voltage", 0)
?.toFloat()!!).roundToInt() / 1000.0
}V"
binding.tvTemp.text = "${
(registerReceiver(null, filter1)?.getIntExtra("temperature", 0)
?.toFloat()!!).roundToInt() / 10.0
}°C"
val uptime = SystemClock.elapsedRealtime()
val currantTime = Calendar.getInstance().time
val batteryUseTime = currantTime.time - uptime
val batteryDate = Date(batteryUseTime)
binding.tvTime.text = "${batteryDate.hours} H ${batteryDate.minutes} M"
val bm = getSystemService(Context.BATTERY_SERVICE) as BatteryManager
val chargeCounter = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
val pCapacity = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
if (chargeCounter != Int.MIN_VALUE && pCapacity != Int.MIN_VALUE) {
binding.tvMa.text = "${
String.format("%.1f", (chargeCounter / (pCapacity.toFloat() / 100f)) / 1000f)
} mAh"
}
}
private fun updateUI() {
binding.idBatteryLottie.visibility = View.GONE
binding.idConsBatteryFinish.isVisible = false
binding.llContent.isVisible = true
}
override fun onResume() {
super.onResume()
binding.btOk.setBackgroundResource(R.drawable.bg_shape_set)
checkFlashLight()
checkLocation()
}
fun turnOnBluetooth() {
val intent2 = Intent(Settings.ACTION_BLUETOOTH_SETTINGS)
result1.launch(intent2)
}
}
\ No newline at end of file
package com.base.superfilemanager.activity
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.base.superfilemanager.databinding.ActivityLayoutCleanGuestBinding
import com.base.superfilemanager.helps.BaseActivity
/**
* 清理功能引导
*/
class CleanGuestActivity : BaseActivity<ActivityLayoutCleanGuestBinding>() {
override val binding: ActivityLayoutCleanGuestBinding by lazy {
ActivityLayoutCleanGuestBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding.root.postDelayed({
binding.idTvSkip.isVisible = true
}, 3000)
binding.idTvSkip.setOnClickListener {
finishToMain()
}
binding.idTvClean.setOnClickListener {
startActivity(Intent(this, PrepareScanActivity::class.java))
finish()
}
}
}
\ No newline at end of file
package com.base.superfilemanager.activity
import android.animation.ValueAnimator
import android.content.Intent
import android.graphics.Color
import android.view.animation.LinearInterpolator
import androidx.core.animation.doOnEnd
import androidx.core.view.updatePadding
import com.base.superfilemanager.databinding.ActivityLayoutCleanupingBinding
import com.blankj.utilcode.util.BarUtils
import com.base.superfilemanager.helps.BaseActivity
import com.base.superfilemanager.helps.ConfigHelper
import com.base.superfilemanager.helps.FileHelps
import com.base.superfilemanager.helps.ads.AdmobUtils
import com.base.superfilemanager.view.AFunOb
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import java.io.File
import kotlin.random.Random
class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
override val isLightMode = true
override val binding: ActivityLayoutCleanupingBinding by lazy {
ActivityLayoutCleanupingBinding.inflate(layoutInflater)
}
private val intentSize by lazy {
intent.getLongExtra("size", -1)
}
private val listPath by lazy {
intent.getStringArrayExtra("list") ?: arrayOf()
}
var isDeleSuc = false
private var size = 0L
override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
ConfigHelper.junkSizeClean = ConfigHelper.junkSizeClean+intentSize
MainScope().launch(Dispatchers.IO) {
try {
FileHelps.fileList.clear()
listPath.forEach {
val file = File(it)
if (FileHelps.deleteFile(file)) {
isDeleSuc = true
}
}
} catch (_: Exception) {
} finally {
}
}
playAnm()
}
private fun playAnm() {
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.idYuan.rotation = it.animatedValue as Float
}
start()
}
ValueAnimator.ofInt(0, 100).run {
duration = Random.nextLong(7000, 8000)
interpolator = LinearInterpolator()
addUpdateListener {
binding.idTvJd.text = "${it.animatedValue as Int}"
}
doOnEnd {
AdmobUtils.showInterstitialAd(this@CleaningActivity) {
startActivity(Intent(this@CleaningActivity, ResultActivity::class.java).putExtra("from", AFunOb.JUNK_CLEANER).putExtra("clean_size", intentSize))
finish()
}
}
start()
}
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.idView1.rotation = it.animatedValue as Float
}
start()
}
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.idView2.rotation = it.animatedValue as Float
}
start()
}
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.idView3.rotation = it.animatedValue as Float
}
start()
}
}
}
\ No newline at end of file
package com.base.superfilemanager.activity
import android.view.View
import android.widget.LinearLayout
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.DividerItemDecoration
import com.base.superfilemanager.adapter.FileBrowseAdapter
import com.base.superfilemanager.bean.FileBean
import com.base.superfilemanager.bean.FileCategoryBean
import com.base.superfilemanager.bean.FileCategoryBean.Companion.APK
import com.base.superfilemanager.bean.FileCategoryBean.Companion.Audio
import com.base.superfilemanager.bean.FileCategoryBean.Companion.DOC
import com.base.superfilemanager.bean.FileCategoryBean.Companion.Image
import com.base.superfilemanager.bean.FileCategoryBean.Companion.PDF
import com.base.superfilemanager.bean.FileCategoryBean.Companion.PPT
import com.base.superfilemanager.bean.FileCategoryBean.Companion.TXT
import com.base.superfilemanager.bean.FileCategoryBean.Companion.Video
import com.base.superfilemanager.bean.FileCategoryBean.Companion.XLS
import com.base.superfilemanager.bean.FileCategoryBean.Companion.ZIP
import com.base.superfilemanager.databinding.ActivityFileCategoryBinding
import com.base.superfilemanager.helps.BaseActivity
import com.base.superfilemanager.helps.file.FileEx.deleteDirectory
import com.base.superfilemanager.helps.file.FileHelps
import com.base.superfilemanager.view.FileDeleteDialog.showFileDeleteDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import java.io.File
import java.lang.Exception
class FileCategoryActivity : BaseActivity<ActivityFileCategoryBinding>() {
private var type: String = ""
private lateinit var adapter: FileBrowseAdapter
override val binding: ActivityFileCategoryBinding by lazy {
ActivityFileCategoryBinding.inflate(layoutInflater)
}
override fun initView() {
type = intent.extras?.getString("type") ?: ""
binding.tvTittle.text = type
adapter = FileBrowseAdapter { size ->
binding.tvDelete.isSelected = size > 0
binding.tvDelete.isEnabled = size > 0
}
binding.rv.adapter = adapter
binding.rv.addItemDecoration(DividerItemDecoration(this, LinearLayout.VERTICAL))
binding.flBack.setOnClickListener {
finishToMain()
}
binding.tvDelete.setOnClickListener {
val deleteList = adapter.getSelect()
showFileDeleteDialog {
binding.clOther.visibility = View.VISIBLE
binding.progressbar.visibility = View.VISIBLE
lifecycleScope.launch(Dispatchers.Main) {
async {
try {
deleteList.forEach {
val deleteFile = File(it.path)
if (deleteFile.isFile) deleteFile.delete() else deleteDirectory(deleteFile)
}
} catch (e: Exception) {
}
binding.clOther.visibility = View.GONE
adapter.removeData(deleteList)
}.await()
}
}
}
}
override fun onStart() {
super.onStart()
checkPermission()
}
override fun onPermissionsResult(isGranted: Boolean) {
if (isGranted) {
initData()
}else{
finishToMain()
}
}
private fun initData() {
val showList = HashSet<FileBean>()
binding.clOther.visibility = View.VISIBLE
binding.progressbar.visibility = View.VISIBLE
FileHelps.getFileList(
onUpdate = {
val temp = arrayListOf<FileBean>()
temp.addAll(FileHelps.fileList)
if (temp.isNotEmpty()) {
when (type) {
FileCategoryBean.ALL -> showList.addAll(temp.filter { it.isDoc() })
XLS -> showList.addAll(temp.filter { it.isXls() })
DOC -> showList.addAll(temp.filter { it.isDocx() })
PDF -> showList.addAll(temp.filter { it.isPdf() })
ZIP -> showList.addAll(temp.filter { it.isZip() })
TXT -> showList.addAll(temp.filter { it.isTxt() })
PPT -> showList.addAll(temp.filter { it.isPpt() })
Video -> showList.addAll(temp.filter { it.isVideo() })
Audio -> showList.addAll(temp.filter { it.isAudio() })
APK -> showList.addAll(temp.filter { it.isApk() })
Image -> showList.addAll(temp.filter { it.isImage() })
}
if (showList.isNotEmpty()) {
binding.clOther.visibility = View.GONE
binding.progressbar.visibility = View.GONE
}
adapter.setData(showList.toList())
}
}, onEnd = {
if (showList.isEmpty()) {
binding.progressbar.visibility = View.GONE
binding.ivEmpty.visibility = View.VISIBLE
binding.tvDelete.visibility = View.GONE
}
})
}
}
\ No newline at end of file
package com.base.superfilemanager.activity
import android.content.Intent
import android.graphics.Color
import com.blankj.utilcode.util.BarUtils
import com.base.superfilemanager.databinding.ActivityLayoutGuestBinding
import com.base.superfilemanager.helps.BaseActivity
import com.base.superfilemanager.helps.ConfigHelper
import kotlin.random.Random
/**
* 引导动画页面
*/
class GuestActivity : BaseActivity<ActivityLayoutGuestBinding>() {
override val binding: ActivityLayoutGuestBinding by lazy {
ActivityLayoutGuestBinding.inflate(layoutInflater)
}
private var mProgress = 0
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
ConfigHelper.ifGuest = true
binding.idLottie.imageAssetsFolder = "sao_go_miao/images/"
binding.idLottie.setAnimation("sao_go_miao/data.json")
binding.idLottie.playAnimation()
loadPro()
}
private fun loadPro() {
if (mProgress >= 100) {
binding.idSJindu.progress = mProgress
startActivity(Intent(this, CleanGuestActivity::class.java))
finish()
return
}
binding.idSJindu.postDelayed({
mProgress += Random.nextInt(5)
binding.idSJindu.progress = mProgress
loadPro()
}, 80)
}
}
\ No newline at end of file
package com.base.superfilemanager.activity package com.base.superfilemanager.activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.graphics.Color
import android.graphics.Typeface import android.graphics.Typeface
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import com.base.superfilemanager.fragment.FileCategoryFragment import com.blankj.utilcode.util.BarUtils
import com.base.superfilemanager.databinding.ActivityMainBinding import com.base.superfilemanager.databinding.ActivityMainBinding
import com.base.superfilemanager.fragment.HomeFragment
import com.base.superfilemanager.fragment.ToolsFragment
import com.base.superfilemanager.helps.BaseActivity import com.base.superfilemanager.helps.BaseActivity
class MainActivity : BaseActivity<ActivityMainBinding>() { class MainActivity : BaseActivity<ActivityMainBinding>() {
override val isLightMode = true
override val isFinishMain: Boolean = false
override val binding: ActivityMainBinding by lazy { override val binding: ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater) ActivityMainBinding.inflate(layoutInflater)
} }
private val homeFragment by lazy {
private val fileCategoryFragment by lazy { HomeFragment()
FileCategoryFragment() }
private val toolsFragment by lazy {
ToolsFragment()
} }
private val fragments by lazy {
mutableListOf(homeFragment, toolsFragment)
}
private lateinit var batteryReceiver: BatteryReceiver
override fun initView() { override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
// binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding.idVp.run { binding.idVp.run {
adapter = object : FragmentStateAdapter(this@MainActivity) { adapter = object : FragmentStateAdapter(this@MainActivity) {
override fun getItemCount(): Int { override fun getItemCount(): Int {
return 1 return fragments.size
} }
override fun createFragment(position: Int): Fragment { override fun createFragment(position: Int): Fragment {
return fileCategoryFragment return fragments[position]
} }
} }
} }
...@@ -39,18 +51,47 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -39,18 +51,47 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
setPage(position) setPage(position)
} }
}) })
binding.idVp.isUserInputEnabled = false binding.idBottom1.setOnClickListener {
binding.idVp.currentItem = 0
}
binding.idBottom2.setOnClickListener {
binding.idVp.currentItem = 1
}
batteryReceiver = BatteryReceiver()
val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
registerReceiver(batteryReceiver, filter)
} }
private fun setPage(position: Int) { private fun setPage(p: Int) {
binding.idBottom1.isSelected = true binding.idBottom1.isSelected = false
binding.idTvHome.typeface = Typeface.DEFAULT_BOLD binding.idBottom2.isSelected = false
binding.idTvHome.typeface = Typeface.DEFAULT
binding.idTvTools.typeface = Typeface.DEFAULT
when (p) {
0 ->{
binding.idBottom1.isSelected = true
binding.idTvHome.typeface = Typeface.DEFAULT_BOLD
}
1 -> {
binding.idBottom2.isSelected = true
binding.idTvTools.typeface = Typeface.DEFAULT_BOLD
}
}
} }
override fun onPermissionsResult(isGranted: Boolean) { var level = 0
if (isGranted) { private inner class BatteryReceiver : BroadcastReceiver() {
fileCategoryFragment.refreshRecent()
override fun onReceive(context: Context?, intent: Intent?) {
val current = intent?.extras!!.getInt("level")
val total = intent.extras!!.getInt("scale")
level = current * 100 / total
} }
} }
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(batteryReceiver)
}
} }
\ No newline at end of file
package com.base.superfilemanager.activity
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import androidx.appcompat.app.AppCompatActivity
import com.base.superfilemanager.R
import com.base.superfilemanager.view.PermisonPopWindow
class PermissionTripActivity : AppCompatActivity() {
companion object {
fun launch(activity: Activity) {
activity.startActivity(
Intent(activity, PermissionTripActivity::class.java)
)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_layout_permisson_trip)
initView()
}
private fun initView() {
Handler().postDelayed({
PermisonPopWindow(this) {
finish()
}.show()
}, 500)
}
}
\ No newline at end of file
package com.base.superfilemanager.activity
import android.animation.ValueAnimator
import android.content.Intent
import android.graphics.Color
import android.view.animation.LinearInterpolator
import androidx.activity.OnBackPressedCallback
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.base.superfilemanager.databinding.ActivityLayoutParepreScanBinding
import com.base.superfilemanager.helps.BaseActivity
import com.base.superfilemanager.helps.ads.AdmobUtils
/**
* 引导清理扫描页
*/
class PrepareScanActivity : BaseActivity<ActivityLayoutParepreScanBinding>() {
override val binding: ActivityLayoutParepreScanBinding by lazy {
ActivityLayoutParepreScanBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding.idBackJunkScan.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
finishToMain()
}
})
}
override fun onStart() {
super.onStart()
checkPermission()
}
var isplay = 0
override fun onPermissionsResult(isGranted: Boolean) {
// Log.e("MXL", "权限回调: " + isGranted)
if (isGranted) {
isplay += 1
if (isplay == 1) {
playLottie()
}
} else {
finishToMain()
}
}
private fun playLottie() {
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.idView1.rotation = it.animatedValue as Float
}
start()
}
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.idView2.rotation = it.animatedValue as Float
}
start()
}
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.idView3.rotation = it.animatedValue as Float
}
start()
}
binding.idJunkScan.imageAssetsFolder = "sao_go_miao/images/"
binding.idJunkScan.setAnimation("sao_go_miao/data.json")
binding.idJunkScan.playAnimation()
binding.root.postDelayed({
AdmobUtils.showInterstitialAd(this) {
startActivity(Intent(this, CleanJunkActivity::class.java))
finish()
}
}, 6000)
}
}
\ No newline at end of file
...@@ -5,9 +5,9 @@ import android.graphics.Color ...@@ -5,9 +5,9 @@ import android.graphics.Color
import android.webkit.WebView import android.webkit.WebView
import android.webkit.WebViewClient import android.webkit.WebViewClient
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.base.superfilemanager.databinding.ActivityLayoutWebPrivacyBinding import com.base.superfilemanager.databinding.ActivityLayoutWebPrivacyBinding
import com.base.superfilemanager.helps.BaseActivity import com.base.superfilemanager.helps.BaseActivity
import com.blankj.utilcode.util.BarUtils
class PrivacyWebActivity : BaseActivity<ActivityLayoutWebPrivacyBinding>() { class PrivacyWebActivity : BaseActivity<ActivityLayoutWebPrivacyBinding>() {
...@@ -29,7 +29,7 @@ class PrivacyWebActivity : BaseActivity<ActivityLayoutWebPrivacyBinding>() { ...@@ -29,7 +29,7 @@ class PrivacyWebActivity : BaseActivity<ActivityLayoutWebPrivacyBinding>() {
return true return true
} }
} }
binding.idWeb.loadUrl("") binding.idWeb.loadUrl("https://sites.google.com/view/cleanmastermax/home")
binding.idBack.setOnClickListener { binding.idBack.setOnClickListener {
finishToMain() finishToMain()
} }
......
package com.base.superfilemanager.activity
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import androidx.activity.OnBackPressedCallback
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.FileUtils
import com.blankj.utilcode.util.ToastUtils
import com.bumptech.glide.Glide
import com.base.superfilemanager.R
import com.base.superfilemanager.bean.ImageDataBean
import com.base.superfilemanager.databinding.ActivityLayoutRepeaterdPhotoBinding
import com.base.superfilemanager.helps.BaseActivity
import com.base.superfilemanager.helps.BaseApplication
import com.base.superfilemanager.helps.FileHelps
import com.base.superfilemanager.helps.ads.AdmobUtils
class RepeaterdPhotoActivity: BaseActivity<ActivityLayoutRepeaterdPhotoBinding>() {
private var isSelectAll = false
override val binding: ActivityLayoutRepeaterdPhotoBinding by lazy {
ActivityLayoutRepeaterdPhotoBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding.idTvDelete.isEnabled = false
initListener()
}
override fun initListener(){
binding.idBack.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
AdmobUtils.showInterstitialAd(this@RepeaterdPhotoActivity){
finishToMain()
}
}
})
binding.idImgSelect.setOnClickListener {
if (isSelectAll) {
isSelectAll = false
binding.idTvAll.text = "All"
binding.idImgSelect.setImageResource(R.mipmap.xuan_3)
} else {
isSelectAll = true
binding.idTvAll.text = "Cancel"
binding.idImgSelect.setImageResource(R.mipmap.danxuanxe)
}
fileList.forEach { it.isSelect = isSelectAll }
mAdapter.notifyItemRangeChanged(0, fileList.size, 1)
setTvStatus()
}
binding.idTvDelete.setOnClickListener {
AdmobUtils.showInterstitialAd(this){
val list = fileList.toList().filter { it.isSelect }
if (list.isNotEmpty() && list.all { FileUtils.delete(it.path) }) {
fileList.removeAll(list)
FileHelps.similarImageList.removeAll(list)
mAdapter.notifyDataSetChanged()
setTvStatus()
ToastUtils.showShort("Delete Successful")
} else {
ToastUtils.showShort("Delete failed.")
}
}
}
}
private var fileList = mutableListOf<ImageDataBean>()
override fun onStart() {
super.onStart()
checkPermission()
}
override fun onPermissionsResult(isGranted: Boolean) {
if(isGranted){
FileHelps.getImageFiles {
AdmobUtils.showInterstitialAd(this)
binding.idLlScaning.isVisible = false
binding.idLlResult.isVisible = true
fileList = FileHelps.similarImageList
binding.idTvNoData.isVisible = fileList.size == 0
binding.idTvDelete.isVisible = fileList.size > 0
binding.idTvAll.isVisible = fileList.size > 0
binding.idImgSelect.isVisible = fileList.size > 0
binding.idRlList.layoutManager = GridLayoutManager(this, 3)
binding.idRlList.adapter = mAdapter
}
}else{
finishToMain()
}
}
private fun setTvStatus() {
val it = fileList.filter { it.isSelect }
binding.idTvDelete.isEnabled = it.isNotEmpty()
}
private val mAdapter by lazy {
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val ivImage: ImageView
val ivSelect: ImageView
init {
ivImage = view.findViewById(R.id.iv_image)
ivSelect = view.findViewById(R.id.id_img_sel)
}
}
object : RecyclerView.Adapter<ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(this@RepeaterdPhotoActivity).inflate(
R.layout.item_layout_repeater_photo, parent, false
)
return ViewHolder(view)
}
override fun getItemCount() = fileList.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = fileList[position]
Glide.with(BaseApplication.context).load(item.path).into(holder.ivImage)
holder.ivSelect.isVisible = true
holder.itemView.setOnClickListener {
item.isSelect = !item.isSelect
notifyItemChanged(position, 1)
if (fileList.all { it.isSelect }) {
isSelectAll = true
binding.idTvAll.text = "Cancel"
binding.idImgSelect.setImageResource(R.mipmap.danxuanxe)
} else {
isSelectAll = false
binding.idTvAll.text = "All"
binding.idImgSelect.setImageResource(R.mipmap.xuan_3)
}
setTvStatus()
}
}
override fun onBindViewHolder(
holder: ViewHolder,
position: Int,
payloads: MutableList<Any>
) {
super.onBindViewHolder(holder, position, payloads)
val item = fileList[position]
holder.ivSelect.setImageResource(
if (item.isSelect) {
R.mipmap.danxuanxe
} else {
R.mipmap.xuan_3
}
)
}
}
}
}
\ No newline at end of file
package com.base.superfilemanager.activity
import android.content.Intent
import android.graphics.Color
import androidx.activity.OnBackPressedCallback
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.SPUtils
import com.base.superfilemanager.activity.photocompress.photo.StartCompressionPhotoActivity
import com.base.superfilemanager.adapter.AppFunctionAdapter
import com.base.superfilemanager.databinding.ActivityLayoutResultBinding
import com.base.superfilemanager.helps.BaseActivity
import com.base.superfilemanager.helps.KotlinExt.toFormatSize
import com.base.superfilemanager.notificationclean.NotificationCleanActivity
import com.base.superfilemanager.notificationclean.NotificationGuestActivity
import com.base.superfilemanager.view.AFunOb.APP_MANAGER
import com.base.superfilemanager.view.AFunOb.APP_SPEED
import com.base.superfilemanager.view.AFunOb.BATTERY_INFO
import com.base.superfilemanager.view.AFunOb.BATTERY_OPTIMIZER
import com.base.superfilemanager.view.AFunOb.EMPTY_FILE_CLEANER
import com.base.superfilemanager.view.AFunOb.JUNK_CLEANER
import com.base.superfilemanager.view.AFunOb.LARGE_FILE_CLEANER
import com.base.superfilemanager.view.AFunOb.NETWORK_TRAFFIC
import com.base.superfilemanager.view.AFunOb.NOTIFICATION_CLEANER
import com.base.superfilemanager.view.AFunOb.PHOTO_COMPRESS
import com.base.superfilemanager.view.AFunOb.RECENT_APP_USAGE
import com.base.superfilemanager.view.AFunOb.SIMILAR_PHOTOS
class ResultActivity : BaseActivity<ActivityLayoutResultBinding>() {
override val binding: ActivityLayoutResultBinding by lazy {
ActivityLayoutResultBinding.inflate(layoutInflater)
}
private lateinit var adapter: AppFunctionAdapter
override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.clTop.updatePadding(top = BarUtils.getStatusBarHeight())
adapter = AppFunctionAdapter {
when (it) {
JUNK_CLEANER -> {
startActivity(Intent(this, ScanJunkActivity::class.java))
}
// VIRUS_SCAN -> {
// startActivity(Intent(this, VirusActivity::class.java))
// }
RECENT_APP_USAGE -> {
startActivity(Intent(this, RecentAppActivity::class.java))
}
LARGE_FILE_CLEANER -> {
startActivity(Intent(this, LargeFileCleanActivity::class.java))
}
NOTIFICATION_CLEANER -> {
if (SPUtils.getInstance().getBoolean("notification_guest", false)) {
startActivity(
Intent(
this,
NotificationCleanActivity::class.java
)
)
} else {
startActivity(
Intent(
this,
NotificationGuestActivity::class.java
)
)
}
}
NETWORK_TRAFFIC -> {
startActivity(Intent(this, NetWorkActivity::class.java))
}
APP_MANAGER -> {
startActivity(Intent(this, AppManagerActivity::class.java))
}
BATTERY_INFO -> {
startActivity(Intent(this, BatteryInfoActivity::class.java))
}
SIMILAR_PHOTOS -> {
startActivity(Intent(this, RepeaterdPhotoActivity::class.java))
}
PHOTO_COMPRESS -> {
startActivity(Intent(this, StartCompressionPhotoActivity::class.java))
}
}
finish()
}
binding.rvFun.adapter = adapter
adapter.updateListPostion()
adapter.notifyDataSetChanged()
val wenBen = intent.getStringExtra("wenBen")
binding.tvInfo.text = wenBen
val from = intent.getStringExtra("from")
when (from) {
JUNK_CLEANER -> {
if (intent.getLongExtra("clean_size", 0L) > 0) {
binding.tvInfo.text =
"Cleaned up ${
intent.getLongExtra("clean_size", 0L).toFormatSize(1)
}"
} else {
binding.tvInfo.text = "No junk files found."
}
SPUtils.getInstance().put("last_use_junk_cleaner", System.currentTimeMillis())
}
RECENT_APP_USAGE -> {
binding.tvInfo.text = ""
}
LARGE_FILE_CLEANER -> {
binding.tvInfo.text = ""
}
NOTIFICATION_CLEANER -> {
binding.tvInfo.text = ""
}
NETWORK_TRAFFIC -> {
binding.tvInfo.text = ""
}
APP_MANAGER -> {
binding.tvInfo.text = ""
}
BATTERY_INFO -> {
binding.tvInfo.text = "Battery scan completed."
SPUtils.getInstance().put("last_use_battery_info", System.currentTimeMillis())
}
EMPTY_FILE_CLEANER -> {
binding.tvInfo.text = ""
}
PHOTO_COMPRESS -> {
binding.tvInfo.text =
"Compress ${intent.getIntExtra("num", 0)} photo, ${
intent.getLongExtra(
"size",
0L
).toFormatSize(1)
} space freed"
}
BATTERY_OPTIMIZER -> {
binding.tvInfo.text = "Optimization completed"
}
APP_SPEED -> {
binding.tvInfo.text = "Optimization completed"
}
else -> {}
}
from?.let {
binding.tvTitle.text = it
adapter.removeItem(it)
}
//load gif
// Glide.with(this)
// .asGif()
// .load(R.drawable.success)
// .into(object : ImageViewTarget<GifDrawable>(vb.icSuccess) {
// override fun onResourceReady(
// resource: GifDrawable,
// transition: Transition<in GifDrawable>?
// ) {
// super.onResourceReady(resource, transition)
// resource.setLoopCount(1)
// resource.start()
// }
//
// override fun setResource(resource: GifDrawable?) {
// view.setImageDrawable(resource)
// }
//
// })
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
finishToMain()
// AdmobUtils.showInterstitialAd(this@ResultActivity) {
//
// }
}
})
binding.ivBack.setOnClickListener {
finishToMain()
}
}
override fun onResume() {
super.onResume()
}
override fun onDestroy() {
super.onDestroy()
}
}
\ No newline at end of file
package com.base.superfilemanager.activity
import android.animation.ValueAnimator
import android.content.Intent
import android.view.animation.LinearInterpolator
import androidx.activity.OnBackPressedCallback
import com.base.superfilemanager.databinding.ActivityLayoutScanJunkBinding
import com.base.superfilemanager.helps.BaseActivity
import com.base.superfilemanager.helps.ads.AdmobUtils
class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
override val isLightMode = true
override val binding: ActivityLayoutScanJunkBinding by lazy {
ActivityLayoutScanJunkBinding.inflate(layoutInflater)
}
override fun initView() {
binding.idBackJunkScan.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
finishToMain()
}
})
}
override fun onStart() {
super.onStart()
checkPermission()
}
var isplay = 0
override fun onPermissionsResult(isGranted: Boolean) {
if (isGranted) {
isplay += 1
if (isplay == 1) {
playLottie()
}
} else {
finishToMain()
}
}
private fun playLottie() {
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.idView1.rotation = it.animatedValue as Float
}
start()
}
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.idView2.rotation = it.animatedValue as Float
}
start()
}
ValueAnimator.ofFloat(0f, 360f).run {
duration = 1000
repeatMode = ValueAnimator.RESTART
repeatCount = ValueAnimator.INFINITE
interpolator = LinearInterpolator()
addUpdateListener {
binding.idView3.rotation = it.animatedValue as Float
}
start()
}
binding.idJunkScan.imageAssetsFolder = "sao_go_miao/images/"
binding.idJunkScan.setAnimation("sao_go_miao/data.json")
binding.idJunkScan.playAnimation()
binding.root.postDelayed({
AdmobUtils.showInterstitialAd(this) {
startActivity(Intent(this, CleanJunkActivity::class.java))
finish()
}
}, 5000)
}
}
\ No newline at end of file
package com.base.superfilemanager.activity
import android.animation.Animator
import android.graphics.Color
import android.media.AudioManager
import android.media.MediaPlayer
import androidx.activity.OnBackPressedCallback
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.ToastUtils
import com.base.superfilemanager.R
import com.base.superfilemanager.databinding.ActivityLayoutSpeakerCleaningBinding
import com.base.superfilemanager.helps.BaseActivity
import com.base.superfilemanager.helps.ads.AdmobUtils
class SpeakCleaningActivity : BaseActivity<ActivityLayoutSpeakerCleaningBinding>() {
private val zAudio by lazy {
MediaPlayer.create(this, R.raw.z)
}
override val binding: ActivityLayoutSpeakerCleaningBinding by lazy {
ActivityLayoutSpeakerCleaningBinding.inflate(layoutInflater)
}
override fun initView() {
val audioManager = this.getSystemService(AUDIO_SERVICE) as AudioManager
val maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, 0)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
binding.idSpeakCleanLottie.imageAssetsFolder = "speak_go_clean/images/"
binding.idSpeakCleanLottie.setAnimation("speak_go_clean/data.json")
binding.idSpeakCleanLottie.playAnimation()
binding.root.postDelayed({
zAudio.stop()
binding.idLlP1.isVisible = false
binding.idLlP2.isVisible = true
playComplete()
}, 30000)
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
ToastUtils.showShort("Cleaning,Please wait a moment")
}
})
}
override fun onStart() {
super.onStart()
zAudio.start()
}
override fun onStop() {
super.onStop()
try {
zAudio.pause()
} catch (e: Exception) {
zAudio.stop()
}
}
override fun onDestroy() {
super.onDestroy()
zAudio.release()
}
private fun playComplete() {
binding.idLottieComplete.playAnimation()
binding.idLottieComplete.addLottieOnCompositionLoadedListener {
}
binding.idLottieComplete.addAnimatorListener(object : Animator.AnimatorListener {
override fun onAnimationStart(p0: Animator) {
}
override fun onAnimationEnd(p0: Animator) {
AdmobUtils.showInterstitialAd(this@SpeakCleaningActivity) {
finish()
}
}
override fun onAnimationCancel(p0: Animator) {
}
override fun onAnimationRepeat(p0: Animator) {
}
})
}
}
\ No newline at end of file
package com.base.superfilemanager.activity
import android.content.Intent
import android.graphics.Color
import androidx.activity.OnBackPressedCallback
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.base.superfilemanager.databinding.ActivityLayoutSpeakerCleanBinding
import com.base.superfilemanager.helps.BaseActivity
import com.base.superfilemanager.helps.ads.AdmobUtils
class SpeakerCleanerActivity : BaseActivity<ActivityLayoutSpeakerCleanBinding>() {
override val binding: ActivityLayoutSpeakerCleanBinding by lazy {
ActivityLayoutSpeakerCleanBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
initListener()
}
override fun initListener() {
binding.idBackSpeakCleaner.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
AdmobUtils.showInterstitialAd(this@SpeakerCleanerActivity){
finishToMain()
}
}
})
binding.idCleanDust.setOnClickListener {
startActivity(Intent(this, SpeakCleaningActivity::class.java))
}
}
}
\ No newline at end of file
package com.base.superfilemanager.activity.browser
import android.app.Activity
import android.graphics.Bitmap
import android.os.Build
import android.webkit.CookieManager
import android.webkit.WebChromeClient
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import com.blankj.utilcode.util.SPUtils
class BrowserView(listener: WebViewListener, val str: String) {
companion object {
private const val DESKTOP_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36"
private var mDefaultUserAgent = ""
}
private val mWebView = WebView(listener.activity)
private val settings = mWebView.settings
var icon: Bitmap? = null
var title = str
var progress = 0
var url = str
var isHome = false
init {
mWebView.drawingCacheBackgroundColor = -1
mWebView.isFocusableInTouchMode = true
mWebView.isFocusable = true
mWebView.isDrawingCacheEnabled = false
mWebView.setWillNotCacheDrawing(true)
if (Build.VERSION.SDK_INT <= 22) {
mWebView.isAnimationCacheEnabled = false
mWebView.isAlwaysDrawnWithCacheEnabled = false
}
mWebView.setBackgroundColor(-1)
mWebView.isScrollbarFadingEnabled = true
mWebView.isSaveEnabled = true
mWebView.setNetworkAvailable(true)
mWebView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView?, newProgress: Int) {
progress = newProgress
listener.onProgressChanged(newProgress)
}
override fun onReceivedTitle(view: WebView?, title: String?) {
this@BrowserView.title = title?.takeIf { it.isNotBlank() } ?: str
listener.onReceivedTitle(title ?: str)
}
override fun onReceivedIcon(view: WebView?, icon: Bitmap?) {
this@BrowserView.icon = icon
listener.onReceivedIcon(icon)
}
}
mWebView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
this@BrowserView.url = url ?: ""
listener.onPageFinished(view, url ?: "")
}
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
this@BrowserView.url = url ?: ""
listener.onPageStarted(url ?: "", favicon)
}
}
settings.setGeolocationEnabled(false)
settings.userAgentString = WebSettings.getDefaultUserAgent(listener.activity)
settings.saveFormData = false
settings.javaScriptEnabled = true
settings.javaScriptCanOpenWindowsAutomatically = true
settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL
try {
settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING
} catch (_: Exception) {}
settings.loadsImagesAutomatically = true
settings.setSupportMultipleWindows(true)
settings.useWideViewPort = true
settings.loadWithOverviewMode = true
settings.textZoom = 100
mDefaultUserAgent = settings.userAgentString
CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, true)
if (SPUtils.getInstance().getBoolean("desktop_mode", false)) {
setDesktop()
} else {
setPhone()
}
if (str.trim().isNotEmpty()) {
mWebView.loadUrl(str)
}
}
fun loadUrl(url: String) {
mWebView.loadUrl(url)
}
fun setDesktop() {
settings.userAgentString = DESKTOP_USER_AGENT
}
fun setPhone() {
settings.userAgentString = mDefaultUserAgent
}
fun reload() {
mWebView.reload()
}
fun canGoBack() = mWebView.canGoBack()
fun goBack() = mWebView.goBack()
fun canGoForward() = mWebView.canGoForward()
fun goForward() = mWebView.goForward()
fun getWebView() = mWebView
interface WebViewListener {
val activity: Activity
fun onProgressChanged(progress: Int)
fun onReceivedTitle(title: String)
fun onReceivedIcon(icon: Bitmap?)
fun onPageStarted(url: String, icon: Bitmap?)
fun onPageFinished(view: WebView?, url: String)
}
}
\ No newline at end of file
package com.base.superfilemanager.activity.browser
import android.graphics.Bitmap
import android.graphics.Color
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.webkit.WebView
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.base.superfilemanager.databinding.ActivityLayoutSecureBrowserBinding
import com.base.superfilemanager.helps.BaseActivity
class SecureBrowserActivity : BaseActivity<ActivityLayoutSecureBrowserBinding>() {
private val tabs = mutableListOf<BrowserView?>(null)
private var currentTab = 0
override val binding: ActivityLayoutSecureBrowserBinding by lazy {
ActivityLayoutSecureBrowserBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
}
override fun initListener() {
binding.idGoogle.setOnClickListener {
}
binding.idYoutube.setOnClickListener {
loadUrl("https://www.youtube.com/")
}
binding.idFacebook.setOnClickListener {
}
binding.idAmazon.setOnClickListener {
}
binding.idInstagram.setOnClickListener {
}
binding.idTwitter.setOnClickListener {
}
binding.idReddit.setOnClickListener {
}
binding.idTiktok.setOnClickListener {
}
}
private fun loadUrl(url: String) {
binding.idContainer.isVisible = true
binding.idContent.isVisible=false
if (tabs[currentTab] == null) {
tabs[currentTab] = BrowserView(
object : BrowserView.WebViewListener {
override val activity = this@SecureBrowserActivity
override fun onProgressChanged(progress: Int) {
}
override fun onReceivedTitle(title: String) {
// binding.idAddressEdit.setText(title)
}
override fun onReceivedIcon(icon: Bitmap?) {
// icon?.let {
// binding.idIcon.setImageBitmap(it)
// }
}
override fun onPageStarted(url: String, icon: Bitmap?) {
}
override fun onPageFinished(view: WebView?, url: String) {
binding.idBack.isSelected = view?.canGoBack() == true
binding.idForward.isSelected = view?.canGoForward() == true
// refreshTabs()
}
},
url
)
} else {
tabs[currentTab]?.loadUrl(url)
}
tabs[currentTab]?.isHome = false
binding.idContainer.removeAllViews()
binding.idContainer.addView(tabs[currentTab]?.getWebView(), 0, MATCH_PARENT)
}
}
\ No newline at end of file
package com.base.superfilemanager.activity.photocompress.photo
class AlbumBean {
var name: String = ""
var num: Int = 0
var src: String = ""
constructor(name: String, num: Int, src: String) {
this.name = name
this.num = num
this.src = src
}
}
\ No newline at end of file
package com.base.superfilemanager.activity.photocompress.photo
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.bumptech.glide.Glide
import com.base.superfilemanager.R
class AlbumListAdapter : RecyclerView.Adapter<AlbumListAdapter.ContentViewHolder> {
private var mList: List<AlbumBean>
private val mListener: OnItemClickListener<AlbumBean>
constructor(mList: List<AlbumBean>, mListener: OnItemClickListener<AlbumBean>) : super() {
this.mList = mList
this.mListener = mListener
}
fun updateData(mList: List<AlbumBean>) {
this.mList = mList
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContentViewHolder {
return ContentViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.item_album, parent, false)
)
}
override fun onBindViewHolder(holder: ContentViewHolder, position: Int) {
val entity = mList[position]
holder.mName.text = entity.name
holder.mNum.text = entity.num.toString()
Glide.with(holder.itemView.context).load(entity.src).into(holder.mImage)
}
override fun getItemCount(): Int = mList.size
inner class ContentViewHolder : ViewHolder {
val mName: TextView
val mNum: TextView
val mImage: ImageView
constructor(itemView: View) : super(itemView) {
mName = itemView.findViewById(R.id.name)
mNum = itemView.findViewById(R.id.num)
mImage = itemView.findViewById(R.id.image)
itemView.setOnClickListener {
if(position>=0&&position<mList.size){
val entity = mList[position]
mListener.onItemClick(position, entity)
}
}
}
}
}
\ No newline at end of file
package com.base.superfilemanager.activity.photocompress.photo
interface AlbumsSelectListener {
fun onSelectAlbum(albums: AlbumBean)
}
\ No newline at end of file
package com.base.superfilemanager.activity.photocompress.photo
import android.app.Activity
import android.view.View
import android.view.View.OnClickListener
import android.widget.LinearLayout
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.base.superfilemanager.R
class BottomSheetManager : BottomSheetBehavior.BottomSheetCallback, OnClickListener,
OnItemClickListener<AlbumBean> {
private val mContext: Activity
private val mRecycleView: RecyclerView
private val blackOverlay: View
private val mAlbumName: TextView
private val bottomSheetBehavior: BottomSheetBehavior<LinearLayout>
private val listener: AlbumsSelectListener
constructor(mContext: Activity, listener: AlbumsSelectListener) {
this.mContext = mContext
this.listener = listener
mRecycleView = mContext.findViewById(R.id.album_content)
blackOverlay = mContext.findViewById(R.id.black_overlay)
val bottomSheet = mContext.findViewById<LinearLayout>(R.id.bottom_sheet)
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet)
mAlbumName = mContext.findViewById(R.id.albumname)
init()
}
private fun init() {
bottomSheetBehavior.addBottomSheetCallback(this)
blackOverlay.setOnClickListener(this)
mAlbumName?.setOnClickListener(this)
mRecycleView.layoutManager = LinearLayoutManager(mContext)
val mList = ImagesMediaUtils.getAlbums(mContext)
val mAdapter = AlbumListAdapter(mList, this)
mRecycleView.adapter = mAdapter
if (mList.isNotEmpty()) {
onItemClick(0, mList[0])
}
}
override fun onStateChanged(bottomSheet: View, newState: Int) {
when (newState) {
BottomSheetBehavior.STATE_HIDDEN -> {
blackOverlay.visibility = View.GONE
}
BottomSheetBehavior.STATE_COLLAPSED -> {
blackOverlay.visibility = View.GONE
}
else -> {
blackOverlay.visibility = View.VISIBLE
}
}
}
override fun onSlide(bottomSheet: View, slideOffset: Float) {
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.albumname -> {
if (bottomSheetBehavior.state != BottomSheetBehavior.STATE_EXPANDED) {
bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
}
}
R.id.black_overlay -> {
bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN
}
}
}
override fun onUpdateBtn(boolean: Boolean, entity: AlbumBean) {
}
override fun onItemClick(position: Int, entity: AlbumBean) {
mAlbumName.text = entity.name
bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN
listener.onSelectAlbum(entity)
}
}
package com.base.superfilemanager.activity.photocompress.photo
import android.annotation.SuppressLint
import android.graphics.Color
import android.widget.TextView
import androidx.core.view.updatePadding
import com.blankj.utilcode.util.BarUtils
import com.base.superfilemanager.R
import com.base.superfilemanager.databinding.ActivityCompressionSuccessBinding
import com.base.superfilemanager.helps.BaseActivity
class CompressionSuccessActivity : BaseActivity<ActivityCompressionSuccessBinding>() {
override val binding: ActivityCompressionSuccessBinding
get() = ActivityCompressionSuccessBinding.inflate(layoutInflater)
@SuppressLint("SetTextI18n")
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
val num = intent.getIntExtra("num", 0)
val size = intent.getLongExtra("size", 0)
findViewById<TextView>(R.id.tv_text).text =
"$num images compressed " + ImagesMediaUtils.formatFileSize(size)
}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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