Skip to content

Commit f5f7b0f

Browse files
committed
Fix FileScanner and lists changes
+ Fix crash on Android 12+ caused by access denied that makes directory list null, eg. Android/data + FileScanner.addText can optionally return TextView + minor foundFiles changes that allows it to be cleared + Print app name and version on launch + Remove unnecessary codes on .....List.get.....listOn(SharedPreferences) function + Add "Set defaults" button on black/whitelist (basically adds default values without removing current entries) + Add more blacklist
1 parent 6cd1301 commit f5f7b0f

File tree

9 files changed

+183
-50
lines changed

9 files changed

+183
-50
lines changed

app/src/main/java/theredspy15/ltecleanerfoss/Constants.kt

Lines changed: 86 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,56 +24,126 @@ object Constants {
2424
"/storage/emulated/0/Android/data/.*/files/Unity/.*/Analytics",
2525
"/storage/emulated/0/Android/data/.*/files/UnityServicesCachedMetrics",
2626
"/storage/emulated/0/Android/data/.*/files/.*\\.pangled",
27+
"/storage/emulated/0/Android/data/.*/files/\\..*\\.vguard", // generated by apps that uses V-Key (root detection system)
2728
"/storage/emulated/0/Android/data/.*/files/.*mobvista",
2829
"/storage/emulated/0/Android/data/.*/files/.*splashad",
2930
"/storage/emulated/0/Android/data/.*/files/.*UnityAdsVideoCache",
31+
"/storage/emulated/0/Android/data/com\\.facebook\\.katana/files/fb_temp",
32+
"/storage/emulated/0/Android/data/com\\.facebook\\.katana/files/secure_shared",
3033
"/storage/emulated/0/Android/data/com\\.ss\\.android\\.ugc\\.trill/files/monitor_data_switch",
34+
"/storage/emulated/0/Android/\\..*\\.vguard", // generated by apps that uses V-Key (root detection system)
3135
"/storage/emulated/0/ApkEditor/tmp",
3236
"/storage/emulated/0/ColorOS",
33-
"/storage/emulated/0/com.UCMobile.intl/ulog/.*\\.ulog",
37+
"/storage/emulated/0/com\\.UCMobile\\.intl", // ulog/.*\\.ulog // generated by UC Browser
3438
"/storage/emulated/0/DCIM/Camera/\\.escheck\\.tmp", // generated by ES File Explorer (for anyone that still using it, please stop using it)
35-
"/storage/emulated/0/DCIM/Camera/thumbnails", // seen on LOS
39+
"/storage/emulated/0/DCIM/Camera/thumbnails", // seen on LineageOS, or probably generated by other app, idk
3640
"/storage/emulated/0/Download/AppMonitorSDKLogs", // can be seen on ColorOS
3741
"/storage/emulated/0/Download/MGC_CRASH_LOG", // generated by Google Camera app
3842
"/storage/emulated/0/Download/UCDownloads", // generated by UC Browser
39-
"/storage/emulated/0/MIUI/debug_log", //powerinfo/result_reason
43+
"/storage/emulated/0/MIUI/debug_log", // powerinfo/result_reason
4044
"/storage/emulated/0/MIUI/BugReportCache",
4145
"/storage/emulated/0/supercache",
42-
"/storage/emulated/0/Tencent", //XG/Logs/YYYYMMDD/N\.1\.app\.log // apparently was used for freefire push notification svc logs??
43-
"/storage/emulated/0/UCShare",
46+
"/storage/emulated/0/Tencent", // XG/Logs/YYYYMMDD/N\.1\.app\.log // apparently was used for freefire push notification svc logs??
47+
"/storage/emulated/0/UCShare", // .ucThumb/videoThumb_-... // generated by UC Browser
4448
"/storage/emulated/0/UnityAdsVideoCache",
45-
"/storage/emulated/0/\\.DataStorage/ContextData\\.xml", // generated by ES File Explorer?
46-
"/storage/emulated/0/\\.UTSystemConfig", //Global/Alvin2.xml
4749
"/storage/emulated/0/\\.chartboost", // most modern apps that displays ads (even Chartboost) should never put ads folder in sdcard anymore, but just in case
50+
"/storage/emulated/0/\\.DataStorage", // ContextData\\.xml // generated by UC Browser (but also ES File Explorer?)
51+
"/storage/emulated/0/\\.dev", // can be seen on ColorOS
4852
"/storage/emulated/0/\\.estrongs", // generated by ES File Explorer
53+
"/storage/emulated/0/\\.ext4", // can be seen on ColorOS
54+
"/storage/emulated/0/\\.sstmp", // can be seen on ColorOS
4955
"/storage/emulated/0/\\.userReturn", // es file explorer stuff?
56+
"/storage/emulated/0/\\.Uc2DataStorage", // Uc2ContextData.xml // generated by UC Browser
57+
"/storage/emulated/0/\\.UTSystemConfig", // Global/Alvin2.xml // generated by UC Browser
58+
"/storage/emulated/0/\\.Uc2UTSystemConfig", // Global/Uc2Alvin2.xml // generated by UC Browser
5059
"/storage/emulated/0/crash\\.txt$", // Usually generated by GameGuardian
5160
"/storage/emulated/0/logcat\\.txt$", // Usually generated by GameGuardian
61+
"/storage/emulated/0/gltools_crashlog\\.txt$", // generated by GLTools
5262
"/storage/emulated/0/.*Analytics",
5363
"/storage/emulated/0/.*Cache",
5464
"/storage/emulated/0/.*cache",
55-
"/storage/emulated/0/.*\\.exo",
56-
"/storage/emulated/0/.*\\.thumb[0-9]",
57-
"/storage/emulated/0/.*\\.thumbnails\\?",
58-
"/storage/emulated/0/.*thumbs?\\.db",
65+
"/storage/emulated/0/.*/\\.DS_Store$",
66+
"/storage/emulated/0/.*/\\.nomedia$",
5967
"/storage/emulated/0/.*/\\.spotlight-V100",
60-
"/storage/emulated/0/.*/\\.DS_Store",
6168
"/storage/emulated/0/.*/\\.Trash",
69+
"/storage/emulated/0/.*\\.exo$",
70+
"/storage/emulated/0/.*\\.thumb[0-9]",
71+
"/storage/emulated/0/.*\\.thumbnails\\?$",
72+
"/storage/emulated/0/.*thumbs?\\.db",
6273
"/storage/emulated/0/.*/bugreports",
6374
"/storage/emulated/0/.*/Bugreport",
6475
"/storage/emulated/0/.*/desktop\\.ini$",
6576
"/storage/emulated/0/.*/fseventd",
6677
"/storage/emulated/0/.*/leakcanary",
67-
"/storage/emulated/0/.*/LOST\\.DIR"
78+
"/storage/emulated/0/.*/LOST\\.DIR$"
6879
)
6980
val blacklistOnDefault: Set<String> = setOf(
70-
".*\\.log",
71-
".*\\.tmp",
81+
".*\\.log$",
82+
".*\\.tmp$",
7283
".*/log",
7384
".*/Logs",
85+
".*/logs",
86+
//"/storage/emulated/0/.*albumthumbs\\?",
87+
"/storage/emulated/0/Android/data/.*/fastbot", // Seemingly generated by apps that uses some kind of Bytedance components? (or perhaps TikTok analytics or Pangle?)
88+
"/storage/emulated/0/Android/data/.*/files/tombstone_.*",
89+
//"/storage/emulated/0/Android/data/.*/files/al",
90+
"/storage/emulated/0/Android/data/.*/files/il2cpp", // generated by Unity games, i hope this wont slow down loading
91+
"/storage/emulated/0/Android/data/.*/files/supersonicads",
92+
"/storage/emulated/0/Android/data/.*/files/Unity/.*/Analytics",
93+
"/storage/emulated/0/Android/data/.*/files/UnityServicesCachedMetrics",
94+
"/storage/emulated/0/Android/data/.*/files/.*\\.pangled",
95+
"/storage/emulated/0/Android/data/.*/files/\\..*\\.vguard", // generated by apps that uses V-Key (root detection system)
96+
"/storage/emulated/0/Android/data/.*/files/.*mobvista",
97+
"/storage/emulated/0/Android/data/.*/files/.*splashad",
98+
"/storage/emulated/0/Android/data/.*/files/.*UnityAdsVideoCache",
99+
"/storage/emulated/0/Android/data/com\\.facebook\\.katana/files/fb_temp",
100+
"/storage/emulated/0/Android/data/com\\.facebook\\.katana/files/secure_shared",
101+
"/storage/emulated/0/Android/data/com\\.ss\\.android\\.ugc\\.trill/files/monitor_data_switch",
102+
"/storage/emulated/0/Android/\\..*\\.vguard", // generated by apps that uses V-Key (root detection system)
103+
"/storage/emulated/0/ApkEditor/tmp",
104+
"/storage/emulated/0/ColorOS",
105+
"/storage/emulated/0/com\\.UCMobile\\.intl", // ulog/.*\\.ulog // generated by UC Browser
106+
"/storage/emulated/0/DCIM/Camera/\\.escheck\\.tmp", // generated by ES File Explorer (for anyone that still using it, please stop using it)
107+
"/storage/emulated/0/DCIM/Camera/thumbnails", // seen on LineageOS, or probably generated by other app, idk
108+
"/storage/emulated/0/Download/AppMonitorSDKLogs", // can be seen on ColorOS
109+
"/storage/emulated/0/Download/MGC_CRASH_LOG", // generated by Google Camera app?
110+
"/storage/emulated/0/Download/UCDownloads", // generated by UC Browser
111+
"/storage/emulated/0/MIUI/debug_log", // powerinfo/result_reason
112+
"/storage/emulated/0/MIUI/BugReportCache",
113+
//"/storage/emulated/0/supercache",
114+
//"/storage/emulated/0/Tencent", // XG/Logs/YYYYMMDD/N\.1\.app\.log // apparently was used for freefire push notification svc logs??
115+
"/storage/emulated/0/UCShare", // .ucThumb/videoThumb_-... // generated by UC Browser
116+
//"/storage/emulated/0/UnityAdsVideoCache",
117+
//"/storage/emulated/0/\\.chartboost", // most modern apps that displays ads (even Chartboost) should never put ads folder in sdcard anymore, but just in case
118+
"/storage/emulated/0/\\.DataStorage", // ContextData\\.xml // generated by UC Browser (but also ES File Explorer?)
119+
"/storage/emulated/0/\\.dev", // can be seen on ColorOS
120+
//"/storage/emulated/0/\\.estrongs", // generated by ES File Explorer
121+
"/storage/emulated/0/\\.ext4", // can be seen on ColorOS
122+
"/storage/emulated/0/\\.sstmp", // can be seen on ColorOS
123+
//"/storage/emulated/0/\\.userReturn", // es file explorer stuff?
124+
"/storage/emulated/0/\\.Uc2DataStorage", // Uc2ContextData.xml // generated by UC Browser
125+
"/storage/emulated/0/\\.UTSystemConfig", // Global/Alvin2.xml // generated by UC Browser
126+
"/storage/emulated/0/\\.Uc2UTSystemConfig", // Global/Uc2Alvin2.xml // generated by UC Browser
127+
//"/storage/emulated/0/crash\\.txt$", // Usually generated by GameGuardian
128+
//"/storage/emulated/0/logcat\\.txt$", // Usually generated by GameGuardian
129+
"/storage/emulated/0/gltools_crashlog\\.txt$", // generated by GLTools
74130
"/storage/emulated/0/.*Analytics",
75131
"/storage/emulated/0/.*Cache",
76-
"/storage/emulated/0/.*cache"
132+
"/storage/emulated/0/.*cache",
133+
//"/storage/emulated/0/.*/\\.DS_Store$",
134+
"/storage/emulated/0/.*/\\.nomedia$",
135+
//"/storage/emulated/0/.*/\\.spotlight-V100",
136+
//"/storage/emulated/0/.*/\\.Trash",
137+
//"/storage/emulated/0/.*\\.exo$",
138+
//"/storage/emulated/0/.*\\.thumb[0-9]",
139+
//"/storage/emulated/0/.*\\.thumbnails\\?$",
140+
//"/storage/emulated/0/.*thumbs?\\.db",
141+
//"/storage/emulated/0/.*/bugreports",
142+
//"/storage/emulated/0/.*/Bugreport",
143+
//"/storage/emulated/0/.*/desktop\\.ini$",
144+
//"/storage/emulated/0/.*/fseventd",
145+
//"/storage/emulated/0/.*/leakcanary",
146+
//"/storage/emulated/0/.*/LOST\\.DIR$"
77147
)
78148
val whitelistDefault: Set<String> = emptySet()
79149
val whitelistOnDefault: Set<String> = emptySet()

app/src/main/java/theredspy15/ltecleanerfoss/FileScanner.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,11 @@ class FileScanner(private val path: File, context: Context){
3131
var autoWhite = prefs.getBoolean("auto_white", true)
3232
var corpse = prefs.getBoolean("corpse", false)
3333
var updateProgress: ((context: Context, percent: Double) -> Unit)? = null
34-
var addText: ((context: Context, path: String, type: Int) -> TextView)? = null
34+
var addText: ((context: Context, path: String, type: Int) -> TextView?)? = null
3535
private var installedPackages = getInstalledPackages()
3636
private var guiScanProgressMax = 0
3737
private var guiScanProgressProgress = 0
38+
private var foundFiles: ArrayList<File>? = null
3839

3940
/**
4041
* Used to generate a list of all files on device
@@ -157,11 +158,11 @@ class FileScanner(private val path: File, context: Context){
157158
private fun isDirectoryEmpty(directory: File): Boolean {
158159
// Not folder
159160
if (!directory.isDirectory) return false
160-
// Empty folder
161+
// Empty folder // Folders with another folder and empty file
161162
val list = directory.list()
162-
return list!!.isNullOrEmpty()
163-
// Empty folder / Folders with another folder and empty file
164-
// return list!!.isNullOrEmpty() || list!!.all { child ->
163+
// access denied folder (eg. Android/data)
164+
if (list == null) return false
165+
return list!!.isNullOrEmpty() // || list!!.all { child ->
165166
// // Another folder
166167
// if (child.isDirectory) isDirectoryEmpty(child)
167168
// // Empty file
@@ -202,7 +203,6 @@ class FileScanner(private val path: File, context: Context){
202203
isRunning = true
203204
var cycles: Byte = 0
204205
var maxCycles: Byte = if (delete) prefs.getInt("multirun",1).toByte() else 1
205-
var foundFiles: ArrayList<File>
206206

207207
// removes the need to 'clean' multiple times to get everything
208208
while (cycles < maxCycles) {
@@ -211,14 +211,13 @@ class FileScanner(private val path: File, context: Context){
211211
addText?.invoke(context,"Running Cycle " + cycles + "/" + maxCycles,0);
212212

213213
// find/scan files
214-
foundFiles = getListFiles(path)
215-
guiScanProgressMax = guiScanProgressMax + foundFiles.size
214+
if (foundFiles == null) foundFiles = getListFiles(path)
215+
guiScanProgressMax = guiScanProgressMax + foundFiles!!.size
216216

217217
// filter & delete
218-
for (file in foundFiles){
218+
for (file in foundFiles!!){
219219
if (filter(file)){ // filter
220-
var tv: TextView? = null
221-
tv = addText?.invoke(context,file.absolutePath,1)
220+
var tv: TextView? = addText?.invoke(context,file.absolutePath,1)
222221
kilobytesTotal += file.length()
223222
if (delete){
224223
++filesRemoved
@@ -234,6 +233,7 @@ class FileScanner(private val path: File, context: Context){
234233
guiScanProgressProgress = guiScanProgressProgress + 1
235234
updateProgress!!.invoke(context,guiScanProgressProgress * 100.0 / guiScanProgressMax);
236235
}
236+
foundFiles = null
237237
if (filesRemoved == 0) break
238238
filesRemoved = 0
239239
++cycles

app/src/main/java/theredspy15/ltecleanerfoss/fragment/BlacklistFragment.kt

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,24 @@ class BlacklistFragment: BaseFragment(){
3737
binding.addBtn.setOnClickListener {
3838
editPath(null)
3939
}
40+
binding.resetBtn.setOnClickListener {
41+
getBlackList(App.prefs)
42+
getBlacklistOn(App.prefs)
43+
for (i in blacklistDefault){
44+
if (!blackList.contains(i))
45+
blackList.add(i)
46+
}
47+
for (i in blacklistOnDefault){
48+
if (!blackListOn.contains(i))
49+
blackListOn.add(i)
50+
}
51+
App.prefs!!
52+
.edit()
53+
.putStringSet("blacklist", HashSet(blackList))
54+
.putStringSet("blacklistOn", HashSet(blackListOn))
55+
.apply()
56+
loadViews()
57+
}
4058
getBlackList(App.prefs)
4159
getBlacklistOn(App.prefs)
4260
loadViews()
@@ -166,11 +184,7 @@ class BlacklistFragment: BaseFragment(){
166184
}
167185
fun getBlacklistOn(prefs: SharedPreferences?): List<String?> {
168186
if (blackListOn.isNullOrEmpty() && prefs != null) {
169-
val blackListOnSet = prefs.getStringSet("blacklistOn",blacklistOnDefault)
170-
blackListOn = ArrayList(blackListOnSet)
171-
for (path in blackListOnSet.orEmpty()) {
172-
blackListOn.add(path)
173-
}
187+
blackListOn = ArrayList(prefs.getStringSet("blacklistOn",blacklistOnDefault))
174188
}
175189
return blackListOn
176190
}

app/src/main/java/theredspy15/ltecleanerfoss/fragment/MainFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ class MainFragment: BaseFragment(){
5959
settingsBtn.setOnClickListener { (requireActivity() as MainActivity).startFragment(SettingsFragment()) }
6060
whitelistBtn.setOnClickListener { (requireActivity() as MainActivity).startFragment(WhitelistFragment()) }
6161
}
62+
addText(String.format(
63+
"%s v%s",
64+
getString(R.string.app_name),
65+
requireContext().packageManager.getPackageInfo(requireContext().packageName,0).versionName
66+
))
6267
return binding.root
6368
}
6469

app/src/main/java/theredspy15/ltecleanerfoss/fragment/WhitelistFragment.kt

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,24 @@ class WhitelistFragment: BaseFragment(){
3838
// Creates a dialog asking for a file/folder name to add to the whitelist
3939
mGetContent.launch(Uri.fromFile(Environment.getDataDirectory()))
4040
}
41+
binding.resetBtn.setOnClickListener {
42+
getWhiteList(App.prefs)
43+
getWhitelistOn(App.prefs)
44+
for (i in whitelistDefault){
45+
if (!whiteList.contains(i))
46+
whiteList.add(i)
47+
}
48+
for (i in whitelistOnDefault){
49+
if (!whiteListOn.contains(i))
50+
whiteListOn.add(i)
51+
}
52+
App.prefs!!
53+
.edit()
54+
.putStringSet("whitelist", HashSet(whiteList))
55+
.putStringSet("whitelistOn", HashSet(whiteListOn))
56+
.apply()
57+
loadViews()
58+
}
4159
getWhiteList(App.prefs)
4260
getWhitelistOn(App.prefs)
4361
loadViews()
@@ -122,9 +140,9 @@ class WhitelistFragment: BaseFragment(){
122140
private var whiteListOn: ArrayList<String> = ArrayList()
123141
fun getWhiteList(prefs: SharedPreferences?): List<String?> {
124142
if (whiteList.isNullOrEmpty() && prefs != null) {
125-
// Type mismatch:inferred type is
126-
// (Mutable)Set<String!>? but
127-
// (MutableCollection<out String!>..Collection<String!>) was expected
143+
// Java type mismatch: inferred type is
144+
// kotlin.collections.(Mutable)Set<kotlin.String!>?, but
145+
// kotlin.collections.(Mutable)Collection<out kotlin.String!> was expected
128146
whiteList = ArrayList(prefs.getStringSet("whitelist",whitelistDefault))
129147
whiteList.remove("[")
130148
whiteList.remove("]")
@@ -157,11 +175,7 @@ class WhitelistFragment: BaseFragment(){
157175
}
158176
fun getWhitelistOn(prefs: SharedPreferences?): List<String?> {
159177
if (whiteListOn.isNullOrEmpty() && prefs != null) {
160-
val whiteListOnSet = prefs.getStringSet("whitelistOn",whitelistOnDefault)
161-
whiteListOn = ArrayList(whiteListOnSet)
162-
for (path in whiteListOnSet.orEmpty()) {
163-
whiteListOn.add(path)
164-
}
178+
whiteListOn = ArrayList(prefs.getStringSet("whitelistOn",whitelistOnDefault))
165179
}
166180
return whiteListOn
167181
}

app/src/main/res/layout/fragment_blacklist.xml

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,25 @@
2626
android:orientation="vertical"/>
2727
</ScrollView>
2828

29-
<Button
30-
android:id="@+id/addBtn"
29+
<LinearLayout
30+
android:layout_gravity="bottom"
3131
android:layout_width="match_parent"
3232
android:layout_height="wrap_content"
33-
android:padding="12dp"
34-
android:text="@string/add_to_blacklist"
35-
android:layout_gravity="bottom"/>
33+
android:orientation="horizontal"
34+
android:weightSum="3">
35+
<Button
36+
android:id="@+id/addBtn"
37+
android:layout_width="match_parent"
38+
android:layout_height="wrap_content"
39+
android:layout_weight="1"
40+
android:padding="12dp"
41+
android:text="@string/add_to_blacklist"/>
42+
<Button
43+
android:id="@+id/resetBtn"
44+
android:layout_width="match_parent"
45+
android:layout_height="wrap_content"
46+
android:layout_weight="2"
47+
android:padding="12dp"
48+
android:text="@string/setDefaults"/>
49+
</LinearLayout>
3650
</LinearLayout>

app/src/main/res/layout/fragment_whitelist.xml

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,25 @@
2626
android:orientation="vertical"/>
2727
</ScrollView>
2828

29-
<Button
30-
android:id="@+id/addBtn"
29+
<LinearLayout
30+
android:layout_gravity="bottom"
3131
android:layout_width="match_parent"
3232
android:layout_height="wrap_content"
33-
android:padding="12dp"
34-
android:text="@string/add_to_whitelist"
35-
android:layout_gravity="bottom"/>
33+
android:orientation="horizontal"
34+
android:weightSum="3">
35+
<Button
36+
android:id="@+id/addBtn"
37+
android:layout_width="match_parent"
38+
android:layout_height="wrap_content"
39+
android:layout_weight="1"
40+
android:padding="12dp"
41+
android:text="@string/add_to_whitelist"/>
42+
<Button
43+
android:id="@+id/resetBtn"
44+
android:layout_width="match_parent"
45+
android:layout_height="wrap_content"
46+
android:layout_weight="2"
47+
android:padding="12dp"
48+
android:text="@string/setDefaults"/>
49+
</LinearLayout>
3650
</LinearLayout>

app/src/main/res/values-in-rID/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
<string name="sourceCode_sum">Lihat projek GitHub LTE Cleaner!</string>
7474
<string name="license">Lisensi</string>
7575
<string name="license_sum">Dilisensikan di bawah lisensi GPL v3</string>
76+
<string name="setDefaults">Atur bawaan</string>
7677
<string name="about">Tentang</string>
7778
<string-array name="themes_val">
7879
<item>Ikuti sistem</item>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
<string name="sourceCode_sum">Checkout LTE Cleaner GitHub project!</string>
7474
<string name="license">License</string>
7575
<string name="license_sum">Licensed under GPL v3 license</string>
76+
<string name="setDefaults">Set defaults</string>
7677
<string name="about">About</string>
7778
<string-array name="themes_val">
7879
<item>Follow system</item>

0 commit comments

Comments
 (0)