Skip to content

Commit cfee0d0

Browse files
Optimize the code of paths
1 parent 7a75da3 commit cfee0d0

3 files changed

Lines changed: 121 additions & 72 deletions

File tree

longan/src/main/java/com/dylanc/longan/Crash.kt

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,10 @@
1818

1919
package com.dylanc.longan
2020

21+
import android.content.Context
2122
import android.os.Looper
2223
import java.io.File
23-
import java.text.SimpleDateFormat
24-
import java.util.*
25-
26-
fun saveCrashLogLocally(dirPath: String = cacheDirPath) =
27-
handleUncaughtException { thread, e ->
28-
val dateTime = SimpleDateFormat("yyyy-MM-dd_HH:mm:ss", Locale.getDefault()).format(Date())
29-
val file = File(dirPath, "crash_$dateTime.txt")
30-
file.print {
31-
println("Time: $dateTime")
32-
println("App version: $appVersionName ($appVersionCode)")
33-
println("OS version: Android $sdkVersionName ($sdkVersionCode)")
34-
println("Manufacturer: $deviceManufacturer")
35-
println("Model: $deviceModel")
36-
println("Thread: ${thread.name}")
37-
println()
38-
e.printStackTrace(this)
39-
}
40-
}
24+
import java.time.Instant
4125

4226
inline fun handleUncaughtException(crossinline block: (Thread, Throwable) -> Unit) {
4327
val defaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler()
@@ -47,9 +31,9 @@ inline fun handleUncaughtException(crossinline block: (Thread, Throwable) -> Uni
4731
}
4832
}
4933

50-
inline fun handleMainThreadException(crossinline block: (Throwable) -> Unit){
34+
inline fun handleMainThreadException(crossinline block: (Throwable) -> Unit) {
5135
mainThreadHandler.post {
52-
while (true){
36+
while (true) {
5337
try {
5438
Looper.loop()
5539
} catch (e: Throwable) {
@@ -58,3 +42,21 @@ inline fun handleMainThreadException(crossinline block: (Throwable) -> Unit){
5842
}
5943
}
6044
}
45+
46+
fun Context.saveCrashLogLocally(dirPath: String = cacheDirPath) =
47+
handleUncaughtException { thread, e ->
48+
val now = Instant.now()
49+
File(dirPath, "crash_${now.format("yyyy-MM-dd")}.txt").print(append = true) {
50+
println("Time: ${now.format("yyyy-MM-dd HH:mm:ss")}")
51+
println("App version: $appVersionName ($appVersionCode)")
52+
println("OS version: Android $sdkVersionName ($sdkVersionCode)")
53+
println("Manufacturer: $deviceManufacturer")
54+
println("Model: $deviceModel")
55+
println("Thread: ${thread.name}")
56+
println()
57+
e.printStackTrace(this)
58+
println()
59+
println("-----------------------------------------------------")
60+
println()
61+
}
62+
}

longan/src/main/java/com/dylanc/longan/File.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ fun File.isExistOrCreateNewFile(): Boolean =
3939
}
4040

4141
fun File?.isExistOrCreateNewDir(): Boolean =
42-
when{
43-
this == null ->false
42+
when {
43+
this == null -> false
4444
exists() -> isDirectory
45-
else ->mkdir()
45+
else -> mkdir()
4646
}
4747

4848
fun File.createNewFileAfterDeleteExist(): Boolean =
@@ -67,8 +67,8 @@ inline val File.mimeType: String? get() = URLConnection.guessContentTypeFromName
6767

6868
inline val fileSeparator: String get() = File.separator
6969

70-
inline fun File.print(crossinline block: PrintWriter.() -> Unit) =
71-
PrintWriter(BufferedWriter(FileWriter(this))).apply(block).close()
70+
inline fun File.print(append: Boolean = false, crossinline block: PrintWriter.() -> Unit) =
71+
PrintWriter(BufferedWriter(FileWriter(this, append))).apply(block).close()
7272

7373
fun File.checkMD5(md5: String): Boolean = calculateMD5().equals(md5, true)
7474

longan/src/main/java/com/dylanc/longan/Paths.kt

Lines changed: 94 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -18,79 +18,123 @@
1818

1919
package com.dylanc.longan
2020

21+
import android.content.Context
2122
import android.os.Environment
2223

23-
inline val cacheDirPath: String
24-
get() = if (isExternalStorageWritable || !isExternalStorageRemovable)
24+
inline val cacheDirPath: String get() = application.cacheDirPath
25+
26+
inline val Context.cacheDirPath: String
27+
get() = if (isExternalStorageWritable || !isExternalStorageRemovable) {
2528
externalCacheDirPath.orEmpty()
26-
else
29+
} else {
2730
internalCacheDirPath
31+
}
32+
33+
inline val externalCacheDirPath: String? get() = application.externalCacheDirPath
34+
35+
inline val Context.externalCacheDirPath: String? get() = externalCacheDir?.absolutePath
36+
37+
inline val externalFilesDirPath: String? get() = application.externalFilesDirPath
38+
39+
inline val Context.externalFilesDirPath: String? get() = getExternalFilesDir(null)?.absolutePath
40+
41+
inline val externalPicturesDirPath: String? get() = application.externalPicturesDirPath
42+
43+
inline val Context.externalPicturesDirPath: String?
44+
get() = getExternalFilesDir(Environment.DIRECTORY_PICTURES)?.absolutePath
45+
46+
inline val externalMoviesDirPath: String? get() = application.externalMoviesDirPath
47+
48+
inline val Context.externalMoviesDirPath: String?
49+
get() = getExternalFilesDir(Environment.DIRECTORY_MOVIES)?.absolutePath
50+
51+
inline val externalDownloadsDirPath: String? get() = application.externalDownloadsDirPath
52+
53+
inline val Context.externalDownloadsDirPath: String?
54+
get() = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)?.absolutePath
55+
56+
inline val externalDocumentsDirPath: String? get() = application.externalDocumentsDirPath
57+
58+
inline val Context.externalDocumentsDirPath: String?
59+
get() = getFileStreamPath(Environment.DIRECTORY_DOCUMENTS)?.absolutePath
2860

29-
inline val externalCacheDirPath: String?
30-
get() = application.externalCacheDir?.absolutePath
61+
inline val externalMusicDirPath: String? get() = application.externalMusicDirPath
3162

32-
inline val externalFilesDirPath: String?
33-
get() = application.getExternalFilesDir(null)?.absolutePath
63+
inline val Context.externalMusicDirPath: String?
64+
get() = getExternalFilesDir(Environment.DIRECTORY_MUSIC)?.absolutePath
3465

35-
inline val externalPicturesDirPath: String?
36-
get() = application.getExternalFilesDir(Environment.DIRECTORY_PICTURES)?.absolutePath
66+
inline val externalPodcastsDirPath: String? get() = application.externalPodcastsDirPath
3767

38-
inline val externalMoviesDirPath: String?
39-
get() = application.getExternalFilesDir(Environment.DIRECTORY_MOVIES)?.absolutePath
68+
inline val Context.externalPodcastsDirPath: String?
69+
get() = getExternalFilesDir(Environment.DIRECTORY_PODCASTS)?.absolutePath
4070

41-
inline val externalDownloadsDirPath: String?
42-
get() = application.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)?.absolutePath
71+
inline val externalRingtonesDirPath: String? get() = application.externalRingtonesDirPath
4372

44-
inline val externalDocumentsDirPath: String?
45-
get() = application.getFileStreamPath(Environment.DIRECTORY_DOCUMENTS)?.absolutePath
73+
inline val Context.externalRingtonesDirPath: String?
74+
get() = getExternalFilesDir(Environment.DIRECTORY_RINGTONES)?.absolutePath
4675

47-
inline val externalMusicDirPath: String?
48-
get() = application.getExternalFilesDir(Environment.DIRECTORY_MUSIC)?.absolutePath
76+
inline val externalAlarmsDirPath: String? get() = application.externalAlarmsDirPath
4977

50-
inline val externalPodcastsDirPath: String?
51-
get() = application.getExternalFilesDir(Environment.DIRECTORY_PODCASTS)?.absolutePath
78+
inline val Context.externalAlarmsDirPath: String?
79+
get() = getExternalFilesDir(Environment.DIRECTORY_ALARMS)?.absolutePath
5280

53-
inline val externalRingtonesDirPath: String?
54-
get() = application.getExternalFilesDir(Environment.DIRECTORY_RINGTONES)?.absolutePath
81+
inline val externalNotificationsDirPath: String? get() = application.externalNotificationsDirPath
5582

56-
inline val externalAlarmsDirPath: String?
57-
get() = application.getExternalFilesDir(Environment.DIRECTORY_ALARMS)?.absolutePath
83+
inline val Context.externalNotificationsDirPath: String?
84+
get() = getExternalFilesDir(Environment.DIRECTORY_NOTIFICATIONS)?.absolutePath
5885

59-
inline val externalNotificationsDirPath: String?
60-
get() = application.getExternalFilesDir(Environment.DIRECTORY_NOTIFICATIONS)?.absolutePath
86+
inline val internalCacheDirPath: String get() = application.internalCacheDirPath
6187

62-
inline val internalCacheDirPath: String
63-
get() = application.cacheDir.absolutePath
88+
inline val Context.internalCacheDirPath: String get() = cacheDir.absolutePath
6489

65-
inline val internalFileDirPath: String
66-
get() = application.filesDir.absolutePath
90+
inline val internalFileDirPath: String get() = application.internalFileDirPath
6791

68-
inline val internalPicturesDirPath: String?
69-
get() = application.getFileStreamPath(Environment.DIRECTORY_PICTURES)?.absolutePath
92+
inline val Context.internalFileDirPath: String get() = filesDir.absolutePath
7093

71-
inline val internalMoviesDirPath: String?
72-
get() = application.getFileStreamPath(Environment.DIRECTORY_MOVIES)?.absolutePath
94+
inline val internalPicturesDirPath: String? get() = application.internalPicturesDirPath
7395

74-
inline val internalDownloadsDirPath: String?
75-
get() = application.getFileStreamPath(Environment.DIRECTORY_DOWNLOADS)?.absolutePath
96+
inline val Context.internalPicturesDirPath: String?
97+
get() = getFileStreamPath(Environment.DIRECTORY_PICTURES)?.absolutePath
7698

77-
inline val internalDocumentsDirPath: String?
78-
get() = application.getFileStreamPath(Environment.DIRECTORY_DOCUMENTS)?.absolutePath
99+
inline val internalMoviesDirPath: String? get() = application.internalMoviesDirPath
79100

80-
inline val internalMusicDirPath: String?
81-
get() = application.getFileStreamPath(Environment.DIRECTORY_MUSIC)?.absolutePath
101+
inline val Context.internalMoviesDirPath: String?
102+
get() = getFileStreamPath(Environment.DIRECTORY_MOVIES)?.absolutePath
82103

83-
inline val internalPodcastsDirPath: String?
84-
get() = application.getFileStreamPath(Environment.DIRECTORY_PODCASTS)?.absolutePath
104+
inline val internalDownloadsDirPath: String? get() = application.internalDownloadsDirPath
85105

86-
inline val internalRingtonesDirPath: String?
87-
get() = application.getFileStreamPath(Environment.DIRECTORY_RINGTONES)?.absolutePath
106+
inline val Context.internalDownloadsDirPath: String?
107+
get() = getFileStreamPath(Environment.DIRECTORY_DOWNLOADS)?.absolutePath
88108

89-
inline val internalAlarmsDirPath: String?
90-
get() = application.getFileStreamPath(Environment.DIRECTORY_ALARMS)?.absolutePath
109+
inline val internalDocumentsDirPath: String? get() = application.internalDocumentsDirPath
91110

92-
inline val internalNotificationsDirPath: String?
93-
get() = application.getFileStreamPath(Environment.DIRECTORY_NOTIFICATIONS)?.absolutePath
111+
inline val Context.internalDocumentsDirPath: String?
112+
get() = getFileStreamPath(Environment.DIRECTORY_DOCUMENTS)?.absolutePath
113+
114+
inline val internalMusicDirPath: String? get() = application.internalMusicDirPath
115+
116+
inline val Context.internalMusicDirPath: String?
117+
get() = getFileStreamPath(Environment.DIRECTORY_MUSIC)?.absolutePath
118+
119+
inline val internalPodcastsDirPath: String? get() = application.internalPodcastsDirPath
120+
121+
inline val Context.internalPodcastsDirPath: String?
122+
get() = getFileStreamPath(Environment.DIRECTORY_PODCASTS)?.absolutePath
123+
124+
inline val internalRingtonesDirPath: String? get() = application.internalRingtonesDirPath
125+
126+
inline val Context.internalRingtonesDirPath: String?
127+
get() = getFileStreamPath(Environment.DIRECTORY_RINGTONES)?.absolutePath
128+
129+
inline val internalAlarmsDirPath: String? get() = application.internalAlarmsDirPath
130+
131+
inline val Context.internalAlarmsDirPath: String?
132+
get() = getFileStreamPath(Environment.DIRECTORY_ALARMS)?.absolutePath
133+
134+
inline val internalNotificationsDirPath: String? get() = application.internalNotificationsDirPath
135+
136+
inline val Context.internalNotificationsDirPath: String?
137+
get() = getFileStreamPath(Environment.DIRECTORY_NOTIFICATIONS)?.absolutePath
94138

95139
/**
96140
* Checks if a volume containing external storage is available for read and write.
@@ -104,5 +148,8 @@ inline val isExternalStorageWritable: Boolean
104148
inline val isExternalStorageReadable: Boolean
105149
get() = Environment.getExternalStorageState() in setOf(Environment.MEDIA_MOUNTED, Environment.MEDIA_MOUNTED_READ_ONLY)
106150

151+
/**
152+
* Checks if a volume containing external storage is removable.
153+
*/
107154
inline val isExternalStorageRemovable: Boolean
108155
get() = Environment.isExternalStorageRemovable()

0 commit comments

Comments
 (0)