Skip to content

Commit 468c313

Browse files
committed
Merge branch 'migrate/search-viewmodel' into migrate/user-viewmodel
2 parents f117ea5 + ac2f3d0 commit 468c313

27 files changed

Lines changed: 101 additions & 121 deletions

shared/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ kotlin {
206206
}
207207
implementation(libs.androidx.paging.runtime)
208208
implementation(libs.androidx.paging.compose)
209+
implementation(libs.androidx.startup.runtime)
209210
}
210211
}
211212

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools">
34

5+
<application>
6+
<provider
7+
android:name="androidx.startup.InitializationProvider"
8+
android:authorities="${applicationId}.androidx-startup"
9+
android:exported="false"
10+
tools:node="merge">
11+
<meta-data
12+
android:name="org.listenbrainz.shared.ApplicationContextInitializer"
13+
android:value="androidx.startup" />
14+
</provider>
15+
</application>
416
</manifest>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.listenbrainz.shared
2+
3+
import android.content.Context
4+
import androidx.startup.Initializer
5+
6+
internal lateinit var applicationContext: Context
7+
private set
8+
9+
internal class ApplicationContextInitializer: Initializer<Context> {
10+
override fun create(context: Context): Context {
11+
applicationContext = context
12+
return context
13+
}
14+
15+
override fun dependencies(): List<Class<out Initializer<*>?>?> = emptyList()
16+
}

shared/src/androidMain/kotlin/org/listenbrainz/shared/Platform.android.kt

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import kotlinx.coroutines.CoroutineDispatcher
1010
import org.listenbrainz.shared.di.database.ListensSubmissionDatabase
1111
import org.listenbrainz.shared.model.dao.PendingListensDao
1212
import org.listenbrainz.shared.repository.AppPreferences
13-
import org.listenbrainz.shared.repository.PlatformContext
1413
import org.listenbrainz.shared.util.ANDROID_LOG_DIR_NAME
1514
import org.listenbrainz.shared.util.AndroidFileLogWriter
1615
import org.listenbrainz.shared.util.AndroidLogSubmitter
@@ -25,24 +24,23 @@ import org.listenbrainz.shared.service.ListensService
2524
import org.listenbrainz.shared.service.UserService
2625
import org.listenbrainz.shared.service.YouTubeApiService
2726
import org.listenbrainz.shared.di.database.BrainzPlayerDatabase
27+
import org.listenbrainz.shared.repository.PlatformContext
2828
import org.listenbrainz.shared.util.AndroidSongsData
2929
import org.listenbrainz.shared.util.SongsData
3030
import org.listenbrainz.shared.util.AlbumsData
3131
import org.listenbrainz.shared.util.AndroidAlbumsData
3232

3333
actual fun platform() = "Android"
3434

35-
3635
actual fun provideLogger(
37-
context: PlatformContext,
3836
buildInfo: BuildInfo
3937
): Logger {
4038

4139
val writers = mutableListOf(
4240
platformLogWriter()
4341
)
4442

45-
val externalFilesDir = context.getExternalFilesDir(null)
43+
val externalFilesDir = applicationContext.getExternalFilesDir(null)
4644

4745
if(externalFilesDir != null){
4846
val logDir = File(externalFilesDir, ANDROID_LOG_DIR_NAME).apply { mkdirs() }
@@ -58,24 +56,23 @@ actual fun provideLogger(
5856
)
5957
}
6058

61-
actual fun provideLogSubmitter(context: PlatformContext, buildInfo: BuildInfo): LogSubmitter {
62-
return AndroidLogSubmitter(context,buildInfo)
59+
actual fun provideLogSubmitter(buildInfo: BuildInfo): LogSubmitter {
60+
return AndroidLogSubmitter(buildConfig = buildInfo)
6361
}
6462

6563

6664
actual fun provideRemotePlaybackHandler(
67-
appContext: PlatformContext,
6865
youTubeApiService: YouTubeApiService
6966
): RemotePlaybackHandler {
70-
return AndroidRemotePlaybackHandlerImpl(appContext,youTubeApiService)
67+
return AndroidRemotePlaybackHandlerImpl(youTubeApiService)
7168
}
7269

7370

74-
actual fun getBrainzPlayerDatabase(context: PlatformContext): RoomDatabase.Builder<BrainzPlayerDatabase> {
75-
val listensDB = context.getDatabasePath("brainzplayer_database")
71+
actual fun getBrainzPlayerDatabase(): RoomDatabase.Builder<BrainzPlayerDatabase> {
72+
val brainzPlayerDb = applicationContext.getDatabasePath("brainzplayer_database")
7673
return Room.databaseBuilder<BrainzPlayerDatabase>(
77-
context = context,
78-
name = listensDB.absolutePath
74+
context = applicationContext,
75+
name = brainzPlayerDb.absolutePath
7976
)
8077
}
8178

@@ -84,24 +81,23 @@ actual fun provideListensRepositoryImpl(
8481
appPreferences: AppPreferences,
8582
userService: UserService,
8683
pendingListensDao: PendingListensDao,
87-
ioDispatcher: CoroutineDispatcher,
88-
appContext: PlatformContext
84+
ioDispatcher: CoroutineDispatcher
8985
): ListensRepository {
90-
return AndroidListensRepositoryImpl(service,appPreferences,userService,pendingListensDao,ioDispatcher,appContext)
86+
return AndroidListensRepositoryImpl(service,appPreferences,userService,pendingListensDao,ioDispatcher)
9187
}
9288

93-
actual fun getListensSubmissionDatabase(appContext: PlatformContext): RoomDatabase.Builder<ListensSubmissionDatabase> {
94-
val listensDb = appContext.getDatabasePath("listens_scrobble_database")
89+
actual fun getListensSubmissionDatabase(): RoomDatabase.Builder<ListensSubmissionDatabase> {
90+
val listensDb = applicationContext.getDatabasePath("listens_scrobble_database")
9591
return Room.databaseBuilder<ListensSubmissionDatabase>(
96-
context = appContext,
92+
context = applicationContext,
9793
name = listensDb.absolutePath
9894
)
9995
}
10096

101-
actual fun provideSongData(context: PlatformContext): SongsData {
102-
return AndroidSongsData(context)
97+
actual fun provideSongData(): SongsData {
98+
return AndroidSongsData()
10399
}
104100

105-
actual fun provideAlbumsData(context: PlatformContext): AlbumsData {
106-
return AndroidAlbumsData(context)
101+
actual fun provideAlbumsData(): AlbumsData {
102+
return AndroidAlbumsData()
107103
}

shared/src/androidMain/kotlin/org/listenbrainz/shared/preferences/AndroidDataStoreContext.kt

Lines changed: 0 additions & 18 deletions
This file was deleted.

shared/src/androidMain/kotlin/org/listenbrainz/shared/preferences/DataStoreFactory.android.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.datastore.preferences.core.PreferenceDataStoreFactory
66
import androidx.datastore.preferences.core.Preferences
77
import androidx.datastore.preferences.preferencesDataStoreFile
88
import okio.Path.Companion.toPath
9+
import org.listenbrainz.shared.applicationContext
910

1011
/**
1112
* Android implementation of DataStore factory.
@@ -14,8 +15,7 @@ actual fun createDataStore(
1415
name: String,
1516
migrations: List<DataMigration<Preferences>>
1617
): DataStore<Preferences> {
17-
val context = AndroidDataStoreContext.require()
18-
val path = context.preferencesDataStoreFile(name).absolutePath
18+
val path = applicationContext.preferencesDataStoreFile(name).absolutePath
1919
return PreferenceDataStoreFactory.createWithPath(
2020
produceFile = { path.toPath() },
2121
migrations = migrations

shared/src/androidMain/kotlin/org/listenbrainz/shared/repository/PlatformPreferences.android.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import android.provider.Settings
66
import androidx.datastore.core.DataMigration
77
import androidx.datastore.preferences.SharedPreferencesMigration
88
import androidx.datastore.preferences.core.Preferences
9-
import org.listenbrainz.shared.preferences.AndroidDataStoreContext
9+
import org.listenbrainz.shared.applicationContext
1010
import org.listenbrainz.shared.preferences.PreferenceKeys
1111

1212
actual typealias PlatformContext = Context
@@ -48,18 +48,15 @@ actual fun settingsPlatformDataMigrations(
4848
)
4949
)
5050

51-
actual fun platformInitDataStoreContext(context: PlatformContext) {
52-
AndroidDataStoreContext.set(context)
53-
}
54-
5551
actual fun platformPackageVersion(context: PlatformContext): String =
5652
try {
5753
context.packageManager?.getPackageInfo(context.packageName, 0)?.versionName ?: "N/A"
5854
} catch (e: PackageManager.NameNotFoundException) {
5955
"unknown"
6056
}
6157

62-
actual fun platformIsNotificationServiceAllowed(context: PlatformContext): Boolean {
58+
actual val isNotificationServiceAllowed: Boolean get() {
59+
val context = applicationContext
6360
val listeners =
6461
Settings.Secure.getString(context.contentResolver, "enabled_notification_listeners")
6562
return listeners != null && listeners.contains(context.packageName)

shared/src/androidMain/kotlin/org/listenbrainz/shared/repository/listens/AndroidListensRepositoryImpl.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package org.listenbrainz.shared.repository.listens
33
import android.content.pm.PackageManager
44
import android.graphics.drawable.Drawable
55
import kotlinx.coroutines.CoroutineDispatcher
6+
import org.listenbrainz.shared.applicationContext
67
import org.listenbrainz.shared.model.dao.PendingListensDao
78
import org.listenbrainz.shared.repository.AppPreferences
8-
import org.listenbrainz.shared.repository.PlatformContext
99
import org.listenbrainz.shared.service.ListensService
1010
import org.listenbrainz.shared.service.UserService
1111

@@ -14,22 +14,21 @@ class AndroidListensRepositoryImpl(
1414
appPreferences: AppPreferences,
1515
userService: UserService,
1616
pendingListensDao: PendingListensDao,
17-
ioDispatcher: CoroutineDispatcher,
18-
private val androidContext: PlatformContext
19-
): ListensRepositoryImpl(service,appPreferences,userService,pendingListensDao,ioDispatcher,androidContext) {
17+
ioDispatcher: CoroutineDispatcher
18+
): ListensRepositoryImpl(service,appPreferences,userService,pendingListensDao,ioDispatcher) {
2019

2120
override fun getPackageIcon(packageName: String): Drawable? {
2221
return try {
23-
androidContext.packageManager.getApplicationIcon(packageName)
22+
applicationContext.packageManager.getApplicationIcon(packageName)
2423
} catch(e:Exception){
2524
null
2625
}
2726
}
2827

2928
override fun getPackageLabel(packageName: String): String {
3029
return try {
31-
val info = androidContext.packageManager.getApplicationInfo(packageName, 0)
32-
androidContext.packageManager.getApplicationLabel(info).toString()
30+
val info = applicationContext.packageManager.getApplicationInfo(packageName, 0)
31+
applicationContext.packageManager.getApplicationLabel(info).toString()
3332
} catch (e: PackageManager.NameNotFoundException) {
3433
packageName
3534
}

shared/src/androidMain/kotlin/org/listenbrainz/shared/repository/remoteplayer/AndroidRemotePlaybackHandlerImpl.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import kotlinx.coroutines.suspendCancellableCoroutine
2929
import kotlinx.coroutines.sync.Mutex
3030
import kotlinx.coroutines.sync.withLock
3131
import org.listenbrainz.shared.BuildKonfig
32+
import org.listenbrainz.shared.applicationContext
3233
import org.listenbrainz.shared.model.ListenBitmap
3334
import org.listenbrainz.shared.model.ResponseError
3435
import org.listenbrainz.shared.model.playback.SharedPlayerContext
@@ -44,8 +45,8 @@ import kotlin.coroutines.resume
4445
import kotlin.coroutines.resumeWithException
4546

4647
class AndroidRemotePlaybackHandlerImpl(
47-
private val appContext: PlatformContext,
4848
private val youtubeApiService: YouTubeApiService,
49+
private val appContext: PlatformContext = applicationContext,
4950
private val logger: Log = Log
5051
) : SharedRemotePlaybackHandlerImpl(youtubeApiService) {
5152

shared/src/androidMain/kotlin/org/listenbrainz/shared/util/AndroidAlbumsData.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package org.listenbrainz.shared.util
22

33
import android.os.Build
44
import android.provider.MediaStore
5+
import org.listenbrainz.shared.applicationContext
56
import org.listenbrainz.shared.model.Album
67
import org.listenbrainz.shared.repository.PlatformContext
78

89
class AndroidAlbumsData(
9-
private val context: PlatformContext
10+
private val context: PlatformContext = applicationContext
1011
): AlbumsData(){
1112
override fun albums(): List<Album> {
1213
val albums = mutableListOf<Album>()

0 commit comments

Comments
 (0)