From 76b3fd124c61f6311601568855ba36ba5fb3fc43 Mon Sep 17 00:00:00 2001 From: grakovne Date: Fri, 22 Nov 2024 22:20:12 +0100 Subject: [PATCH] wip --- app/build.gradle.kts | 4 +- .../lissen/usecases/LibraryNavigationTest.kt | 4 +- .../org/grakovne/lissen/LissenApplication.kt | 2 +- .../AudiobookshelfChannelProvider.kt | 2 +- .../common/AudiobookshelfChannel.kt | 8 +- .../common/UnknownAudiobookshelfChannel.kt | 12 +-- .../common/api/ApiClientConfig.kt | 2 +- .../api/AudioBookshelfDataRepository.kt | 34 ++++----- .../api/AudioBookshelfMediaRepository.kt | 10 +-- .../common/api/AudioBookshelfSyncService.kt | 6 +- .../common/api/AudiobookshelfAuthService.kt | 8 +- .../common/api/RequestHeadersProvider.kt | 2 +- .../audiobookshelf/common/api/SafeApiCall.kt | 2 +- .../common/client/AudiobookshelfApiClient.kt | 26 +++---- .../client/AudiobookshelfMediaClient.kt | 2 +- .../ConnectionInfoResponseConverter.kt | 2 +- .../converter/LibraryPageResponseConverter.kt | 4 +- .../converter/LoginResponseConverter.kt | 2 +- .../PlaybackSessionResponseConverter.kt | 2 +- .../RecentListeningResponseConverter.kt | 2 +- .../common/model/MediaProgressResponse.kt | 2 +- .../connection/ConnectionInfoResponse.kt | 6 +- .../model/metadata/AuthorItemsResponse.kt | 2 +- .../common/model/metadata/LibraryResponse.kt | 4 +- .../model/playback/PlaybackSessionResponse.kt | 2 +- .../model/playback/PlaybackStartRequest.kt | 4 +- .../model/playback/ProgressSyncRequest.kt | 2 +- .../model/user/CredentialsLoginRequest.kt | 2 +- .../common/model/user/LoggedUserResponse.kt | 4 +- .../model/user/PersonalizedFeedResponse.kt | 8 +- .../common/model/user/UserInfoResponse.kt | 4 +- .../library/LibraryAudiobookshelfChannel.kt | 24 +++--- .../converter/BookResponseConverter.kt | 14 ++-- .../converter/LibrarySearchItemsConverter.kt | 2 +- .../library/model/BookResponse.kt | 16 ++-- .../library/model/LibraryItemsResponse.kt | 8 +- .../library/model/LibrarySearchResponse.kt | 6 +- .../podcast/PodcastAudiobookshelfChannel.kt | 20 ++--- .../converter/PodcastPageResponseConverter.kt | 4 +- .../converter/PodcastResponseConverter.kt | 14 ++-- .../converter/PodcastSearchItemsConverter.kt | 2 +- .../podcast/model/PodcastItemsResponse.kt | 8 +- .../podcast/model/PodcastResponse.kt | 10 +-- .../podcast/model/PodcastSearchResponse.kt | 4 +- .../lissen/channel/common/ApiClient.kt | 4 +- .../lissen/channel/common/ApiResult.kt | 4 +- .../lissen/channel/common/AuthType.kt | 2 +- .../lissen/channel/common/BinaryApiClient.kt | 4 +- .../channel/common/ChannelAuthService.kt | 2 +- .../lissen/channel/common/ChannelCode.kt | 2 +- .../lissen/channel/common/ChannelModule.kt | 4 +- .../lissen/channel/common/ConnectionInfo.kt | 2 +- .../lissen/channel/common/LibraryType.kt | 2 +- .../lissen/channel/common/MediaChannel.kt | 12 +-- .../org/grakovne/lissen/common/ColorScheme.kt | 2 +- .../lissen/common/NetworkQualityService.kt | 2 +- .../lissen/content/LissenMediaProvider.kt | 28 +++---- .../content/cache/BookCachingService.kt | 14 ++-- .../cache/CacheBookStorageProperties.kt | 2 +- .../lissen/content/cache/LocalCacheModule.kt | 2 +- .../content/cache/LocalCacheRepository.kt | 18 ++--- .../lissen/content/cache/LocalCacheStorage.kt | 4 +- .../lissen/content/cache/Migrations.kt | 10 +-- .../content/cache/api/CachedBookRepository.kt | 10 +-- .../cache/api/CachedLibraryRepository.kt | 2 +- .../converter/CachedBookEntityConverter.kt | 2 +- .../CachedBookEntityDetailedConverter.kt | 8 +- .../CachedBookEntityRecentConverter.kt | 2 +- .../converter/CachedLibraryEntityConverter.kt | 2 +- .../lissen/content/cache/dao/CachedBookDao.kt | 14 ++-- .../content/cache/dao/CachedLibraryDao.kt | 2 +- .../content/cache/entity/CachedBookEntity.kt | 34 ++++----- .../cache/entity/CachedLibraryEntity.kt | 4 +- .../cache/entity/PlaybackProgressEntity.kt | 2 +- .../java/org/grakovne/lissen/domain/Book.kt | 4 +- .../grakovne/lissen/domain/DetailedItem.kt | 8 +- .../org/grakovne/lissen/domain/Library.kt | 2 +- .../org/grakovne/lissen/domain/PagedItems.kt | 2 +- .../lissen/domain/PlaybackProgress.kt | 2 +- .../grakovne/lissen/domain/PlaybackSession.kt | 2 +- .../org/grakovne/lissen/domain/RecentBook.kt | 2 +- .../org/grakovne/lissen/domain/UserAccount.kt | 2 +- .../domain/connection/ServerRequestHeader.kt | 2 +- .../preferences/LissenSharedPreferences.kt | 4 +- .../grakovne/lissen/playback/MediaModule.kt | 6 +- .../playback/service/MimeTypeProvider.kt | 2 +- .../playback/service/PlaybackService.kt | 16 ++-- .../service/PlaybackSynchronizationService.kt | 14 ++-- .../lissen/ui/activity/AppActivity.kt | 2 +- .../ui/components/AsyncShimmeringImage.kt | 8 +- .../lissen/ui/components/BookCoverFetcher.kt | 10 +-- .../lissen/ui/extensions/AsyncExtensions.kt | 2 +- .../lissen/ui/icons/{Book_2.kt => Book.kt} | 6 +- .../org/grakovne/lissen/ui/icons/Podcast.kt | 10 +-- .../org/grakovne/lissen/ui/icons/Search.kt | 6 +- .../ui/icons/{Timer_play.kt => TimerPlay.kt} | 6 +- .../lissen/ui/navigation/AppNavHost.kt | 18 ++--- .../ui/navigation/AppNavigationService.kt | 2 +- .../common/RequestNotificationPermissions.kt | 4 +- .../ui/screens/library/LibraryScreen.kt | 46 ++++++------ .../library/composables/BookComposable.kt | 34 ++++----- .../composables/DefaultActionComposable.kt | 22 +++--- .../LibrarySearchActionComposable.kt | 20 ++--- .../composables/MiniPlayerComposable.kt | 24 +++--- .../composables/RecentBooksComposable.kt | 20 ++--- .../fallback/LibraryFallbackComposable.kt | 12 +-- .../LibraryPlaceholderComposable.kt | 18 ++--- .../RecentBooksPlaceholderComposable.kt | 18 ++--- .../paging/LibraryDefaultPagingSource.kt | 8 +- .../paging/LibraryEmptyPagingSource.kt | 2 +- .../paging/LibrarySearchPagingSource.kt | 4 +- .../lissen/ui/screens/login/LoginScreen.kt | 44 +++++------ .../player/ChapterSearchActionComposable.kt | 16 ++-- .../lissen/ui/screens/player/PlayerScreen.kt | 34 ++++----- .../composable/NavigationBarComposable.kt | 46 ++++++------ .../composable/PlaybackSpeedComposable.kt | 24 +++--- .../composable/PlayingQueueComposable.kt | 24 +++--- .../composable/PlaylistItemComposable.kt | 12 +-- .../player/composable/TimerComposable.kt | 20 ++--- .../composable/TrackControlComposable.kt | 46 ++++++------ .../composable/TrackDetailsComposable.kt | 12 +-- .../PlayingQueuePlaceholderComposable.kt | 8 +- .../TrackDetailsPlaceholderComposable.kt | 10 +-- .../ui/screens/settings/SettingsScreen.kt | 16 ++-- .../advanced/CustomHeaderComposable.kt | 16 ++-- .../advanced/CustomHeadersSettingsScreen.kt | 22 +++--- .../composable/AdditionalComposable.kt | 12 +-- .../AdvancedSettingsItemComposable.kt | 12 +-- .../composable/CommonSettingsComposable.kt | 24 +++--- .../settings/composable/CommonSettingsItem.kt | 2 +- .../CommonSettingsItemComposable.kt | 12 +-- .../composable/ServerSettingsComposable.kt | 24 +++--- .../org/grakovne/lissen/ui/theme/Theme.kt | 12 +-- .../lissen/viewmodel/BookCacheAction.kt | 2 +- .../lissen/viewmodel/CachingModelView.kt | 2 +- .../lissen/viewmodel/LibraryViewModel.kt | 14 ++-- .../lissen/viewmodel/LoginViewModel.kt | 18 ++--- .../lissen/viewmodel/PlayerViewModel.kt | 2 +- .../lissen/viewmodel/SettingsViewModel.kt | 2 +- .../grakovne/lissen/widget/MediaRepository.kt | 22 +++--- .../grakovne/lissen/widget/PlayerWidget.kt | 74 +++++++++---------- .../lissen/widget/PlayerWidgetStateService.kt | 12 +-- .../lissen/widget/WidgetControlButton.kt | 8 +- .../lissen/widget/WidgetPlaybackController.kt | 4 +- build.gradle.kts | 3 +- gradle/libs.versions.toml | 3 +- 146 files changed, 749 insertions(+), 745 deletions(-) rename app/src/main/java/org/grakovne/lissen/ui/icons/{Book_2.kt => Book.kt} (97%) rename app/src/main/java/org/grakovne/lissen/ui/icons/{Timer_play.kt => TimerPlay.kt} (97%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6c3c0847..8d45957e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,16 +1,16 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) + alias(libs.plugins.compose.compiler) id("kotlin-kapt") id("com.google.dagger.hilt.android") - id("org.jmailen.kotlinter") version "3.10.0" + id("org.jmailen.kotlinter") version "3.15.0" id("com.google.devtools.ksp") } kotlinter { reporters = arrayOf("checkstyle", "plain") - experimentalRules = true } tasks.lintKotlinMain { diff --git a/app/src/androidTest/java/org/grakovne/lissen/usecases/LibraryNavigationTest.kt b/app/src/androidTest/java/org/grakovne/lissen/usecases/LibraryNavigationTest.kt index 9258414a..ebf6badd 100644 --- a/app/src/androidTest/java/org/grakovne/lissen/usecases/LibraryNavigationTest.kt +++ b/app/src/androidTest/java/org/grakovne/lissen/usecases/LibraryNavigationTest.kt @@ -57,7 +57,7 @@ class LibraryNavigationTest { timeoutMillis = 2000, condition = { composeTestRule.onAllNodesWithTag("libraryScreen").fetchSemanticsNodes().isNotEmpty() - } + }, ) composeTestRule.onNodeWithTag("libraryScreen").assertExists() @@ -72,7 +72,7 @@ class LibraryNavigationTest { timeoutMillis = 2000, condition = { composeTestRule.onAllNodesWithTag("playerScreen").fetchSemanticsNodes().isNotEmpty() - } + }, ) composeTestRule.onNodeWithTag("playerScreen").assertExists() diff --git a/app/src/main/java/org/grakovne/lissen/LissenApplication.kt b/app/src/main/java/org/grakovne/lissen/LissenApplication.kt index 6dd3dd02..f96181ef 100644 --- a/app/src/main/java/org/grakovne/lissen/LissenApplication.kt +++ b/app/src/main/java/org/grakovne/lissen/LissenApplication.kt @@ -50,7 +50,7 @@ class LissenApplication : Application() { ReportField.ANDROID_VERSION, ReportField.PHONE_MODEL, ReportField.STACK_TRACE, - ReportField.LOGCAT + ReportField.LOGCAT, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/AudiobookshelfChannelProvider.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/AudiobookshelfChannelProvider.kt index cc5e8abd..8080d5de 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/AudiobookshelfChannelProvider.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/AudiobookshelfChannelProvider.kt @@ -19,7 +19,7 @@ class AudiobookshelfChannelProvider @Inject constructor( private val libraryAudiobookshelfChannel: LibraryAudiobookshelfChannel, private val unknownAudiobookshelfChannel: UnknownAudiobookshelfChannel, private val audiobookshelfAuthService: AudiobookshelfAuthService, - private val sharedPreferences: LissenSharedPreferences + private val sharedPreferences: LissenSharedPreferences, ) : ChannelProvider { override fun provideMediaChannel(): MediaChannel { diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/AudiobookshelfChannel.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/AudiobookshelfChannel.kt index 1e0e8c08..c1486afc 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/AudiobookshelfChannel.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/AudiobookshelfChannel.kt @@ -26,12 +26,12 @@ abstract class AudiobookshelfChannel( private val libraryResponseConverter: LibraryResponseConverter, private val mediaRepository: AudioBookshelfMediaRepository, private val recentBookResponseConverter: RecentListeningResponseConverter, - private val connectionInfoResponseConverter: ConnectionInfoResponseConverter + private val connectionInfoResponseConverter: ConnectionInfoResponseConverter, ) : MediaChannel { override fun provideFileUri( libraryItemId: String, - fileId: String + fileId: String, ): Uri = Uri.parse(preferences.getHost()) .buildUpon() .appendPath("api") @@ -44,11 +44,11 @@ abstract class AudiobookshelfChannel( override suspend fun syncProgress( sessionId: String, - progress: PlaybackProgress + progress: PlaybackProgress, ): ApiResult = syncService.syncProgress(sessionId, progress) override suspend fun fetchBookCover( - bookId: String + bookId: String, ): ApiResult = mediaRepository.fetchBookCover(bookId) override suspend fun fetchLibraries(): ApiResult> = dataRepository diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/UnknownAudiobookshelfChannel.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/UnknownAudiobookshelfChannel.kt index ff79cfa6..36d471cf 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/UnknownAudiobookshelfChannel.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/UnknownAudiobookshelfChannel.kt @@ -27,7 +27,7 @@ class UnknownAudiobookshelfChannel @Inject constructor( syncService: AudioBookshelfSyncService, sessionResponseConverter: PlaybackSessionResponseConverter, libraryResponseConverter: LibraryResponseConverter, - connectionInfoResponseConverter: ConnectionInfoResponseConverter + connectionInfoResponseConverter: ConnectionInfoResponseConverter, ) : AudiobookshelfChannel( dataRepository = dataRepository, mediaRepository = mediaRepository, @@ -36,7 +36,7 @@ class UnknownAudiobookshelfChannel @Inject constructor( preferences = preferences, syncService = syncService, libraryResponseConverter = libraryResponseConverter, - connectionInfoResponseConverter = connectionInfoResponseConverter + connectionInfoResponseConverter = connectionInfoResponseConverter, ) { override fun getLibraryType(): LibraryType = LibraryType.UNKNOWN @@ -44,23 +44,23 @@ class UnknownAudiobookshelfChannel @Inject constructor( override suspend fun fetchBooks( libraryId: String, pageSize: Int, - pageNumber: Int + pageNumber: Int, ): ApiResult> = ApiResult.Error(ApiError.UnsupportedError) override suspend fun searchBooks( libraryId: String, query: String, - limit: Int + limit: Int, ): ApiResult> = ApiResult.Error(ApiError.UnsupportedError) override suspend fun startPlayback( bookId: String, episodeId: String, supportedMimeTypes: List, - deviceId: String + deviceId: String, ): ApiResult = ApiResult.Error(ApiError.UnsupportedError) override suspend fun fetchBook( - bookId: String + bookId: String, ): ApiResult = ApiResult.Error(ApiError.UnsupportedError) } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/ApiClientConfig.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/ApiClientConfig.kt index d561dc5e..73f4f2b9 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/ApiClientConfig.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/ApiClientConfig.kt @@ -5,5 +5,5 @@ import org.grakovne.lissen.domain.connection.ServerRequestHeader data class ApiClientConfig( val host: String?, val token: String?, - val customHeaders: List? + val customHeaders: List?, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfDataRepository.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfDataRepository.kt index 2a44b57a..2fe96776 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfDataRepository.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfDataRepository.kt @@ -25,7 +25,7 @@ import javax.inject.Singleton @Singleton class AudioBookshelfDataRepository @Inject constructor( private val preferences: LissenSharedPreferences, - private val requestHeadersProvider: RequestHeadersProvider + private val requestHeadersProvider: RequestHeadersProvider, ) { private var configCache: ApiClientConfig? = null @@ -35,65 +35,65 @@ class AudioBookshelfDataRepository @Inject constructor( safeApiCall { getClientInstance().fetchLibraries() } suspend fun fetchAuthorItems( - authorId: String + authorId: String, ): ApiResult = safeApiCall { getClientInstance() .fetchAuthorLibraryItems( - authorId = authorId + authorId = authorId, ) } suspend fun searchPodcasts( libraryId: String, query: String, - limit: Int + limit: Int, ): ApiResult = safeApiCall { getClientInstance() .searchPodcasts( libraryId = libraryId, request = query, - limit = limit + limit = limit, ) } suspend fun searchBooks( libraryId: String, query: String, - limit: Int + limit: Int, ): ApiResult = safeApiCall { getClientInstance() .searchLibraryItems( libraryId = libraryId, request = query, - limit = limit + limit = limit, ) } suspend fun fetchLibraryItems( libraryId: String, pageSize: Int, - pageNumber: Int + pageNumber: Int, ): ApiResult = safeApiCall { getClientInstance() .fetchLibraryItems( libraryId = libraryId, pageSize = pageSize, - pageNumber = pageNumber + pageNumber = pageNumber, ) } suspend fun fetchPodcastItems( libraryId: String, pageSize: Int, - pageNumber: Int + pageNumber: Int, ): ApiResult = safeApiCall { getClientInstance() .fetchPodcastItems( libraryId = libraryId, pageSize = pageSize, - pageNumber = pageNumber + pageNumber = pageNumber, ) } @@ -117,14 +117,14 @@ class AudioBookshelfDataRepository @Inject constructor( suspend fun startPlayback( itemId: String, - request: PlaybackStartRequest + request: PlaybackStartRequest, ): ApiResult = safeApiCall { getClientInstance().startLibraryPlayback(itemId, request) } suspend fun startPodcastPlayback( itemId: String, episodeId: String, - request: PlaybackStartRequest + request: PlaybackStartRequest, ): ApiResult = safeApiCall { getClientInstance().startPodcastPlayback(itemId, episodeId, request) } @@ -133,7 +133,7 @@ class AudioBookshelfDataRepository @Inject constructor( suspend fun publishLibraryItemProgress( itemId: String, - progress: ProgressSyncRequest + progress: ProgressSyncRequest, ): ApiResult = safeApiCall { getClientInstance().publishLibraryItemProgress(itemId, progress) } @@ -144,7 +144,7 @@ class AudioBookshelfDataRepository @Inject constructor( val cache = ApiClientConfig( host = host, token = token, - customHeaders = requestHeadersProvider.fetchRequestHeaders() + customHeaders = requestHeadersProvider.fetchRequestHeaders(), ) val currentClientCache = clientCache @@ -176,10 +176,10 @@ class AudioBookshelfDataRepository @Inject constructor( private fun apiClient( host: String, - token: String? + token: String?, ): ApiClient = ApiClient( host = host, token = token, - requestHeaders = requestHeadersProvider.fetchRequestHeaders() + requestHeaders = requestHeadersProvider.fetchRequestHeaders(), ) } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfMediaRepository.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfMediaRepository.kt index 49f58f00..f1121c73 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfMediaRepository.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfMediaRepository.kt @@ -16,7 +16,7 @@ import javax.inject.Singleton @Singleton class AudioBookshelfMediaRepository @Inject constructor( private val preferences: LissenSharedPreferences, - private val requestHeadersProvider: RequestHeadersProvider + private val requestHeadersProvider: RequestHeadersProvider, ) { private var configCache: ApiClientConfig? = null @@ -26,7 +26,7 @@ class AudioBookshelfMediaRepository @Inject constructor( safeCall { getClientInstance().getItemCover(itemId) } private suspend fun safeCall( - apiCall: suspend () -> Response + apiCall: suspend () -> Response, ): ApiResult { return try { val response = apiCall.invoke() @@ -60,7 +60,7 @@ class AudioBookshelfMediaRepository @Inject constructor( val cache = ApiClientConfig( host = host, token = token, - customHeaders = requestHeadersProvider.fetchRequestHeaders() + customHeaders = requestHeadersProvider.fetchRequestHeaders(), ) val currentClientCache = clientCache @@ -92,11 +92,11 @@ class AudioBookshelfMediaRepository @Inject constructor( private fun apiClient( host: String, - token: String + token: String, ): BinaryApiClient = BinaryApiClient( host = host, token = token, - requestHeaders = requestHeadersProvider.fetchRequestHeaders() + requestHeaders = requestHeadersProvider.fetchRequestHeaders(), ) companion object { diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfSyncService.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfSyncService.kt index 36640820..04ea43b8 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfSyncService.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudioBookshelfSyncService.kt @@ -8,7 +8,7 @@ import javax.inject.Singleton @Singleton class AudioBookshelfSyncService @Inject constructor( - private val dataRepository: AudioBookshelfDataRepository + private val dataRepository: AudioBookshelfDataRepository, ) { private var previousItemId: String? = null @@ -16,7 +16,7 @@ class AudioBookshelfSyncService @Inject constructor( suspend fun syncProgress( itemId: String, - progress: PlaybackProgress + progress: PlaybackProgress, ): ApiResult { val trackedTime = previousTrackedTime .takeIf { itemId == previousItemId } @@ -27,7 +27,7 @@ class AudioBookshelfSyncService @Inject constructor( val request = ProgressSyncRequest( currentTime = progress.currentTime, duration = progress.totalTime, - timeListened = trackedTime + timeListened = trackedTime, ) return dataRepository diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudiobookshelfAuthService.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudiobookshelfAuthService.kt index b2b04926..a11f6592 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudiobookshelfAuthService.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/AudiobookshelfAuthService.kt @@ -16,13 +16,13 @@ import javax.inject.Singleton @Singleton class AudiobookshelfAuthService @Inject constructor( private val loginResponseConverter: LoginResponseConverter, - private val requestHeadersProvider: RequestHeadersProvider + private val requestHeadersProvider: RequestHeadersProvider, ) : ChannelAuthService { override suspend fun authorize( host: String, username: String, - password: String + password: String, ): ApiResult { if (host.isBlank() || !urlPattern.matches(host)) { return ApiResult.Error(ApiError.InvalidCredentialsHost) @@ -33,7 +33,7 @@ class AudiobookshelfAuthService @Inject constructor( try { val apiClient = ApiClient( host = host, - requestHeaders = requestHeadersProvider.fetchRequestHeaders() + requestHeaders = requestHeadersProvider.fetchRequestHeaders(), ) apiService = apiClient.retrofit.create(AudiobookshelfApiClient::class.java) @@ -51,7 +51,7 @@ class AudiobookshelfAuthService @Inject constructor( .apply(it) .let { ApiResult.Success(it) } }, - onFailure = { ApiResult.Error(it.code) } + onFailure = { ApiResult.Error(it.code) }, ) } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/RequestHeadersProvider.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/RequestHeadersProvider.kt index be79c331..6f1a5a71 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/RequestHeadersProvider.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/RequestHeadersProvider.kt @@ -8,7 +8,7 @@ import javax.inject.Singleton @Singleton class RequestHeadersProvider @Inject constructor( - private val preferences: LissenSharedPreferences + private val preferences: LissenSharedPreferences, ) { fun fetchRequestHeaders(): List { diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/SafeApiCall.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/SafeApiCall.kt index eaccf2fe..4fc3537d 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/SafeApiCall.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/api/SafeApiCall.kt @@ -9,7 +9,7 @@ import java.io.IOException private const val TAG: String = "safeApiCall" suspend fun safeApiCall( - apiCall: suspend () -> Response + apiCall: suspend () -> Response, ): ApiResult { return try { val response = apiCall.invoke() diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/client/AudiobookshelfApiClient.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/client/AudiobookshelfApiClient.kt index f4591e52..a746a80b 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/client/AudiobookshelfApiClient.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/client/AudiobookshelfApiClient.kt @@ -31,12 +31,12 @@ interface AudiobookshelfApiClient { @GET("/api/libraries/{libraryId}/personalized") suspend fun fetchPersonalizedFeed( - @Path("libraryId") libraryId: String + @Path("libraryId") libraryId: String, ): Response> @GET("/api/me/progress/{itemId}") suspend fun fetchLibraryItemProgress( - @Path("itemId") itemId: String + @Path("itemId") itemId: String, ): Response @POST("/api/authorize") @@ -49,67 +49,67 @@ interface AudiobookshelfApiClient { suspend fun fetchLibraryItems( @Path("libraryId") libraryId: String, @Query("limit") pageSize: Int, - @Query("page") pageNumber: Int + @Query("page") pageNumber: Int, ): Response @GET("api/libraries/{libraryId}/items?sort=mtimeMs&desc=1") suspend fun fetchPodcastItems( @Path("libraryId") libraryId: String, @Query("limit") pageSize: Int, - @Query("page") pageNumber: Int + @Query("page") pageNumber: Int, ): Response @GET("api/libraries/{libraryId}/search") suspend fun searchLibraryItems( @Path("libraryId") libraryId: String, @Query("q") request: String, - @Query("limit") limit: Int + @Query("limit") limit: Int, ): Response @GET("api/libraries/{libraryId}/search") suspend fun searchPodcasts( @Path("libraryId") libraryId: String, @Query("q") request: String, - @Query("limit") limit: Int + @Query("limit") limit: Int, ): Response @GET("/api/items/{itemId}") suspend fun fetchLibraryItem( - @Path("itemId") itemId: String + @Path("itemId") itemId: String, ): Response @GET("/api/items/{itemId}") suspend fun fetchPodcastEpisode( - @Path("itemId") itemId: String + @Path("itemId") itemId: String, ): Response @GET("/api/authors/{authorId}?include=items") suspend fun fetchAuthorLibraryItems( - @Path("authorId") authorId: String + @Path("authorId") authorId: String, ): Response @POST("/api/session/{itemId}/sync") suspend fun publishLibraryItemProgress( @Path("itemId") itemId: String, - @Body syncProgressRequest: ProgressSyncRequest + @Body syncProgressRequest: ProgressSyncRequest, ): Response @POST("/api/items/{itemId}/play/{episodeId}") suspend fun startPodcastPlayback( @Path("itemId") itemId: String, @Path("episodeId") episodeId: String, - @Body syncProgressRequest: PlaybackStartRequest + @Body syncProgressRequest: PlaybackStartRequest, ): Response @POST("/api/items/{itemId}/play") suspend fun startLibraryPlayback( @Path("itemId") itemId: String, - @Body syncProgressRequest: PlaybackStartRequest + @Body syncProgressRequest: PlaybackStartRequest, ): Response @POST("/api/session/{sessionId}/close") suspend fun stopPlayback( - @Path("sessionId") sessionId: String + @Path("sessionId") sessionId: String, ): Response @POST("login") diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/client/AudiobookshelfMediaClient.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/client/AudiobookshelfMediaClient.kt index b8c6ca3a..f677d1ea 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/client/AudiobookshelfMediaClient.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/client/AudiobookshelfMediaClient.kt @@ -11,6 +11,6 @@ interface AudiobookshelfMediaClient { @GET("/api/items/{itemId}/cover") @Streaming suspend fun getItemCover( - @Path("itemId") itemId: String + @Path("itemId") itemId: String, ): Response } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/ConnectionInfoResponseConverter.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/ConnectionInfoResponseConverter.kt index f2ee82f9..f6903401 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/ConnectionInfoResponseConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/ConnectionInfoResponseConverter.kt @@ -11,6 +11,6 @@ class ConnectionInfoResponseConverter @Inject constructor() { fun apply(response: ConnectionInfoResponse): ConnectionInfo = ConnectionInfo( username = response.user.username, serverVersion = response.serverSettings.version, - buildNumber = response.serverSettings.buildNumber + buildNumber = response.serverSettings.buildNumber, ) } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/LibraryPageResponseConverter.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/LibraryPageResponseConverter.kt index 8208c9fc..101d2a44 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/LibraryPageResponseConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/LibraryPageResponseConverter.kt @@ -20,13 +20,13 @@ class LibraryPageResponseConverter @Inject constructor() { title = title, author = it.media.metadata.authorName, cachedState = BookCachedState.ABLE_TO_CACHE, - duration = it.media.duration.toInt() + duration = it.media.duration.toInt(), ) } .let { PagedItems( items = it, - currentPage = response.page + currentPage = response.page, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/LoginResponseConverter.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/LoginResponseConverter.kt index a314aa5e..6927a637 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/LoginResponseConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/LoginResponseConverter.kt @@ -10,6 +10,6 @@ class LoginResponseConverter @Inject constructor() { fun apply(response: LoggedUserResponse): UserAccount = UserAccount( token = response.user.token, - preferredLibraryId = response.userDefaultLibraryId + preferredLibraryId = response.userDefaultLibraryId, ) } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/PlaybackSessionResponseConverter.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/PlaybackSessionResponseConverter.kt index e4851a66..a37aea4c 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/PlaybackSessionResponseConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/PlaybackSessionResponseConverter.kt @@ -11,6 +11,6 @@ class PlaybackSessionResponseConverter @Inject constructor() { fun apply(response: PlaybackSessionResponse): PlaybackSession = PlaybackSession( sessionId = response.id, - bookId = response.libraryItemId + bookId = response.libraryItemId, ) } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/RecentListeningResponseConverter.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/RecentListeningResponseConverter.kt index 28ad655e..fe73d433 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/RecentListeningResponseConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/converter/RecentListeningResponseConverter.kt @@ -16,7 +16,7 @@ class RecentListeningResponseConverter @Inject constructor() { RecentBook( id = it.id, title = it.media.metadata.title, - author = it.media.metadata.authorName + author = it.media.metadata.authorName, ) } ?: emptyList() diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/MediaProgressResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/MediaProgressResponse.kt index 74b01efd..85a48bc0 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/MediaProgressResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/MediaProgressResponse.kt @@ -5,5 +5,5 @@ data class MediaProgressResponse( val episodeId: String?, val currentTime: Double, val isFinished: Boolean, - val lastUpdate: Long + val lastUpdate: Long, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/connection/ConnectionInfoResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/connection/ConnectionInfoResponse.kt index 85f5a3df..d09f0c5e 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/connection/ConnectionInfoResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/connection/ConnectionInfoResponse.kt @@ -2,14 +2,14 @@ package org.grakovne.lissen.channel.audiobookshelf.common.model.connection data class ConnectionInfoResponse( val user: ConnectionInfoUserResponse, - val serverSettings: ConnectionInfoServerResponse + val serverSettings: ConnectionInfoServerResponse, ) data class ConnectionInfoUserResponse( - val username: String + val username: String, ) data class ConnectionInfoServerResponse( val version: String, - val buildNumber: String + val buildNumber: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/metadata/AuthorItemsResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/metadata/AuthorItemsResponse.kt index 1bb0ed54..d515ff17 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/metadata/AuthorItemsResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/metadata/AuthorItemsResponse.kt @@ -3,5 +3,5 @@ package org.grakovne.lissen.channel.audiobookshelf.common.model.metadata import org.grakovne.lissen.channel.audiobookshelf.library.model.LibraryItem data class AuthorItemsResponse( - val libraryItems: List + val libraryItems: List, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/metadata/LibraryResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/metadata/LibraryResponse.kt index 0cac31a7..43bfb505 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/metadata/LibraryResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/metadata/LibraryResponse.kt @@ -1,11 +1,11 @@ package org.grakovne.lissen.channel.audiobookshelf.common.model.metadata data class LibraryResponse( - val libraries: List + val libraries: List, ) data class LibraryItemResponse( val id: String, val name: String, - val mediaType: String + val mediaType: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/PlaybackSessionResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/PlaybackSessionResponse.kt index 9971b1ad..0ef5b53e 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/PlaybackSessionResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/PlaybackSessionResponse.kt @@ -2,5 +2,5 @@ package org.grakovne.lissen.channel.audiobookshelf.common.model.playback data class PlaybackSessionResponse( val id: String, - val libraryItemId: String + val libraryItemId: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/PlaybackStartRequest.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/PlaybackStartRequest.kt index dad1a969..9c60cc50 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/PlaybackStartRequest.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/PlaybackStartRequest.kt @@ -5,11 +5,11 @@ data class PlaybackStartRequest( val supportedMimeTypes: List, val mediaPlayer: String, val forceTranscode: Boolean, - val forceDirectPlay: Boolean + val forceDirectPlay: Boolean, ) data class DeviceInfo( val clientName: String, val deviceId: String, - val deviceName: String + val deviceName: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/ProgressSyncRequest.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/ProgressSyncRequest.kt index 8508d2fd..3f61a233 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/ProgressSyncRequest.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/playback/ProgressSyncRequest.kt @@ -3,5 +3,5 @@ package org.grakovne.lissen.channel.audiobookshelf.common.model.playback data class ProgressSyncRequest( val timeListened: Int, val duration: Double, - val currentTime: Double + val currentTime: Double, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/CredentialsLoginRequest.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/CredentialsLoginRequest.kt index 51c51f5f..8ffbd345 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/CredentialsLoginRequest.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/CredentialsLoginRequest.kt @@ -2,5 +2,5 @@ package org.grakovne.lissen.channel.audiobookshelf.common.model.user data class CredentialsLoginRequest( val username: String, - val password: String + val password: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/LoggedUserResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/LoggedUserResponse.kt index 3c44cffe..988e383d 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/LoggedUserResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/LoggedUserResponse.kt @@ -2,10 +2,10 @@ package org.grakovne.lissen.channel.audiobookshelf.common.model.user data class LoggedUserResponse( val user: User, - val userDefaultLibraryId: String? + val userDefaultLibraryId: String?, ) data class User( val id: String, - val token: String + val token: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/PersonalizedFeedResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/PersonalizedFeedResponse.kt index 84dcc4bb..a754213b 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/PersonalizedFeedResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/PersonalizedFeedResponse.kt @@ -3,22 +3,22 @@ package org.grakovne.lissen.channel.audiobookshelf.common.model.user data class PersonalizedFeedResponse( val id: String, val labelStringKey: String, - val entities: List + val entities: List, ) data class PersonalizedFeedItemResponse( val id: String, val libraryId: String, val media: PersonalizedFeedItemMediaResponse, - val updateAt: Long + val updateAt: Long, ) data class PersonalizedFeedItemMediaResponse( val id: String, - val metadata: PersonalizedFeedItemMetadataResponse + val metadata: PersonalizedFeedItemMetadataResponse, ) data class PersonalizedFeedItemMetadataResponse( val title: String, - val authorName: String + val authorName: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/UserInfoResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/UserInfoResponse.kt index f1d0a2b1..6d2ca915 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/UserInfoResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/common/model/user/UserInfoResponse.kt @@ -3,9 +3,9 @@ package org.grakovne.lissen.channel.audiobookshelf.common.model.user import org.grakovne.lissen.channel.audiobookshelf.common.model.MediaProgressResponse data class UserInfoResponse( - val user: UserResponse + val user: UserResponse, ) data class UserResponse( - val mediaProgress: List? + val mediaProgress: List?, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/LibraryAudiobookshelfChannel.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/LibraryAudiobookshelfChannel.kt index d99e511f..fbf8fcc3 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/LibraryAudiobookshelfChannel.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/LibraryAudiobookshelfChannel.kt @@ -39,7 +39,7 @@ class LibraryAudiobookshelfChannel @Inject constructor( connectionInfoResponseConverter: ConnectionInfoResponseConverter, private val libraryPageResponseConverter: LibraryPageResponseConverter, private val bookResponseConverter: BookResponseConverter, - private val librarySearchItemsConverter: LibrarySearchItemsConverter + private val librarySearchItemsConverter: LibrarySearchItemsConverter, ) : AudiobookshelfChannel( dataRepository = dataRepository, mediaRepository = mediaRepository, @@ -48,7 +48,7 @@ class LibraryAudiobookshelfChannel @Inject constructor( preferences = preferences, syncService = syncService, libraryResponseConverter = libraryResponseConverter, - connectionInfoResponseConverter = connectionInfoResponseConverter + connectionInfoResponseConverter = connectionInfoResponseConverter, ) { override fun getLibraryType() = LibraryType.LIBRARY @@ -56,19 +56,19 @@ class LibraryAudiobookshelfChannel @Inject constructor( override suspend fun fetchBooks( libraryId: String, pageSize: Int, - pageNumber: Int + pageNumber: Int, ): ApiResult> = dataRepository .fetchLibraryItems( libraryId = libraryId, pageSize = pageSize, - pageNumber = pageNumber + pageNumber = pageNumber, ) .map { libraryPageResponseConverter.apply(it) } override suspend fun searchBooks( libraryId: String, query: String, - limit: Int + limit: Int, ): ApiResult> = coroutineScope { val byTitle = async { dataRepository @@ -92,7 +92,7 @@ class LibraryAudiobookshelfChannel @Inject constructor( authorResponse .fold( onSuccess = { it.libraryItems }, - onFailure = { emptyList() } + onFailure = { emptyList() }, ) } } @@ -106,24 +106,24 @@ class LibraryAudiobookshelfChannel @Inject constructor( bookId: String, episodeId: String, supportedMimeTypes: List, - deviceId: String + deviceId: String, ): ApiResult { val request = PlaybackStartRequest( supportedMimeTypes = supportedMimeTypes, deviceInfo = DeviceInfo( clientName = getClientName(), deviceId = deviceId, - deviceName = getClientName() + deviceName = getClientName(), ), forceTranscode = false, forceDirectPlay = false, - mediaPlayer = getClientName() + mediaPlayer = getClientName(), ) return dataRepository .startPlayback( itemId = bookId, - request = request + request = request, ) .map { sessionResponseConverter.apply(it) } } @@ -138,10 +138,10 @@ class LibraryAudiobookshelfChannel @Inject constructor( .await() .fold( onSuccess = { Success(bookResponseConverter.apply(item, it)) }, - onFailure = { Success(bookResponseConverter.apply(item, null)) } + onFailure = { Success(bookResponseConverter.apply(item, null)) }, ) }, - onFailure = { ApiResult.Error(it.code) } + onFailure = { ApiResult.Error(it.code) }, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/converter/BookResponseConverter.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/converter/BookResponseConverter.kt index 33fa3df9..1c0c02c4 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/converter/BookResponseConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/converter/BookResponseConverter.kt @@ -15,7 +15,7 @@ class BookResponseConverter @Inject constructor() { fun apply( item: BookResponse, - progressResponse: MediaProgressResponse? = null + progressResponse: MediaProgressResponse? = null, ): DetailedItem { val maybeChapters = item .media @@ -27,7 +27,7 @@ class BookResponseConverter @Inject constructor() { end = it.end, title = it.title, id = it.id, - duration = it.end - it.start + duration = it.end - it.start, ) } @@ -44,8 +44,8 @@ class BookResponseConverter @Inject constructor() { title = file.metaTags?.tagTitle ?: file.metadata.filename.removeSuffix(file.metadata.ext), duration = file.duration, - id = file.ino - ) + id = file.ino, + ), ) accDuration + file.duration to chapters } @@ -68,7 +68,7 @@ class BookResponseConverter @Inject constructor() { ?.tagTitle ?: (it.metadata.filename.removeSuffix(it.metadata.ext)), duration = it.duration, - mimeType = it.mimeType + mimeType = it.mimeType, ) } ?: emptyList(), @@ -78,9 +78,9 @@ class BookResponseConverter @Inject constructor() { MediaProgress( currentTime = it.currentTime, isFinished = it.isFinished, - lastUpdate = it.lastUpdate + lastUpdate = it.lastUpdate, ) - } + }, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/converter/LibrarySearchItemsConverter.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/converter/LibrarySearchItemsConverter.kt index 305ffe30..8ccdb447 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/converter/LibrarySearchItemsConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/converter/LibrarySearchItemsConverter.kt @@ -18,7 +18,7 @@ class LibrarySearchItemsConverter @Inject constructor() { title = title, author = it.media.metadata.authorName, cachedState = BookCachedState.ABLE_TO_CACHE, - duration = it.media.duration.toInt() + duration = it.media.duration.toInt(), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/BookResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/BookResponse.kt index 92720bac..1fd91a85 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/BookResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/BookResponse.kt @@ -3,23 +3,23 @@ package org.grakovne.lissen.channel.audiobookshelf.library.model data class BookResponse( val id: String, val ino: String, - val media: BookMedia + val media: BookMedia, ) data class BookMedia( val metadata: LibraryMetadataResponse, val audioFiles: List?, - val chapters: List? + val chapters: List?, ) data class LibraryMetadataResponse( val title: String, - val authors: List? + val authors: List?, ) data class LibraryAuthorResponse( val id: String, - val name: String + val name: String, ) data class BookAudioFileResponse( @@ -28,23 +28,23 @@ data class BookAudioFileResponse( val duration: Double, val metadata: AudioFileMetadata, val metaTags: AudioFileTag?, - val mimeType: String + val mimeType: String, ) data class AudioFileMetadata( val filename: String, val ext: String, - val size: Long + val size: Long, ) data class AudioFileTag( val tagAlbum: String, - val tagTitle: String + val tagTitle: String, ) data class LibraryChapterResponse( val start: Double, val end: Double, val title: String, - val id: String + val id: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/LibraryItemsResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/LibraryItemsResponse.kt index 9893106f..ad2bab82 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/LibraryItemsResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/LibraryItemsResponse.kt @@ -2,20 +2,20 @@ package org.grakovne.lissen.channel.audiobookshelf.library.model data class LibraryItemsResponse( val results: List, - val page: Int + val page: Int, ) data class LibraryItem( val id: String, - val media: Media + val media: Media, ) data class Media( val duration: Double, - val metadata: LibraryMetadata + val metadata: LibraryMetadata, ) data class LibraryMetadata( val title: String?, - val authorName: String? + val authorName: String?, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/LibrarySearchResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/LibrarySearchResponse.kt index 9d8e01df..e2efa031 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/LibrarySearchResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/library/model/LibrarySearchResponse.kt @@ -2,14 +2,14 @@ package org.grakovne.lissen.channel.audiobookshelf.library.model data class LibrarySearchResponse( val book: List, - val authors: List + val authors: List, ) data class LibrarySearchItemResponse( - val libraryItem: LibraryItem + val libraryItem: LibraryItem, ) data class LibrarySearchAuthorResponse( val id: String, - val name: String + val name: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/PodcastAudiobookshelfChannel.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/PodcastAudiobookshelfChannel.kt index 745f1243..a3d0e556 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/PodcastAudiobookshelfChannel.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/PodcastAudiobookshelfChannel.kt @@ -37,7 +37,7 @@ class PodcastAudiobookshelfChannel @Inject constructor( connectionInfoResponseConverter: ConnectionInfoResponseConverter, private val podcastPageResponseConverter: PodcastPageResponseConverter, private val podcastResponseConverter: PodcastResponseConverter, - private val podcastSearchItemsConverter: PodcastSearchItemsConverter + private val podcastSearchItemsConverter: PodcastSearchItemsConverter, ) : AudiobookshelfChannel( dataRepository = dataRepository, mediaRepository = mediaRepository, @@ -46,7 +46,7 @@ class PodcastAudiobookshelfChannel @Inject constructor( preferences = preferences, syncService = syncService, libraryResponseConverter = libraryResponseConverter, - connectionInfoResponseConverter = connectionInfoResponseConverter + connectionInfoResponseConverter = connectionInfoResponseConverter, ) { override fun getLibraryType() = LibraryType.PODCAST @@ -54,19 +54,19 @@ class PodcastAudiobookshelfChannel @Inject constructor( override suspend fun fetchBooks( libraryId: String, pageSize: Int, - pageNumber: Int + pageNumber: Int, ): ApiResult> = dataRepository .fetchPodcastItems( libraryId = libraryId, pageSize = pageSize, - pageNumber = pageNumber + pageNumber = pageNumber, ) .map { podcastPageResponseConverter.apply(it) } override suspend fun searchBooks( libraryId: String, query: String, - limit: Int + limit: Int, ): ApiResult> = coroutineScope { val byTitle = async { dataRepository @@ -83,25 +83,25 @@ class PodcastAudiobookshelfChannel @Inject constructor( bookId: String, episodeId: String, supportedMimeTypes: List, - deviceId: String + deviceId: String, ): ApiResult { val request = PlaybackStartRequest( supportedMimeTypes = supportedMimeTypes, deviceInfo = DeviceInfo( clientName = getClientName(), deviceId = deviceId, - deviceName = getClientName() + deviceName = getClientName(), ), forceTranscode = false, forceDirectPlay = false, - mediaPlayer = getClientName() + mediaPlayer = getClientName(), ) return dataRepository .startPodcastPlayback( itemId = bookId, episodeId = episodeId, - request = request + request = request, ) .map { sessionResponseConverter.apply(it) } } @@ -112,7 +112,7 @@ class PodcastAudiobookshelfChannel @Inject constructor( .fetchUserInfoResponse() .fold( onSuccess = { it.user.mediaProgress ?: emptyList() }, - onFailure = { emptyList() } + onFailure = { emptyList() }, ) if (progress.isEmpty()) { diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastPageResponseConverter.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastPageResponseConverter.kt index 69373016..efa95942 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastPageResponseConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastPageResponseConverter.kt @@ -20,13 +20,13 @@ class PodcastPageResponseConverter @Inject constructor() { title = title, author = it.media.metadata.author, cachedState = BookCachedState.UNABLE_TO_CACHE, - duration = it.media.duration.toInt() + duration = it.media.duration.toInt(), ) } .let { PagedItems( items = it, - currentPage = response.page + currentPage = response.page, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastResponseConverter.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastResponseConverter.kt index e0fcfa18..1fbbf0c1 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastResponseConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastResponseConverter.kt @@ -17,7 +17,7 @@ class PodcastResponseConverter @Inject constructor() { fun apply( item: PodcastResponse, - progressResponse: MediaProgressResponse? = null + progressResponse: MediaProgressResponse? = null, ): DetailedItem { val orderedEpisodes = item .media @@ -33,8 +33,8 @@ class PodcastResponseConverter @Inject constructor() { end = accDuration + file.audioFile.duration, title = file.title, duration = file.audioFile.duration, - id = file.id - ) + id = file.id, + ), ) accDuration + file.audioFile.duration to chapters } @@ -51,7 +51,7 @@ class PodcastResponseConverter @Inject constructor() { id = it.audioFile.ino, name = it.title, duration = it.audioFile.duration, - mimeType = it.audioFile.mimeType + mimeType = it.audioFile.mimeType, ) } ?: emptyList(), @@ -61,9 +61,9 @@ class PodcastResponseConverter @Inject constructor() { MediaProgress( currentTime = it.currentTime, isFinished = it.isFinished, - lastUpdate = it.lastUpdate + lastUpdate = it.lastUpdate, ) - } + }, ) } @@ -80,7 +80,7 @@ class PodcastResponseConverter @Inject constructor() { } } .thenBy { it.season.safeToInt() } - .thenBy { it.episode.safeToInt() } + .thenBy { it.episode.safeToInt() }, ) private fun String?.safeToInt(): Int? { diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastSearchItemsConverter.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastSearchItemsConverter.kt index 7ee1224a..bf191f67 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastSearchItemsConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/converter/PodcastSearchItemsConverter.kt @@ -18,7 +18,7 @@ class PodcastSearchItemsConverter @Inject constructor() { title = title, author = it.media.metadata.author, cachedState = BookCachedState.UNABLE_TO_CACHE, - duration = it.media.duration.toInt() + duration = it.media.duration.toInt(), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastItemsResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastItemsResponse.kt index 3471cdba..3a5a4214 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastItemsResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastItemsResponse.kt @@ -2,20 +2,20 @@ package org.grakovne.lissen.channel.audiobookshelf.podcast.model data class PodcastItemsResponse( val results: List, - val page: Int + val page: Int, ) data class PodcastItem( val id: String, - val media: PodcastItemMedia + val media: PodcastItemMedia, ) data class PodcastItemMedia( val duration: Double, - val metadata: PodcastMetadata + val metadata: PodcastMetadata, ) data class PodcastMetadata( val title: String?, - val author: String? + val author: String?, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastResponse.kt index e0024a71..d82d75cd 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastResponse.kt @@ -3,17 +3,17 @@ package org.grakovne.lissen.channel.audiobookshelf.podcast.model data class PodcastResponse( val id: String, val ino: String, - val media: PodcastMedia + val media: PodcastMedia, ) data class PodcastMedia( val metadata: PodcastMediaMetadataResponse, - val episodes: List? + val episodes: List?, ) data class PodcastMediaMetadataResponse( val title: String, - val author: String? + val author: String?, ) data class PodcastEpisodeResponse( @@ -22,12 +22,12 @@ data class PodcastEpisodeResponse( val episode: String?, val pubDate: String?, val title: String, - val audioFile: PodcastAudioFileResponse + val audioFile: PodcastAudioFileResponse, ) data class PodcastAudioFileResponse( val index: Int, val ino: String, val duration: Double, - val mimeType: String + val mimeType: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastSearchResponse.kt b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastSearchResponse.kt index 0199716c..3b487147 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastSearchResponse.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/audiobookshelf/podcast/model/PodcastSearchResponse.kt @@ -1,9 +1,9 @@ package org.grakovne.lissen.channel.audiobookshelf.podcast.model data class PodcastSearchResponse( - val podcast: List + val podcast: List, ) data class PodcastSearchItemResponse( - val libraryItem: PodcastItem + val libraryItem: PodcastItem, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/common/ApiClient.kt b/app/src/main/java/org/grakovne/lissen/channel/common/ApiClient.kt index c8949654..fc7fb65b 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/common/ApiClient.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/common/ApiClient.kt @@ -13,7 +13,7 @@ import java.util.concurrent.TimeUnit class ApiClient( host: String, requestHeaders: List?, - token: String? = null + token: String? = null, ) { private val httpClient = OkHttpClient @@ -22,7 +22,7 @@ class ApiClient( .addInterceptor( HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.NONE - } + }, ) .addInterceptor { chain: Interceptor.Chain -> val original: Request = chain.request() diff --git a/app/src/main/java/org/grakovne/lissen/channel/common/ApiResult.kt b/app/src/main/java/org/grakovne/lissen/channel/common/ApiResult.kt index 8c2d8dbf..0835a186 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/common/ApiResult.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/common/ApiResult.kt @@ -6,7 +6,7 @@ sealed class ApiResult { fun fold( onSuccess: (T) -> R, - onFailure: (Error) -> R + onFailure: (Error) -> R, ): R { return when (this) { is Success -> onSuccess(this.data) @@ -16,7 +16,7 @@ sealed class ApiResult { suspend fun foldAsync( onSuccess: suspend (T) -> R, - onFailure: suspend (Error) -> R + onFailure: suspend (Error) -> R, ): R { return when (this) { is Success -> onSuccess(this.data) diff --git a/app/src/main/java/org/grakovne/lissen/channel/common/AuthType.kt b/app/src/main/java/org/grakovne/lissen/channel/common/AuthType.kt index 6b6764a8..ba4e8df8 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/common/AuthType.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/common/AuthType.kt @@ -2,5 +2,5 @@ package org.grakovne.lissen.channel.common enum class AuthType { CREDENTIALS, - O_AUTH + O_AUTH, } diff --git a/app/src/main/java/org/grakovne/lissen/channel/common/BinaryApiClient.kt b/app/src/main/java/org/grakovne/lissen/channel/common/BinaryApiClient.kt index ac5dd8b8..3b43c208 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/common/BinaryApiClient.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/common/BinaryApiClient.kt @@ -11,7 +11,7 @@ import java.util.concurrent.TimeUnit class BinaryApiClient( host: String, requestHeaders: List?, - token: String + token: String, ) { private val httpClient = OkHttpClient @@ -20,7 +20,7 @@ class BinaryApiClient( .addInterceptor( HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.NONE - } + }, ) .addInterceptor { chain: Interceptor.Chain -> val request = chain diff --git a/app/src/main/java/org/grakovne/lissen/channel/common/ChannelAuthService.kt b/app/src/main/java/org/grakovne/lissen/channel/common/ChannelAuthService.kt index 79754ed3..fb3848a2 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/common/ChannelAuthService.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/common/ChannelAuthService.kt @@ -7,7 +7,7 @@ interface ChannelAuthService { suspend fun authorize( host: String, username: String, - password: String + password: String, ): ApiResult fun getAuthType(): AuthType diff --git a/app/src/main/java/org/grakovne/lissen/channel/common/ChannelCode.kt b/app/src/main/java/org/grakovne/lissen/channel/common/ChannelCode.kt index 739a3d33..04978961 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/common/ChannelCode.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/common/ChannelCode.kt @@ -2,5 +2,5 @@ package org.grakovne.lissen.channel.common enum class ChannelCode { - AUDIOBOOKSHELF + AUDIOBOOKSHELF, } diff --git a/app/src/main/java/org/grakovne/lissen/channel/common/ChannelModule.kt b/app/src/main/java/org/grakovne/lissen/channel/common/ChannelModule.kt index 791b3ee2..21ca86d6 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/common/ChannelModule.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/common/ChannelModule.kt @@ -17,10 +17,10 @@ object ChannelModule { @Provides @Singleton fun getChannelProviders( - audiobookshelfChannelProvider: AudiobookshelfChannelProvider + audiobookshelfChannelProvider: AudiobookshelfChannelProvider, ): Map { return mapOf( - audiobookshelfChannelProvider.getChannelCode() to audiobookshelfChannelProvider + audiobookshelfChannelProvider.getChannelCode() to audiobookshelfChannelProvider, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/channel/common/ConnectionInfo.kt b/app/src/main/java/org/grakovne/lissen/channel/common/ConnectionInfo.kt index f4ca6392..0f9c2954 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/common/ConnectionInfo.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/common/ConnectionInfo.kt @@ -3,5 +3,5 @@ package org.grakovne.lissen.channel.common data class ConnectionInfo( val username: String, val serverVersion: String, - val buildNumber: String + val buildNumber: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/channel/common/LibraryType.kt b/app/src/main/java/org/grakovne/lissen/channel/common/LibraryType.kt index d2c9729a..4ea705eb 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/common/LibraryType.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/common/LibraryType.kt @@ -3,5 +3,5 @@ package org.grakovne.lissen.channel.common enum class LibraryType { LIBRARY, PODCAST, - UNKNOWN + UNKNOWN, } diff --git a/app/src/main/java/org/grakovne/lissen/channel/common/MediaChannel.kt b/app/src/main/java/org/grakovne/lissen/channel/common/MediaChannel.kt index 83aba960..7a84e083 100644 --- a/app/src/main/java/org/grakovne/lissen/channel/common/MediaChannel.kt +++ b/app/src/main/java/org/grakovne/lissen/channel/common/MediaChannel.kt @@ -16,28 +16,28 @@ interface MediaChannel { fun provideFileUri( libraryItemId: String, - fileId: String + fileId: String, ): Uri suspend fun syncProgress( sessionId: String, - progress: PlaybackProgress + progress: PlaybackProgress, ): ApiResult suspend fun fetchBookCover( - bookId: String + bookId: String, ): ApiResult suspend fun fetchBooks( libraryId: String, pageSize: Int, - pageNumber: Int + pageNumber: Int, ): ApiResult> suspend fun searchBooks( libraryId: String, query: String, - limit: Int + limit: Int, ): ApiResult> suspend fun fetchLibraries(): ApiResult> @@ -46,7 +46,7 @@ interface MediaChannel { bookId: String, episodeId: String, supportedMimeTypes: List, - deviceId: String + deviceId: String, ): ApiResult suspend fun fetchConnectionInfo(): ApiResult diff --git a/app/src/main/java/org/grakovne/lissen/common/ColorScheme.kt b/app/src/main/java/org/grakovne/lissen/common/ColorScheme.kt index fe6c4f14..da42d59d 100644 --- a/app/src/main/java/org/grakovne/lissen/common/ColorScheme.kt +++ b/app/src/main/java/org/grakovne/lissen/common/ColorScheme.kt @@ -3,5 +3,5 @@ package org.grakovne.lissen.common enum class ColorScheme { FOLLOW_SYSTEM, LIGHT, - DARK + DARK, } diff --git a/app/src/main/java/org/grakovne/lissen/common/NetworkQualityService.kt b/app/src/main/java/org/grakovne/lissen/common/NetworkQualityService.kt index 93510007..f0958f6a 100644 --- a/app/src/main/java/org/grakovne/lissen/common/NetworkQualityService.kt +++ b/app/src/main/java/org/grakovne/lissen/common/NetworkQualityService.kt @@ -14,7 +14,7 @@ import javax.inject.Singleton @Singleton class NetworkQualityService @Inject constructor( - @ApplicationContext private val context: Context + @ApplicationContext private val context: Context, ) { private val connectivityManager = diff --git a/app/src/main/java/org/grakovne/lissen/content/LissenMediaProvider.kt b/app/src/main/java/org/grakovne/lissen/content/LissenMediaProvider.kt index 58d267ba..f5289d31 100644 --- a/app/src/main/java/org/grakovne/lissen/content/LissenMediaProvider.kt +++ b/app/src/main/java/org/grakovne/lissen/content/LissenMediaProvider.kt @@ -27,12 +27,12 @@ import javax.inject.Singleton class LissenMediaProvider @Inject constructor( private val sharedPreferences: LissenSharedPreferences, private val channels: Map, - private val localCacheRepository: LocalCacheRepository + private val localCacheRepository: LocalCacheRepository, ) { fun provideFileUri( libraryItemId: String, - chapterId: String + chapterId: String, ): ApiResult { Log.d(TAG, "Fetching File $libraryItemId and $chapterId URI") @@ -56,7 +56,7 @@ class LissenMediaProvider @Inject constructor( suspend fun syncProgress( sessionId: String, bookId: String, - progress: PlaybackProgress + progress: PlaybackProgress, ): ApiResult { Log.d(TAG, "Syncing Progress for $bookId. $progress") @@ -69,7 +69,7 @@ class LissenMediaProvider @Inject constructor( } suspend fun fetchBookCover( - bookId: String + bookId: String, ): ApiResult { Log.d(TAG, "Fetching Cover stream for $bookId") @@ -82,7 +82,7 @@ class LissenMediaProvider @Inject constructor( suspend fun searchBooks( libraryId: String, query: String, - limit: Int + limit: Int, ): ApiResult> { Log.d(TAG, "Searching books with query $query of library: $libraryId") @@ -92,7 +92,7 @@ class LissenMediaProvider @Inject constructor( .searchBooks( libraryId = libraryId, query = query, - limit = limit + limit = limit, ) } } @@ -100,7 +100,7 @@ class LissenMediaProvider @Inject constructor( suspend fun fetchBooks( libraryId: String, pageSize: Int, - pageNumber: Int + pageNumber: Int, ): ApiResult> { Log.d(TAG, "Fetching page $pageNumber of library: $libraryId") @@ -124,7 +124,7 @@ class LissenMediaProvider @Inject constructor( .also { it.foldAsync( onSuccess = { libraries -> localCacheRepository.updateLibraries(libraries) }, - onFailure = {} + onFailure = {}, ) } } @@ -134,7 +134,7 @@ class LissenMediaProvider @Inject constructor( bookId: String, chapterId: String, supportedMimeTypes: List, - deviceId: String + deviceId: String, ): ApiResult { Log.d(TAG, "Starting Playback for $bookId. $supportedMimeTypes are supported") @@ -144,13 +144,13 @@ class LissenMediaProvider @Inject constructor( bookId = bookId, episodeId = chapterId, supportedMimeTypes = supportedMimeTypes, - deviceId = deviceId + deviceId = deviceId, ) } } suspend fun fetchRecentListenedBooks( - libraryId: String + libraryId: String, ): ApiResult> { Log.d(TAG, "Fetching Recent books of library $libraryId") @@ -161,7 +161,7 @@ class LissenMediaProvider @Inject constructor( } suspend fun fetchBook( - bookId: String + bookId: String, ): ApiResult { Log.d(TAG, "Fetching Detailed book info for $bookId") @@ -181,7 +181,7 @@ class LissenMediaProvider @Inject constructor( suspend fun authorize( host: String, username: String, - password: String + password: String, ): ApiResult { Log.d(TAG, "Authorizing for $username@$host") return provideAuthService().authorize(host, username, password) @@ -204,7 +204,7 @@ class LissenMediaProvider @Inject constructor( Channel Progress: $channelProgress Local Progress: $cachedProgress Final Progress: $updatedProgress - """.trimIndent() + """.trimIndent(), ) return detailedItem.copy(progress = updatedProgress) diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/BookCachingService.kt b/app/src/main/java/org/grakovne/lissen/content/cache/BookCachingService.kt index 956fb569..b22133f2 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/BookCachingService.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/BookCachingService.kt @@ -32,12 +32,12 @@ class BookCachingService @Inject constructor( private val bookRepository: CachedBookRepository, private val libraryRepository: CachedLibraryRepository, private val properties: CacheBookStorageProperties, - private val requestHeadersProvider: RequestHeadersProvider + private val requestHeadersProvider: RequestHeadersProvider, ) { fun cacheBook( book: Book, - channel: MediaChannel + channel: MediaChannel, ) = flow { emit(CacheProgress.Caching) @@ -45,7 +45,7 @@ class BookCachingService @Inject constructor( .fetchBook(book.id) .fold( onSuccess = { it }, - onFailure = { null } + onFailure = { null }, ) if (null == detailedBook) { @@ -58,7 +58,7 @@ class BookCachingService @Inject constructor( async { cacheBookCover(detailedBook, channel) }, async { cacheBookMedia(detailedBook, channel) }, async { cacheLibraries(channel) }, - async { cacheBookInfo(detailedBook) } + async { cacheBookInfo(detailedBook) }, ).awaitAll() } @@ -111,7 +111,7 @@ class BookCachingService @Inject constructor( private suspend fun awaitDownloadProgress( jobs: List, - downloadManager: DownloadManager + downloadManager: DownloadManager, ): CacheProgress { val result = checkDownloads(jobs, downloadManager) @@ -161,7 +161,7 @@ class BookCachingService @Inject constructor( } }, onFailure = { - } + }, ) CacheProgress.Completed @@ -177,7 +177,7 @@ class BookCachingService @Inject constructor( }, onFailure = { CacheProgress.Error - } + }, ) private suspend fun cacheBookInfo(book: DetailedItem) = bookRepository diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/CacheBookStorageProperties.kt b/app/src/main/java/org/grakovne/lissen/content/cache/CacheBookStorageProperties.kt index f55028fb..7400d47a 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/CacheBookStorageProperties.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/CacheBookStorageProperties.kt @@ -8,7 +8,7 @@ import javax.inject.Singleton @Singleton class CacheBookStorageProperties @Inject constructor( - @ApplicationContext private val context: Context + @ApplicationContext private val context: Context, ) { fun provideBookCache(bookId: String) = context diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheModule.kt b/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheModule.kt index f1c64c1d..3266116f 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheModule.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheModule.kt @@ -23,7 +23,7 @@ object LocalCacheModule { val database = Room.databaseBuilder( context = context, klass = LocalCacheStorage::class.java, - name = DATABASE_NAME + name = DATABASE_NAME, ) return database diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheRepository.kt b/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheRepository.kt index a2630854..7bd1d5f2 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheRepository.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheRepository.kt @@ -20,7 +20,7 @@ import javax.inject.Singleton class LocalCacheRepository @Inject constructor( private val cachedBookRepository: CachedBookRepository, private val cachedLibraryRepository: CachedLibraryRepository, - private val properties: CacheBookStorageProperties + private val properties: CacheBookStorageProperties, ) { fun provideFileUri(libraryItemId: String, fileId: String): Uri? = @@ -34,7 +34,7 @@ class LocalCacheRepository @Inject constructor( */ suspend fun syncProgress( bookId: String, - progress: PlaybackProgress + progress: PlaybackProgress, ): ApiResult { cachedBookRepository.syncProgress(bookId, progress) return ApiResult.Success(Unit) @@ -51,7 +51,7 @@ class LocalCacheRepository @Inject constructor( } suspend fun searchBooks( - query: String + query: String, ): ApiResult> = cachedBookRepository .searchBooks(query = query) .filter { checkBookIntegrity(it.id) } @@ -59,7 +59,7 @@ class LocalCacheRepository @Inject constructor( suspend fun fetchBooks( pageSize: Int, - pageNumber: Int + pageNumber: Int, ): ApiResult> { val books = cachedBookRepository .fetchBooks(pageNumber = pageNumber, pageSize = pageSize) @@ -69,8 +69,8 @@ class LocalCacheRepository @Inject constructor( .Success( PagedItems( items = books, - currentPage = pageNumber - ) + currentPage = pageNumber, + ), ) } @@ -87,14 +87,14 @@ class LocalCacheRepository @Inject constructor( * as a Playback Session Key */ fun startPlayback( - bookId: String + bookId: String, ): ApiResult = ApiResult .Success( PlaybackSession( bookId = bookId, - sessionId = bookId - ) + sessionId = bookId, + ), ) suspend fun fetchRecentListenedBooks(): ApiResult> = diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheStorage.kt b/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheStorage.kt index 0e7df470..c8e6bfbe 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheStorage.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/LocalCacheStorage.kt @@ -16,10 +16,10 @@ import org.grakovne.lissen.content.cache.entity.MediaProgressEntity BookFileEntity::class, BookChapterEntity::class, MediaProgressEntity::class, - CachedLibraryEntity::class + CachedLibraryEntity::class, ], version = 3, - exportSchema = true + exportSchema = true, ) abstract class LocalCacheStorage : RoomDatabase() { diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/Migrations.kt b/app/src/main/java/org/grakovne/lissen/content/cache/Migrations.kt index 439a75a0..848172e3 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/Migrations.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/Migrations.kt @@ -16,14 +16,14 @@ val MIGRATION_1_2 = object : Migration(1, 2) { author TEXT, duration INTEGER NOT NULL ) - """.trimIndent() + """.trimIndent(), ) db.execSQL( """ INSERT INTO detailed_books (id, title, author, duration) SELECT id, title, author, duration FROM detailed_books_old - """.trimIndent() + """.trimIndent(), ) db.execSQL("DROP TABLE detailed_books_old") @@ -38,7 +38,7 @@ val MIGRATION_2_3 = object : Migration(2, 3) { """ UPDATE libraries SET type = '${LibraryType.LIBRARY.name}' - """.trimIndent() + """.trimIndent(), ) db.execSQL( @@ -48,14 +48,14 @@ val MIGRATION_2_3 = object : Migration(2, 3) { title TEXT NOT NULL, type TEXT NOT NULL ) - """.trimIndent() + """.trimIndent(), ) db.execSQL( """ INSERT INTO libraries_new (id, title, type) SELECT id, title, type FROM libraries - """.trimIndent() + """.trimIndent(), ) db.execSQL("DROP TABLE libraries") diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/api/CachedBookRepository.kt b/app/src/main/java/org/grakovne/lissen/content/cache/api/CachedBookRepository.kt index bd7a2769..5c978350 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/api/CachedBookRepository.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/api/CachedBookRepository.kt @@ -23,7 +23,7 @@ class CachedBookRepository @Inject constructor( private val properties: CacheBookStorageProperties, private val cachedBookEntityConverter: CachedBookEntityConverter, private val cachedBookEntityDetailedConverter: CachedBookEntityDetailedConverter, - private val cachedBookEntityRecentConverter: CachedBookEntityRecentConverter + private val cachedBookEntityRecentConverter: CachedBookEntityRecentConverter, ) { fun provideFileUri(bookId: String, fileId: String): Uri = properties @@ -46,13 +46,13 @@ class CachedBookRepository @Inject constructor( suspend fun fetchBooks( pageNumber: Int, - pageSize: Int + pageSize: Int, ): List = bookDao .fetchCachedBooks(pageNumber = pageNumber, pageSize = pageSize) .map { cachedBookEntityConverter.apply(it) } suspend fun searchBooks( - query: String + query: String, ): List = bookDao .searchCachedBooks(searchQuery = query) .map { cachedBookEntityConverter.apply(it) } @@ -63,7 +63,7 @@ class CachedBookRepository @Inject constructor( .map { cachedBookEntityRecentConverter.apply(it) } suspend fun fetchBook( - bookId: String + bookId: String, ): DetailedItem? = bookDao .fetchCachedBook(bookId) ?.let { cachedBookEntityDetailedConverter.apply(it) } @@ -75,7 +75,7 @@ class CachedBookRepository @Inject constructor( bookId = bookId, currentTime = progress.currentTime, isFinished = progress.currentTime == book.chapters.sumOf { it.duration }, - lastUpdate = Instant.now().toEpochMilli() + lastUpdate = Instant.now().toEpochMilli(), ) bookDao.upsertMediaProgress(entity) diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/api/CachedLibraryRepository.kt b/app/src/main/java/org/grakovne/lissen/content/cache/api/CachedLibraryRepository.kt index b4fbc0cc..90df92f1 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/api/CachedLibraryRepository.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/api/CachedLibraryRepository.kt @@ -9,7 +9,7 @@ import javax.inject.Singleton @Singleton class CachedLibraryRepository @Inject constructor( private val dao: CachedLibraryDao, - private val converter: CachedLibraryEntityConverter + private val converter: CachedLibraryEntityConverter, ) { suspend fun cacheLibraries(libraries: List) = dao.updateLibraries(libraries) diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityConverter.kt b/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityConverter.kt index 4db87322..06854f83 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityConverter.kt @@ -14,6 +14,6 @@ class CachedBookEntityConverter @Inject constructor() { title = entity.title, author = entity.author, duration = entity.duration, - cachedState = BookCachedState.CACHED + cachedState = BookCachedState.CACHED, ) } diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityDetailedConverter.kt b/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityDetailedConverter.kt index 0d370189..92ed6c8f 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityDetailedConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityDetailedConverter.kt @@ -20,7 +20,7 @@ class CachedBookEntityDetailedConverter @Inject constructor() { id = fileEntity.bookFileId, name = fileEntity.name, duration = fileEntity.duration, - mimeType = fileEntity.mimeType + mimeType = fileEntity.mimeType, ) }, chapters = entity.chapters.map { chapterEntity -> @@ -29,15 +29,15 @@ class CachedBookEntityDetailedConverter @Inject constructor() { start = chapterEntity.start, end = chapterEntity.end, title = chapterEntity.title, - id = chapterEntity.bookChapterId + id = chapterEntity.bookChapterId, ) }, progress = entity.progress?.let { progressEntity -> MediaProgress( currentTime = progressEntity.currentTime, isFinished = progressEntity.isFinished, - lastUpdate = progressEntity.lastUpdate + lastUpdate = progressEntity.lastUpdate, ) - } + }, ) } diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityRecentConverter.kt b/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityRecentConverter.kt index dd219003..99034723 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityRecentConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedBookEntityRecentConverter.kt @@ -11,6 +11,6 @@ class CachedBookEntityRecentConverter @Inject constructor() { fun apply(entity: BookEntity): RecentBook = RecentBook( id = entity.id, title = entity.title, - author = entity.author + author = entity.author, ) } diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedLibraryEntityConverter.kt b/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedLibraryEntityConverter.kt index 5f941cde..a69d5454 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedLibraryEntityConverter.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/converter/CachedLibraryEntityConverter.kt @@ -11,6 +11,6 @@ class CachedLibraryEntityConverter @Inject constructor() { fun apply(entity: CachedLibraryEntity): Library = Library( id = entity.id, title = entity.title, - type = entity.type + type = entity.type, ) } diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/dao/CachedBookDao.kt b/app/src/main/java/org/grakovne/lissen/content/cache/dao/CachedBookDao.kt index 6f1fa51a..4f2a0f2d 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/dao/CachedBookDao.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/dao/CachedBookDao.kt @@ -24,7 +24,7 @@ interface CachedBookDao { id = book.id, title = book.title, author = book.author, - duration = book.chapters.sumOf { it.duration }.toInt() + duration = book.chapters.sumOf { it.duration }.toInt(), ) val bookFiles = book @@ -35,7 +35,7 @@ interface CachedBookDao { name = file.name, duration = file.duration, mimeType = file.mimeType, - bookId = book.id + bookId = book.id, ) } @@ -48,7 +48,7 @@ interface CachedBookDao { start = chapter.start, end = chapter.end, title = chapter.title, - bookId = book.id + bookId = book.id, ) } @@ -59,7 +59,7 @@ interface CachedBookDao { bookId = book.id, currentTime = progress.currentTime, isFinished = progress.isFinished, - lastUpdate = progress.lastUpdate + lastUpdate = progress.lastUpdate, ) } @@ -73,13 +73,13 @@ interface CachedBookDao { @Query("SELECT * FROM detailed_books ORDER BY title LIMIT :pageSize OFFSET :pageNumber * :pageSize") suspend fun fetchCachedBooks( pageNumber: Int, - pageSize: Int + pageSize: Int, ): List @Transaction @Query("SELECT * FROM detailed_books WHERE title LIKE '%' || :searchQuery || '%' OR author LIKE '%' || :searchQuery || '%' ORDER BY title") suspend fun searchCachedBooks( - searchQuery: String + searchQuery: String, ): List @Transaction @@ -90,7 +90,7 @@ interface CachedBookDao { INNER JOIN media_progress ON detailed_books.id = media_progress.bookId ORDER BY media_progress.lastUpdate DESC LIMIT 10 - """ + """, ) suspend fun fetchRecentlyListenedCachedBooks(): List diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/dao/CachedLibraryDao.kt b/app/src/main/java/org/grakovne/lissen/content/cache/dao/CachedLibraryDao.kt index e6037a21..c046701b 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/dao/CachedLibraryDao.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/dao/CachedLibraryDao.kt @@ -17,7 +17,7 @@ interface CachedLibraryDao { CachedLibraryEntity( id = it.id, title = it.title, - type = it.type + type = it.type, ) } diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/entity/CachedBookEntity.kt b/app/src/main/java/org/grakovne/lissen/content/cache/entity/CachedBookEntity.kt index 2b004bc5..e751ce30 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/entity/CachedBookEntity.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/entity/CachedBookEntity.kt @@ -13,21 +13,21 @@ data class CachedBookEntity( @Relation( parentColumn = "id", - entityColumn = "bookId" + entityColumn = "bookId", ) val files: List, @Relation( parentColumn = "id", - entityColumn = "bookId" + entityColumn = "bookId", ) val chapters: List, @Relation( parentColumn = "id", - entityColumn = "bookId" + entityColumn = "bookId", ) - val progress: MediaProgressEntity? + val progress: MediaProgressEntity?, ) @Entity(tableName = "detailed_books") @@ -35,7 +35,7 @@ data class BookEntity( @PrimaryKey val id: String, val title: String, val author: String?, - val duration: Int + val duration: Int, ) : Serializable @Entity( @@ -45,10 +45,10 @@ data class BookEntity( entity = BookEntity::class, parentColumns = ["id"], childColumns = ["bookId"], - onDelete = ForeignKey.CASCADE - ) + onDelete = ForeignKey.CASCADE, + ), ], - indices = [Index(value = ["bookId"])] + indices = [Index(value = ["bookId"])], ) data class BookFileEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0L, @@ -56,7 +56,7 @@ data class BookFileEntity( val name: String, val duration: Double, val mimeType: String, - val bookId: String + val bookId: String, ) : Serializable @Entity( @@ -66,10 +66,10 @@ data class BookFileEntity( entity = BookEntity::class, parentColumns = ["id"], childColumns = ["bookId"], - onDelete = ForeignKey.CASCADE - ) + onDelete = ForeignKey.CASCADE, + ), ], - indices = [Index(value = ["bookId"])] + indices = [Index(value = ["bookId"])], ) data class BookChapterEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0L, @@ -78,7 +78,7 @@ data class BookChapterEntity( val start: Double, val end: Double, val title: String, - val bookId: String + val bookId: String, ) : Serializable @Entity( @@ -88,14 +88,14 @@ data class BookChapterEntity( entity = BookEntity::class, parentColumns = ["id"], childColumns = ["bookId"], - onDelete = ForeignKey.CASCADE - ) + onDelete = ForeignKey.CASCADE, + ), ], - indices = [Index(value = ["bookId"])] + indices = [Index(value = ["bookId"])], ) data class MediaProgressEntity( @PrimaryKey val bookId: String, val currentTime: Double, val isFinished: Boolean, - val lastUpdate: Long + val lastUpdate: Long, ) : Serializable diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/entity/CachedLibraryEntity.kt b/app/src/main/java/org/grakovne/lissen/content/cache/entity/CachedLibraryEntity.kt index 908d1c1d..ba795629 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/entity/CachedLibraryEntity.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/entity/CachedLibraryEntity.kt @@ -6,11 +6,11 @@ import org.grakovne.lissen.channel.common.LibraryType import java.io.Serializable @Entity( - tableName = "libraries" + tableName = "libraries", ) data class CachedLibraryEntity( @PrimaryKey val id: String, val title: String, - val type: LibraryType + val type: LibraryType, ) : Serializable diff --git a/app/src/main/java/org/grakovne/lissen/content/cache/entity/PlaybackProgressEntity.kt b/app/src/main/java/org/grakovne/lissen/content/cache/entity/PlaybackProgressEntity.kt index e13c0278..6a129953 100644 --- a/app/src/main/java/org/grakovne/lissen/content/cache/entity/PlaybackProgressEntity.kt +++ b/app/src/main/java/org/grakovne/lissen/content/cache/entity/PlaybackProgressEntity.kt @@ -7,5 +7,5 @@ import androidx.room.PrimaryKey data class PlaybackProgressEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, val currentTime: Double, - val totalTime: Double + val totalTime: Double, ) diff --git a/app/src/main/java/org/grakovne/lissen/domain/Book.kt b/app/src/main/java/org/grakovne/lissen/domain/Book.kt index fd41ff78..bb1fc75d 100644 --- a/app/src/main/java/org/grakovne/lissen/domain/Book.kt +++ b/app/src/main/java/org/grakovne/lissen/domain/Book.kt @@ -5,11 +5,11 @@ data class Book( val title: String, val author: String?, val duration: Int, - val cachedState: BookCachedState + val cachedState: BookCachedState, ) enum class BookCachedState { ABLE_TO_CACHE, UNABLE_TO_CACHE, - CACHED + CACHED, } diff --git a/app/src/main/java/org/grakovne/lissen/domain/DetailedItem.kt b/app/src/main/java/org/grakovne/lissen/domain/DetailedItem.kt index ca5c695f..e2ce87c7 100644 --- a/app/src/main/java/org/grakovne/lissen/domain/DetailedItem.kt +++ b/app/src/main/java/org/grakovne/lissen/domain/DetailedItem.kt @@ -8,20 +8,20 @@ data class DetailedItem( val author: String?, val files: List, val chapters: List, - val progress: MediaProgress? + val progress: MediaProgress?, ) : Serializable data class BookFile( val id: String, val name: String, val duration: Double, - val mimeType: String + val mimeType: String, ) : Serializable data class MediaProgress( val currentTime: Double, val isFinished: Boolean, - val lastUpdate: Long + val lastUpdate: Long, ) : Serializable data class BookChapter( @@ -29,5 +29,5 @@ data class BookChapter( val start: Double, val end: Double, val title: String, - val id: String + val id: String, ) : Serializable diff --git a/app/src/main/java/org/grakovne/lissen/domain/Library.kt b/app/src/main/java/org/grakovne/lissen/domain/Library.kt index 46867a28..738ef20e 100644 --- a/app/src/main/java/org/grakovne/lissen/domain/Library.kt +++ b/app/src/main/java/org/grakovne/lissen/domain/Library.kt @@ -5,5 +5,5 @@ import org.grakovne.lissen.channel.common.LibraryType data class Library( val id: String, val title: String, - val type: LibraryType + val type: LibraryType, ) diff --git a/app/src/main/java/org/grakovne/lissen/domain/PagedItems.kt b/app/src/main/java/org/grakovne/lissen/domain/PagedItems.kt index 5e6fc452..932e61bc 100644 --- a/app/src/main/java/org/grakovne/lissen/domain/PagedItems.kt +++ b/app/src/main/java/org/grakovne/lissen/domain/PagedItems.kt @@ -2,5 +2,5 @@ package org.grakovne.lissen.domain data class PagedItems( val items: List, - val currentPage: Int + val currentPage: Int, ) diff --git a/app/src/main/java/org/grakovne/lissen/domain/PlaybackProgress.kt b/app/src/main/java/org/grakovne/lissen/domain/PlaybackProgress.kt index 85e65e8f..0de49c33 100644 --- a/app/src/main/java/org/grakovne/lissen/domain/PlaybackProgress.kt +++ b/app/src/main/java/org/grakovne/lissen/domain/PlaybackProgress.kt @@ -2,5 +2,5 @@ package org.grakovne.lissen.domain data class PlaybackProgress( val currentTime: Double, - val totalTime: Double + val totalTime: Double, ) diff --git a/app/src/main/java/org/grakovne/lissen/domain/PlaybackSession.kt b/app/src/main/java/org/grakovne/lissen/domain/PlaybackSession.kt index 4f54a2de..aa90d9be 100644 --- a/app/src/main/java/org/grakovne/lissen/domain/PlaybackSession.kt +++ b/app/src/main/java/org/grakovne/lissen/domain/PlaybackSession.kt @@ -2,5 +2,5 @@ package org.grakovne.lissen.domain data class PlaybackSession( val sessionId: String, - val bookId: String + val bookId: String, ) diff --git a/app/src/main/java/org/grakovne/lissen/domain/RecentBook.kt b/app/src/main/java/org/grakovne/lissen/domain/RecentBook.kt index f1033e5b..18d314b5 100644 --- a/app/src/main/java/org/grakovne/lissen/domain/RecentBook.kt +++ b/app/src/main/java/org/grakovne/lissen/domain/RecentBook.kt @@ -3,5 +3,5 @@ package org.grakovne.lissen.domain data class RecentBook( val id: String, val title: String, - val author: String? + val author: String?, ) diff --git a/app/src/main/java/org/grakovne/lissen/domain/UserAccount.kt b/app/src/main/java/org/grakovne/lissen/domain/UserAccount.kt index b16d7fa2..7d15c734 100644 --- a/app/src/main/java/org/grakovne/lissen/domain/UserAccount.kt +++ b/app/src/main/java/org/grakovne/lissen/domain/UserAccount.kt @@ -2,5 +2,5 @@ package org.grakovne.lissen.domain data class UserAccount( val token: String, - val preferredLibraryId: String? + val preferredLibraryId: String?, ) diff --git a/app/src/main/java/org/grakovne/lissen/domain/connection/ServerRequestHeader.kt b/app/src/main/java/org/grakovne/lissen/domain/connection/ServerRequestHeader.kt index 589b60ef..239cebdc 100644 --- a/app/src/main/java/org/grakovne/lissen/domain/connection/ServerRequestHeader.kt +++ b/app/src/main/java/org/grakovne/lissen/domain/connection/ServerRequestHeader.kt @@ -5,7 +5,7 @@ import java.util.UUID data class ServerRequestHeader( val name: String, val value: String, - val id: UUID = UUID.randomUUID() + val id: UUID = UUID.randomUUID(), ) { companion object { diff --git a/app/src/main/java/org/grakovne/lissen/persistence/preferences/LissenSharedPreferences.kt b/app/src/main/java/org/grakovne/lissen/persistence/preferences/LissenSharedPreferences.kt index 0252f73f..590e862e 100644 --- a/app/src/main/java/org/grakovne/lissen/persistence/preferences/LissenSharedPreferences.kt +++ b/app/src/main/java/org/grakovne/lissen/persistence/preferences/LissenSharedPreferences.kt @@ -90,7 +90,7 @@ class LissenSharedPreferences @Inject constructor(@ApplicationContext context: C return Library( id = id, title = name, - type = type + type = type, ) } @@ -230,7 +230,7 @@ class LissenSharedPreferences @Inject constructor(@ApplicationContext context: C KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, ANDROID_KEYSTORE) val keyGenParameterSpec = KeyGenParameterSpec.Builder( KEY_ALIAS, - KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT + KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT, ).setBlockModes(KeyProperties.BLOCK_MODE_GCM) .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) .build() diff --git a/app/src/main/java/org/grakovne/lissen/playback/MediaModule.kt b/app/src/main/java/org/grakovne/lissen/playback/MediaModule.kt index ddc082bf..5eb20082 100644 --- a/app/src/main/java/org/grakovne/lissen/playback/MediaModule.kt +++ b/app/src/main/java/org/grakovne/lissen/playback/MediaModule.kt @@ -34,7 +34,7 @@ object MediaModule { .setUsage(C.USAGE_MEDIA) .setContentType(C.AUDIO_CONTENT_TYPE_MUSIC) .build(), - true + true, ) .build() } @@ -43,13 +43,13 @@ object MediaModule { @Singleton fun provideMediaSession( @ApplicationContext context: Context, - exoPlayer: ExoPlayer + exoPlayer: ExoPlayer, ): MediaSession { val sessionActivityPendingIntent = PendingIntent.getActivity( context, 0, Intent(context, AppActivity::class.java), - PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT, ) return MediaSession.Builder(context, exoPlayer) diff --git a/app/src/main/java/org/grakovne/lissen/playback/service/MimeTypeProvider.kt b/app/src/main/java/org/grakovne/lissen/playback/service/MimeTypeProvider.kt index 0e5bb2ae..5390f63d 100644 --- a/app/src/main/java/org/grakovne/lissen/playback/service/MimeTypeProvider.kt +++ b/app/src/main/java/org/grakovne/lissen/playback/service/MimeTypeProvider.kt @@ -12,7 +12,7 @@ class MimeTypeProvider { "audio/webm", "audio/ac3", "audio/opus", - "audio/vorbis" + "audio/vorbis", ) } } diff --git a/app/src/main/java/org/grakovne/lissen/playback/service/PlaybackService.kt b/app/src/main/java/org/grakovne/lissen/playback/service/PlaybackService.kt index c1ac21ee..b7a9d8fd 100644 --- a/app/src/main/java/org/grakovne/lissen/playback/service/PlaybackService.kt +++ b/app/src/main/java/org/grakovne/lissen/playback/service/PlaybackService.kt @@ -67,7 +67,7 @@ class PlaybackService : MediaSessionService() { override fun onStartCommand( intent: Intent?, flags: Int, - startId: Int + startId: Int, ): Int { super.onStartCommand(intent, flags, startId) @@ -152,7 +152,7 @@ class PlaybackService : MediaSessionService() { null } }, - onFailure = { null } + onFailure = { null }, ) val sourceFactory = buildDataSourceFactory() @@ -181,7 +181,7 @@ class PlaybackService : MediaSessionService() { .Factory(sourceFactory) .createMediaSource(mediaItem) }, - onFailure = { null } + onFailure = { null }, ) } @@ -219,7 +219,7 @@ class PlaybackService : MediaSessionService() { .getInstance(baseContext) .sendBroadcast(Intent(TIMER_EXPIRED)) }, - delayMs.toLong() + delayMs.toLong(), ) Log.d(TAG, "Timer started for $delayMs ms.") } @@ -240,7 +240,7 @@ class PlaybackService : MediaSessionService() { private fun seek( items: List, - position: Double? + position: Double?, ) { if (items.isEmpty()) { Log.w(TAG, "Tried to seek position $position in the empty book. Skipping") @@ -273,7 +273,7 @@ class PlaybackService : MediaSessionService() { private fun setPlaybackProgress( chapters: List, - progress: MediaProgress? + progress: MediaProgress?, ) = seek(chapters, progress?.currentTime) private fun createOkHttpClient(): OkHttpClient { @@ -283,7 +283,7 @@ class PlaybackService : MediaSessionService() { .addInterceptor( HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.NONE - } + }, ) .build() } @@ -302,7 +302,7 @@ class PlaybackService : MediaSessionService() { return DefaultDataSource.Factory( baseContext, - okHttpDataSourceFactory + okHttpDataSourceFactory, ) } diff --git a/app/src/main/java/org/grakovne/lissen/playback/service/PlaybackSynchronizationService.kt b/app/src/main/java/org/grakovne/lissen/playback/service/PlaybackSynchronizationService.kt index ca8d3c52..2824562c 100644 --- a/app/src/main/java/org/grakovne/lissen/playback/service/PlaybackSynchronizationService.kt +++ b/app/src/main/java/org/grakovne/lissen/playback/service/PlaybackSynchronizationService.kt @@ -19,7 +19,7 @@ import javax.inject.Singleton class PlaybackSynchronizationService @Inject constructor( private val exoPlayer: ExoPlayer, private val mediaChannel: LissenMediaProvider, - private val sharedPreferences: LissenSharedPreferences + private val sharedPreferences: LissenSharedPreferences, ) { private var currentBook: DetailedItem? = null @@ -70,7 +70,7 @@ class PlaybackSynchronizationService @Inject constructor( private suspend fun synchronizeProgress( it: PlaybackSession, - overallProgress: PlaybackProgress + overallProgress: PlaybackProgress, ): Unit? { val currentIndex = currentBook ?.let { calculateChapterIndex(it, overallProgress.currentTime) } @@ -85,11 +85,11 @@ class PlaybackSynchronizationService @Inject constructor( .syncProgress( sessionId = it.sessionId, bookId = it.bookId, - progress = overallProgress + progress = overallProgress, ) .foldAsync( onSuccess = {}, - onFailure = { openPlaybackSession(overallProgress) } + onFailure = { openPlaybackSession(overallProgress) }, ) } @@ -101,11 +101,11 @@ class PlaybackSynchronizationService @Inject constructor( bookId = book.id, deviceId = sharedPreferences.getDeviceId(), supportedMimeTypes = MimeTypeProvider.getSupportedMimeTypes(), - chapterId = book.chapters[chapterIndex].id + chapterId = book.chapters[chapterIndex].id, ) .fold( onSuccess = { playbackSession = it }, - onFailure = {} + onFailure = {}, ) } @@ -128,7 +128,7 @@ class PlaybackSynchronizationService @Inject constructor( return PlaybackProgress( currentTime = totalElapsedMs / 1000.0, - totalTime = totalDuration / 1000.0 + totalTime = totalDuration / 1000.0, ) } diff --git a/app/src/main/java/org/grakovne/lissen/ui/activity/AppActivity.kt b/app/src/main/java/org/grakovne/lissen/ui/activity/AppActivity.kt index 4e7027a2..e9c54597 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/activity/AppActivity.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/activity/AppActivity.kt @@ -48,7 +48,7 @@ class AppActivity : ComponentActivity() { navigationService = AppNavigationService(navController), preferences = preferences, imageLoader = imageLoader, - networkQualityService = networkQualityService + networkQualityService = networkQualityService, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/components/AsyncShimmeringImage.kt b/app/src/main/java/org/grakovne/lissen/ui/components/AsyncShimmeringImage.kt index ee2cee6c..4e114b82 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/components/AsyncShimmeringImage.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/components/AsyncShimmeringImage.kt @@ -25,20 +25,20 @@ fun AsyncShimmeringImage( contentDescription: String, contentScale: ContentScale, modifier: Modifier = Modifier, - error: Painter + error: Painter, ) { var isLoading by remember { mutableStateOf(true) } Box( modifier = modifier, - contentAlignment = Alignment.Center + contentAlignment = Alignment.Center, ) { if (isLoading) { Box( modifier = Modifier .fillMaxSize() .background(Color.Gray) - .shimmer() + .shimmer(), ) } @@ -50,7 +50,7 @@ fun AsyncShimmeringImage( modifier = Modifier.fillMaxSize(), onSuccess = { isLoading = false }, onError = { isLoading = false }, - error = error + error = error, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/components/BookCoverFetcher.kt b/app/src/main/java/org/grakovne/lissen/ui/components/BookCoverFetcher.kt index ecba3bc1..d4ef292c 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/components/BookCoverFetcher.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/components/BookCoverFetcher.kt @@ -22,7 +22,7 @@ import javax.inject.Singleton class BookCoverFetcher( private val mediaChannel: LissenMediaProvider, private val uri: Uri, - private val context: Context + private val context: Context, ) : Fetcher { override suspend fun fetch(): FetchResult? = @@ -36,7 +36,7 @@ class BookCoverFetcher( SourceResult( source = imageSource, mimeType = null, - dataSource = coil.decode.DataSource.NETWORK + dataSource = coil.decode.DataSource.NETWORK, ) } } @@ -44,7 +44,7 @@ class BookCoverFetcher( class BookCoverFetcherFactory( private val dataProvider: LissenMediaProvider, - private val context: Context + private val context: Context, ) : Fetcher.Factory { override fun create(data: Uri, options: Options, imageLoader: ImageLoader) = @@ -59,14 +59,14 @@ object ImageLoaderModule { @Provides fun provideBookCoverFetcherFactory( mediaChannel: LissenMediaProvider, - @ApplicationContext context: Context + @ApplicationContext context: Context, ): BookCoverFetcherFactory = BookCoverFetcherFactory(mediaChannel, context) @Singleton @Provides fun provideCustomImageLoader( @ApplicationContext context: Context, - bookCoverFetcherFactory: BookCoverFetcherFactory + bookCoverFetcherFactory: BookCoverFetcherFactory, ): ImageLoader { return ImageLoader .Builder(context) diff --git a/app/src/main/java/org/grakovne/lissen/ui/extensions/AsyncExtensions.kt b/app/src/main/java/org/grakovne/lissen/ui/extensions/AsyncExtensions.kt index 148f001f..38d5f2e6 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/extensions/AsyncExtensions.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/extensions/AsyncExtensions.kt @@ -6,7 +6,7 @@ import kotlin.system.measureTimeMillis suspend fun CoroutineScope.withMinimumTime( minimumTimeMillis: Long, - block: suspend CoroutineScope.() -> T + block: suspend CoroutineScope.() -> T, ): T { var result: T val elapsedTime = measureTimeMillis { diff --git a/app/src/main/java/org/grakovne/lissen/ui/icons/Book_2.kt b/app/src/main/java/org/grakovne/lissen/ui/icons/Book.kt similarity index 97% rename from app/src/main/java/org/grakovne/lissen/ui/icons/Book_2.kt rename to app/src/main/java/org/grakovne/lissen/ui/icons/Book.kt index ef353125..374c2806 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/icons/Book_2.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/icons/Book.kt @@ -26,7 +26,7 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -val Book_2: ImageVector +val Book: ImageVector get() { if (_Book_2 != null) { return _Book_2!! @@ -36,7 +36,7 @@ val Book_2: ImageVector defaultWidth = 24.dp, defaultHeight = 24.dp, viewportWidth = 960f, - viewportHeight = 960f + viewportHeight = 960f, ).apply { path( fill = SolidColor(Color.Black), @@ -47,7 +47,7 @@ val Book_2: ImageVector strokeLineCap = StrokeCap.Butt, strokeLineJoin = StrokeJoin.Miter, strokeLineMiter = 1.0f, - pathFillType = PathFillType.NonZero + pathFillType = PathFillType.NonZero, ) { moveTo(300f, 880f) quadToRelative(-58f, 0f, -99f, -41f) diff --git a/app/src/main/java/org/grakovne/lissen/ui/icons/Podcast.kt b/app/src/main/java/org/grakovne/lissen/ui/icons/Podcast.kt index 2b9b694f..f72504cc 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/icons/Podcast.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/icons/Podcast.kt @@ -36,7 +36,7 @@ public val Podcast: ImageVector defaultWidth = 24.dp, defaultHeight = 24.dp, viewportWidth = 24f, - viewportHeight = 24f + viewportHeight = 24f, ).apply { path( fill = null, @@ -47,7 +47,7 @@ public val Podcast: ImageVector strokeLineCap = StrokeCap.Round, strokeLineJoin = StrokeJoin.Round, strokeLineMiter = 1.0f, - pathFillType = PathFillType.NonZero + pathFillType = PathFillType.NonZero, ) { moveTo(16.85f, 18.58f) arcToRelative(9f, 9f, 0f, isMoreThanHalf = true, isPositiveArc = false, -9.7f, 0f) @@ -61,7 +61,7 @@ public val Podcast: ImageVector strokeLineCap = StrokeCap.Round, strokeLineJoin = StrokeJoin.Round, strokeLineMiter = 1.0f, - pathFillType = PathFillType.NonZero + pathFillType = PathFillType.NonZero, ) { moveTo(8f, 14f) arcToRelative(5f, 5f, 0f, isMoreThanHalf = true, isPositiveArc = true, 8f, 0f) @@ -75,7 +75,7 @@ public val Podcast: ImageVector strokeLineCap = StrokeCap.Round, strokeLineJoin = StrokeJoin.Round, strokeLineMiter = 1.0f, - pathFillType = PathFillType.NonZero + pathFillType = PathFillType.NonZero, ) { moveTo(13f, 11f) arcTo(1f, 1f, 0f, isMoreThanHalf = false, isPositiveArc = true, 12f, 12f) @@ -92,7 +92,7 @@ public val Podcast: ImageVector strokeLineCap = StrokeCap.Round, strokeLineJoin = StrokeJoin.Round, strokeLineMiter = 1.0f, - pathFillType = PathFillType.NonZero + pathFillType = PathFillType.NonZero, ) { moveTo(13f, 17f) arcToRelative(1f, 1f, 0f, isMoreThanHalf = true, isPositiveArc = false, -2f, 0f) diff --git a/app/src/main/java/org/grakovne/lissen/ui/icons/Search.kt b/app/src/main/java/org/grakovne/lissen/ui/icons/Search.kt index 79c9b06a..881d79df 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/icons/Search.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/icons/Search.kt @@ -36,7 +36,7 @@ val Search: ImageVector defaultWidth = 24.dp, defaultHeight = 24.dp, viewportWidth = 24f, - viewportHeight = 24f + viewportHeight = 24f, ).apply { path( fill = null, @@ -47,7 +47,7 @@ val Search: ImageVector strokeLineCap = StrokeCap.Round, strokeLineJoin = StrokeJoin.Round, strokeLineMiter = 1.0f, - pathFillType = PathFillType.NonZero + pathFillType = PathFillType.NonZero, ) { moveTo(19f, 11f) arcTo(8f, 8f, 0f, isMoreThanHalf = false, isPositiveArc = true, 11f, 19f) @@ -64,7 +64,7 @@ val Search: ImageVector strokeLineCap = StrokeCap.Round, strokeLineJoin = StrokeJoin.Round, strokeLineMiter = 1.0f, - pathFillType = PathFillType.NonZero + pathFillType = PathFillType.NonZero, ) { moveTo(21f, 21f) lineToRelative(-4.3f, -4.3f) diff --git a/app/src/main/java/org/grakovne/lissen/ui/icons/Timer_play.kt b/app/src/main/java/org/grakovne/lissen/ui/icons/TimerPlay.kt similarity index 97% rename from app/src/main/java/org/grakovne/lissen/ui/icons/Timer_play.kt rename to app/src/main/java/org/grakovne/lissen/ui/icons/TimerPlay.kt index a2590a57..c104343c 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/icons/Timer_play.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/icons/TimerPlay.kt @@ -32,7 +32,7 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.unit.dp -val Timer_play: ImageVector +val TimerPlay: ImageVector get() { if (_Timer_play != null) { return _Timer_play!! @@ -42,7 +42,7 @@ val Timer_play: ImageVector defaultWidth = 24.dp, defaultHeight = 24.dp, viewportWidth = 960f, - viewportHeight = 960f + viewportHeight = 960f, ).apply { path( fill = SolidColor(Color.Black), @@ -53,7 +53,7 @@ val Timer_play: ImageVector strokeLineCap = StrokeCap.Butt, strokeLineJoin = StrokeJoin.Miter, strokeLineMiter = 1.0f, - pathFillType = PathFillType.NonZero + pathFillType = PathFillType.NonZero, ) { moveTo(360f, 120f) verticalLineToRelative(-80f) diff --git a/app/src/main/java/org/grakovne/lissen/ui/navigation/AppNavHost.kt b/app/src/main/java/org/grakovne/lissen/ui/navigation/AppNavHost.kt index fa5fb610..6107a758 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/navigation/AppNavHost.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/navigation/AppNavHost.kt @@ -27,11 +27,11 @@ fun AppNavHost( preferences: LissenSharedPreferences, networkQualityService: NetworkQualityService, navigationService: AppNavigationService, - imageLoader: ImageLoader + imageLoader: ImageLoader, ) { val hasCredentials by remember { mutableStateOf( - preferences.hasCredentials() + preferences.hasCredentials(), ) } val startDestination = when { @@ -44,13 +44,13 @@ fun AppNavHost( NavHost( navController = navController, - startDestination = startDestination + startDestination = startDestination, ) { composable("library_screen") { LibraryScreen( navController = navigationService, imageLoader = imageLoader, - networkQualityService = networkQualityService + networkQualityService = networkQualityService, ) } @@ -58,8 +58,8 @@ fun AppNavHost( "player_screen/{bookId}?bookTitle={bookTitle}", arguments = listOf( navArgument("bookId") { type = NavType.StringType }, - navArgument("bookTitle") { type = NavType.StringType; nullable = true } - ) + navArgument("bookTitle") { type = NavType.StringType; nullable = true }, + ), ) { navigationStack -> val bookId = navigationStack.arguments?.getString("bookId") ?: return@composable val bookTitle = navigationStack.arguments?.getString("bookTitle") ?: "" @@ -68,7 +68,7 @@ fun AppNavHost( navController = navigationService, imageLoader = imageLoader, bookId = bookId, - bookTitle = bookTitle + bookTitle = bookTitle, ) } @@ -83,7 +83,7 @@ fun AppNavHost( navController.popBackStack() } }, - navController = navigationService + navController = navigationService, ) } @@ -93,7 +93,7 @@ fun AppNavHost( if (navController.previousBackStackEntry != null) { navController.popBackStack() } - } + }, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/navigation/AppNavigationService.kt b/app/src/main/java/org/grakovne/lissen/ui/navigation/AppNavigationService.kt index c51e9444..565125fa 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/navigation/AppNavigationService.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/navigation/AppNavigationService.kt @@ -3,7 +3,7 @@ package org.grakovne.lissen.ui.navigation import androidx.navigation.NavHostController class AppNavigationService( - private val host: NavHostController + private val host: NavHostController, ) { fun showLibrary(clearHistory: Boolean = false) { diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/common/RequestNotificationPermissions.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/common/RequestNotificationPermissions.kt index 261a1dee..be396992 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/common/RequestNotificationPermissions.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/common/RequestNotificationPermissions.kt @@ -16,13 +16,13 @@ fun RequestNotificationPermissions() { val permissionRequestLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.RequestPermission(), - onResult = { } + onResult = { }, ) LaunchedEffect(Unit) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { val permissionStatus = ContextCompat.checkSelfPermission( context, - Manifest.permission.POST_NOTIFICATIONS + Manifest.permission.POST_NOTIFICATIONS, ) when (permissionStatus == PackageManager.PERMISSION_GRANTED) { diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/LibraryScreen.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/LibraryScreen.kt index ad0865b4..aa9aefc8 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/LibraryScreen.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/LibraryScreen.kt @@ -78,7 +78,7 @@ fun LibraryScreen( cachingModelView: CachingModelView = hiltViewModel(), playerViewModel: PlayerViewModel = hiltViewModel(), imageLoader: ImageLoader, - networkQualityService: NetworkQualityService + networkQualityService: NetworkQualityService, ) { RequestNotificationPermissions() @@ -115,7 +115,7 @@ fun LibraryScreen( listOf( async { libraryViewModel.dropHiddenBooks() }, async { libraryViewModel.refreshLibrary() }, - async { libraryViewModel.fetchRecentListening() } + async { libraryViewModel.fetchRecentListening() }, ).awaitAll() } @@ -141,7 +141,7 @@ fun LibraryScreen( refreshing = pullRefreshing, onRefresh = { refreshContent(showRefreshing = true) - } + }, ) val titleTextStyle = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.SemiBold) @@ -201,12 +201,12 @@ fun LibraryScreen( transitionSpec = { fadeIn(animationSpec = keyframes { durationMillis = 150 }) togetherWith fadeOut(animationSpec = keyframes { durationMillis = 150 }) - } + }, ) { isSearchRequested -> when (isSearchRequested) { true -> LibrarySearchActionComposable( onSearchDismissed = { libraryViewModel.dismissSearch() }, - onSearchRequested = { libraryViewModel.updateSearch(it) } + onSearchRequested = { libraryViewModel.updateSearch(it) }, ) false -> DefaultActionComposable( @@ -214,7 +214,7 @@ fun LibraryScreen( cachingModelView = cachingModelView, libraryViewModel = libraryViewModel, onContentRefreshing = { refreshContent(showRefreshing = false) }, - onSearchRequested = { libraryViewModel.requestSearch() } + onSearchRequested = { libraryViewModel.requestSearch() }, ) } } @@ -225,11 +225,11 @@ fun LibraryScreen( text = navBarTitle, style = titleTextStyle, maxLines = 1, - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) } }, - modifier = Modifier.systemBarsPadding() + modifier = Modifier.systemBarsPadding(), ) }, bottomBar = { @@ -238,7 +238,7 @@ fun LibraryScreen( navController = navController, book = it, imageLoader = imageLoader, - playerViewModel = playerViewModel + playerViewModel = playerViewModel, ) } }, @@ -251,12 +251,12 @@ fun LibraryScreen( .padding(innerPadding) .testTag("libraryScreen") .pullRefresh(pullRefreshState) - .fillMaxSize() + .fillMaxSize(), ) { LazyColumn( state = libraryListState, modifier = Modifier.fillMaxSize(), - contentPadding = PaddingValues(horizontal = 16.dp) + contentPadding = PaddingValues(horizontal = 16.dp), ) { item(key = "recent_books") { val showRecent = showRecent() @@ -271,7 +271,7 @@ fun LibraryScreen( RecentBooksComposable( navController = navController, recentBooks = showingRecentBooks, - imageLoader = imageLoader + imageLoader = imageLoader, ) Spacer(modifier = Modifier.height(20.dp)) @@ -286,27 +286,27 @@ fun LibraryScreen( transitionSpec = { fadeIn( animationSpec = - tween(300) + tween(300), ) togetherWith fadeOut( animationSpec = tween( - 300 - ) + 300, + ), ) }, - label = "library_header_fade" + label = "library_header_fade", ) { when { it == provideLibraryTitle() -> Spacer( modifier = Modifier .fillMaxWidth() - .height(titleHeightDp) + .height(titleHeightDp), ) else -> Text( style = titleTextStyle, text = provideLibraryTitle(), - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) } } @@ -322,7 +322,7 @@ fun LibraryScreen( LibraryFallbackComposable( searchRequested = searchRequested, cachingModelView = cachingModelView, - networkQualityService = networkQualityService + networkQualityService = networkQualityService, ) } } @@ -351,7 +351,7 @@ fun LibraryScreen( refreshContent(false) } } - } + }, ) } } @@ -363,15 +363,15 @@ fun LibraryScreen( refreshing = pullRefreshing, state = pullRefreshState, contentColor = colorScheme.primary, - modifier = Modifier.align(Alignment.TopCenter) + modifier = Modifier.align(Alignment.TopCenter), ) } } - } + }, ) } private fun filterRecentBooks( books: List, - libraryViewModel: LibraryViewModel + libraryViewModel: LibraryViewModel, ) = books.filter { libraryViewModel.isVisible(it.id) } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/BookComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/BookComposable.kt index f300e8d8..9898f471 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/BookComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/BookComposable.kt @@ -58,7 +58,7 @@ fun BookComposable( imageLoader: ImageLoader, navController: AppNavigationService, cachingModelView: CachingModelView, - onRemoveBook: () -> Unit + onRemoveBook: () -> Unit, ) { val cacheProgress by cachingModelView.getCacheProgress(book.id).collectAsState() val context = LocalContext.current @@ -77,7 +77,7 @@ fun BookComposable( .clickable { navController.showPlayer(book.id, book.title) } .testTag("bookItem_${book.id}") .padding(horizontal = 4.dp, vertical = 8.dp), - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, ) { AsyncShimmeringImage( imageRequest = imageRequest, @@ -88,22 +88,22 @@ fun BookComposable( .size(64.dp) .aspectRatio(1f) .clip(RoundedCornerShape(4.dp)), - error = painterResource(R.drawable.cover_fallback) + error = painterResource(R.drawable.cover_fallback), ) Spacer(modifier = Modifier.width(16.dp)) Column( - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), ) { Text( text = book.title, style = MaterialTheme.typography.bodyMedium.copy( fontWeight = FontWeight.SemiBold, - color = MaterialTheme.colorScheme.onBackground + color = MaterialTheme.colorScheme.onBackground, ), maxLines = 2, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) book .author @@ -112,10 +112,10 @@ fun BookComposable( Text( text = it, style = MaterialTheme.typography.bodyMedium.copy( - color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.6f) + color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.6f), ), maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) } } @@ -124,7 +124,7 @@ fun BookComposable( Column( horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center + verticalArrangement = Arrangement.Center, ) { provideCachingStateIcon(book, cacheProgress) ?.let { icon -> @@ -141,11 +141,11 @@ fun BookComposable( } } }, - modifier = Modifier.size(36.dp) + modifier = Modifier.size(36.dp), ) { Icon( imageVector = icon, - contentDescription = "Caching Book State" + contentDescription = "Caching Book State", ) } } @@ -153,7 +153,7 @@ fun BookComposable( if (book.duration > 0) { Text( text = book.duration.formatShortly(), - style = MaterialTheme.typography.bodySmall + style = MaterialTheme.typography.bodySmall, ) } @@ -172,11 +172,11 @@ fun BookComposable( cachingModelView.dropCache(book) onRemoveBook.invoke() showDeleteFromCacheDialog = false - } + }, ) { Text( text = stringResource(R.string.dialog_confirm_remove), - style = MaterialTheme.typography.bodyLarge + style = MaterialTheme.typography.bodyLarge, ) } }, @@ -184,19 +184,19 @@ fun BookComposable( TextButton(onClick = { showDeleteFromCacheDialog = false }) { Text( text = stringResource(R.string.dialog_dismiss_cancel), - style = MaterialTheme.typography.bodyLarge + style = MaterialTheme.typography.bodyLarge, ) } }, containerColor = MaterialTheme.colorScheme.surface, - shape = MaterialTheme.shapes.medium + shape = MaterialTheme.shapes.medium, ) } } private fun provideCachingStateIcon( book: Book, - cacheProgress: CacheProgress + cacheProgress: CacheProgress, ): ImageVector? = when (cacheProgress) { CacheProgress.Completed -> cachedIcon CacheProgress.Removed -> ableToCacheIcon diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/DefaultActionComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/DefaultActionComposable.kt index e1355da0..c675dc7a 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/DefaultActionComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/DefaultActionComposable.kt @@ -42,7 +42,7 @@ fun DefaultActionComposable( cachingModelView: CachingModelView, libraryViewModel: LibraryViewModel, onContentRefreshing: (Boolean) -> Unit, - onSearchRequested: () -> Unit + onSearchRequested: () -> Unit, ) { var navigationItemSelected by remember { mutableStateOf(false) } val coroutineScope = rememberCoroutineScope() @@ -50,11 +50,11 @@ fun DefaultActionComposable( Row { IconButton( onClick = { onSearchRequested() }, - modifier = Modifier.offset(x = 4.dp) + modifier = Modifier.offset(x = 4.dp), ) { Icon( imageVector = Search, - contentDescription = null + contentDescription = null, ) } IconButton(onClick = { @@ -62,7 +62,7 @@ fun DefaultActionComposable( }) { Icon( imageVector = Icons.Outlined.MoreVert, - contentDescription = "Menu" + contentDescription = "Menu", ) } } @@ -72,7 +72,7 @@ fun DefaultActionComposable( onDismissRequest = { navigationItemSelected = false }, modifier = Modifier .background(colorScheme.background) - .padding(4.dp) + .padding(4.dp), ) { DropdownMenuItem( leadingIcon = { @@ -81,7 +81,7 @@ fun DefaultActionComposable( true -> Icons.Outlined.Cloud else -> Icons.Outlined.CloudOff }, - contentDescription = null + contentDescription = null, ) }, text = { @@ -91,7 +91,7 @@ fun DefaultActionComposable( else -> stringResource(R.string.enable_offline) }, style = MaterialTheme.typography.bodyMedium, - modifier = Modifier.padding(start = 8.dp) + modifier = Modifier.padding(start = 8.dp), ) }, onClick = { @@ -110,21 +110,21 @@ fun DefaultActionComposable( }, modifier = Modifier .fillMaxWidth() - .padding(vertical = 4.dp) + .padding(vertical = 4.dp), ) DropdownMenuItem( leadingIcon = { Icon( imageVector = Icons.Outlined.Settings, - contentDescription = null + contentDescription = null, ) }, text = { Text( stringResource(R.string.library_screen_preferences_menu_item), style = MaterialTheme.typography.bodyMedium, - modifier = Modifier.padding(start = 8.dp) + modifier = Modifier.padding(start = 8.dp), ) }, onClick = { @@ -133,7 +133,7 @@ fun DefaultActionComposable( }, modifier = Modifier .fillMaxWidth() - .padding(vertical = 4.dp) + .padding(vertical = 4.dp), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/LibrarySearchActionComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/LibrarySearchActionComposable.kt index c597ea4a..ac7233c4 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/LibrarySearchActionComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/LibrarySearchActionComposable.kt @@ -32,7 +32,7 @@ import org.grakovne.lissen.R @Composable fun LibrarySearchActionComposable( onSearchDismissed: () -> Unit, - onSearchRequested: (String) -> Unit + onSearchRequested: (String) -> Unit, ) { val focusRequester = remember { FocusRequester() } val searchText = remember { mutableStateOf("") } @@ -51,15 +51,15 @@ fun LibrarySearchActionComposable( modifier = Modifier .fillMaxWidth() .padding(start = 4.dp, end = 8.dp) - .height(40.dp) + .height(40.dp), ) { IconButton( modifier = Modifier.height(36.dp), - onClick = { onSearchDismissed() } + onClick = { onSearchDismissed() }, ) { Icon( imageVector = Icons.AutoMirrored.Outlined.ArrowBack, - contentDescription = "Back" + contentDescription = "Back", ) } @@ -69,7 +69,7 @@ fun LibrarySearchActionComposable( .weight(1f) .height(36.dp) .background(colorScheme.surfaceContainer, RoundedCornerShape(36.dp)) - .padding(start = 16.dp, end = 4.dp) + .padding(start = 16.dp, end = 4.dp), ) { BasicTextField( value = searchText.value, @@ -80,28 +80,28 @@ fun LibrarySearchActionComposable( textStyle = typography.bodyLarge.copy(color = colorScheme.onBackground), singleLine = true, keyboardOptions = KeyboardOptions.Default.copy( - imeAction = ImeAction.Search + imeAction = ImeAction.Search, ), decorationBox = { innerTextField -> if (searchText.value.isEmpty()) { Text( text = stringResource(R.string.library_search_hint), color = colorScheme.onSurfaceVariant, - style = typography.bodyLarge + style = typography.bodyLarge, ) } innerTextField() - } + }, ) if (searchText.value.isNotEmpty()) { IconButton( modifier = Modifier.height(36.dp), - onClick = { updateSearchText("") } + onClick = { updateSearchText("") }, ) { Icon( imageVector = Icons.Outlined.Clear, - contentDescription = "Clear" + contentDescription = "Clear", ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/MiniPlayerComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/MiniPlayerComposable.kt index 1af284e1..c1e2890b 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/MiniPlayerComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/MiniPlayerComposable.kt @@ -46,19 +46,19 @@ fun MiniPlayerComposable( modifier: Modifier = Modifier, book: DetailedItem, imageLoader: ImageLoader, - playerViewModel: PlayerViewModel + playerViewModel: PlayerViewModel, ) { val isPlaying: Boolean by playerViewModel.isPlaying.observeAsState(false) Surface( shadowElevation = 4.dp, - modifier = modifier.clickable { navController.showPlayer(book.id, book.title) } + modifier = modifier.clickable { navController.showPlayer(book.id, book.title) }, ) { Row( modifier = Modifier .fillMaxWidth() .padding(horizontal = 20.dp, vertical = 8.dp), - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, ) { val context = LocalContext.current val imageRequest = remember(book.id) { @@ -77,22 +77,22 @@ fun MiniPlayerComposable( .size(48.dp) .aspectRatio(1f) .clip(RoundedCornerShape(4.dp)), - error = painterResource(R.drawable.cover_fallback) + error = painterResource(R.drawable.cover_fallback), ) Spacer(modifier = Modifier.width(16.dp)) Column( - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), ) { Text( text = book.title, style = MaterialTheme.typography.bodyMedium.copy( fontWeight = FontWeight.SemiBold, - color = MaterialTheme.colorScheme.onBackground + color = MaterialTheme.colorScheme.onBackground, ), maxLines = 2, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) book .author @@ -100,26 +100,26 @@ fun MiniPlayerComposable( Text( text = it, style = MaterialTheme.typography.bodyMedium.copy( - color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.6f) + color = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.6f), ), maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) } } Column( horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center + verticalArrangement = Arrangement.Center, ) { Row { IconButton( - onClick = { playerViewModel.togglePlayPause() } + onClick = { playerViewModel.togglePlayPause() }, ) { Icon( imageVector = if (isPlaying) Icons.Outlined.Pause else Icons.Filled.PlayArrow, contentDescription = if (isPlaying) "Pause" else "Play", - modifier = Modifier.size(36.dp) + modifier = Modifier.size(36.dp), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/RecentBooksComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/RecentBooksComposable.kt index 7cfdb9e0..4f07cadf 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/RecentBooksComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/RecentBooksComposable.kt @@ -39,7 +39,7 @@ fun RecentBooksComposable( navController: AppNavigationService, recentBooks: List, imageLoader: ImageLoader, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { val configuration = LocalConfiguration.current val screenWidth = remember { configuration.screenWidthDp.dp } @@ -54,7 +54,7 @@ fun RecentBooksComposable( .fillMaxWidth() .horizontalScroll(rememberScrollState()) .padding(horizontal = 4.dp), - horizontalArrangement = Arrangement.spacedBy(16.dp) + horizontalArrangement = Arrangement.spacedBy(16.dp), ) { recentBooks .forEach { book -> @@ -62,7 +62,7 @@ fun RecentBooksComposable( book = book, width = itemWidth, imageLoader = imageLoader, - navController = navController + navController = navController, ) } } @@ -73,12 +73,12 @@ fun RecentBookItemComposable( navController: AppNavigationService, book: RecentBook, width: Dp, - imageLoader: ImageLoader + imageLoader: ImageLoader, ) { Column( modifier = Modifier .width(width) - .clickable { navController.showPlayer(book.id, book.title) } + .clickable { navController.showPlayer(book.id, book.title) }, ) { val context = LocalContext.current @@ -99,7 +99,7 @@ fun RecentBookItemComposable( .fillMaxWidth() .aspectRatio(1f) .clip(RoundedCornerShape(8.dp)), - error = painterResource(R.drawable.cover_fallback) + error = painterResource(R.drawable.cover_fallback), ) Spacer(modifier = Modifier.height(8.dp)) @@ -109,7 +109,7 @@ fun RecentBookItemComposable( text = book.title, style = MaterialTheme.typography.bodyMedium.copy(fontWeight = FontWeight.SemiBold), maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) Spacer(modifier = Modifier.height(4.dp)) @@ -119,11 +119,11 @@ fun RecentBookItemComposable( text = book.author, style = MaterialTheme.typography.bodySmall.copy( color = MaterialTheme.colorScheme.onBackground.copy( - alpha = 0.6f - ) + alpha = 0.6f, + ), ), maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/fallback/LibraryFallbackComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/fallback/LibraryFallbackComposable.kt index 00eef958..6ce7be33 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/fallback/LibraryFallbackComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/fallback/LibraryFallbackComposable.kt @@ -31,7 +31,7 @@ import org.grakovne.lissen.viewmodel.CachingModelView fun LibraryFallbackComposable( searchRequested: Boolean, cachingModelView: CachingModelView, - networkQualityService: NetworkQualityService + networkQualityService: NetworkQualityService, ) { val configuration = LocalConfiguration.current val screenHeight = configuration.screenHeightDp.dp @@ -41,10 +41,10 @@ fun LibraryFallbackComposable( .fillMaxWidth() .height(screenHeight / 2) .padding(horizontal = 16.dp), - contentAlignment = Alignment.Center + contentAlignment = Alignment.Center, ) { Column( - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { val hasNetwork = networkQualityService.isNetworkAvailable() val isLocalCache = cachingModelView.localCacheUsing() @@ -69,13 +69,13 @@ fun LibraryFallbackComposable( .size(120.dp) .clip(CircleShape) .background(MaterialTheme.colorScheme.surfaceContainer), - contentAlignment = Alignment.Center + contentAlignment = Alignment.Center, ) { Icon( imageVector = it, contentDescription = "Library placeholder", tint = Color.White, - modifier = Modifier.size(64.dp) + modifier = Modifier.size(64.dp), ) } } @@ -85,7 +85,7 @@ fun LibraryFallbackComposable( textAlign = TextAlign.Center, text = it, style = MaterialTheme.typography.headlineMedium, - modifier = Modifier.padding(top = 36.dp) + modifier = Modifier.padding(top = 36.dp), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/placeholder/LibraryPlaceholderComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/placeholder/LibraryPlaceholderComposable.kt index 85f6de16..09bada8e 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/placeholder/LibraryPlaceholderComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/placeholder/LibraryPlaceholderComposable.kt @@ -24,10 +24,10 @@ import com.valentinilk.shimmer.shimmer @Composable fun LibraryPlaceholderComposable( - itemCount: Int = 15 + itemCount: Int = 15, ) { Column( - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) { repeat(itemCount) { LibraryItemPlaceholderComposable() } } @@ -39,7 +39,7 @@ fun LibraryItemPlaceholderComposable() { modifier = Modifier .fillMaxWidth() .padding(horizontal = 4.dp, vertical = 8.dp), - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, ) { Box( modifier = Modifier @@ -47,7 +47,7 @@ fun LibraryItemPlaceholderComposable() { .aspectRatio(1f) .clip(RoundedCornerShape(4.dp)) .shimmer() - .background(Color.Gray) + .background(Color.Gray), ) Spacer(modifier = Modifier.width(16.dp)) @@ -59,7 +59,7 @@ fun LibraryItemPlaceholderComposable() { .height(16.dp) .clip(RoundedCornerShape(4.dp)) .shimmer() - .background(Color.Gray) + .background(Color.Gray), ) Spacer(modifier = Modifier.height(8.dp)) @@ -70,7 +70,7 @@ fun LibraryItemPlaceholderComposable() { .height(12.dp) .clip(RoundedCornerShape(4.dp)) .shimmer() - .background(Color.Gray) + .background(Color.Gray), ) } @@ -79,14 +79,14 @@ fun LibraryItemPlaceholderComposable() { Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, - modifier = Modifier.width(36.dp) + modifier = Modifier.width(36.dp), ) { Box( modifier = Modifier .size(36.dp) .clip(CircleShape) .shimmer() - .background(Color.Gray) + .background(Color.Gray), ) Spacer(modifier = Modifier.height(8.dp)) @@ -97,7 +97,7 @@ fun LibraryItemPlaceholderComposable() { .height(12.dp) .clip(RoundedCornerShape(4.dp)) .shimmer() - .background(Color.Gray) + .background(Color.Gray), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/placeholder/RecentBooksPlaceholderComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/placeholder/RecentBooksPlaceholderComposable.kt index 1f7822bc..d8541d82 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/placeholder/RecentBooksPlaceholderComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/composables/placeholder/RecentBooksPlaceholderComposable.kt @@ -27,7 +27,7 @@ import com.valentinilk.shimmer.shimmer @Composable fun RecentBooksPlaceholderComposable( - itemCount: Int = 5 + itemCount: Int = 5, ) { val configuration = LocalConfiguration.current val screenWidth = remember { configuration.screenWidthDp.dp } @@ -40,7 +40,7 @@ fun RecentBooksPlaceholderComposable( LazyRow( contentPadding = PaddingValues(horizontal = 4.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) { items(itemCount) { RecentBookItemComposable(width = itemWidth) } } @@ -48,11 +48,11 @@ fun RecentBooksPlaceholderComposable( @Composable fun RecentBookItemComposable( - width: Dp + width: Dp, ) { Column( modifier = Modifier - .width(width) + .width(width), ) { Spacer( modifier = Modifier @@ -60,7 +60,7 @@ fun RecentBookItemComposable( .aspectRatio(1f) .clip(RoundedCornerShape(8.dp)) .shimmer() - .background(Color.Gray) + .background(Color.Gray), ) Spacer(modifier = Modifier.height(8.dp)) @@ -74,7 +74,7 @@ fun RecentBookItemComposable( modifier = Modifier .clip(RoundedCornerShape(4.dp)) .shimmer() - .background(Color.Gray) + .background(Color.Gray), ) Spacer(modifier = Modifier.height(4.dp)) @@ -84,14 +84,14 @@ fun RecentBookItemComposable( text = "Fyodor Dostoevsky", style = MaterialTheme.typography.bodySmall.copy( color = MaterialTheme.colorScheme.onBackground.copy( - alpha = 0.6f - ) + alpha = 0.6f, + ), ), maxLines = 1, modifier = Modifier .clip(RoundedCornerShape(4.dp)) .shimmer() - .background(Color.Gray) + .background(Color.Gray), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibraryDefaultPagingSource.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibraryDefaultPagingSource.kt index 1838be9a..e50d7510 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibraryDefaultPagingSource.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibraryDefaultPagingSource.kt @@ -8,7 +8,7 @@ import org.grakovne.lissen.persistence.preferences.LissenSharedPreferences class LibraryDefaultPagingSource( private val preferences: LissenSharedPreferences, - private val mediaChannel: LissenMediaProvider + private val mediaChannel: LissenMediaProvider, ) : PagingSource() { override fun getRefreshKey(state: PagingState) = state @@ -31,7 +31,7 @@ class LibraryDefaultPagingSource( .fetchBooks( libraryId = libraryId, pageSize = params.loadSize, - pageNumber = params.key ?: 0 + pageNumber = params.key ?: 0, ) .fold( onSuccess = { result -> @@ -41,12 +41,12 @@ class LibraryDefaultPagingSource( LoadResult.Page( data = result.items, prevKey = prevKey, - nextKey = nextPage + nextKey = nextPage, ) }, onFailure = { LoadResult.Page(emptyList(), null, null) - } + }, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibraryEmptyPagingSource.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibraryEmptyPagingSource.kt index b24774e4..abcdb489 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibraryEmptyPagingSource.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibraryEmptyPagingSource.kt @@ -9,6 +9,6 @@ class LibraryEmptyPagingSource() : PagingSource() { override fun getRefreshKey(state: PagingState) = null override suspend fun load( - params: LoadParams + params: LoadParams, ): LoadResult = LoadResult.Page(emptyList(), null, null) } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibrarySearchPagingSource.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibrarySearchPagingSource.kt index a049cfec..ff721061 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibrarySearchPagingSource.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/library/paging/LibrarySearchPagingSource.kt @@ -10,7 +10,7 @@ class LibrarySearchPagingSource( private val preferences: LissenSharedPreferences, private val mediaChannel: LissenMediaProvider, private val searchToken: String, - private val limit: Int + private val limit: Int, ) : PagingSource() { override fun getRefreshKey(state: PagingState) = null @@ -29,7 +29,7 @@ class LibrarySearchPagingSource( .searchBooks(libraryId, searchToken, limit) .fold( onSuccess = { LoadResult.Page(it, null, null) }, - onFailure = { LoadResult.Page(emptyList(), null, null) } + onFailure = { LoadResult.Page(emptyList(), null, null) }, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/login/LoginScreen.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/login/LoginScreen.kt index 5e1ec80f..ceb81756 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/login/LoginScreen.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/login/LoginScreen.kt @@ -71,7 +71,7 @@ import org.grakovne.lissen.viewmodel.LoginViewModel.LoginState @Composable fun LoginScreen( navController: AppNavigationService, - viewModel: LoginViewModel = hiltViewModel() + viewModel: LoginViewModel = hiltViewModel(), ) { val loginState by viewModel.loginState.collectAsState() val loginError by viewModel.loginError.observeAsState() @@ -109,13 +109,13 @@ fun LoginScreen( Box( modifier = Modifier .padding(innerPadding) - .fillMaxSize() + .fillMaxSize(), ) { Column( modifier = Modifier .align(Alignment.Center) .fillMaxWidth(0.8f), - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { Text( text = stringResource(R.string.login_screen_title), @@ -123,10 +123,10 @@ fun LoginScreen( fontSize = 24.sp, fontWeight = FontWeight.SemiBold, letterSpacing = 2.sp, - textAlign = TextAlign.Center + textAlign = TextAlign.Center, ), modifier = Modifier - .padding(vertical = 32.dp) + .padding(vertical = 32.dp), ) OutlinedTextField( @@ -139,7 +139,7 @@ fun LoginScreen( modifier = Modifier .fillMaxWidth() .padding(vertical = 4.dp) - .testTag("hostInput") + .testTag("hostInput"), ) OutlinedTextField( @@ -151,7 +151,7 @@ fun LoginScreen( modifier = Modifier .fillMaxWidth() .padding(vertical = 12.dp) - .testTag("usernameInput") + .testTag("usernameInput"), ) OutlinedTextField( @@ -160,11 +160,11 @@ fun LoginScreen( onValueChange = { viewModel.setPassword(it) }, trailingIcon = { IconButton( - onClick = { showPassword = !showPassword } + onClick = { showPassword = !showPassword }, ) { Icon( imageVector = if (showPassword) Icons.Filled.VisibilityOff else Icons.Filled.Visibility, - contentDescription = stringResource(R.string.login_screen_show_password_hint) + contentDescription = stringResource(R.string.login_screen_show_password_hint), ) } }, @@ -175,13 +175,13 @@ fun LoginScreen( modifier = Modifier .fillMaxWidth() .padding(vertical = 4.dp) - .testTag("passwordInput") + .testTag("passwordInput"), ) Row( modifier = Modifier .fillMaxWidth() - .padding(top = 32.dp) + .padding(top = 32.dp), ) { Button( onClick = { viewModel.login() }, @@ -192,17 +192,17 @@ fun LoginScreen( topStart = 16.dp, bottomStart = 16.dp, topEnd = 0.dp, - bottomEnd = 0.dp - ) + bottomEnd = 0.dp, + ), ) { Spacer(modifier = Modifier.width(28.dp)) Box( modifier = Modifier.fillMaxWidth(), - contentAlignment = Alignment.Center + contentAlignment = Alignment.Center, ) { Text( text = stringResource(R.string.login_screen_connect_button_text), - fontSize = 16.sp + fontSize = 16.sp, ) } } @@ -218,14 +218,14 @@ fun LoginScreen( topStart = 0.dp, bottomStart = 0.dp, topEnd = 16.dp, - bottomEnd = 16.dp + bottomEnd = 16.dp, ), - contentPadding = PaddingValues(0.dp) + contentPadding = PaddingValues(0.dp), ) { Icon( imageVector = Icons.Default.Settings, contentDescription = "Settings", - modifier = Modifier.size(24.dp) + modifier = Modifier.size(24.dp), ) } } @@ -235,7 +235,7 @@ fun LoginScreen( strokeWidth = 4.dp, modifier = Modifier .padding(vertical = 16.dp) - .alpha(if (loginState !is LoginState.Idle) 1f else 0f) + .alpha(if (loginState !is LoginState.Idle) 1f else 0f), ) } @@ -250,12 +250,12 @@ fun LoginScreen( fontWeight = FontWeight.Normal, color = colorScheme.onBackground, letterSpacing = 0.5.sp, - lineHeight = 32.sp + lineHeight = 32.sp, ), - textAlign = TextAlign.Center + textAlign = TextAlign.Center, ) } - } + }, ) } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/ChapterSearchActionComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/ChapterSearchActionComposable.kt index c3a217d8..7de48903 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/ChapterSearchActionComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/ChapterSearchActionComposable.kt @@ -29,7 +29,7 @@ import org.grakovne.lissen.R @Composable fun ChapterSearchActionComposable( - onSearchRequested: (String) -> Unit + onSearchRequested: (String) -> Unit, ) { val focusRequester = remember { FocusRequester() } val searchText = remember { mutableStateOf("") } @@ -47,7 +47,7 @@ fun ChapterSearchActionComposable( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .padding(start = 48.dp, end = 8.dp) - .height(40.dp) + .height(40.dp), ) { Row( verticalAlignment = Alignment.CenterVertically, @@ -55,7 +55,7 @@ fun ChapterSearchActionComposable( .weight(1f) .height(36.dp) .background(colorScheme.surfaceContainer, RoundedCornerShape(36.dp)) - .padding(start = 16.dp, end = 4.dp) + .padding(start = 16.dp, end = 4.dp), ) { BasicTextField( value = searchText.value, @@ -66,28 +66,28 @@ fun ChapterSearchActionComposable( textStyle = typography.bodyLarge.copy(color = colorScheme.onBackground), singleLine = true, keyboardOptions = KeyboardOptions.Default.copy( - imeAction = ImeAction.Search + imeAction = ImeAction.Search, ), decorationBox = { innerTextField -> if (searchText.value.isEmpty()) { Text( text = stringResource(R.string.chapter_search_hint), color = colorScheme.onSurfaceVariant, - style = typography.bodyLarge + style = typography.bodyLarge, ) } innerTextField() - } + }, ) if (searchText.value.isNotEmpty()) { IconButton( modifier = Modifier.height(36.dp), - onClick = { updateSearchText("") } + onClick = { updateSearchText("") }, ) { Icon( imageVector = Icons.Outlined.Clear, - contentDescription = "Clear" + contentDescription = "Clear", ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/PlayerScreen.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/PlayerScreen.kt index 169df4a4..ef94cae2 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/PlayerScreen.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/PlayerScreen.kt @@ -56,7 +56,7 @@ fun PlayerScreen( navController: AppNavigationService, imageLoader: ImageLoader, bookId: String, - bookTitle: String + bookTitle: String, ) { val viewModel: PlayerViewModel = hiltViewModel() val titleTextStyle = typography.titleLarge.copy(fontWeight = FontWeight.SemiBold) @@ -106,21 +106,21 @@ fun PlayerScreen( transitionSpec = { fadeIn(animationSpec = keyframes { durationMillis = 150 }) togetherWith fadeOut(animationSpec = keyframes { durationMillis = 150 }) - } + }, ) { isSearchRequested -> when (isSearchRequested) { true -> ChapterSearchActionComposable( - onSearchRequested = { viewModel.updateSearch(it) } + onSearchRequested = { viewModel.updateSearch(it) }, ) false -> Row { IconButton( onClick = { viewModel.requestSearch() }, - modifier = Modifier.padding(end = 4.dp) + modifier = Modifier.padding(end = 4.dp), ) { Icon( imageVector = Search, - contentDescription = null + contentDescription = null, ) } } @@ -134,7 +134,7 @@ fun PlayerScreen( style = titleTextStyle, color = colorScheme.onSurface, maxLines = 1, - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) }, navigationIcon = { @@ -142,16 +142,16 @@ fun PlayerScreen( Icon( imageVector = Icons.AutoMirrored.Outlined.ArrowBack, contentDescription = "Back", - tint = colorScheme.onSurface + tint = colorScheme.onSurface, ) } - } + }, ) }, bottomBar = { NavigationBarComposable( viewModel = viewModel, - navController = navController + navController = navController, ) }, modifier = Modifier.systemBarsPadding(), @@ -160,28 +160,28 @@ fun PlayerScreen( modifier = Modifier .testTag("playerScreen") .padding(innerPadding), - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { AnimatedVisibility( visible = playingQueueExpanded.not(), enter = expandVertically(animationSpec = tween(400)), - exit = shrinkVertically(animationSpec = tween(400)) + exit = shrinkVertically(animationSpec = tween(400)), ) { Column( - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { if (!isPlaybackReady) { TrackDetailsPlaceholderComposable(bookTitle) } else { TrackDetailsComposable( viewModel = viewModel, - imageLoader = imageLoader + imageLoader = imageLoader, ) } TrackControlComposable( viewModel = viewModel, - modifier = Modifier + modifier = Modifier, ) } } @@ -191,14 +191,14 @@ fun PlayerScreen( if (isPlaybackReady) { PlayingQueueComposable( viewModel = viewModel, - modifier = Modifier + modifier = Modifier, ) } else { PlayingQueuePlaceholderComposable( - modifier = Modifier + modifier = Modifier, ) } } - } + }, ) } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/NavigationBarComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/NavigationBarComposable.kt index 57004bc3..d0fbdead 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/NavigationBarComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/NavigationBarComposable.kt @@ -29,7 +29,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import org.grakovne.lissen.R -import org.grakovne.lissen.ui.icons.Timer_play +import org.grakovne.lissen.ui.icons.TimerPlay import org.grakovne.lissen.ui.navigation.AppNavigationService import org.grakovne.lissen.viewmodel.PlayerViewModel @@ -37,7 +37,7 @@ import org.grakovne.lissen.viewmodel.PlayerViewModel fun NavigationBarComposable( viewModel: PlayerViewModel, navController: AppNavigationService, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { val timerOption by viewModel.timerOption.observeAsState(null) val playbackSpeed by viewModel.playbackSpeed.observeAsState(1f) @@ -48,12 +48,12 @@ fun NavigationBarComposable( Surface( shadowElevation = 4.dp, - modifier = modifier.height(64.dp) + modifier = modifier.height(64.dp), ) { NavigationBar( containerColor = Color.Transparent, contentColor = colorScheme.onBackground, - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) { val iconSize = 24.dp val labelStyle = typography.labelSmall.copy(fontSize = 10.sp) @@ -63,7 +63,7 @@ fun NavigationBarComposable( Icon( Icons.Outlined.Headset, contentDescription = stringResource(R.string.player_screen_library_navigation), - modifier = Modifier.size(iconSize) + modifier = Modifier.size(iconSize), ) }, label = { @@ -71,15 +71,15 @@ fun NavigationBarComposable( text = stringResource(R.string.player_screen_library_navigation), style = labelStyle, maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) }, selected = false, onClick = { navController.showLibrary() }, colors = NavigationBarItemDefaults.colors( selectedIconColor = colorScheme.primary, - indicatorColor = colorScheme.surfaceContainer - ) + indicatorColor = colorScheme.surfaceContainer, + ), ) NavigationBarItem( @@ -87,7 +87,7 @@ fun NavigationBarComposable( Icon( Icons.Outlined.Book, contentDescription = stringResource(R.string.player_screen_chapter_list_navigation), - modifier = Modifier.size(iconSize) + modifier = Modifier.size(iconSize), ) }, label = { @@ -95,15 +95,15 @@ fun NavigationBarComposable( text = stringResource(R.string.player_screen_chapter_list_navigation), style = labelStyle, maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) }, selected = playingQueueExpanded, onClick = { viewModel.togglePlayingQueue() }, colors = NavigationBarItemDefaults.colors( selectedIconColor = colorScheme.primary, - indicatorColor = colorScheme.surfaceContainer - ) + indicatorColor = colorScheme.surfaceContainer, + ), ) NavigationBarItem( @@ -111,7 +111,7 @@ fun NavigationBarComposable( Icon( Icons.Outlined.SlowMotionVideo, contentDescription = stringResource(R.string.player_screen_playback_speed_navigation), - modifier = Modifier.size(iconSize) + modifier = Modifier.size(iconSize), ) }, label = { @@ -119,7 +119,7 @@ fun NavigationBarComposable( text = stringResource(R.string.player_screen_playback_speed_navigation), style = labelStyle, maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) }, selected = false, @@ -127,8 +127,8 @@ fun NavigationBarComposable( enabled = true, colors = NavigationBarItemDefaults.colors( selectedIconColor = colorScheme.primary, - indicatorColor = colorScheme.surfaceContainer - ) + indicatorColor = colorScheme.surfaceContainer, + ), ) NavigationBarItem( @@ -136,10 +136,10 @@ fun NavigationBarComposable( Icon( when (timerOption) { null -> Icons.Outlined.Timer - else -> Timer_play + else -> TimerPlay }, contentDescription = stringResource(R.string.player_screen_timer_navigation), - modifier = Modifier.size(iconSize) + modifier = Modifier.size(iconSize), ) }, label = { @@ -147,22 +147,22 @@ fun NavigationBarComposable( text = stringResource(R.string.player_screen_timer_navigation), style = labelStyle, maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) }, selected = false, onClick = { timerExpanded = true }, colors = NavigationBarItemDefaults.colors( selectedIconColor = colorScheme.primary, - indicatorColor = colorScheme.surfaceContainer - ) + indicatorColor = colorScheme.surfaceContainer, + ), ) if (playbackSpeedExpanded) { PlaybackSpeedComposable( currentSpeed = playbackSpeed, onSpeedChange = { viewModel.setPlaybackSpeed(it) }, - onDismissRequest = { playbackSpeedExpanded = false } + onDismissRequest = { playbackSpeedExpanded = false }, ) } @@ -170,7 +170,7 @@ fun NavigationBarComposable( TimerComposable( currentOption = timerOption, onOptionSelected = { viewModel.setTimer(it) }, - onDismissRequest = { timerExpanded = false } + onDismissRequest = { timerExpanded = false }, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlaybackSpeedComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlaybackSpeedComposable.kt index 8e9aee9a..8971c6e0 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlaybackSpeedComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlaybackSpeedComposable.kt @@ -40,7 +40,7 @@ import org.grakovne.lissen.R fun PlaybackSpeedComposable( currentSpeed: Float, onSpeedChange: (Float) -> Unit, - onDismissRequest: () -> Unit + onDismissRequest: () -> Unit, ) { var selectedPlaybackSpeed by remember { mutableFloatStateOf(currentSpeed) } @@ -53,18 +53,18 @@ fun PlaybackSpeedComposable( .fillMaxWidth() .padding(bottom = 16.dp) .padding(horizontal = 16.dp), - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { Text( text = stringResource(R.string.playback_speed_title), - style = typography.bodyLarge + style = typography.bodyLarge, ) Spacer(modifier = Modifier.height(16.dp)) Text( text = "${String.format("%.2f", selectedPlaybackSpeed)}x", - style = typography.titleLarge.copy(fontWeight = SemiBold) + style = typography.titleLarge.copy(fontWeight = SemiBold), ) Spacer(modifier = Modifier.height(8.dp)) @@ -88,21 +88,21 @@ fun PlaybackSpeedComposable( colors = SliderDefaults.colors( thumbColor = colorScheme.primary, activeTrackColor = colorScheme.primary, - inactiveTrackColor = colorScheme.primary.copy(alpha = 0.2f) - ) + inactiveTrackColor = colorScheme.primary.copy(alpha = 0.2f), + ), ) Spacer(modifier = Modifier.height(24.dp)) Row( modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceEvenly + horizontalArrangement = Arrangement.SpaceEvenly, ) { playbackSpeedPresets .forEach { value -> Box( contentAlignment = Alignment.Center, - modifier = Modifier.size(56.dp) + modifier = Modifier.size(56.dp), ) { Button( onClick = { @@ -114,9 +114,9 @@ fun PlaybackSpeedComposable( containerColor = when (selectedPlaybackSpeed == value) { true -> colorScheme.primary else -> colorScheme.surfaceContainer - } + }, ), - modifier = Modifier.fillMaxSize() + modifier = Modifier.fillMaxSize(), ) {} Text( text = String.format("%.2f", value), @@ -125,7 +125,7 @@ fun PlaybackSpeedComposable( false -> typography.labelMedium }, maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) } } @@ -133,7 +133,7 @@ fun PlaybackSpeedComposable( Spacer(modifier = Modifier.height(8.dp)) } - } + }, ) } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlayingQueueComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlayingQueueComposable.kt index 20bad155..ba452443 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlayingQueueComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlayingQueueComposable.kt @@ -54,7 +54,7 @@ import org.grakovne.lissen.viewmodel.PlayerViewModel @Composable fun PlayingQueueComposable( viewModel: PlayerViewModel, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { val context = LocalContext.current val coroutineScope = rememberCoroutineScope() @@ -101,7 +101,7 @@ fun PlayingQueueComposable( val fontSize by animateFloatAsState( targetValue = typography.titleMedium.fontSize.value * 1.25f, animationSpec = tween(durationMillis = 500), - label = "playing_queue_font_size" + label = "playing_queue_font_size", ) LaunchedEffect(currentTrackIndex) { @@ -111,14 +111,14 @@ fun PlayingQueueComposable( listState = listState, playbackReady = playbackReady, animate = true, - playingQueueExpanded = playingQueueExpanded + playingQueueExpanded = playingQueueExpanded, ) } Column( modifier = modifier .fillMaxSize() - .padding(horizontal = 16.dp) + .padding(horizontal = 16.dp), ) { if (playingQueueExpanded.not()) { Text( @@ -126,7 +126,7 @@ fun PlayingQueueComposable( fontSize = fontSize.sp, fontWeight = FontWeight.SemiBold, color = MaterialTheme.colorScheme.primary, - modifier = Modifier.padding(horizontal = 6.dp) + modifier = Modifier.padding(horizontal = 6.dp), ) Spacer(modifier = Modifier.height(12.dp)) @@ -142,7 +142,7 @@ fun PlayingQueueComposable( .scrollable( state = rememberScrollState(), orientation = Orientation.Vertical, - enabled = playingQueueExpanded + enabled = playingQueueExpanded, ) .onGloballyPositioned { if (collapsedPlayingQueueHeight == 0) { @@ -158,7 +158,7 @@ fun PlayingQueueComposable( listState = listState, playbackReady = playbackReady, animate = false, - playingQueueExpanded = playingQueueExpanded + playingQueueExpanded = playingQueueExpanded, ) } } @@ -166,7 +166,7 @@ fun PlayingQueueComposable( .nestedScroll(object : NestedScrollConnection { override fun onPreScroll( available: Offset, - source: NestedScrollSource + source: NestedScrollSource, ): Offset { return if (playingQueueExpanded) Offset.Zero else available } @@ -187,14 +187,14 @@ fun PlayingQueueComposable( return available } }), - state = listState + state = listState, ) { itemsIndexed(showingChapters) { index, chapter -> PlaylistItemComposable( track = chapter, onClick = { viewModel.setChapter(chapter) }, isSelected = chapter.id == currentTrackId?.id, - modifier = Modifier.wrapContentWidth() + modifier = Modifier.wrapContentWidth(), ) if (index < showingChapters.size - 1) { @@ -202,7 +202,7 @@ fun PlayingQueueComposable( thickness = 1.dp, modifier = Modifier .padding(start = 20.dp) - .padding(vertical = 8.dp) + .padding(vertical = 8.dp), ) } } @@ -215,7 +215,7 @@ private suspend fun scrollPlayingQueue( listState: LazyListState, playbackReady: Boolean, animate: Boolean, - playingQueueExpanded: Boolean + playingQueueExpanded: Boolean, ) { if (playingQueueExpanded) { return diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlaylistItemComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlaylistItemComposable.kt index bad211d1..ef5dfc4a 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlaylistItemComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/PlaylistItemComposable.kt @@ -30,7 +30,7 @@ fun PlaylistItemComposable( track: BookChapter, isSelected: Boolean, onClick: () -> Unit, - modifier: Modifier + modifier: Modifier, ) { Row( verticalAlignment = Alignment.CenterVertically, @@ -38,14 +38,14 @@ fun PlaylistItemComposable( .clickable( onClick = onClick, indication = null, - interactionSource = remember { MutableInteractionSource() } - ) + interactionSource = remember { MutableInteractionSource() }, + ), ) { if (isSelected) { Icon( imageVector = Icons.Outlined.Audiotrack, contentDescription = stringResource(R.string.player_screen_now_playing_title), - modifier = Modifier.size(16.dp) + modifier = Modifier.size(16.dp), ) } else { Spacer(modifier = Modifier.size(16.dp)) @@ -59,14 +59,14 @@ fun PlaylistItemComposable( color = colorScheme.onBackground, overflow = TextOverflow.Ellipsis, fontWeight = if (isSelected) FontWeight.SemiBold else FontWeight.Normal, - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), ) Text( text = track.duration.toInt().formatLeadingMinutes(), style = MaterialTheme.typography.bodySmall, modifier = Modifier.padding(start = 8.dp), fontWeight = if (isSelected) FontWeight.SemiBold else FontWeight.Normal, - color = colorScheme.onBackground.copy(alpha = 0.6f) + color = colorScheme.onBackground.copy(alpha = 0.6f), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TimerComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TimerComposable.kt index a93c9fe6..934f8c58 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TimerComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TimerComposable.kt @@ -37,7 +37,7 @@ import org.grakovne.lissen.domain.TimerOption fun TimerComposable( currentOption: TimerOption?, onOptionSelected: (TimerOption?) -> Unit, - onDismissRequest: () -> Unit + onDismissRequest: () -> Unit, ) { val context = LocalContext.current @@ -50,11 +50,11 @@ fun TimerComposable( .fillMaxWidth() .padding(bottom = 16.dp) .padding(horizontal = 16.dp), - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { Text( text = stringResource(R.string.timer_title), - style = typography.bodyLarge + style = typography.bodyLarge, ) Spacer(modifier = Modifier.height(8.dp)) @@ -66,7 +66,7 @@ fun TimerComposable( Row { Text( text = item.makeText(context), - style = typography.bodyMedium + style = typography.bodyMedium, ) } }, @@ -75,7 +75,7 @@ fun TimerComposable( Icon( imageVector = Icons.Outlined.Check, contentDescription = null, - modifier = Modifier.size(24.dp) + modifier = Modifier.size(24.dp), ) } }, @@ -84,7 +84,7 @@ fun TimerComposable( .clickable { onOptionSelected(item) onDismissRequest() - } + }, ) if (index < TimerOptions.size - 1) { HorizontalDivider() @@ -101,7 +101,7 @@ fun TimerComposable( Text( text = stringResource(R.string.timer_option_disable_timer), color = colorScheme.error, - style = typography.bodyMedium + style = typography.bodyMedium, ) } }, @@ -110,13 +110,13 @@ fun TimerComposable( .clickable { onOptionSelected(null) onDismissRequest() - } + }, ) } } } } - } + }, ) } @@ -125,7 +125,7 @@ private val TimerOptions = listOf( DurationTimerOption(15), DurationTimerOption(30), DurationTimerOption(60), - CurrentEpisodeTimerOption + CurrentEpisodeTimerOption, ) fun TimerOption.makeText(context: Context): String = when (this) { diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TrackControlComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TrackControlComposable.kt index fe5e3f42..92767f11 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TrackControlComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TrackControlComposable.kt @@ -40,7 +40,7 @@ import org.grakovne.lissen.viewmodel.PlayerViewModel @Composable fun TrackControlComposable( viewModel: PlayerViewModel, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { val isPlaying by viewModel.isPlaying.observeAsState(false) val playbackReady by viewModel.isPlaybackReady.observeAsState(false) @@ -63,10 +63,10 @@ fun TrackControlComposable( Column( modifier = modifier .fillMaxWidth() - .padding(horizontal = 16.dp) + .padding(horizontal = 16.dp), ) { Column( - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) { Slider( value = sliderPosition.toFloat(), @@ -81,33 +81,33 @@ fun TrackControlComposable( valueRange = 0f..currentTrackDuration.toFloat(), colors = SliderDefaults.colors( thumbColor = colorScheme.primary, - activeTrackColor = colorScheme.primary + activeTrackColor = colorScheme.primary, ), - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) } Box( - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) { Column { Row( modifier = Modifier .fillMaxWidth() .padding(horizontal = 4.dp), - horizontalArrangement = Arrangement.SpaceBetween + horizontalArrangement = Arrangement.SpaceBetween, ) { Text( text = currentTrackPosition.toInt().formatFully(), style = typography.bodySmall, - color = colorScheme.onBackground.copy(alpha = 0.6f) + color = colorScheme.onBackground.copy(alpha = 0.6f), ) Text( text = maxOf(0.0, currentTrackDuration - currentTrackPosition) .toInt() .formatFully(), style = typography.bodySmall, - color = colorScheme.onBackground.copy(alpha = 0.6f) + color = colorScheme.onBackground.copy(alpha = 0.6f), ) } @@ -119,53 +119,53 @@ fun TrackControlComposable( .fillMaxWidth() .align(Alignment.BottomCenter), horizontalArrangement = Arrangement.SpaceEvenly, - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, ) { IconButton( onClick = { viewModel.previousTrack() }, - enabled = true + enabled = true, ) { Icon( imageVector = Icons.Rounded.SkipPrevious, contentDescription = "Previous Track", tint = colorScheme.onBackground, - modifier = Modifier.size(36.dp) + modifier = Modifier.size(36.dp), ) } IconButton( - onClick = { viewModel.rewind() } + onClick = { viewModel.rewind() }, ) { Icon( imageVector = Icons.Rounded.Replay10, contentDescription = "Rewind", tint = colorScheme.onBackground, - modifier = Modifier.size(48.dp) + modifier = Modifier.size(48.dp), ) } IconButton( onClick = { viewModel.togglePlayPause() }, - modifier = Modifier.size(72.dp) + modifier = Modifier.size(72.dp), ) { Icon( imageVector = if (isPlaying) Icons.Rounded.PauseCircleFilled else Icons.Rounded.PlayCircleFilled, contentDescription = "Play / Pause", tint = colorScheme.primary, - modifier = Modifier.fillMaxSize() + modifier = Modifier.fillMaxSize(), ) } IconButton( - onClick = { viewModel.forward() } + onClick = { viewModel.forward() }, ) { Icon( imageVector = Icons.Outlined.Forward30, contentDescription = "Forward", tint = colorScheme.onBackground, - modifier = Modifier.size(48.dp) + modifier = Modifier.size(48.dp), ) } @@ -175,15 +175,17 @@ fun TrackControlComposable( viewModel.nextTrack() } }, - enabled = currentTrackIndex < chapters.size - 1 + enabled = currentTrackIndex < chapters.size - 1, ) { Icon( imageVector = Icons.Rounded.SkipNext, contentDescription = "Next Track", - tint = if (currentTrackIndex < chapters.size - 1) colorScheme.onBackground else colorScheme.onBackground.copy( - alpha = 0.3f + tint = if (currentTrackIndex < chapters.size - 1) { + colorScheme.onBackground + } else colorScheme.onBackground.copy( + alpha = 0.3f, ), - modifier = Modifier.size(36.dp) + modifier = Modifier.size(36.dp), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TrackDetailsComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TrackDetailsComposable.kt index efac7cd6..ac1c074e 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TrackDetailsComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/TrackDetailsComposable.kt @@ -37,7 +37,7 @@ import org.grakovne.lissen.viewmodel.PlayerViewModel fun TrackDetailsComposable( viewModel: PlayerViewModel, modifier: Modifier = Modifier, - imageLoader: ImageLoader + imageLoader: ImageLoader, ) { val currentTrackIndex by viewModel.currentChapterIndex.observeAsState(0) val book by viewModel.book.observeAsState() @@ -57,7 +57,7 @@ fun TrackDetailsComposable( Column( horizontalAlignment = Alignment.CenterHorizontally, - modifier = modifier + modifier = modifier, ) { AsyncShimmeringImage( imageRequest = imageRequest, @@ -68,7 +68,7 @@ fun TrackDetailsComposable( .heightIn(max = maxImageHeight) .aspectRatio(1f) .clip(RoundedCornerShape(8.dp)), - error = painterResource(R.drawable.cover_fallback) + error = painterResource(R.drawable.cover_fallback), ) Spacer(modifier = Modifier.height(12.dp)) @@ -83,7 +83,7 @@ fun TrackDetailsComposable( maxLines = 2, modifier = Modifier .fillMaxWidth() - .padding(horizontal = 16.dp) + .padding(horizontal = 16.dp), ) Spacer(modifier = Modifier.height(4.dp)) @@ -92,12 +92,12 @@ fun TrackDetailsComposable( text = stringResource( R.string.player_screen_now_playing_title_chapter_of, currentTrackIndex + 1, - book?.chapters?.size ?: "?" + book?.chapters?.size ?: "?", ), style = typography.bodySmall, color = colorScheme.onBackground.copy(alpha = 0.6f), textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/placeholder/PlayingQueuePlaceholderComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/placeholder/PlayingQueuePlaceholderComposable.kt index d6700eae..9380a78f 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/placeholder/PlayingQueuePlaceholderComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/placeholder/PlayingQueuePlaceholderComposable.kt @@ -31,14 +31,14 @@ fun PlayingQueuePlaceholderComposable(modifier: Modifier = Modifier) { fontSize = typography.titleMedium.fontSize * 1.25f, fontWeight = FontWeight.SemiBold, color = MaterialTheme.colorScheme.primary, - modifier = Modifier.padding(horizontal = 6.dp) + modifier = Modifier.padding(horizontal = 6.dp), ) Spacer(modifier = Modifier.height(12.dp)) LazyColumn( modifier = Modifier - .fillMaxWidth() + .fillMaxWidth(), ) { items(10) { Box( @@ -47,14 +47,14 @@ fun PlayingQueuePlaceholderComposable(modifier: Modifier = Modifier) { .height(36.dp) .clip(RoundedCornerShape(8.dp)) .shimmer() - .background(Color.Gray) + .background(Color.Gray), ) Spacer(Modifier.height(8.dp)) HorizontalDivider( thickness = 1.dp, - modifier = Modifier.padding(horizontal = 4.dp) + modifier = Modifier.padding(horizontal = 4.dp), ) Spacer(Modifier.height(8.dp)) diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/placeholder/TrackDetailsPlaceholderComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/placeholder/TrackDetailsPlaceholderComposable.kt index 971f8b4b..e9cbc6c9 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/placeholder/TrackDetailsPlaceholderComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/player/composable/placeholder/TrackDetailsPlaceholderComposable.kt @@ -29,7 +29,7 @@ import org.grakovne.lissen.R @Composable fun TrackDetailsPlaceholderComposable( bookTitle: String, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { val configuration = LocalConfiguration.current val screenHeight = configuration.screenHeightDp.dp @@ -37,7 +37,7 @@ fun TrackDetailsPlaceholderComposable( Column( horizontalAlignment = Alignment.CenterHorizontally, - modifier = modifier + modifier = modifier, ) { Box( modifier = Modifier @@ -45,7 +45,7 @@ fun TrackDetailsPlaceholderComposable( .aspectRatio(1f) .clip(RoundedCornerShape(8.dp)) .shimmer() - .background(Color.Gray) + .background(Color.Gray), ) Spacer(modifier = Modifier.height(12.dp)) @@ -58,7 +58,7 @@ fun TrackDetailsPlaceholderComposable( textAlign = TextAlign.Center, overflow = TextOverflow.Ellipsis, maxLines = 2, - modifier = Modifier.padding(horizontal = 16.dp) + modifier = Modifier.padding(horizontal = 16.dp), ) Spacer(modifier = Modifier.height(4.dp)) @@ -69,7 +69,7 @@ fun TrackDetailsPlaceholderComposable( modifier = Modifier .shimmer() .clip(RoundedCornerShape(8.dp)) - .background(Color.Gray) + .background(Color.Gray), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/SettingsScreen.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/SettingsScreen.kt index d188f521..ff35d5a5 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/SettingsScreen.kt @@ -40,7 +40,7 @@ import org.grakovne.lissen.viewmodel.SettingsViewModel @OptIn(ExperimentalMaterial3Api::class) fun SettingsScreen( onBack: () -> Unit, - navController: AppNavigationService + navController: AppNavigationService, ) { val viewModel: SettingsViewModel = hiltViewModel() val host by viewModel.host.observeAsState("") @@ -56,7 +56,7 @@ fun SettingsScreen( Text( text = stringResource(R.string.settings_screen_title), style = typography.titleLarge.copy(fontWeight = FontWeight.SemiBold), - color = colorScheme.onSurface + color = colorScheme.onSurface, ) }, navigationIcon = { @@ -64,10 +64,10 @@ fun SettingsScreen( Icon( imageVector = Icons.AutoMirrored.Outlined.ArrowBack, contentDescription = "Back", - tint = colorScheme.onSurface + tint = colorScheme.onSurface, ) } - } + }, ) }, modifier = Modifier @@ -79,13 +79,13 @@ fun SettingsScreen( .fillMaxSize() .padding(innerPadding), verticalArrangement = Arrangement.SpaceBetween, - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { Column( modifier = Modifier .fillMaxWidth() .verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { if (host?.isNotEmpty() == true) { ServerSettingsComposable(navController, viewModel) @@ -94,11 +94,11 @@ fun SettingsScreen( AdvancedSettingsItemComposable( title = stringResource(R.string.settings_screen_custom_headers_title), description = stringResource(R.string.settings_screen_custom_header_hint), - onclick = { navController.showCustomHeadersSettings() } + onclick = { navController.showCustomHeadersSettings() }, ) } AdditionalComposable() } - } + }, ) } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/advanced/CustomHeaderComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/advanced/CustomHeaderComposable.kt index 734d5001..94b47639 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/advanced/CustomHeaderComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/advanced/CustomHeaderComposable.kt @@ -27,22 +27,22 @@ import org.grakovne.lissen.domain.connection.ServerRequestHeader fun CustomHeaderComposable( header: ServerRequestHeader, onChanged: (ServerRequestHeader) -> Unit, - onDelete: (ServerRequestHeader) -> Unit + onDelete: (ServerRequestHeader) -> Unit, ) { Card( shape = RoundedCornerShape(12.dp), modifier = Modifier .fillMaxWidth() - .padding(start = 16.dp, end = 8.dp, top = 8.dp, bottom = 16.dp) + .padding(start = 16.dp, end = 8.dp, top = 8.dp, bottom = 16.dp), ) { Row( modifier = Modifier .fillMaxWidth() .background(colorScheme.background), - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, ) { Column( - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), ) { OutlinedTextField( value = header.name, @@ -50,7 +50,7 @@ fun CustomHeaderComposable( label = { Text(stringResource(R.string.custom_header_hint_name)) }, singleLine = true, shape = RoundedCornerShape(16.dp), - modifier = Modifier.fillMaxWidth().padding(bottom = 12.dp) + modifier = Modifier.fillMaxWidth().padding(bottom = 12.dp), ) OutlinedTextField( @@ -59,18 +59,18 @@ fun CustomHeaderComposable( label = { Text(stringResource(R.string.custom_header_hint_value)) }, singleLine = true, shape = RoundedCornerShape(16.dp), - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) } IconButton( - onClick = { onDelete(header) } + onClick = { onDelete(header) }, ) { Icon( imageVector = Icons.Default.DeleteOutline, contentDescription = "Delete from cache", tint = colorScheme.error, - modifier = Modifier.size(32.dp) + modifier = Modifier.size(32.dp), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/advanced/CustomHeadersSettingsScreen.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/advanced/CustomHeadersSettingsScreen.kt index 72dae5f1..dc377a58 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/advanced/CustomHeadersSettingsScreen.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/advanced/CustomHeadersSettingsScreen.kt @@ -42,7 +42,7 @@ import kotlin.math.max @OptIn(ExperimentalMaterial3Api::class) @Composable fun CustomHeadersSettingsScreen( - onBack: () -> Unit + onBack: () -> Unit, ) { val settingsViewModel: SettingsViewModel = hiltViewModel() val headers = settingsViewModel.customHeaders.observeAsState(emptyList()) @@ -60,7 +60,7 @@ fun CustomHeadersSettingsScreen( Text( text = stringResource(R.string.custom_headers_title), style = typography.titleLarge.copy(fontWeight = FontWeight.SemiBold), - color = colorScheme.onSurface + color = colorScheme.onSurface, ) }, navigationIcon = { @@ -70,10 +70,10 @@ fun CustomHeadersSettingsScreen( Icon( imageVector = Icons.AutoMirrored.Outlined.ArrowBack, contentDescription = "Back", - tint = colorScheme.onSurface + tint = colorScheme.onSurface, ) } - } + }, ) }, modifier = Modifier @@ -84,10 +84,10 @@ fun CustomHeadersSettingsScreen( state = state, contentPadding = PaddingValues( top = innerPadding.calculateTopPadding(), - bottom = innerPadding.calculateBottomPadding() + fabHeight + additionalPadding + bottom = innerPadding.calculateBottomPadding() + fabHeight + additionalPadding, ), modifier = Modifier.fillMaxSize(), - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { val customHeaders = when (headers.value.isEmpty()) { true -> listOf(ServerRequestHeader.empty()) @@ -112,14 +112,14 @@ fun CustomHeadersSettingsScreen( } settingsViewModel.updateCustomHeaders(updatedList) - } + }, ) if (index < customHeaders.size - 1) { HorizontalDivider( modifier = Modifier .height(1.dp) - .padding(horizontal = 24.dp) + .padding(horizontal = 24.dp), ) } } @@ -138,13 +138,13 @@ fun CustomHeadersSettingsScreen( coroutineScope.launch { state.scrollToItem(max(0, updatedList.size - 1)) } - } + }, ) { Icon( imageVector = Icons.Filled.Add, - contentDescription = "Add" + contentDescription = "Add", ) } - } + }, ) } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/AdditionalComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/AdditionalComposable.kt index a7c72dfc..2d15f6e5 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/AdditionalComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/AdditionalComposable.kt @@ -24,11 +24,11 @@ fun AdditionalComposable() { Column( modifier = Modifier .fillMaxWidth() - .padding(16.dp) + .padding(16.dp), ) { HorizontalDivider( modifier = Modifier.padding(horizontal = 12.dp), - color = colorScheme.onSurface.copy(alpha = 0.2f) + color = colorScheme.onSurface.copy(alpha = 0.2f), ) Text( @@ -40,8 +40,8 @@ fun AdditionalComposable() { text = "Lissen v ${BuildConfig.VERSION_NAME}", style = TextStyle( fontFamily = FontFamily.Monospace, - textAlign = TextAlign.Center - ) + textAlign = TextAlign.Center, + ), ) Text( modifier = Modifier @@ -51,8 +51,8 @@ fun AdditionalComposable() { text = "© 2024 Max Grakov. MIT License", style = TextStyle( fontFamily = FontFamily.Monospace, - textAlign = TextAlign.Center - ) + textAlign = TextAlign.Center, + ), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/AdvancedSettingsItemComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/AdvancedSettingsItemComposable.kt index 07436031..496f8c5b 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/AdvancedSettingsItemComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/AdvancedSettingsItemComposable.kt @@ -24,14 +24,14 @@ import androidx.compose.ui.unit.dp fun AdvancedSettingsItemComposable( title: String, description: String, - onclick: () -> Unit + onclick: () -> Unit, ) { Row( modifier = Modifier .fillMaxWidth() .clickable { onclick() } .padding(start = 24.dp, end = 12.dp, top = 12.dp, bottom = 12.dp), - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, ) { Column(modifier = Modifier.weight(1f)) { Text( @@ -39,22 +39,22 @@ fun AdvancedSettingsItemComposable( style = typography.bodyLarge.copy(fontWeight = FontWeight.SemiBold), modifier = Modifier.padding(bottom = 4.dp), maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) Text( text = description, style = typography.bodyMedium, color = colorScheme.onSurfaceVariant, maxLines = 1, - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) } IconButton( - onClick = { onclick() } + onClick = { onclick() }, ) { Icon( imageVector = Icons.AutoMirrored.Outlined.ArrowForwardIos, - contentDescription = "Logout" + contentDescription = "Logout", ) } } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsComposable.kt index 96feeec5..e471ee1c 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsComposable.kt @@ -27,7 +27,7 @@ import androidx.compose.ui.unit.dp import org.grakovne.lissen.R import org.grakovne.lissen.channel.common.LibraryType import org.grakovne.lissen.common.ColorScheme -import org.grakovne.lissen.ui.icons.Book_2 +import org.grakovne.lissen.ui.icons.Book import org.grakovne.lissen.viewmodel.SettingsViewModel @Composable @@ -51,13 +51,13 @@ fun CommonSettingsComposable(viewModel: SettingsViewModel) { modifier = Modifier .fillMaxWidth() .clickable { preferredLibraryExpanded = true } - .padding(horizontal = 24.dp, vertical = 12.dp) + .padding(horizontal = 24.dp, vertical = 12.dp), ) { Column(modifier = Modifier.weight(1f)) { Text( text = stringResource(R.string.settings_screen_preferred_library_title), style = typography.bodyLarge.copy(fontWeight = FontWeight.SemiBold), - modifier = Modifier.padding(bottom = 4.dp) + modifier = Modifier.padding(bottom = 4.dp), ) Text( text = preferredLibrary?.title @@ -66,7 +66,7 @@ fun CommonSettingsComposable(viewModel: SettingsViewModel) { color = when (preferredLibrary?.title) { null -> colorScheme.onSurfaceVariant.copy(alpha = 0.6f) else -> colorScheme.onSurfaceVariant - } + }, ) } } @@ -76,20 +76,20 @@ fun CommonSettingsComposable(viewModel: SettingsViewModel) { modifier = Modifier .fillMaxWidth() .clickable { colorSchemeExpanded = true } - .padding(horizontal = 24.dp, vertical = 12.dp) + .padding(horizontal = 24.dp, vertical = 12.dp), ) { Column( - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), ) { Text( text = stringResource(R.string.settings_screen_color_scheme_title), style = typography.bodyLarge.copy(fontWeight = FontWeight.SemiBold), - modifier = Modifier.padding(bottom = 4.dp) + modifier = Modifier.padding(bottom = 4.dp), ) Text( text = preferredColorScheme?.toItem(context)?.name ?: "", style = typography.bodyMedium, - color = colorScheme.onSurfaceVariant + color = colorScheme.onSurfaceVariant, ) } } @@ -103,7 +103,7 @@ fun CommonSettingsComposable(viewModel: SettingsViewModel) { libraries .find { it.id == item.id } ?.let { viewModel.preferLibrary(it) } - } + }, ) } @@ -112,7 +112,7 @@ fun CommonSettingsComposable(viewModel: SettingsViewModel) { items = listOf( ColorScheme.LIGHT.toItem(context), ColorScheme.FOLLOW_SYSTEM.toItem(context), - ColorScheme.DARK.toItem(context) + ColorScheme.DARK.toItem(context), ), selectedItem = preferredColorScheme?.toItem(context), onDismissRequest = { colorSchemeExpanded = false }, @@ -121,7 +121,7 @@ fun CommonSettingsComposable(viewModel: SettingsViewModel) { .entries .find { it.name == item.id } ?.let { viewModel.preferColorScheme(it) } - } + }, ) } } @@ -138,7 +138,7 @@ private fun ColorScheme.toItem(context: Context): CommonSettingsItem { } private fun LibraryType.provideIcon() = when (this) { - LibraryType.LIBRARY -> Book_2 + LibraryType.LIBRARY -> Book LibraryType.PODCAST -> Icons.Outlined.Podcasts LibraryType.UNKNOWN -> Icons.Outlined.NotInterested } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsItem.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsItem.kt index 57db927c..807b697f 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsItem.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsItem.kt @@ -5,5 +5,5 @@ import androidx.compose.ui.graphics.vector.ImageVector data class CommonSettingsItem( val id: String, val name: String, - val icon: ImageVector? + val icon: ImageVector?, ) diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsItemComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsItemComposable.kt index 1a12e2d6..9b2e91c1 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsItemComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/CommonSettingsItemComposable.kt @@ -33,7 +33,7 @@ fun CommonSettingsItemComposable( items: List, selectedItem: CommonSettingsItem?, onDismissRequest: () -> Unit, - onItemSelected: (CommonSettingsItem) -> Unit + onItemSelected: (CommonSettingsItem) -> Unit, ) { var activeItem by remember { mutableStateOf(selectedItem) } @@ -45,7 +45,7 @@ fun CommonSettingsItemComposable( modifier = Modifier .fillMaxWidth() .padding(bottom = 16.dp) - .padding(horizontal = 16.dp) + .padding(horizontal = 16.dp), ) { Spacer(modifier = Modifier.height(8.dp)) LazyColumn(modifier = Modifier.fillMaxWidth()) { @@ -56,7 +56,7 @@ fun CommonSettingsItemComposable( Icon( imageVector = it, contentDescription = "Settings Item Icon", - modifier = Modifier.size(24.dp) + modifier = Modifier.size(24.dp), ) } }, @@ -68,7 +68,7 @@ fun CommonSettingsItemComposable( Icon( imageVector = Icons.Outlined.Check, contentDescription = null, - modifier = Modifier.size(24.dp) + modifier = Modifier.size(24.dp), ) } }, @@ -78,12 +78,12 @@ fun CommonSettingsItemComposable( activeItem = item onItemSelected(item) onDismissRequest() - } + }, ) HorizontalDivider() } } } - } + }, ) } diff --git a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/ServerSettingsComposable.kt b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/ServerSettingsComposable.kt index f39321d8..7db21ef0 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/ServerSettingsComposable.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/screens/settings/composable/ServerSettingsComposable.kt @@ -37,7 +37,7 @@ import org.grakovne.lissen.viewmodel.SettingsViewModel @Composable fun ServerSettingsComposable( navController: AppNavigationService, - viewModel: SettingsViewModel + viewModel: SettingsViewModel, ) { var connectionInfoExpanded by remember { mutableStateOf(false) } @@ -50,13 +50,13 @@ fun ServerSettingsComposable( .fillMaxWidth() .clickable { connectionInfoExpanded = true } .padding(start = 24.dp, end = 12.dp, top = 12.dp, bottom = 12.dp), - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, ) { Column(modifier = Modifier.weight(1f)) { Text( text = stringResource(R.string.settings_screen_server_connection), style = typography.bodyLarge.copy(fontWeight = FontWeight.SemiBold), - modifier = Modifier.padding(bottom = 4.dp) + modifier = Modifier.padding(bottom = 4.dp), ) Text( @@ -64,18 +64,18 @@ fun ServerSettingsComposable( style = typography.bodyMedium, maxLines = 1, modifier = Modifier.padding(bottom = 4.dp), - overflow = TextOverflow.Ellipsis + overflow = TextOverflow.Ellipsis, ) } IconButton( onClick = { navController.showLogin() viewModel.logout() - } + }, ) { Icon( imageVector = Icons.Outlined.Delete, - contentDescription = "Logout" + contentDescription = "Logout", ) } } @@ -89,23 +89,23 @@ fun ServerSettingsComposable( modifier = Modifier .fillMaxWidth() .padding(bottom = 16.dp) - .padding(horizontal = 16.dp) + .padding(horizontal = 16.dp), ) { viewModel.username.value?.let { InfoRow( label = stringResource(R.string.settings_screen_connected_as_title), - value = it + value = it, ) HorizontalDivider() } viewModel.serverVersion.value?.let { InfoRow( label = stringResource(R.string.settings_screen_server_version), - value = it + value = it, ) } } - } + }, ) } } @@ -116,11 +116,11 @@ fun InfoRow(label: String, value: String) { headlineContent = { Row( modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween + horizontalArrangement = Arrangement.SpaceBetween, ) { Text(text = label) Text(text = value) } - } + }, ) } diff --git a/app/src/main/java/org/grakovne/lissen/ui/theme/Theme.kt b/app/src/main/java/org/grakovne/lissen/ui/theme/Theme.kt index f23cfee8..03a612c9 100644 --- a/app/src/main/java/org/grakovne/lissen/ui/theme/Theme.kt +++ b/app/src/main/java/org/grakovne/lissen/ui/theme/Theme.kt @@ -16,17 +16,17 @@ private val LightColorScheme = lightColorScheme( tertiary = FoxOrange, background = LightBackground, surface = LightBackground, - surfaceContainer = Color(0xFFEEEEEE) + surfaceContainer = Color(0xFFEEEEEE), ) private val DarkColorScheme = darkColorScheme( - primary = FoxOrange + primary = FoxOrange, ) @Composable fun LissenTheme( colorSchemePreference: ColorScheme, - content: @Composable () -> Unit + content: @Composable () -> Unit, ) { val isDarkTheme = when (colorSchemePreference) { ColorScheme.FOLLOW_SYSTEM -> isSystemInDarkTheme() @@ -40,16 +40,16 @@ fun LissenTheme( SideEffect { systemUiController.setNavigationBarColor( color = colors.background, - darkIcons = !isDarkTheme + darkIcons = !isDarkTheme, ) systemUiController.setStatusBarColor( color = colors.background, - darkIcons = !isDarkTheme + darkIcons = !isDarkTheme, ) } MaterialTheme( colorScheme = colors, - content = content + content = content, ) } diff --git a/app/src/main/java/org/grakovne/lissen/viewmodel/BookCacheAction.kt b/app/src/main/java/org/grakovne/lissen/viewmodel/BookCacheAction.kt index 79de1b9e..d774af7e 100644 --- a/app/src/main/java/org/grakovne/lissen/viewmodel/BookCacheAction.kt +++ b/app/src/main/java/org/grakovne/lissen/viewmodel/BookCacheAction.kt @@ -2,5 +2,5 @@ package org.grakovne.lissen.viewmodel enum class BookCacheAction { CACHE, - DROP + DROP, } diff --git a/app/src/main/java/org/grakovne/lissen/viewmodel/CachingModelView.kt b/app/src/main/java/org/grakovne/lissen/viewmodel/CachingModelView.kt index 7e08f32b..6787cb21 100644 --- a/app/src/main/java/org/grakovne/lissen/viewmodel/CachingModelView.kt +++ b/app/src/main/java/org/grakovne/lissen/viewmodel/CachingModelView.kt @@ -17,7 +17,7 @@ import javax.inject.Inject class CachingModelView @Inject constructor( private val cachingService: BookCachingService, private val preferences: LissenSharedPreferences, - private val mediaProvider: LissenMediaProvider + private val mediaProvider: LissenMediaProvider, ) : ViewModel() { private val _bookCachingProgress = mutableMapOf>() diff --git a/app/src/main/java/org/grakovne/lissen/viewmodel/LibraryViewModel.kt b/app/src/main/java/org/grakovne/lissen/viewmodel/LibraryViewModel.kt index 91e9ecb3..65bfb9aa 100644 --- a/app/src/main/java/org/grakovne/lissen/viewmodel/LibraryViewModel.kt +++ b/app/src/main/java/org/grakovne/lissen/viewmodel/LibraryViewModel.kt @@ -33,7 +33,7 @@ import javax.inject.Inject @OptIn(ExperimentalCoroutinesApi::class) class LibraryViewModel @Inject constructor( private val mediaChannel: LissenMediaProvider, - private val preferences: LissenSharedPreferences + private val preferences: LissenSharedPreferences, ) : ViewModel() { private val _recentBooks = MutableLiveData>(emptyList()) @@ -56,12 +56,12 @@ class LibraryViewModel @Inject constructor( private val pageConfig = PagingConfig( pageSize = PAGE_SIZE, initialLoadSize = PAGE_SIZE, - prefetchDistance = PAGE_SIZE + prefetchDistance = PAGE_SIZE, ) val searchPager: Flow> = combine( _searchToken, - searchRequested.asFlow() + searchRequested.asFlow(), ) { token, requested -> Pair(token, requested) }.flatMapLatest { (token, _) -> @@ -72,12 +72,12 @@ class LibraryViewModel @Inject constructor( preferences = preferences, mediaChannel = mediaChannel, searchToken = token, - limit = PAGE_SIZE + limit = PAGE_SIZE, ) searchPagingSource = source source - } + }, ).flow }.cachedIn(viewModelScope) @@ -89,7 +89,7 @@ class LibraryViewModel @Inject constructor( defaultPagingSource = source source - } + }, ).flow.cachedIn(viewModelScope) } @@ -155,7 +155,7 @@ class LibraryViewModel @Inject constructor( }, onFailure = { _recentBookUpdating.postValue(false) - } + }, ) } } diff --git a/app/src/main/java/org/grakovne/lissen/viewmodel/LoginViewModel.kt b/app/src/main/java/org/grakovne/lissen/viewmodel/LoginViewModel.kt index bb0fa1aa..8aea9f42 100644 --- a/app/src/main/java/org/grakovne/lissen/viewmodel/LoginViewModel.kt +++ b/app/src/main/java/org/grakovne/lissen/viewmodel/LoginViewModel.kt @@ -26,7 +26,7 @@ import javax.inject.Inject @HiltViewModel class LoginViewModel @Inject constructor( private val mediaChannel: LissenMediaProvider, - private val preferences: LissenSharedPreferences + private val preferences: LissenSharedPreferences, ) : ViewModel() { private val _loginError: MutableLiveData = MutableLiveData() @@ -84,7 +84,7 @@ class LoginViewModel @Inject constructor( val result = response .foldAsync( onSuccess = { account -> onLoginSuccessful(host, username, account) }, - onFailure = { error -> onLoginFailure(error.code) } + onFailure = { error -> onLoginFailure(error.code) }, ) _loginState.value = result @@ -94,7 +94,7 @@ class LoginViewModel @Inject constructor( private fun persistCredentials( host: String, username: String, - token: String + token: String, ) { preferences.saveHost(host) preferences.saveUsername(username) @@ -104,12 +104,12 @@ class LoginViewModel @Inject constructor( private suspend fun onLoginSuccessful( host: String, username: String, - account: UserAccount + account: UserAccount, ): LoginState.Success { persistCredentials( host = host, username = username, - token = account.token + token = account.token, ) mediaChannel @@ -126,8 +126,8 @@ class LoginViewModel @Inject constructor( Library( id = library.id, title = library.title, - type = library.type - ) + type = library.type, + ), ) } }, @@ -138,11 +138,11 @@ class LoginViewModel @Inject constructor( Library( id = library, title = "Default Library", - type = LibraryType.LIBRARY + type = LibraryType.LIBRARY, ) } ?.let { preferences.savePreferredLibrary(it) } - } + }, ) return LoginState.Success diff --git a/app/src/main/java/org/grakovne/lissen/viewmodel/PlayerViewModel.kt b/app/src/main/java/org/grakovne/lissen/viewmodel/PlayerViewModel.kt index 20510f60..ace31d2b 100644 --- a/app/src/main/java/org/grakovne/lissen/viewmodel/PlayerViewModel.kt +++ b/app/src/main/java/org/grakovne/lissen/viewmodel/PlayerViewModel.kt @@ -14,7 +14,7 @@ import javax.inject.Inject @HiltViewModel class PlayerViewModel @Inject constructor( - private val mediaRepository: MediaRepository + private val mediaRepository: MediaRepository, ) : ViewModel() { val book: LiveData = mediaRepository.playingBook diff --git a/app/src/main/java/org/grakovne/lissen/viewmodel/SettingsViewModel.kt b/app/src/main/java/org/grakovne/lissen/viewmodel/SettingsViewModel.kt index 13656699..2bef958b 100644 --- a/app/src/main/java/org/grakovne/lissen/viewmodel/SettingsViewModel.kt +++ b/app/src/main/java/org/grakovne/lissen/viewmodel/SettingsViewModel.kt @@ -17,7 +17,7 @@ import javax.inject.Inject @HiltViewModel class SettingsViewModel @Inject constructor( private val mediaChannel: LissenMediaProvider, - private val preferences: LissenSharedPreferences + private val preferences: LissenSharedPreferences, ) : ViewModel() { private val _host = MutableLiveData(preferences.getHost()) diff --git a/app/src/main/java/org/grakovne/lissen/widget/MediaRepository.kt b/app/src/main/java/org/grakovne/lissen/widget/MediaRepository.kt index 4310ed9c..1b855235 100644 --- a/app/src/main/java/org/grakovne/lissen/widget/MediaRepository.kt +++ b/app/src/main/java/org/grakovne/lissen/widget/MediaRepository.kt @@ -48,14 +48,14 @@ import javax.inject.Singleton class MediaRepository @Inject constructor( @ApplicationContext private val context: Context, private val preferences: LissenSharedPreferences, - private val mediaChannel: LissenMediaProvider + private val mediaChannel: LissenMediaProvider, ) { private lateinit var mediaController: MediaController private val token = SessionToken( context, - ComponentName(context, PlaybackService::class.java) + ComponentName(context, PlaybackService::class.java), ) private val _isPlaying = MutableLiveData(false) @@ -134,7 +134,7 @@ class MediaRepository @Inject constructor( Log.e(TAG, "Unable to add callback to player") } }, - MoreExecutors.directExecutor() + MoreExecutors.directExecutor(), ) } @@ -167,7 +167,7 @@ class MediaRepository @Inject constructor( fun updateTimer( timerOption: TimerOption?, - position: Double? = null + position: Double? = null, ) { _timerOption.postValue(timerOption) @@ -184,7 +184,7 @@ class MediaRepository @Inject constructor( val chapterPosition = calculateChapterPosition( book = playingBook, - overallPosition = currentPosition + overallPosition = currentPosition, ) scheduleServiceTimer(chapterDuration - chapterPosition) @@ -264,7 +264,7 @@ class MediaRepository @Inject constructor( suspend fun preparePlayback( bookId: String, - fromBackground: Boolean = false + fromBackground: Boolean = false, ) { mediaPreparing() @@ -274,7 +274,7 @@ class MediaRepository @Inject constructor( .fetchBook(bookId) .foldAsync( onSuccess = { startPreparingPlayback(it, fromBackground) }, - onFailure = {} + onFailure = {}, ) } } @@ -297,7 +297,7 @@ class MediaRepository @Inject constructor( val currentIndex = calculateChapterIndex(book, overallPosition) val chapterPosition = calculateChapterPosition( book = book, - overallPosition = overallPosition + overallPosition = overallPosition, ) val currentIndexReplay = (chapterPosition > CURRENT_TRACK_REPLAY_THRESHOLD || currentIndex == 0) @@ -335,7 +335,7 @@ class MediaRepository @Inject constructor( handler.postDelayed(this, 500) } }, - 500 + 500, ) } @@ -349,7 +349,7 @@ class MediaRepository @Inject constructor( private fun startPreparingPlayback( book: DetailedItem, - fromBackground: Boolean + fromBackground: Boolean, ) { if (::mediaController.isInitialized && _playingBook.value != book) { _totalPosition.postValue(0.0) @@ -412,7 +412,7 @@ class MediaRepository @Inject constructor( when (_timerOption.value) { is CurrentEpisodeTimerOption -> updateTimer( timerOption = _timerOption.value, - position = safePosition + position = safePosition, ) is DurationTimerOption -> Unit diff --git a/app/src/main/java/org/grakovne/lissen/widget/PlayerWidget.kt b/app/src/main/java/org/grakovne/lissen/widget/PlayerWidget.kt index 54449017..4a3e9c82 100644 --- a/app/src/main/java/org/grakovne/lissen/widget/PlayerWidget.kt +++ b/app/src/main/java/org/grakovne/lissen/widget/PlayerWidget.kt @@ -57,10 +57,10 @@ class PlayerWidget : GlanceAppWidget() { GlanceTheme( colors = ColorProviders( light = lightColorScheme( - background = LightBackground + background = LightBackground, ), - dark = darkColorScheme() - ) + dark = darkColorScheme(), + ), ) { val prefs = currentState() val maybeCover = prefs[encodedCover]?.takeIf { it.isNotBlank() }?.fromBase64() @@ -76,13 +76,13 @@ class PlayerWidget : GlanceAppWidget() { .background(GlanceTheme.colors.background) .padding(16.dp) .clickable(onClick = actionRunCallback()), - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { Row( verticalAlignment = Alignment.CenterVertically, modifier = GlanceModifier .fillMaxWidth() - .padding(bottom = 16.dp) + .padding(bottom = 16.dp), ) { val cover = maybeCover ?: decodeResource(context.resources, drawable.cover_fallback_png) @@ -95,23 +95,23 @@ class PlayerWidget : GlanceAppWidget() { contentDescription = null, modifier = GlanceModifier .size(80.dp) - .cornerRadius(8.dp) + .cornerRadius(8.dp), ) Column( modifier = GlanceModifier .fillMaxWidth() - .padding(start = 20.dp) + .padding(start = 20.dp), ) { Text( text = chapterTitle, style = TextStyle( fontFamily = SansSerif, fontSize = 20.sp, - color = GlanceTheme.colors.onBackground + color = GlanceTheme.colors.onBackground, ), maxLines = 2, - modifier = GlanceModifier.padding(bottom = 8.dp) + modifier = GlanceModifier.padding(bottom = 8.dp), ) Text( @@ -119,9 +119,9 @@ class PlayerWidget : GlanceAppWidget() { style = TextStyle( fontFamily = SansSerif, fontSize = 14.sp, - color = GlanceTheme.colors.onBackground + color = GlanceTheme.colors.onBackground, ), - maxLines = 1 + maxLines = 1, ) } } @@ -130,23 +130,23 @@ class PlayerWidget : GlanceAppWidget() { modifier = GlanceModifier .fillMaxWidth() .height(1.dp) - .background(Color(0xFFDADADA)) + .background(Color(0xFFDADADA)), ) Row( modifier = GlanceModifier .padding(top = 16.dp) .fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, ) { WidgetControlButton( size = 36.dp, icon = ImageProvider(R.drawable.media3_icon_skip_back_10), contentColor = GlanceTheme.colors.onBackground, onClick = actionRunCallback( - actionParametersOf(bookIdKey to bookId) + actionParametersOf(bookIdKey to bookId), ), - modifier = GlanceModifier.defaultWeight() + modifier = GlanceModifier.defaultWeight(), ) WidgetControlButton( @@ -154,9 +154,9 @@ class PlayerWidget : GlanceAppWidget() { icon = ImageProvider(R.drawable.media3_icon_previous), contentColor = GlanceTheme.colors.onBackground, onClick = actionRunCallback( - actionParametersOf(bookIdKey to bookId) + actionParametersOf(bookIdKey to bookId), ), - modifier = GlanceModifier.defaultWeight() + modifier = GlanceModifier.defaultWeight(), ) WidgetControlButton( @@ -168,9 +168,9 @@ class PlayerWidget : GlanceAppWidget() { size = 48.dp, contentColor = GlanceTheme.colors.onBackground, onClick = actionRunCallback( - actionParametersOf(bookIdKey to bookId) + actionParametersOf(bookIdKey to bookId), ), - modifier = GlanceModifier.defaultWeight() + modifier = GlanceModifier.defaultWeight(), ) WidgetControlButton( @@ -178,9 +178,9 @@ class PlayerWidget : GlanceAppWidget() { size = 48.dp, contentColor = GlanceTheme.colors.onBackground, onClick = actionRunCallback( - actionParametersOf(bookIdKey to bookId) + actionParametersOf(bookIdKey to bookId), ), - modifier = GlanceModifier.defaultWeight() + modifier = GlanceModifier.defaultWeight(), ) WidgetControlButton( @@ -188,9 +188,9 @@ class PlayerWidget : GlanceAppWidget() { size = 36.dp, contentColor = GlanceTheme.colors.onBackground, onClick = actionRunCallback( - actionParametersOf(bookIdKey to bookId) + actionParametersOf(bookIdKey to bookId), ), - modifier = GlanceModifier.defaultWeight() + modifier = GlanceModifier.defaultWeight(), ) } } @@ -216,11 +216,11 @@ class PlayToggleActionCallback : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, - parameters: ActionParameters + parameters: ActionParameters, ) { safelyRun( playingItemId = parameters[bookIdKey] ?: return, - context = context + context = context, ) { it.togglePlayPause() } } } @@ -230,11 +230,11 @@ class ForwardActionCallback : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, - parameters: ActionParameters + parameters: ActionParameters, ) { safelyRun( playingItemId = parameters[bookIdKey] ?: return, - context = context + context = context, ) { it.forward() } } } @@ -244,11 +244,11 @@ class RewindActionCallback : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, - parameters: ActionParameters + parameters: ActionParameters, ) { safelyRun( playingItemId = parameters[bookIdKey] ?: return, - context = context + context = context, ) { it.rewind() } } } @@ -258,11 +258,11 @@ class NextChapterActionCallback : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, - parameters: ActionParameters + parameters: ActionParameters, ) { safelyRun( playingItemId = parameters[bookIdKey] ?: return, - context = context + context = context, ) { it.nextTrack() } } } @@ -272,11 +272,11 @@ class PreviousChapterActionCallback : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, - parameters: ActionParameters + parameters: ActionParameters, ) { safelyRun( playingItemId = parameters[bookIdKey] ?: return, - context = context + context = context, ) { it.previousTrack() } } } @@ -286,7 +286,7 @@ class RunLissenActionCallback : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, - parameters: ActionParameters + parameters: ActionParameters, ) { val launchIntent = context .packageManager @@ -296,7 +296,7 @@ class RunLissenActionCallback : ActionCallback { context.startActivity( launchIntent.apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK - } + }, ) } } @@ -304,12 +304,12 @@ class RunLissenActionCallback : ActionCallback { private suspend fun safelyRun( playingItemId: String, context: Context, - action: (WidgetPlaybackController) -> Unit + action: (WidgetPlaybackController) -> Unit, ) { val playbackController = EntryPointAccessors .fromApplication( context = context.applicationContext, - entryPoint = WidgetPlaybackControllerEntryPoint::class.java + entryPoint = WidgetPlaybackControllerEntryPoint::class.java, ) .widgetPlaybackController() diff --git a/app/src/main/java/org/grakovne/lissen/widget/PlayerWidgetStateService.kt b/app/src/main/java/org/grakovne/lissen/widget/PlayerWidgetStateService.kt index ef29d202..18f491c6 100644 --- a/app/src/main/java/org/grakovne/lissen/widget/PlayerWidgetStateService.kt +++ b/app/src/main/java/org/grakovne/lissen/widget/PlayerWidgetStateService.kt @@ -21,7 +21,7 @@ import javax.inject.Singleton class PlayerWidgetStateService @Inject constructor( @ApplicationContext private val context: Context, private val mediaRepository: MediaRepository, - private val mediaProvider: LissenMediaProvider + private val mediaProvider: LissenMediaProvider, ) : RunningComponent { private var playingBookId: String? = null @@ -34,7 +34,7 @@ class PlayerWidgetStateService @Inject constructor( combine( mediaRepository.playingBook.asFlow().distinctUntilChanged(), mediaRepository.isPlaying.asFlow().distinctUntilChanged(), - mediaRepository.currentChapterIndex.asFlow().distinctUntilChanged() + mediaRepository.currentChapterIndex.asFlow().distinctUntilChanged(), ) { book, isPlaying, chapterIndex -> val chapterTitle = provideChapterTitle(book, chapterIndex) @@ -49,7 +49,7 @@ class PlayerWidgetStateService @Inject constructor( .also { cover -> cachedCover = cover } .also { playingBookId = book.id } }, - onFailure = { null } + onFailure = { null }, ) false -> cachedCover @@ -60,7 +60,7 @@ class PlayerWidgetStateService @Inject constructor( title = book.title, chapterTitle = chapterTitle, isPlaying = isPlaying, - imageCover = maybeCover + imageCover = maybeCover, ) }.collect { playingItemState -> updatePlayingItem(playingItemState) @@ -76,7 +76,7 @@ class PlayerWidgetStateService @Inject constructor( } private suspend fun updatePlayingItem( - state: PlayingItemState + state: PlayingItemState, ) { val manager = GlanceAppWidgetManager(context) val glanceIds = manager.getGlanceIds(PlayerWidget::class.java) @@ -100,5 +100,5 @@ data class PlayingItemState( val title: String, val chapterTitle: String?, val isPlaying: Boolean = false, - val imageCover: ByteArray? + val imageCover: ByteArray?, ) diff --git a/app/src/main/java/org/grakovne/lissen/widget/WidgetControlButton.kt b/app/src/main/java/org/grakovne/lissen/widget/WidgetControlButton.kt index e5b55239..98a7b58d 100644 --- a/app/src/main/java/org/grakovne/lissen/widget/WidgetControlButton.kt +++ b/app/src/main/java/org/grakovne/lissen/widget/WidgetControlButton.kt @@ -21,12 +21,12 @@ fun WidgetControlButton( contentColor: ColorProvider, onClick: Action, modifier: GlanceModifier, - size: Dp + size: Dp, ) { Row( modifier = modifier, verticalAlignment = Alignment.Vertical.CenterVertically, - horizontalAlignment = Alignment.Horizontal.CenterHorizontally + horizontalAlignment = Alignment.Horizontal.CenterHorizontally, ) { Image( provider = icon, @@ -36,8 +36,8 @@ fun WidgetControlButton( .size(size) .cornerRadius(16.dp) .clickable( - onClick = onClick - ) + onClick = onClick, + ), ) } } diff --git a/app/src/main/java/org/grakovne/lissen/widget/WidgetPlaybackController.kt b/app/src/main/java/org/grakovne/lissen/widget/WidgetPlaybackController.kt index 9ec56447..aded74b7 100644 --- a/app/src/main/java/org/grakovne/lissen/widget/WidgetPlaybackController.kt +++ b/app/src/main/java/org/grakovne/lissen/widget/WidgetPlaybackController.kt @@ -18,7 +18,7 @@ import javax.inject.Singleton @Singleton class WidgetPlaybackController @Inject constructor( @ApplicationContext private val context: Context, - private val mediaRepository: MediaRepository + private val mediaRepository: MediaRepository, ) { private var playbackReadyAction: () -> Unit = {} @@ -60,7 +60,7 @@ class WidgetPlaybackController @Inject constructor( suspend fun prepareAndRun( itemId: String, - onPlaybackReady: () -> Unit + onPlaybackReady: () -> Unit, ) { playbackReadyAction = onPlaybackReady mediaRepository.preparePlayback(bookId = itemId, fromBackground = true) diff --git a/build.gradle.kts b/build.gradle.kts index a38b5264..38247c82 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,5 +2,6 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false id("com.google.dagger.hilt.android") version "2.52" apply false - id("com.google.devtools.ksp") version "1.9.0-1.0.13" apply false + id("com.google.devtools.ksp") version "2.0.21-1.0.28" apply false + alias(libs.plugins.compose.compiler) apply false } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 936c7d51..bda4f045 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,7 +8,7 @@ converterGson = "2.9.0" glance = "1.1.1" hiltAndroid = "2.52" hiltNavigationCompose = "1.2.0" -kotlin = "1.9.24" +kotlin = "2.0.21" coreKtx = "1.15.0" junit = "4.13.2" junitVersion = "1.2.1" @@ -88,6 +88,7 @@ androidx-media3-session = { group = "androidx.media3", name = "media3-session", androidx-media3-datasource-okhttp = { group = "androidx.media3", name = "media3-datasource-okhttp", version.ref = "media3DatasourceOkhttp" } [plugins] +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }