Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
S
SuperEasyClean
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
songjianyu
SuperEasyClean
Commits
45e22624
Commit
45e22624
authored
Jun 04, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[新增]相识图片
parent
97113490
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
690 additions
and
14 deletions
+690
-14
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+5
-0
data.json
app/src/main/assets/similar_photos/scan/data.json
+1
-0
img_0.png
app/src/main/assets/similar_photos/scan/images/img_0.png
+0
-0
img_1.png
app/src/main/assets/similar_photos/scan/images/img_1.png
+0
-0
img_2.png
app/src/main/assets/similar_photos/scan/images/img_2.png
+0
-0
img_3.png
app/src/main/assets/similar_photos/scan/images/img_3.png
+0
-0
BaseActivity.kt
app/src/main/java/com/base/appzxhy/base/BaseActivity.kt
+11
-4
SimilarBean.kt
app/src/main/java/com/base/appzxhy/bean/SimilarBean.kt
+10
-0
BatteryInfoActivity.kt
...va/com/base/appzxhy/ui/batteryinfo/BatteryInfoActivity.kt
+2
-2
JunkCleanActivity.kt
.../main/java/com/base/appzxhy/ui/clean/JunkCleanActivity.kt
+2
-3
LargeFileCleanActivity.kt
...a/com/base/appzxhy/ui/largefile/LargeFileCleanActivity.kt
+2
-2
ScreenshotCleanActivity.kt
...com/base/appzxhy/ui/screenshot/ScreenshotCleanActivity.kt
+3
-3
SimilarPhotosActivity.kt
...java/com/base/appzxhy/ui/similar/SimilarPhotosActivity.kt
+279
-0
SimilarUtils.kt
...src/main/java/com/base/appzxhy/ui/similar/SimilarUtils.kt
+138
-0
icon.png
app/src/main/res/drawable-xxhdpi/icon.png
+0
-0
icon_n.png
app/src/main/res/drawable-xxhdpi/icon_n.png
+0
-0
activity_similar_photos.xml
app/src/main/res/layout/activity_similar_photos.xml
+128
-0
item_similar_photos.xml
app/src/main/res/layout/item_similar_photos.xml
+81
-0
item_similar_photos_child.xml
app/src/main/res/layout/item_similar_photos_child.xml
+26
-0
strings.xml
app/src/main/res/values/strings.xml
+2
-0
No files found.
app/src/main/AndroidManifest.xml
View file @
45e22624
...
@@ -78,6 +78,11 @@
...
@@ -78,6 +78,11 @@
android:exported=
"false"
android:exported=
"false"
android:screenOrientation=
"portrait"
android:screenOrientation=
"portrait"
tools:ignore=
"DiscouragedApi,LockedOrientationActivity"
/>
tools:ignore=
"DiscouragedApi,LockedOrientationActivity"
/>
<activity
android:name=
".ui.similar.SimilarPhotosActivity"
android:exported=
"false"
android:screenOrientation=
"portrait"
tools:ignore=
"DiscouragedApi,LockedOrientationActivity"
/>
<provider
<provider
android:name=
"androidx.core.content.FileProvider"
android:name=
"androidx.core.content.FileProvider"
...
...
app/src/main/assets/similar_photos/scan/data.json
0 → 100644
View file @
45e22624
{
"v"
:
"5.6.3"
,
"fr"
:
25
,
"ip"
:
0
,
"op"
:
36
,
"w"
:
870
,
"h"
:
870
,
"nm"
:
"1-扫描动画"
,
"ddd"
:
0
,
"assets"
:[{
"id"
:
"image_0"
,
"w"
:
120
,
"h"
:
120
,
"u"
:
"images/"
,
"p"
:
"img_0.png"
,
"e"
:
0
},{
"id"
:
"image_1"
,
"w"
:
198
,
"h"
:
198
,
"u"
:
"images/"
,
"p"
:
"img_1.png"
,
"e"
:
0
},{
"id"
:
"image_2"
,
"w"
:
678
,
"h"
:
678
,
"u"
:
"images/"
,
"p"
:
"img_2.png"
,
"e"
:
0
},{
"id"
:
"image_3"
,
"w"
:
678
,
"h"
:
678
,
"u"
:
"images/"
,
"p"
:
"img_3.png"
,
"e"
:
0
}],
"layers"
:[{
"ddd"
:
0
,
"ind"
:
1
,
"ty"
:
4
,
"nm"
:
"小飞圆"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:[
0.833
],
"y"
:[
0.833
]},
"o"
:{
"x"
:[
0.167
],
"y"
:[
0.167
]},
"t"
:
20
,
"s"
:[
60
],
"e"
:[
0
]},{
"t"
:
40
}],
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:
0.833
,
"y"
:
0.833
},
"o"
:{
"x"
:
0.167
,
"y"
:
0.167
},
"t"
:
20
,
"s"
:[
141
,
893
,
0
],
"e"
:[
437
,
429
,
0
],
"to"
:[
0
,
0
,
0
],
"ti"
:[
0
,
0
,
0
]},{
"t"
:
35
}],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"shapes"
:[{
"ty"
:
"gr"
,
"it"
:[{
"d"
:
1
,
"ty"
:
"el"
,
"s"
:{
"a"
:
0
,
"k"
:[
16
,
16
],
"ix"
:
2
},
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
3
},
"nm"
:
"椭圆路径 1"
,
"mn"
:
"ADBE Vector Shape - Ellipse"
,
"hd"
:
false
},{
"ty"
:
"fl"
,
"c"
:{
"a"
:
0
,
"k"
:[
1
,
1
,
1
,
1
],
"ix"
:
4
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
5
},
"r"
:
1
,
"bm"
:
0
,
"nm"
:
"填充 1"
,
"mn"
:
"ADBE Vector Graphic - Fill"
,
"hd"
:
false
},{
"ty"
:
"tr"
,
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
300
,
300
],
"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"
:
"小飞圆"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
1
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
}],
"ip"
:
0
,
"op"
:
75
,
"st"
:
0
,
"bm"
:
0
},{
"ddd"
:
0
,
"ind"
:
2
,
"ty"
:
4
,
"nm"
:
"小飞圆"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:[
0.8
],
"y"
:[
1
]},
"o"
:{
"x"
:[
0.2
],
"y"
:[
0
]},
"t"
:
5
,
"s"
:[
60
],
"e"
:[
0
]},{
"t"
:
25
}],
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:
0.8
,
"y"
:
1
},
"o"
:{
"x"
:
0.2
,
"y"
:
0
},
"t"
:
5
,
"s"
:[
892
,
226
,
0
],
"e"
:[
462
,
460
,
0
],
"to"
:[
0
,
0
,
0
],
"ti"
:[
0
,
0
,
0
]},{
"t"
:
20
}],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"shapes"
:[{
"ty"
:
"gr"
,
"it"
:[{
"d"
:
1
,
"ty"
:
"el"
,
"s"
:{
"a"
:
0
,
"k"
:[
16
,
16
],
"ix"
:
2
},
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
3
},
"nm"
:
"椭圆路径 1"
,
"mn"
:
"ADBE Vector Shape - Ellipse"
,
"hd"
:
false
},{
"ty"
:
"fl"
,
"c"
:{
"a"
:
0
,
"k"
:[
1
,
1
,
1
,
1
],
"ix"
:
4
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
5
},
"r"
:
1
,
"bm"
:
0
,
"nm"
:
"填充 1"
,
"mn"
:
"ADBE Vector Graphic - Fill"
,
"hd"
:
false
},{
"ty"
:
"tr"
,
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
300
,
300
],
"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"
:
"小飞圆"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
1
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
}],
"ip"
:
0
,
"op"
:
75
,
"st"
:
0
,
"bm"
:
0
},{
"ddd"
:
0
,
"ind"
:
3
,
"ty"
:
4
,
"nm"
:
"小飞圆"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:[
0.8
],
"y"
:[
1
]},
"o"
:{
"x"
:[
0.2
],
"y"
:[
0
]},
"t"
:
5
,
"s"
:[
60
],
"e"
:[
0
]},{
"t"
:
25
}],
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:
0.8
,
"y"
:
1
},
"o"
:{
"x"
:
0.2
,
"y"
:
0
},
"t"
:
5
,
"s"
:[
-81
,
761
,
0
],
"e"
:[
431
,
435
,
0
],
"to"
:[
0
,
0
,
0
],
"ti"
:[
0
,
0
,
0
]},{
"t"
:
30
}],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"shapes"
:[{
"ty"
:
"gr"
,
"it"
:[{
"d"
:
1
,
"ty"
:
"el"
,
"s"
:{
"a"
:
0
,
"k"
:[
22
,
22
],
"ix"
:
2
},
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
3
},
"nm"
:
"椭圆路径 1"
,
"mn"
:
"ADBE Vector Shape - Ellipse"
,
"hd"
:
false
},{
"ty"
:
"fl"
,
"c"
:{
"a"
:
0
,
"k"
:[
1
,
1
,
1
,
1
],
"ix"
:
4
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
5
},
"r"
:
1
,
"bm"
:
0
,
"nm"
:
"填充 1"
,
"mn"
:
"ADBE Vector Graphic - Fill"
,
"hd"
:
false
},{
"ty"
:
"tr"
,
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
300
,
300
],
"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"
:
"小飞圆"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
1
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
}],
"ip"
:
0
,
"op"
:
75
,
"st"
:
0
,
"bm"
:
0
},{
"ddd"
:
0
,
"ind"
:
4
,
"ty"
:
4
,
"nm"
:
"小飞圆"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:[
0.8
],
"y"
:[
1
]},
"o"
:{
"x"
:[
0.2
],
"y"
:[
0
]},
"t"
:
10
,
"s"
:[
60
],
"e"
:[
0
]},{
"t"
:
30
}],
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:
0.8
,
"y"
:
1
},
"o"
:{
"x"
:
0.2
,
"y"
:
0
},
"t"
:
10
,
"s"
:[
574
,
-48
,
0
],
"e"
:[
434
,
408
,
0
],
"to"
:[
0
,
0
,
0
],
"ti"
:[
0
,
0
,
0
]},{
"t"
:
30
}],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"shapes"
:[{
"ty"
:
"gr"
,
"it"
:[{
"d"
:
1
,
"ty"
:
"el"
,
"s"
:{
"a"
:
0
,
"k"
:[
20
,
20
],
"ix"
:
2
},
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
3
},
"nm"
:
"椭圆路径 1"
,
"mn"
:
"ADBE Vector Shape - Ellipse"
,
"hd"
:
false
},{
"ty"
:
"fl"
,
"c"
:{
"a"
:
0
,
"k"
:[
1
,
1
,
1
,
1
],
"ix"
:
4
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
5
},
"r"
:
1
,
"bm"
:
0
,
"nm"
:
"填充 1"
,
"mn"
:
"ADBE Vector Graphic - Fill"
,
"hd"
:
false
},{
"ty"
:
"tr"
,
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
300
,
300
],
"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"
:
"小飞圆"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
1
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
}],
"ip"
:
0
,
"op"
:
75
,
"st"
:
0
,
"bm"
:
0
},{
"ddd"
:
0
,
"ind"
:
5
,
"ty"
:
4
,
"nm"
:
"小飞圆"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:[
0.8
],
"y"
:[
1
]},
"o"
:{
"x"
:[
0.2
],
"y"
:[
0
]},
"t"
:
0
,
"s"
:[
60
],
"e"
:[
0
]},{
"t"
:
20
}],
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:
0.8
,
"y"
:
1
},
"o"
:{
"x"
:
0.2
,
"y"
:
0
},
"t"
:
0
,
"s"
:[
-48
,
-40
,
0
],
"e"
:[
444
,
444
,
0
],
"to"
:[
0
,
0
,
0
],
"ti"
:[
0
,
0
,
0
]},{
"t"
:
18
}],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"shapes"
:[{
"ty"
:
"gr"
,
"it"
:[{
"d"
:
1
,
"ty"
:
"el"
,
"s"
:{
"a"
:
0
,
"k"
:[
36
,
36
],
"ix"
:
2
},
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
3
},
"nm"
:
"椭圆路径 1"
,
"mn"
:
"ADBE Vector Shape - Ellipse"
,
"hd"
:
false
},{
"ty"
:
"fl"
,
"c"
:{
"a"
:
0
,
"k"
:[
1
,
1
,
1
,
1
],
"ix"
:
4
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
5
},
"r"
:
1
,
"bm"
:
0
,
"nm"
:
"填充 1"
,
"mn"
:
"ADBE Vector Graphic - Fill"
,
"hd"
:
false
},{
"ty"
:
"tr"
,
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
300
,
300
],
"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"
:
"小飞圆"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
1
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
}],
"ip"
:
0
,
"op"
:
75
,
"st"
:
0
,
"bm"
:
0
},{
"ddd"
:
0
,
"ind"
:
6
,
"ty"
:
4
,
"nm"
:
"小飞圆"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:[
0.833
],
"y"
:[
0.833
]},
"o"
:{
"x"
:[
0.2
],
"y"
:[
0
]},
"t"
:
16
,
"s"
:[
60
],
"e"
:[
0
]},{
"t"
:
36
}],
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
1
,
"k"
:[{
"i"
:{
"x"
:
0.8
,
"y"
:
1
},
"o"
:{
"x"
:
0.2
,
"y"
:
0
},
"t"
:
16
,
"s"
:[
1018
,
824
,
0
],
"e"
:[
446
,
462
,
0
],
"to"
:[
0
,
0
,
0
],
"ti"
:[
0
,
0
,
0
]},{
"t"
:
31
}],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"shapes"
:[{
"ty"
:
"gr"
,
"it"
:[{
"d"
:
1
,
"ty"
:
"el"
,
"s"
:{
"a"
:
0
,
"k"
:[
26
,
26
],
"ix"
:
2
},
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
3
},
"nm"
:
"椭圆路径 1"
,
"mn"
:
"ADBE Vector Shape - Ellipse"
,
"hd"
:
false
},{
"ty"
:
"fl"
,
"c"
:{
"a"
:
0
,
"k"
:[
1
,
1
,
1
,
1
],
"ix"
:
4
},
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
5
},
"r"
:
1
,
"bm"
:
0
,
"nm"
:
"填充 1"
,
"mn"
:
"ADBE Vector Graphic - Fill"
,
"hd"
:
false
},{
"ty"
:
"tr"
,
"p"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
0
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
300
,
300
],
"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"
:
"小飞圆"
,
"np"
:
2
,
"cix"
:
2
,
"bm"
:
0
,
"ix"
:
1
,
"mn"
:
"ADBE Vector Group"
,
"hd"
:
false
}],
"ip"
:
0
,
"op"
:
75
,
"st"
:
0
,
"bm"
:
0
},{
"ddd"
:
0
,
"ind"
:
7
,
"ty"
:
2
,
"nm"
:
"icon_clean_home"
,
"refId"
:
"image_0"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
0
,
"k"
:[
435
,
435
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
60
,
60
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"ip"
:
0
,
"op"
:
75
,
"st"
:
0
,
"bm"
:
0
},{
"ddd"
:
0
,
"ind"
:
8
,
"ty"
:
2
,
"nm"
:
"小圆"
,
"refId"
:
"image_1"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
0
,
"k"
:[
435
,
435
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
99
,
99
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"ip"
:
0
,
"op"
:
75
,
"st"
:
0
,
"bm"
:
0
},{
"ddd"
:
0
,
"ind"
:
9
,
"ty"
:
2
,
"nm"
:
"转圈园"
,
"refId"
:
"image_2"
,
"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"
:
35
}],
"ix"
:
10
},
"p"
:{
"a"
:
0
,
"k"
:[
435
,
435
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
339
,
339
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"ip"
:
0
,
"op"
:
75
,
"st"
:
0
,
"bm"
:
0
},{
"ddd"
:
0
,
"ind"
:
10
,
"ty"
:
2
,
"nm"
:
"背景圆"
,
"refId"
:
"image_3"
,
"sr"
:
1
,
"ks"
:{
"o"
:{
"a"
:
0
,
"k"
:
100
,
"ix"
:
11
},
"r"
:{
"a"
:
0
,
"k"
:
0
,
"ix"
:
10
},
"p"
:{
"a"
:
0
,
"k"
:[
435
,
435
,
0
],
"ix"
:
2
},
"a"
:{
"a"
:
0
,
"k"
:[
339
,
339
,
0
],
"ix"
:
1
},
"s"
:{
"a"
:
0
,
"k"
:[
100
,
100
,
100
],
"ix"
:
6
}},
"ao"
:
0
,
"ip"
:
0
,
"op"
:
75
,
"st"
:
0
,
"bm"
:
0
}],
"markers"
:[]}
\ No newline at end of file
app/src/main/assets/similar_photos/scan/images/img_0.png
0 → 100644
View file @
45e22624
5.64 KB
app/src/main/assets/similar_photos/scan/images/img_1.png
0 → 100644
View file @
45e22624
2.75 KB
app/src/main/assets/similar_photos/scan/images/img_2.png
0 → 100644
View file @
45e22624
84 KB
app/src/main/assets/similar_photos/scan/images/img_3.png
0 → 100644
View file @
45e22624
39 KB
app/src/main/java/com/base/appzxhy/base/BaseActivity.kt
View file @
45e22624
...
@@ -33,6 +33,7 @@ import com.base.appzxhy.bean.FeatureBean.Companion.BATTERY_INFO
...
@@ -33,6 +33,7 @@ import com.base.appzxhy.bean.FeatureBean.Companion.BATTERY_INFO
import
com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import
com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import
com.base.appzxhy.bean.FeatureBean.Companion.LARGE_FILE_CLEAN
import
com.base.appzxhy.bean.FeatureBean.Companion.LARGE_FILE_CLEAN
import
com.base.appzxhy.bean.FeatureBean.Companion.SCREENSHOT_CLEAN
import
com.base.appzxhy.bean.FeatureBean.Companion.SCREENSHOT_CLEAN
import
com.base.appzxhy.bean.FeatureBean.Companion.SIMILAR_PHOTOS
import
com.base.appzxhy.bean.FileBean
import
com.base.appzxhy.bean.FileBean
import
com.base.appzxhy.business.ads.AdsMgr
import
com.base.appzxhy.business.ads.AdsMgr
import
com.base.appzxhy.business.ads.AdsShowCallBack
import
com.base.appzxhy.business.ads.AdsShowCallBack
...
@@ -43,6 +44,7 @@ import com.base.appzxhy.ui.clean.JunkCleanActivity
...
@@ -43,6 +44,7 @@ import com.base.appzxhy.ui.clean.JunkCleanActivity
import
com.base.appzxhy.ui.largefile.LargeFileCleanActivity
import
com.base.appzxhy.ui.largefile.LargeFileCleanActivity
import
com.base.appzxhy.ui.main.MainActivity
import
com.base.appzxhy.ui.main.MainActivity
import
com.base.appzxhy.ui.screenshot.ScreenshotCleanActivity
import
com.base.appzxhy.ui.screenshot.ScreenshotCleanActivity
import
com.base.appzxhy.ui.similar.SimilarPhotosActivity
import
com.base.appzxhy.utils.ActivityLauncher
import
com.base.appzxhy.utils.ActivityLauncher
import
com.base.appzxhy.utils.ActivityManagerUtils
import
com.base.appzxhy.utils.ActivityManagerUtils
import
com.base.appzxhy.utils.FileUtils
import
com.base.appzxhy.utils.FileUtils
...
@@ -279,7 +281,7 @@ abstract class BaseActivity<VB : ViewBinding>(
...
@@ -279,7 +281,7 @@ abstract class BaseActivity<VB : ViewBinding>(
@SuppressLint
(
"SetTextI18n"
)
@SuppressLint
(
"SetTextI18n"
)
open
fun
showAdAnimation
(
open
fun
showAdAnimation
(
lottieConfig
:
Lottie
Config
,
lottieConfig
:
Lottie
Enum
,
finish
:
(()
->
Unit
)?
=
null
finish
:
(()
->
Unit
)?
=
null
)
{
)
{
...
@@ -310,7 +312,7 @@ abstract class BaseActivity<VB : ViewBinding>(
...
@@ -310,7 +312,7 @@ abstract class BaseActivity<VB : ViewBinding>(
when
(
lottieConfig
)
{
when
(
lottieConfig
)
{
Lottie
Config
.
CLEAN_LOTTIE
->
{
Lottie
Enum
.
CLEAN_LOTTIE
->
{
lottie
?.
addAnimatorUpdateListener
{
animation
->
lottie
?.
addAnimatorUpdateListener
{
animation
->
val
value
=
animation
.
animatedValue
as
Float
*
100
val
value
=
animation
.
animatedValue
as
Float
*
100
tvProgress
?.
text
=
"${value.toInt()}%"
tvProgress
?.
text
=
"${value.toInt()}%"
...
@@ -377,18 +379,23 @@ fun Activity.jumpAction(key: String) {
...
@@ -377,18 +379,23 @@ fun Activity.jumpAction(key: String) {
goToAc
(
ScreenshotCleanActivity
::
class
.
java
)
goToAc
(
ScreenshotCleanActivity
::
class
.
java
)
}
}
SIMILAR_PHOTOS
->
{
goToAc
(
SimilarPhotosActivity
::
class
.
java
)
}
}
}
}
}
enum
class
Lottie
Config
(
val
data
:
String
,
val
images
:
String
?
=
null
,
val
isLoop
:
Boolean
=
true
)
{
enum
class
Lottie
Enum
(
val
data
:
String
,
val
images
:
String
?
=
null
,
val
isLoop
:
Boolean
=
true
)
{
BATTERY_INFO_LOTTIE
(
"battery_info/scan/data.json"
,
"battery_info/scan/images"
,
true
),
BATTERY_INFO_LOTTIE
(
"battery_info/scan/data.json"
,
"battery_info/scan/images"
,
true
),
CLEAN_LOTTIE
(
"clean.json"
),
CLEAN_LOTTIE
(
"clean.json"
),
LARGE_FILE_LOTTIE
(
"large_files/scan/data.json"
,
"large_files/scan/images"
),
LARGE_FILE_LOTTIE
(
"large_files/scan/data.json"
,
"large_files/scan/images"
),
SCREENSHOT_LOTTIE
(
"screenshot/scan/data.json"
,
"screenshot/scan/images"
),
SCREENSHOT_LOTTIE
(
"screenshot/scan/data.json"
,
"screenshot/scan/images"
),
SIMILAR_PHOTOS_LOTTIE
(
"similar_photos/scan/data.json"
,
"similar_photos/scan/images"
),
// PHOTO_COMPRESSION_LOTTIE("photo_compression/scan/data.json", "photo_compression/scan/images"),
// PHOTO_COMPRESSION_LOTTIE("photo_compression/scan/data.json", "photo_compression/scan/images"),
// SIMILAR_PHOTOS("similar_photos/scan/data.json", "similar_photos/scan/images"),
// WHATSAPP("whatsapp/scan/data.json", "whatsapp/scan/images"),
// WHATSAPP("whatsapp/scan/data.json", "whatsapp/scan/images"),
// WEATHER(""),
// WEATHER(""),
// CONSTELLATION("")
// CONSTELLATION("")
...
...
app/src/main/java/com/base/appzxhy/bean/SimilarBean.kt
0 → 100644
View file @
45e22624
package
com.base.appzxhy.bean
data class
SimilarBean
(
val
url
:
String
,
val
hashCode
:
String
,
val
avgPixel
:
Int
,
var
size
:
Long
,
var
isSelect
:
Boolean
,
var
items
:
MutableList
<
SimilarBean
>
=
mutableListOf
()
)
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ui/batteryinfo/BatteryInfoActivity.kt
View file @
45e22624
...
@@ -5,7 +5,7 @@ import android.content.IntentFilter
...
@@ -5,7 +5,7 @@ import android.content.IntentFilter
import
androidx.recyclerview.widget.ConcatAdapter
import
androidx.recyclerview.widget.ConcatAdapter
import
com.base.appzxhy.R
import
com.base.appzxhy.R
import
com.base.appzxhy.base.BaseActivity
import
com.base.appzxhy.base.BaseActivity
import
com.base.appzxhy.base.Lottie
Config
import
com.base.appzxhy.base.Lottie
Enum
import
com.base.appzxhy.databinding.ActivityBatteryInfo2Binding
import
com.base.appzxhy.databinding.ActivityBatteryInfo2Binding
import
com.base.appzxhy.ui.adapter.AdAdapter
import
com.base.appzxhy.ui.adapter.AdAdapter
import
com.base.appzxhy.utils.Utils
import
com.base.appzxhy.utils.Utils
...
@@ -34,7 +34,7 @@ class BatteryInfoActivity : BaseActivity<ActivityBatteryInfo2Binding>(ActivityBa
...
@@ -34,7 +34,7 @@ class BatteryInfoActivity : BaseActivity<ActivityBatteryInfo2Binding>(ActivityBa
}
}
override
fun
initView
()
{
override
fun
initView
()
{
showAdAnimation
(
Lottie
Config
.
BATTERY_INFO_LOTTIE
)
{
showAdAnimation
(
Lottie
Enum
.
BATTERY_INFO_LOTTIE
)
{
adAdapter
.
submitList
(
listOf
(
""
))
adAdapter
.
submitList
(
listOf
(
""
))
}
}
batteryReceiver
=
BatteryReceiver
{
updateBatteryInfo
()
}
batteryReceiver
=
BatteryReceiver
{
updateBatteryInfo
()
}
...
...
app/src/main/java/com/base/appzxhy/ui/clean/JunkCleanActivity.kt
View file @
45e22624
...
@@ -12,8 +12,7 @@ import androidx.lifecycle.lifecycleScope
...
@@ -12,8 +12,7 @@ import androidx.lifecycle.lifecycleScope
import
androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.LinearLayoutManager
import
com.base.appzxhy.R
import
com.base.appzxhy.R
import
com.base.appzxhy.base.BaseActivity
import
com.base.appzxhy.base.BaseActivity
import
com.base.appzxhy.base.LottieConfig
import
com.base.appzxhy.base.LottieEnum
import
com.base.appzxhy.base.cleanFiles
import
com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import
com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import
com.base.appzxhy.bean.FileBean
import
com.base.appzxhy.bean.FileBean
import
com.base.appzxhy.business.ads.AdsMgr
import
com.base.appzxhy.business.ads.AdsMgr
...
@@ -170,7 +169,7 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
...
@@ -170,7 +169,7 @@ class JunkCleanActivity : BaseActivity<ActivityJunkCleanBinding>(ActivityJunkCle
if
(
isBackDisable
)
return
@setOnClickListener
if
(
isBackDisable
)
return
@setOnClickListener
if
(
total
>
0
)
{
if
(
total
>
0
)
{
showAdAnimation
(
Lottie
Config
.
CLEAN_LOTTIE
)
{
showAdAnimation
(
Lottie
Enum
.
CLEAN_LOTTIE
)
{
// cleanFiles(selectedFiles)
// cleanFiles(selectedFiles)
CleanResultActivity
.
functionKey
=
JUNK_CLEAN
CleanResultActivity
.
functionKey
=
JUNK_CLEAN
...
...
app/src/main/java/com/base/appzxhy/ui/largefile/LargeFileCleanActivity.kt
View file @
45e22624
...
@@ -15,7 +15,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
...
@@ -15,7 +15,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.RecyclerView
import
androidx.recyclerview.widget.RecyclerView
import
com.base.appzxhy.R
import
com.base.appzxhy.R
import
com.base.appzxhy.base.BaseActivity
import
com.base.appzxhy.base.BaseActivity
import
com.base.appzxhy.base.Lottie
Config
import
com.base.appzxhy.base.Lottie
Enum
import
com.base.appzxhy.base.cleanFiles
import
com.base.appzxhy.base.cleanFiles
import
com.base.appzxhy.bean.FeatureBean.Companion.LARGE_FILE_CLEAN
import
com.base.appzxhy.bean.FeatureBean.Companion.LARGE_FILE_CLEAN
import
com.base.appzxhy.bean.FileBean
import
com.base.appzxhy.bean.FileBean
...
@@ -337,7 +337,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
...
@@ -337,7 +337,7 @@ class LargeFileCleanActivity : BaseActivity<ActivityLargeFileCleanBinding>(Activ
binding
.
rvLargeFile
.
adapter
=
adapter
binding
.
rvLargeFile
.
adapter
=
adapter
binding
.
rvLargeFile
.
layoutManager
=
LinearLayoutManager
(
this
)
binding
.
rvLargeFile
.
layoutManager
=
LinearLayoutManager
(
this
)
initData
()
initData
()
showAdAnimation
(
Lottie
Config
.
LARGE_FILE_LOTTIE
)
{
showAdAnimation
(
Lottie
Enum
.
LARGE_FILE_LOTTIE
)
{
AdsMgr
.
showNative
(
binding
.
flAd
,
R
.
layout
.
layout_admob_native_custom
)
AdsMgr
.
showNative
(
binding
.
flAd
,
R
.
layout
.
layout_admob_native_custom
)
}
}
}
}
...
...
app/src/main/java/com/base/appzxhy/ui/screenshot/ScreenshotCleanActivity.kt
View file @
45e22624
...
@@ -7,12 +7,11 @@ import android.view.ViewGroup
...
@@ -7,12 +7,11 @@ import android.view.ViewGroup
import
android.widget.TextView
import
android.widget.TextView
import
androidx.core.view.ViewCompat
import
androidx.core.view.ViewCompat
import
androidx.core.view.WindowInsetsCompat
import
androidx.core.view.WindowInsetsCompat
import
androidx.core.view.setPadding
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.lifecycleScope
import
androidx.recyclerview.widget.GridLayoutManager
import
androidx.recyclerview.widget.GridLayoutManager
import
com.base.appzxhy.R
import
com.base.appzxhy.R
import
com.base.appzxhy.base.BaseActivity
import
com.base.appzxhy.base.BaseActivity
import
com.base.appzxhy.base.Lottie
Config
import
com.base.appzxhy.base.Lottie
Enum
import
com.base.appzxhy.base.cleanFiles
import
com.base.appzxhy.base.cleanFiles
import
com.base.appzxhy.bean.FeatureBean.Companion.SCREENSHOT_CLEAN
import
com.base.appzxhy.bean.FeatureBean.Companion.SCREENSHOT_CLEAN
import
com.base.appzxhy.bean.FileBean
import
com.base.appzxhy.bean.FileBean
...
@@ -157,7 +156,7 @@ class ScreenshotCleanActivity : BaseActivity<ActivityScreenshotCleanBinding>(Act
...
@@ -157,7 +156,7 @@ class ScreenshotCleanActivity : BaseActivity<ActivityScreenshotCleanBinding>(Act
binding
.
expandableFiles
.
layoutManager
=
gridLayoutManager
binding
.
expandableFiles
.
layoutManager
=
gridLayoutManager
initData
()
initData
()
showAdAnimation
(
Lottie
Config
.
SCREENSHOT_LOTTIE
)
{
showAdAnimation
(
Lottie
Enum
.
SCREENSHOT_LOTTIE
)
{
AdsMgr
.
showNative
(
binding
.
flAd
,
R
.
layout
.
layout_admob_native_custom
)
AdsMgr
.
showNative
(
binding
.
flAd
,
R
.
layout
.
layout_admob_native_custom
)
}
}
}
}
...
@@ -181,6 +180,7 @@ class ScreenshotCleanActivity : BaseActivity<ActivityScreenshotCleanBinding>(Act
...
@@ -181,6 +180,7 @@ class ScreenshotCleanActivity : BaseActivity<ActivityScreenshotCleanBinding>(Act
}
}
}
}
@SuppressLint
(
"NotifyDataSetChanged"
)
override
fun
initListener
()
{
override
fun
initListener
()
{
super
.
initListener
()
super
.
initListener
()
binding
.
ivBack
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
binding
.
ivBack
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
...
...
app/src/main/java/com/base/appzxhy/ui/similar/SimilarPhotosActivity.kt
0 → 100644
View file @
45e22624
This diff is collapsed.
Click to expand it.
app/src/main/java/com/base/appzxhy/ui/similar/SimilarUtils.kt
0 → 100644
View file @
45e22624
package
com.base.appzxhy.ui.similar
import
android.graphics.Bitmap
import
android.graphics.BitmapFactory
import
android.graphics.Color
import
android.media.ThumbnailUtils
import
com.base.appzxhy.bean.SimilarBean
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.withContext
import
java.io.File
import
kotlin.math.pow
object
SimilarUtils
{
private
fun
loadBitmapFromFile
(
path
:
String
):
Bitmap
?
{
val
bitmap
=
BitmapFactory
.
decodeFile
(
path
)
if
(
bitmap
.
width
<=
0
||
bitmap
.
height
<=
0
)
{
return
null
}
val
options
=
BitmapFactory
.
Options
()
options
.
inJustDecodeBounds
=
true
BitmapFactory
.
decodeFile
(
path
,
options
)
if
(
options
.
outHeight
==
-
1
||
options
.
outWidth
==
-
1
)
{
return
null
}
var
inSampleSize
=
(
0.5f
+
options
.
outHeight
.
toFloat
()
/
bitmap
.
height
.
toFloat
()).
coerceAtLeast
(
0.5f
+
options
.
outWidth
.
toFloat
()
/
bitmap
.
width
.
toFloat
())
.
toInt
()
inSampleSize
+=
1
options
.
inSampleSize
=
inSampleSize
.
coerceAtLeast
(
1
)
options
.
inJustDecodeBounds
=
false
return
BitmapFactory
.
decodeFile
(
path
,
options
)
}
suspend
fun
createImage
(
path
:
String
):
SimilarBean
?
{
return
withContext
(
Dispatchers
.
IO
)
{
try
{
val
width
=
8
val
height
=
8
val
source
=
loadBitmapFromFile
(
path
)
val
thumb
=
ThumbnailUtils
.
extractThumbnail
(
source
,
width
,
height
)
val
pixels
=
IntArray
(
width
*
height
)
for
(
i
in
0
until
width
)
{
for
(
j
in
0
until
height
)
{
pixels
[
i
*
height
+
j
]
=
rgbToGray
(
thumb
.
getPixel
(
i
,
j
))
}
}
val
avgPixel
=
average
(
pixels
)
val
comps
=
IntArray
(
width
*
height
)
for
(
i
in
comps
.
indices
)
{
if
(
pixels
[
i
]
>=
avgPixel
)
{
comps
[
i
]
=
1
}
else
{
comps
[
i
]
=
0
}
}
val
hashCode
=
StringBuffer
()
var
i
=
0
while
(
i
<
comps
.
size
)
{
val
result
=
comps
[
i
]
*
2.0
.
pow
(
3.0
).
toInt
()
+
(
comps
[
i
+
1
]
*
2.0
.
pow
(
2.0
)
.
toInt
())
+
(
comps
[
i
+
2
]
*
2.0
.
pow
(
1.0
).
toInt
())
+
comps
[
i
+
3
]
hashCode
.
append
(
binaryToHex
(
result
))
i
+=
4
}
recycleBitmap
(
thumb
)
recycleBitmap
(
source
)
return
@withContext
SimilarBean
(
path
,
hashCode
.
toString
(),
avgPixel
,
File
(
path
).
length
(),
false
)
}
catch
(
_
:
Exception
)
{
return
@withContext
null
}
}
}
private
fun
rgbToGray
(
pixels
:
Int
):
Int
{
val
red
=
Color
.
red
(
pixels
)
val
green
=
Color
.
green
(
pixels
)
val
blue
=
Color
.
blue
(
pixels
)
return
(
0.3
*
red
+
0.59
*
green
+
0.11
*
blue
).
toInt
()
}
private
fun
average
(
pixels
:
IntArray
):
Int
{
return
(
pixels
.
sumOf
{
it
}.
toFloat
()
/
pixels
.
size
).
toInt
()
}
private
fun
recycleBitmap
(
thumb
:
Bitmap
?)
{
if
(
thumb
?.
isRecycled
==
false
)
{
thumb
.
recycle
()
}
}
fun
similarCondition
(
first
:
SimilarBean
,
second
:
SimilarBean
):
Boolean
{
return
hammingDistance
(
first
.
hashCode
,
second
.
hashCode
)
<=
6
&&
(
first
.
avgPixel
.
toFloat
()
/
second
.
avgPixel
)
in
0.8
..
1.0
}
private
fun
hammingDistance
(
sourceHashCode
:
String
,
hashCode
:
String
):
Int
{
var
difference
=
0
for
(
i
in
sourceHashCode
.
indices
)
{
if
(
sourceHashCode
[
i
]
!=
hashCode
[
i
])
{
difference
++
}
}
return
difference
}
private
fun
binaryToHex
(
binary
:
Int
)
=
when
(
binary
)
{
0
->
'0'
1
->
'1'
2
->
'2'
3
->
'3'
4
->
'4'
5
->
'5'
6
->
'6'
7
->
'7'
8
->
'8'
9
->
'9'
10
->
'a'
11
->
'b'
12
->
'c'
13
->
'd'
14
->
'e'
15
->
'f'
else
->
' '
}
}
\ No newline at end of file
app/src/main/res/drawable-xxhdpi/icon.png
0 → 100644
View file @
45e22624
2.79 KB
app/src/main/res/drawable-xxhdpi/icon_n.png
0 → 100644
View file @
45e22624
2.7 KB
app/src/main/res/layout/activity_similar_photos.xml
0 → 100644
View file @
45e22624
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/color_f7fafa"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/cl_top"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@color/colorPrimary"
app:layout_constraintTop_toTopOf=
"parent"
>
<FrameLayout
android:id=
"@+id/ll_title"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
android:paddingVertical=
"6dp"
app:layout_constraintTop_toTopOf=
"parent"
>
<androidx.appcompat.widget.AppCompatImageView
android:id=
"@+id/ivBack"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"@dimen/dp_8"
android:padding=
"@dimen/dp_8"
android:src=
"@drawable/icon_return_w"
/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:text=
"@string/similar_photos"
android:textColor=
"@color/white"
android:textSize=
"20sp"
android:textStyle=
"bold"
/>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<com.base.appzxhy.business.ads.NativeParentView
android:id=
"@+id/flAd"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"12dp"
app:layout_constraintTop_toBottomOf=
"@id/cl_top"
>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:src=
"@drawable/zhanwei1"
tools:ignore=
"ContentDescription"
/>
</com.base.appzxhy.business.ads.NativeParentView>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/cl_select"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"10dp"
android:background=
"@color/white"
android:paddingVertical=
"13dp"
android:paddingStart=
"15dp"
android:paddingEnd=
"24dp"
app:layout_constraintTop_toBottomOf=
"@id/flAd"
>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/auto_select"
android:textColor=
"@color/black"
android:textSize=
"18sp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id=
"@+id/iv_select"
android:layout_width=
"@dimen/dp_50"
android:layout_height=
"@dimen/dp_20"
android:src=
"@drawable/icon_n"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_photo"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:scrollbars=
"none"
app:layout_constraintBottom_toTopOf=
"@id/ll_delete"
app:layout_constraintTop_toBottomOf=
"@id/cl_select"
/>
<androidx.appcompat.widget.LinearLayoutCompat
android:id=
"@+id/ll_delete"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@color/white"
android:paddingHorizontal=
"30dp"
android:paddingTop=
"20dp"
android:paddingBottom=
"55dp"
app:layout_constraintBottom_toBottomOf=
"parent"
>
<TextView
android:id=
"@+id/tv_delete"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/bg_enable_50"
android:gravity=
"center"
android:paddingVertical=
"12dp"
android:text=
"@string/delete"
android:textColor=
"@color/white"
android:textSize=
"18sp"
android:textStyle=
"bold"
/>
</androidx.appcompat.widget.LinearLayoutCompat>
<include
android:id=
"@+id/layout_animation"
layout=
"@layout/layout_animation"
android:visibility=
"gone"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/item_similar_photos.xml
0 → 100644
View file @
45e22624
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"8dp"
>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/tv_occupies"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"7dp"
android:text=
"@string/occupies"
android:textColor=
"@color/color_9b9595"
android:textSize=
"14sp"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id=
"@+id/tv_size"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"7dp"
android:text=
"0B"
android:textColor=
"@color/color_9b9595"
android:textSize=
"14sp"
app:layout_constraintStart_toEndOf=
"@id/tv_occupies"
app:layout_constraintTop_toTopOf=
"parent"
tools:ignore=
"HardcodedText"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/cl_large"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintTop_toBottomOf=
"@id/tv_occupies"
>
<androidx.appcompat.widget.AppCompatImageView
android:id=
"@+id/iv_first_photo"
android:layout_width=
"200dp"
android:layout_height=
"200dp"
android:layout_marginStart=
"15dp"
android:layout_marginTop=
"4dp"
android:src=
"@color/black"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id=
"@+id/iv_select"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"10dp"
android:layout_marginEnd=
"8dp"
android:src=
"@drawable/bg_select_yuan"
app:layout_constraintEnd_toEndOf=
"@id/iv_first_photo"
app:layout_constraintTop_toTopOf=
"@id/iv_first_photo"
/>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_large_photo"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"4dp"
android:layout_marginEnd=
"15dp"
android:nestedScrollingEnabled=
"false"
android:scrollbars=
"none"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/iv_first_photo"
app:layout_constraintTop_toTopOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv_photo"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:nestedScrollingEnabled=
"false"
android:paddingHorizontal=
"15dp"
android:paddingBottom=
"10dp"
android:scrollbars=
"none"
app:layout_constraintTop_toBottomOf=
"@id/cl_large"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/item_similar_photos_child.xml
0 → 100644
View file @
45e22624
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
>
<androidx.appcompat.widget.AppCompatImageView
android:id=
"@+id/iv_photo"
android:layout_width=
"80dp"
android:layout_height=
"73dp"
android:layout_marginTop=
"4dp"
android:src=
"@color/color_9b9595"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id=
"@+id/iv_select"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"10dp"
android:layout_marginEnd=
"8dp"
android:src=
"@drawable/bg_select_yuan"
app:layout_constraintEnd_toEndOf=
"@id/iv_photo"
app:layout_constraintTop_toTopOf=
"@id/iv_photo"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
45e22624
...
@@ -94,6 +94,8 @@ Please rest assured that we will handle your information in strict accordance wi
...
@@ -94,6 +94,8 @@ Please rest assured that we will handle your information in strict accordance wi
<string
name=
"delete_content"
>
Selected files cannot be recovered after deletion. Continue anyway?
</string>
<string
name=
"delete_content"
>
Selected files cannot be recovered after deletion. Continue anyway?
</string>
<string
name=
"screenshots_totally"
>
Screenshots totally
</string>
<string
name=
"screenshots_totally"
>
Screenshots totally
</string>
<string
name=
"select_all"
>
Select All
</string>
<string
name=
"select_all"
>
Select All
</string>
<string
name=
"auto_select"
>
Auto Select
</string>
<string
name=
"occupies"
>
Occupies
</string>
</resources>
</resources>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment