Skip to content

Commit f53e116

Browse files
committed
Docs page
1 parent 60407c9 commit f53e116

78 files changed

Lines changed: 1282 additions & 1277 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/src/main/java/com/ismartcoding/plain/features/media/AudioMediaStoreHelper.kt renamed to app/src/main/java/com/ismartcoding/plain/audio/AudioMediaStoreHelper.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.ismartcoding.plain.features.media
1+
package com.ismartcoding.plain.audio
22

33
import android.content.Context
44
import android.net.Uri
@@ -10,10 +10,11 @@ import com.ismartcoding.lib.extensions.getTimeSecondsValue
1010
import com.ismartcoding.lib.extensions.map
1111
import com.ismartcoding.lib.helpers.FilterField
1212
import com.ismartcoding.lib.isQPlus
13-
import com.ismartcoding.plain.data.DAudio
13+
import com.ismartcoding.plain.audio.DAudio
1414
import com.ismartcoding.plain.data.TagRelationStub
1515
import com.ismartcoding.plain.enums.MediaType
1616
import com.ismartcoding.plain.features.file.FileSortBy
17+
import com.ismartcoding.plain.features.media.BaseMediaContentHelper
1718

1819
object AudioMediaStoreHelper : BaseMediaContentHelper() {
1920
override val uriExternal: Uri = if (isQPlus()) MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL) else MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
@@ -33,9 +34,7 @@ object AudioMediaStoreHelper : BaseMediaContentHelper() {
3334
)
3435

3536
if (isQPlus()) {
36-
projection.add(
37-
MediaStore.Audio.Media.BUCKET_ID,
38-
)
37+
projection.add(MediaStore.Audio.Media.BUCKET_ID)
3938
}
4039

4140
return projection.toTypedArray()
@@ -112,4 +111,4 @@ object AudioMediaStoreHelper : BaseMediaContentHelper() {
112111
TagRelationStub(id, title, size)
113112
} ?: emptyList()
114113
}
115-
}
114+
}

app/src/main/java/com/ismartcoding/plain/features/AudioPlayer.kt renamed to app/src/main/java/com/ismartcoding/plain/audio/AudioPlayer.kt

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.ismartcoding.plain.features
1+
package com.ismartcoding.plain.audio
22

33
import android.content.ComponentName
44
import android.content.Context
@@ -7,13 +7,11 @@ import androidx.media3.session.MediaController
77
import androidx.media3.session.SessionToken
88
import com.google.common.util.concurrent.MoreExecutors
99
import com.ismartcoding.lib.channel.sendEvent
10-
import com.ismartcoding.lib.helpers.CoroutinesHelper.coIO
11-
import com.ismartcoding.lib.helpers.CoroutinesHelper.coMain
12-
import com.ismartcoding.lib.helpers.CoroutinesHelper.withIO
10+
import com.ismartcoding.lib.helpers.CoroutinesHelper
1311
import com.ismartcoding.lib.logcat.LogCat
1412
import com.ismartcoding.plain.MainApp
1513
import com.ismartcoding.plain.TempData
16-
import com.ismartcoding.plain.data.DPlaylistAudio
14+
import com.ismartcoding.plain.audio.DPlaylistAudio
1715
import com.ismartcoding.plain.enums.AudioAction
1816
import com.ismartcoding.plain.enums.MediaPlayMode
1917
import com.ismartcoding.plain.events.AudioActionEvent
@@ -60,7 +58,7 @@ object AudioPlayer {
6058

6159
fun ensurePlayer(context: Context, callback: suspend () -> Unit = {}) {
6260
if (player != null) {
63-
coMain {
61+
CoroutinesHelper.coMain {
6462
callback()
6563
}
6664
return
@@ -72,7 +70,7 @@ object AudioPlayer {
7270
it.addListener(playerListener)
7371
_isPlayingFlow.value = it.isPlaying
7472
}
75-
coMain {
73+
CoroutinesHelper.coMain {
7674
callback()
7775
}
7876
}, MoreExecutors.directExecutor())
@@ -82,9 +80,9 @@ object AudioPlayer {
8280
context: Context,
8381
playlistAudio: DPlaylistAudio
8482
) {
85-
coMain {
83+
CoroutinesHelper.coMain {
8684
TempData.audioPlayPosition = 0
87-
withIO { AudioPlaylistPreference.addAsync(context, listOf(playlistAudio)) }
85+
CoroutinesHelper.withIO { AudioPlaylistPreference.addAsync(context, listOf(playlistAudio)) }
8886
ensurePlayer(context) {
8987
doPlay(playlistAudio)
9088
}
@@ -95,7 +93,7 @@ object AudioPlayer {
9593
context: Context,
9694
playlistAudio: DPlaylistAudio
9795
) {
98-
coMain {
96+
CoroutinesHelper.coMain {
9997
TempData.audioPlayPosition = 0
10098
ensurePlayer(context) {
10199
doPlay(playlistAudio)
@@ -104,15 +102,15 @@ object AudioPlayer {
104102
}
105103

106104
fun play() {
107-
coMain {
105+
CoroutinesHelper.coMain {
108106
val current = player?.currentMediaItem
109107
if (current != null) {
110108
player?.seekTo(TempData.audioPlayPosition)
111109
player?.play()
112110
return@coMain
113111
}
114112

115-
val context = MainApp.instance
113+
val context = MainApp.Companion.instance
116114
val playlistAudio = ensureCurrentPlaylistAudio()
117115
try {
118116
if (playlistAudio != null) {
@@ -123,26 +121,26 @@ object AudioPlayer {
123121
} catch (e: Exception) {
124122
LogCat.e(e.toString())
125123
if (playlistAudio != null) {
126-
withIO { AudioPlaylistPreference.deleteAsync(context, setOf(playlistAudio.path)) }
124+
CoroutinesHelper.withIO { AudioPlaylistPreference.deleteAsync(context, setOf(playlistAudio.path)) }
127125
}
128126
setChangedNotify(AudioAction.NOT_FOUND)
129127
}
130128
}
131129
}
132130

133131
private suspend fun ensureCurrentPlaylistAudio(): DPlaylistAudio? {
134-
val context = MainApp.instance
135-
val path = withIO { AudioPlayingPreference.getValueAsync(context) }
132+
val context = MainApp.Companion.instance
133+
val path = CoroutinesHelper.withIO { AudioPlayingPreference.getValueAsync(context) }
136134
if (path.isEmpty()) {
137135
return null
138136
}
139-
val playlistAudio = withIO { DPlaylistAudio.fromPath(context, path) }
140-
withIO { AudioPlaylistPreference.addAsync(context, listOf(playlistAudio)) }
137+
val playlistAudio = CoroutinesHelper.withIO { DPlaylistAudio.Companion.fromPath(context, path) }
138+
CoroutinesHelper.withIO { AudioPlaylistPreference.addAsync(context, listOf(playlistAudio)) }
141139
return playlistAudio
142140
}
143141

144142
fun seekTo(progress: Long) {
145-
coMain {
143+
CoroutinesHelper.coMain {
146144
val seekPosition = progress * 1000
147145
TempData.audioPlayPosition = seekPosition
148146
val currentPlayer = player
@@ -163,14 +161,14 @@ object AudioPlayer {
163161
}
164162

165163
private fun skipTo(isNext: Boolean) {
166-
val context = MainApp.instance
167-
coIO {
164+
val context = MainApp.Companion.instance
165+
CoroutinesHelper.coIO {
168166
var audio: DPlaylistAudio
169167
var playerAudioList = AudioPlaylistPreference.getValueAsync(context)
170168
val playingPath = AudioPlayingPreference.getValueAsync(context)
171169
if (playerAudioList.isEmpty()) {
172170
if (playingPath.isNotEmpty()) {
173-
audio = DPlaylistAudio.fromPath(context, playingPath)
171+
audio = DPlaylistAudio.Companion.fromPath(context, playingPath)
174172
AudioPlaylistPreference.addAsync(context, listOf(audio))
175173
playerAudioList = listOf(audio)
176174
} else {
@@ -201,7 +199,7 @@ object AudioPlayer {
201199
}
202200

203201
LogCat.d("skipTo: ${audio.path}")
204-
coMain {
202+
CoroutinesHelper.coMain {
205203
ensurePlayer(context) {
206204
TempData.audioPlayPosition = 0
207205
doPlay(audio)
@@ -211,14 +209,14 @@ object AudioPlayer {
211209
}
212210

213211
fun pause() {
214-
coMain {
212+
CoroutinesHelper.coMain {
215213
TempData.audioPlayPosition = player?.currentPosition ?: 0
216214
player?.pause()
217215
}
218216
}
219217

220218
fun clear() {
221-
coMain {
219+
CoroutinesHelper.coMain {
222220
if (player?.isPlaying == true) {
223221
player?.pause()
224222
}
@@ -246,4 +244,4 @@ object AudioPlayer {
246244
fun setChangedNotify(action: AudioAction) {
247245
sendEvent(AudioActionEvent(action))
248246
}
249-
}
247+
}

app/src/main/java/com/ismartcoding/plain/data/DAudio.kt renamed to app/src/main/java/com/ismartcoding/plain/audio/DAudio.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
package com.ismartcoding.plain.data
1+
package com.ismartcoding.plain.audio
22

33
import android.net.Uri
44
import com.ismartcoding.lib.extensions.formatDuration
5+
import com.ismartcoding.plain.audio.DPlaylistAudio
6+
import com.ismartcoding.plain.data.IData
7+
import com.ismartcoding.plain.data.IMedia
58
import kotlin.time.Instant
69

710
data class DAudio(
@@ -28,4 +31,4 @@ data class DAudio(
2831
val albumArtUri = Uri.parse("content://media/external/audio/albumart")
2932
return Uri.withAppendedPath(albumArtUri, albumId)
3033
}
31-
}
34+
}

app/src/main/java/com/ismartcoding/plain/data/DPlaylistAudio.kt renamed to app/src/main/java/com/ismartcoding/plain/audio/DPlaylistAudio.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,36 @@
1-
package com.ismartcoding.plain.data
1+
package com.ismartcoding.plain.audio
22

33
import android.content.Context
44
import android.media.MediaMetadataRetriever
55
import android.os.Parcelable
66
import androidx.annotation.OptIn
77
import androidx.media3.common.MediaItem
88
import androidx.media3.common.MediaMetadata
9-
import androidx.media3.common.MediaMetadata.MEDIA_TYPE_MUSIC
109
import androidx.media3.common.util.UnstableApi
1110
import com.ismartcoding.lib.extensions.formatDuration
1211
import com.ismartcoding.lib.extensions.getFilenameWithoutExtensionFromPath
1312
import com.ismartcoding.lib.extensions.pathToUri
1413
import com.ismartcoding.plain.R
15-
import com.ismartcoding.plain.features.locale.LocaleHelper.getString
14+
import com.ismartcoding.plain.features.locale.LocaleHelper
1615
import kotlinx.parcelize.Parcelize
17-
import java.io.Serializable
16+
import kotlinx.serialization.Serializable
1817

1918
@OptIn(UnstableApi::class)
2019
@Parcelize
21-
@kotlinx.serialization.Serializable
20+
@Serializable
2221
data class DPlaylistAudio(
2322
val title: String,
2423
val path: String,
2524
val artist: String,
2625
val duration: Long,
27-
) : Parcelable, Serializable {
26+
) : Parcelable, java.io.Serializable {
2827

2928
fun toMediaItem(): MediaItem {
3029
val mediaMetadata = MediaMetadata.Builder()
3130
.setTitle(title)
3231
.setSubtitle(artist)
3332
.setArtist(artist)
34-
.setMediaType(MEDIA_TYPE_MUSIC)
33+
.setMediaType(MediaMetadata.MEDIA_TYPE_MUSIC)
3534
.build()
3635

3736
return MediaItem.Builder()
@@ -54,8 +53,8 @@ data class DPlaylistAudio(
5453
val retriever = MediaMetadataRetriever()
5554
var title = path.getFilenameWithoutExtensionFromPath()
5655
var duration = 0L
57-
var artist = getString(R.string.unknown)
58-
56+
var artist = LocaleHelper.getString(R.string.unknown)
57+
5958
try {
6059
retriever.setDataSource(context, path.pathToUri())
6160
val keyTitle = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE) ?: ""
@@ -76,4 +75,4 @@ data class DPlaylistAudio(
7675

7776
private const val serialVersionUID = -11L
7877
}
79-
}
78+
}

app/src/main/java/com/ismartcoding/plain/data/TagRelationStub.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ismartcoding.plain.data
22

3+
import com.ismartcoding.plain.audio.DAudio
34
import com.ismartcoding.plain.enums.DataType
45
import com.ismartcoding.plain.db.DTagRelation
56

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.ismartcoding.plain.docs
2+
3+
import com.ismartcoding.lib.extensions.getFilenameExtension
4+
import com.ismartcoding.plain.data.IData
5+
import com.ismartcoding.plain.data.IMedia
6+
import kotlin.time.Instant
7+
8+
data class DDoc(
9+
override var id: String,
10+
override var title: String,
11+
override var path: String,
12+
override val duration: Long,
13+
val size: Long,
14+
val bucketId: String = "",
15+
val createdAt: Instant,
16+
val updatedAt: Instant,
17+
) : IMedia, IData {
18+
val extension: String by lazy { path.getFilenameExtension() }
19+
}

0 commit comments

Comments
 (0)