Rename package to cy.hexor.furumi, add F-Droid compatibility
- Rename applicationId and all sources from com.example.furumi_android to cy.hexor.furumi - Add WTFPL LICENSE - Add fastlane metadata - Add fdroiddata build metadata cy.hexor.furumi.yml - Remove foojay-resolver plugin (blocked by F-Droid scanner) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
Version 2, December 2004
|
||||||
|
|
||||||
|
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim or modified
|
||||||
|
copies of this license document, and changing it is allowed as long
|
||||||
|
as the name is changed.
|
||||||
|
|
||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||||
@@ -6,11 +6,11 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = "com.example.furumi_android"
|
namespace = "cy.hexor.furumi"
|
||||||
compileSdk = 35
|
compileSdk = 35
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "com.example.furumi_android"
|
applicationId = "cy.hexor.furumi"
|
||||||
minSdk = 24
|
minSdk = 24
|
||||||
targetSdk = 35
|
targetSdk = 35
|
||||||
versionCode = 1
|
versionCode = 1
|
||||||
|
|||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android
|
package cy.hexor.furumi
|
||||||
|
|
||||||
import androidx.test.platform.app.InstrumentationRegistry
|
import androidx.test.platform.app.InstrumentationRegistry
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
@@ -19,6 +19,6 @@ class ExampleInstrumentedTest {
|
|||||||
fun useAppContext() {
|
fun useAppContext() {
|
||||||
// Context of the app under test.
|
// Context of the app under test.
|
||||||
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
|
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
|
||||||
assertEquals("com.example.furumi_android", appContext.packageName)
|
assertEquals("cy.hexor.furumi", appContext.packageName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android
|
package cy.hexor.furumi
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import dagger.hilt.android.HiltAndroidApp
|
import dagger.hilt.android.HiltAndroidApp
|
||||||
+5
-5
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android
|
package cy.hexor.furumi
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -19,10 +19,10 @@ import androidx.hilt.navigation.compose.hiltViewModel
|
|||||||
import androidx.navigation.compose.NavHost
|
import androidx.navigation.compose.NavHost
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.compose.rememberNavController
|
import androidx.navigation.compose.rememberNavController
|
||||||
import com.example.furumi_android.ui.login.LoginScreen
|
import cy.hexor.furumi.ui.login.LoginScreen
|
||||||
import com.example.furumi_android.ui.login.LoginViewModel
|
import cy.hexor.furumi.ui.login.LoginViewModel
|
||||||
import com.example.furumi_android.ui.player.PlayerScreen
|
import cy.hexor.furumi.ui.player.PlayerScreen
|
||||||
import com.example.furumi_android.ui.theme.FurumiTheme
|
import cy.hexor.furumi.ui.theme.FurumiTheme
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
+4
-4
@@ -1,11 +1,11 @@
|
|||||||
package com.example.furumi_android.data.local
|
package cy.hexor.furumi.data.local
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
import androidx.security.crypto.EncryptedSharedPreferences
|
||||||
import androidx.security.crypto.MasterKey
|
import androidx.security.crypto.MasterKey
|
||||||
import com.example.furumi_android.domain.model.AuthSession
|
import cy.hexor.furumi.domain.model.AuthSession
|
||||||
import com.example.furumi_android.domain.model.AuthTokens
|
import cy.hexor.furumi.domain.model.AuthTokens
|
||||||
import com.example.furumi_android.domain.model.User
|
import cy.hexor.furumi.domain.model.User
|
||||||
import com.squareup.moshi.Moshi
|
import com.squareup.moshi.Moshi
|
||||||
|
|
||||||
class AuthSessionStorage(context: Context, moshi: Moshi) {
|
class AuthSessionStorage(context: Context, moshi: Moshi) {
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.data.local
|
package cy.hexor.furumi.data.local
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
package com.example.furumi_android.data.remote
|
package cy.hexor.furumi.data.remote
|
||||||
|
|
||||||
import com.example.furumi_android.data.local.AuthSessionStorage
|
import cy.hexor.furumi.data.local.AuthSessionStorage
|
||||||
import okhttp3.Interceptor
|
import okhttp3.Interceptor
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
package com.example.furumi_android.data.remote
|
package cy.hexor.furumi.data.remote
|
||||||
|
|
||||||
import com.example.furumi_android.BuildConfig
|
import cy.hexor.furumi.BuildConfig
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
package com.example.furumi_android.data.remote
|
package cy.hexor.furumi.data.remote
|
||||||
|
|
||||||
import com.example.furumi_android.data.remote.model.ErrorResponse
|
import cy.hexor.furumi.data.remote.model.ErrorResponse
|
||||||
import com.squareup.moshi.Moshi
|
import com.squareup.moshi.Moshi
|
||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
+7
-7
@@ -1,10 +1,10 @@
|
|||||||
package com.example.furumi_android.data.remote
|
package cy.hexor.furumi.data.remote
|
||||||
|
|
||||||
import com.example.furumi_android.data.local.AuthSessionStorage
|
import cy.hexor.furumi.data.local.AuthSessionStorage
|
||||||
import com.example.furumi_android.data.remote.AccessTokenInterceptor.Companion.HEADER_AUTHORIZATION
|
import cy.hexor.furumi.data.remote.AccessTokenInterceptor.Companion.HEADER_AUTHORIZATION
|
||||||
import com.example.furumi_android.data.remote.api.AuthApi
|
import cy.hexor.furumi.data.remote.api.AuthApi
|
||||||
import com.example.furumi_android.data.remote.model.RefreshRequest
|
import cy.hexor.furumi.data.remote.model.RefreshRequest
|
||||||
import com.example.furumi_android.data.remote.model.toDomain
|
import cy.hexor.furumi.data.remote.model.toDomain
|
||||||
import dagger.Lazy
|
import dagger.Lazy
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import okhttp3.Authenticator
|
import okhttp3.Authenticator
|
||||||
@@ -54,7 +54,7 @@ class AuthAuthenticator @Inject constructor(
|
|||||||
private suspend fun refreshTokens(
|
private suspend fun refreshTokens(
|
||||||
baseUrl: String,
|
baseUrl: String,
|
||||||
refreshToken: String
|
refreshToken: String
|
||||||
): com.example.furumi_android.domain.model.AuthTokens? {
|
): cy.hexor.furumi.domain.model.AuthTokens? {
|
||||||
val refreshResponse = runCatching {
|
val refreshResponse = runCatching {
|
||||||
authApiLazy.get().refresh(
|
authApiLazy.get().refresh(
|
||||||
url = authEndpoints.refresh(baseUrl),
|
url = authEndpoints.refresh(baseUrl),
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
package com.example.furumi_android.data.remote
|
package cy.hexor.furumi.data.remote
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.example.furumi_android.domain.model.AuthException
|
import cy.hexor.furumi.domain.model.AuthException
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class AuthEndpoints @Inject constructor() {
|
class AuthEndpoints @Inject constructor() {
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.data.remote
|
package cy.hexor.furumi.data.remote
|
||||||
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
+8
-8
@@ -1,12 +1,12 @@
|
|||||||
package com.example.furumi_android.data.remote.api
|
package cy.hexor.furumi.data.remote.api
|
||||||
|
|
||||||
import com.example.furumi_android.data.remote.model.LoginRequest
|
import cy.hexor.furumi.data.remote.model.LoginRequest
|
||||||
import com.example.furumi_android.data.remote.model.LoginResponse
|
import cy.hexor.furumi.data.remote.model.LoginResponse
|
||||||
import com.example.furumi_android.data.remote.model.LogoutRequest
|
import cy.hexor.furumi.data.remote.model.LogoutRequest
|
||||||
import com.example.furumi_android.data.remote.model.LogoutResponse
|
import cy.hexor.furumi.data.remote.model.LogoutResponse
|
||||||
import com.example.furumi_android.data.remote.model.RefreshRequest
|
import cy.hexor.furumi.data.remote.model.RefreshRequest
|
||||||
import com.example.furumi_android.data.remote.model.SsoExchangeRequest
|
import cy.hexor.furumi.data.remote.model.SsoExchangeRequest
|
||||||
import com.example.furumi_android.data.remote.model.TokenResponse
|
import cy.hexor.furumi.data.remote.model.TokenResponse
|
||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
import retrofit2.http.Body
|
import retrofit2.http.Body
|
||||||
import retrofit2.http.Header
|
import retrofit2.http.Header
|
||||||
+22
-22
@@ -1,26 +1,26 @@
|
|||||||
package com.example.furumi_android.data.remote.api
|
package cy.hexor.furumi.data.remote.api
|
||||||
|
|
||||||
import com.example.furumi_android.data.remote.model.ArtistPageResponse
|
import cy.hexor.furumi.data.remote.model.ArtistPageResponse
|
||||||
import com.example.furumi_android.data.remote.model.ArtistDetailResponse
|
import cy.hexor.furumi.data.remote.model.ArtistDetailResponse
|
||||||
import com.example.furumi_android.data.remote.model.PlayHistoryPageResponse
|
import cy.hexor.furumi.data.remote.model.PlayHistoryPageResponse
|
||||||
import com.example.furumi_android.data.remote.model.ReleaseDetailResponse
|
import cy.hexor.furumi.data.remote.model.ReleaseDetailResponse
|
||||||
import com.example.furumi_android.data.remote.model.AddPlaylistTracksRequest
|
import cy.hexor.furumi.data.remote.model.AddPlaylistTracksRequest
|
||||||
import com.example.furumi_android.data.remote.model.DeviceActiveRequest
|
import cy.hexor.furumi.data.remote.model.DeviceActiveRequest
|
||||||
import com.example.furumi_android.data.remote.model.DeviceCommandRequest
|
import cy.hexor.furumi.data.remote.model.DeviceCommandRequest
|
||||||
import com.example.furumi_android.data.remote.model.DevicePollRequest
|
import cy.hexor.furumi.data.remote.model.DevicePollRequest
|
||||||
import com.example.furumi_android.data.remote.model.DevicePollResponse
|
import cy.hexor.furumi.data.remote.model.DevicePollResponse
|
||||||
import com.example.furumi_android.data.remote.model.JamCreateRequest
|
import cy.hexor.furumi.data.remote.model.JamCreateRequest
|
||||||
import com.example.furumi_android.data.remote.model.JamInviteRequest
|
import cy.hexor.furumi.data.remote.model.JamInviteRequest
|
||||||
import com.example.furumi_android.data.remote.model.JamJoinRequest
|
import cy.hexor.furumi.data.remote.model.JamJoinRequest
|
||||||
import com.example.furumi_android.data.remote.model.JamUserResponse
|
import cy.hexor.furumi.data.remote.model.JamUserResponse
|
||||||
import com.example.furumi_android.data.remote.model.LikeToggleResponse
|
import cy.hexor.furumi.data.remote.model.LikeToggleResponse
|
||||||
import com.example.furumi_android.data.remote.model.LikedTrackIdsResponse
|
import cy.hexor.furumi.data.remote.model.LikedTrackIdsResponse
|
||||||
import com.example.furumi_android.data.remote.model.PlaylistCardResponse
|
import cy.hexor.furumi.data.remote.model.PlaylistCardResponse
|
||||||
import com.example.furumi_android.data.remote.model.PlaylistDetailResponse
|
import cy.hexor.furumi.data.remote.model.PlaylistDetailResponse
|
||||||
import com.example.furumi_android.data.remote.model.RecordHistoryRequest
|
import cy.hexor.furumi.data.remote.model.RecordHistoryRequest
|
||||||
import com.example.furumi_android.data.remote.model.SearchResponse
|
import cy.hexor.furumi.data.remote.model.SearchResponse
|
||||||
import com.example.furumi_android.data.remote.model.SharePlaylistRequest
|
import cy.hexor.furumi.data.remote.model.SharePlaylistRequest
|
||||||
import com.example.furumi_android.data.remote.model.SharePlaylistResponse
|
import cy.hexor.furumi.data.remote.model.SharePlaylistResponse
|
||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
import retrofit2.http.Body
|
import retrofit2.http.Body
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
+4
-4
@@ -1,8 +1,8 @@
|
|||||||
package com.example.furumi_android.data.remote.model
|
package cy.hexor.furumi.data.remote.model
|
||||||
|
|
||||||
import com.example.furumi_android.domain.model.AuthSession
|
import cy.hexor.furumi.domain.model.AuthSession
|
||||||
import com.example.furumi_android.domain.model.AuthTokens
|
import cy.hexor.furumi.domain.model.AuthTokens
|
||||||
import com.example.furumi_android.domain.model.User
|
import cy.hexor.furumi.domain.model.User
|
||||||
|
|
||||||
fun LoginResponse.toDomainSession(
|
fun LoginResponse.toDomainSession(
|
||||||
serverBaseUrl: String,
|
serverBaseUrl: String,
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.data.remote.model
|
package cy.hexor.furumi.data.remote.model
|
||||||
|
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.data.remote.model
|
package cy.hexor.furumi.data.remote.model
|
||||||
|
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
|
|
||||||
+10
-10
@@ -1,14 +1,14 @@
|
|||||||
package com.example.furumi_android.data.remote.model
|
package cy.hexor.furumi.data.remote.model
|
||||||
|
|
||||||
import com.example.furumi_android.domain.model.ConnectedCommand
|
import cy.hexor.furumi.domain.model.ConnectedCommand
|
||||||
import com.example.furumi_android.domain.model.ConnectedCommandPayload
|
import cy.hexor.furumi.domain.model.ConnectedCommandPayload
|
||||||
import com.example.furumi_android.domain.model.ConnectedDevice
|
import cy.hexor.furumi.domain.model.ConnectedDevice
|
||||||
import com.example.furumi_android.domain.model.ConnectedDevicesState
|
import cy.hexor.furumi.domain.model.ConnectedDevicesState
|
||||||
import com.example.furumi_android.domain.model.ConnectedJam
|
import cy.hexor.furumi.domain.model.ConnectedJam
|
||||||
import com.example.furumi_android.domain.model.ConnectedJamMember
|
import cy.hexor.furumi.domain.model.ConnectedJamMember
|
||||||
import com.example.furumi_android.domain.model.ConnectedJamUser
|
import cy.hexor.furumi.domain.model.ConnectedJamUser
|
||||||
import com.example.furumi_android.domain.model.ConnectedPlaybackState
|
import cy.hexor.furumi.domain.model.ConnectedPlaybackState
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
|
|
||||||
data class ConnectedPlaybackStateBody(
|
data class ConnectedPlaybackStateBody(
|
||||||
+13
-13
@@ -1,17 +1,17 @@
|
|||||||
package com.example.furumi_android.data.remote.model
|
package cy.hexor.furumi.data.remote.model
|
||||||
|
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.ArtistDetail
|
import cy.hexor.furumi.domain.model.ArtistDetail
|
||||||
import com.example.furumi_android.domain.model.ArtistPage
|
import cy.hexor.furumi.domain.model.ArtistPage
|
||||||
import com.example.furumi_android.domain.model.ArtistRef
|
import cy.hexor.furumi.domain.model.ArtistRef
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryPage
|
import cy.hexor.furumi.domain.model.ListeningHistoryPage
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistDetail
|
import cy.hexor.furumi.domain.model.PlaylistDetail
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseDetail
|
import cy.hexor.furumi.domain.model.ReleaseDetail
|
||||||
import com.example.furumi_android.domain.model.SearchResults
|
import cy.hexor.furumi.domain.model.SearchResults
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
|
|
||||||
data class ArtistRefResponse(
|
data class ArtistRefResponse(
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.data.repository
|
package cy.hexor.furumi.data.repository
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
+14
-14
@@ -1,18 +1,18 @@
|
|||||||
package com.example.furumi_android.data.repository
|
package cy.hexor.furumi.data.repository
|
||||||
|
|
||||||
import com.example.furumi_android.data.local.AuthSessionStorage
|
import cy.hexor.furumi.data.local.AuthSessionStorage
|
||||||
import com.example.furumi_android.data.remote.AuthApiErrorParser
|
import cy.hexor.furumi.data.remote.AuthApiErrorParser
|
||||||
import com.example.furumi_android.data.remote.AuthEndpoints
|
import cy.hexor.furumi.data.remote.AuthEndpoints
|
||||||
import com.example.furumi_android.data.remote.api.AuthApi
|
import cy.hexor.furumi.data.remote.api.AuthApi
|
||||||
import com.example.furumi_android.data.remote.model.LoginRequest
|
import cy.hexor.furumi.data.remote.model.LoginRequest
|
||||||
import com.example.furumi_android.data.remote.model.LoginResponse
|
import cy.hexor.furumi.data.remote.model.LoginResponse
|
||||||
import com.example.furumi_android.data.remote.model.LogoutRequest
|
import cy.hexor.furumi.data.remote.model.LogoutRequest
|
||||||
import com.example.furumi_android.data.remote.model.SsoExchangeRequest
|
import cy.hexor.furumi.data.remote.model.SsoExchangeRequest
|
||||||
import com.example.furumi_android.data.remote.model.toDomainSession
|
import cy.hexor.furumi.data.remote.model.toDomainSession
|
||||||
import com.example.furumi_android.domain.model.AuthException
|
import cy.hexor.furumi.domain.model.AuthException
|
||||||
import com.example.furumi_android.domain.model.AuthSession
|
import cy.hexor.furumi.domain.model.AuthSession
|
||||||
import com.example.furumi_android.domain.model.ServerConfig
|
import cy.hexor.furumi.domain.model.ServerConfig
|
||||||
import com.example.furumi_android.domain.repository.AuthRepository
|
import cy.hexor.furumi.domain.repository.AuthRepository
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.data.repository
|
package cy.hexor.furumi.data.repository
|
||||||
|
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
+34
-34
@@ -1,38 +1,38 @@
|
|||||||
package com.example.furumi_android.data.repository
|
package cy.hexor.furumi.data.repository
|
||||||
|
|
||||||
import com.example.furumi_android.data.local.AuthSessionStorage
|
import cy.hexor.furumi.data.local.AuthSessionStorage
|
||||||
import com.example.furumi_android.data.local.ConnectedDeviceStorage
|
import cy.hexor.furumi.data.local.ConnectedDeviceStorage
|
||||||
import com.example.furumi_android.data.remote.AppClientInfo
|
import cy.hexor.furumi.data.remote.AppClientInfo
|
||||||
import com.example.furumi_android.data.remote.AuthApiErrorParser
|
import cy.hexor.furumi.data.remote.AuthApiErrorParser
|
||||||
import com.example.furumi_android.data.remote.PlayerEndpoints
|
import cy.hexor.furumi.data.remote.PlayerEndpoints
|
||||||
import com.example.furumi_android.data.remote.api.PlayerApi
|
import cy.hexor.furumi.data.remote.api.PlayerApi
|
||||||
import com.example.furumi_android.data.remote.model.AddPlaylistTracksRequest
|
import cy.hexor.furumi.data.remote.model.AddPlaylistTracksRequest
|
||||||
import com.example.furumi_android.data.remote.model.ConnectedCommandPayloadBody
|
import cy.hexor.furumi.data.remote.model.ConnectedCommandPayloadBody
|
||||||
import com.example.furumi_android.data.remote.model.DeviceActiveRequest
|
import cy.hexor.furumi.data.remote.model.DeviceActiveRequest
|
||||||
import com.example.furumi_android.data.remote.model.DeviceCommandRequest
|
import cy.hexor.furumi.data.remote.model.DeviceCommandRequest
|
||||||
import com.example.furumi_android.data.remote.model.DevicePollRequest
|
import cy.hexor.furumi.data.remote.model.DevicePollRequest
|
||||||
import com.example.furumi_android.data.remote.model.JamCreateRequest
|
import cy.hexor.furumi.data.remote.model.JamCreateRequest
|
||||||
import com.example.furumi_android.data.remote.model.JamInviteRequest
|
import cy.hexor.furumi.data.remote.model.JamInviteRequest
|
||||||
import com.example.furumi_android.data.remote.model.JamJoinRequest
|
import cy.hexor.furumi.data.remote.model.JamJoinRequest
|
||||||
import com.example.furumi_android.data.remote.model.RecordHistoryRequest
|
import cy.hexor.furumi.data.remote.model.RecordHistoryRequest
|
||||||
import com.example.furumi_android.data.remote.model.toDomain
|
import cy.hexor.furumi.data.remote.model.toDomain
|
||||||
import com.example.furumi_android.data.remote.model.toBody
|
import cy.hexor.furumi.data.remote.model.toBody
|
||||||
import com.example.furumi_android.data.remote.model.toCommandPayloadBody
|
import cy.hexor.furumi.data.remote.model.toCommandPayloadBody
|
||||||
import com.example.furumi_android.data.remote.model.toTrackItemResponse
|
import cy.hexor.furumi.data.remote.model.toTrackItemResponse
|
||||||
import com.example.furumi_android.domain.model.ArtistDetail
|
import cy.hexor.furumi.domain.model.ArtistDetail
|
||||||
import com.example.furumi_android.domain.model.ArtistPage
|
import cy.hexor.furumi.domain.model.ArtistPage
|
||||||
import com.example.furumi_android.domain.model.AuthException
|
import cy.hexor.furumi.domain.model.AuthException
|
||||||
import com.example.furumi_android.domain.model.ConnectedCommand
|
import cy.hexor.furumi.domain.model.ConnectedCommand
|
||||||
import com.example.furumi_android.domain.model.ConnectedDevicesState
|
import cy.hexor.furumi.domain.model.ConnectedDevicesState
|
||||||
import com.example.furumi_android.domain.model.ConnectedJamUser
|
import cy.hexor.furumi.domain.model.ConnectedJamUser
|
||||||
import com.example.furumi_android.domain.model.ConnectedPlaybackState
|
import cy.hexor.furumi.domain.model.ConnectedPlaybackState
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryPage
|
import cy.hexor.furumi.domain.model.ListeningHistoryPage
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistDetail
|
import cy.hexor.furumi.domain.model.PlaylistDetail
|
||||||
import com.example.furumi_android.domain.model.ReleaseDetail
|
import cy.hexor.furumi.domain.model.ReleaseDetail
|
||||||
import com.example.furumi_android.domain.model.SearchResults
|
import cy.hexor.furumi.domain.model.SearchResults
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.repository.PlayerRepository
|
import cy.hexor.furumi.domain.repository.PlayerRepository
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
+8
-8
@@ -1,12 +1,12 @@
|
|||||||
package com.example.furumi_android.di
|
package cy.hexor.furumi.di
|
||||||
|
|
||||||
import com.example.furumi_android.data.local.AuthSessionStorage
|
import cy.hexor.furumi.data.local.AuthSessionStorage
|
||||||
import com.example.furumi_android.data.remote.AccessTokenInterceptor
|
import cy.hexor.furumi.data.remote.AccessTokenInterceptor
|
||||||
import com.example.furumi_android.data.remote.AppClientInfo
|
import cy.hexor.furumi.data.remote.AppClientInfo
|
||||||
import com.example.furumi_android.data.remote.AuthAuthenticator
|
import cy.hexor.furumi.data.remote.AuthAuthenticator
|
||||||
import com.example.furumi_android.data.remote.AuthEndpoints
|
import cy.hexor.furumi.data.remote.AuthEndpoints
|
||||||
import com.example.furumi_android.data.remote.api.AuthApi
|
import cy.hexor.furumi.data.remote.api.AuthApi
|
||||||
import com.example.furumi_android.data.remote.api.PlayerApi
|
import cy.hexor.furumi.data.remote.api.PlayerApi
|
||||||
import com.squareup.moshi.Moshi
|
import com.squareup.moshi.Moshi
|
||||||
import dagger.Lazy
|
import dagger.Lazy
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
+5
-5
@@ -1,9 +1,9 @@
|
|||||||
package com.example.furumi_android.di
|
package cy.hexor.furumi.di
|
||||||
|
|
||||||
import com.example.furumi_android.data.repository.AuthRepositoryImpl
|
import cy.hexor.furumi.data.repository.AuthRepositoryImpl
|
||||||
import com.example.furumi_android.data.repository.PlayerRepositoryImpl
|
import cy.hexor.furumi.data.repository.PlayerRepositoryImpl
|
||||||
import com.example.furumi_android.domain.repository.AuthRepository
|
import cy.hexor.furumi.domain.repository.AuthRepository
|
||||||
import com.example.furumi_android.domain.repository.PlayerRepository
|
import cy.hexor.furumi.domain.repository.PlayerRepository
|
||||||
import dagger.Binds
|
import dagger.Binds
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
package com.example.furumi_android.di
|
package cy.hexor.furumi.di
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import com.example.furumi_android.data.local.AuthSessionStorage
|
import cy.hexor.furumi.data.local.AuthSessionStorage
|
||||||
import com.squareup.moshi.Moshi
|
import com.squareup.moshi.Moshi
|
||||||
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.domain.model
|
package cy.hexor.furumi.domain.model
|
||||||
|
|
||||||
data class ArtistCard(
|
data class ArtistCard(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.domain.model
|
package cy.hexor.furumi.domain.model
|
||||||
|
|
||||||
class AuthException(
|
class AuthException(
|
||||||
message: String,
|
message: String,
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.domain.model
|
package cy.hexor.furumi.domain.model
|
||||||
|
|
||||||
data class AuthSession(
|
data class AuthSession(
|
||||||
val serverBaseUrl: String,
|
val serverBaseUrl: String,
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.domain.model
|
package cy.hexor.furumi.domain.model
|
||||||
|
|
||||||
data class AuthTokens(
|
data class AuthTokens(
|
||||||
val accessToken: String,
|
val accessToken: String,
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.domain.model
|
package cy.hexor.furumi.domain.model
|
||||||
|
|
||||||
data class ConnectedDevice(
|
data class ConnectedDevice(
|
||||||
val id: String,
|
val id: String,
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.domain.model
|
package cy.hexor.furumi.domain.model
|
||||||
|
|
||||||
data class ListeningHistoryPage(
|
data class ListeningHistoryPage(
|
||||||
val items: List<ListeningHistoryItem>,
|
val items: List<ListeningHistoryItem>,
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.domain.model
|
package cy.hexor.furumi.domain.model
|
||||||
|
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.domain.model
|
package cy.hexor.furumi.domain.model
|
||||||
|
|
||||||
data class User(
|
data class User(
|
||||||
val id: Int,
|
val id: Int,
|
||||||
+4
-4
@@ -1,8 +1,8 @@
|
|||||||
package com.example.furumi_android.domain.repository
|
package cy.hexor.furumi.domain.repository
|
||||||
|
|
||||||
import com.example.furumi_android.domain.model.AuthSession
|
import cy.hexor.furumi.domain.model.AuthSession
|
||||||
import com.example.furumi_android.domain.model.ServerConfig
|
import cy.hexor.furumi.domain.model.ServerConfig
|
||||||
import com.example.furumi_android.domain.model.User
|
import cy.hexor.furumi.domain.model.User
|
||||||
|
|
||||||
interface AuthRepository {
|
interface AuthRepository {
|
||||||
suspend fun login(config: ServerConfig, password: String): Result<AuthSession>
|
suspend fun login(config: ServerConfig, password: String): Result<AuthSession>
|
||||||
+13
-13
@@ -1,17 +1,17 @@
|
|||||||
package com.example.furumi_android.domain.repository
|
package cy.hexor.furumi.domain.repository
|
||||||
|
|
||||||
import com.example.furumi_android.domain.model.ArtistPage
|
import cy.hexor.furumi.domain.model.ArtistPage
|
||||||
import com.example.furumi_android.domain.model.ArtistDetail
|
import cy.hexor.furumi.domain.model.ArtistDetail
|
||||||
import com.example.furumi_android.domain.model.ConnectedCommand
|
import cy.hexor.furumi.domain.model.ConnectedCommand
|
||||||
import com.example.furumi_android.domain.model.ConnectedDevicesState
|
import cy.hexor.furumi.domain.model.ConnectedDevicesState
|
||||||
import com.example.furumi_android.domain.model.ConnectedJamUser
|
import cy.hexor.furumi.domain.model.ConnectedJamUser
|
||||||
import com.example.furumi_android.domain.model.ConnectedPlaybackState
|
import cy.hexor.furumi.domain.model.ConnectedPlaybackState
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryPage
|
import cy.hexor.furumi.domain.model.ListeningHistoryPage
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistDetail
|
import cy.hexor.furumi.domain.model.PlaylistDetail
|
||||||
import com.example.furumi_android.domain.model.ReleaseDetail
|
import cy.hexor.furumi.domain.model.ReleaseDetail
|
||||||
import com.example.furumi_android.domain.model.SearchResults
|
import cy.hexor.furumi.domain.model.SearchResults
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
|
|
||||||
interface PlayerRepository {
|
interface PlayerRepository {
|
||||||
suspend fun getArtists(
|
suspend fun getArtists(
|
||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.playback
|
package cy.hexor.furumi.playback
|
||||||
|
|
||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
@@ -18,7 +18,7 @@ import androidx.media3.session.DefaultMediaNotificationProvider
|
|||||||
import androidx.media3.session.MediaSession
|
import androidx.media3.session.MediaSession
|
||||||
import androidx.media3.session.MediaSessionService
|
import androidx.media3.session.MediaSessionService
|
||||||
import androidx.media3.session.MediaStyleNotificationHelper
|
import androidx.media3.session.MediaStyleNotificationHelper
|
||||||
import com.example.furumi_android.MainActivity
|
import cy.hexor.furumi.MainActivity
|
||||||
import com.google.common.util.concurrent.MoreExecutors
|
import com.google.common.util.concurrent.MoreExecutors
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
+3
-3
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.playback
|
package cy.hexor.furumi.playback
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -16,8 +16,8 @@ import androidx.media3.common.util.UnstableApi
|
|||||||
import androidx.media3.datasource.okhttp.OkHttpDataSource
|
import androidx.media3.datasource.okhttp.OkHttpDataSource
|
||||||
import androidx.media3.exoplayer.ExoPlayer
|
import androidx.media3.exoplayer.ExoPlayer
|
||||||
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory
|
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ConnectedPlaybackState
|
import cy.hexor.furumi.domain.model.ConnectedPlaybackState
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
+10
-10
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.login
|
package cy.hexor.furumi.ui.login
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.browser.customtabs.CustomTabsIntent
|
import androidx.browser.customtabs.CustomTabsIntent
|
||||||
@@ -30,15 +30,15 @@ import androidx.compose.ui.text.input.KeyboardType
|
|||||||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiInk
|
import cy.hexor.furumi.ui.theme.FurumiInk
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun LoginScreen(
|
fun LoginScreen(
|
||||||
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
package com.example.furumi_android.ui.login
|
package cy.hexor.furumi.ui.login
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.example.furumi_android.domain.model.ServerConfig
|
import cy.hexor.furumi.domain.model.ServerConfig
|
||||||
import com.example.furumi_android.domain.repository.AuthRepository
|
import cy.hexor.furumi.domain.repository.AuthRepository
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
+16
-16
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -58,21 +58,21 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
+17
-17
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -58,22 +58,22 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.ConnectedDevice
|
import cy.hexor.furumi.domain.model.ConnectedDevice
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
+16
-16
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -58,21 +58,21 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
+16
-16
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -58,21 +58,21 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
+16
-16
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -58,21 +58,21 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
+16
-16
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -59,21 +59,21 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
+16
-16
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -58,21 +58,21 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
+16
-16
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -58,21 +58,21 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
internal enum class PlayerTab(
|
internal enum class PlayerTab(
|
||||||
+23
-23
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -59,25 +59,25 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.ConnectedDevice
|
import cy.hexor.furumi.domain.model.ConnectedDevice
|
||||||
import com.example.furumi_android.domain.model.ConnectedDevicesState
|
import cy.hexor.furumi.domain.model.ConnectedDevicesState
|
||||||
import com.example.furumi_android.domain.model.ConnectedJam
|
import cy.hexor.furumi.domain.model.ConnectedJam
|
||||||
import com.example.furumi_android.domain.model.ConnectedJamUser
|
import cy.hexor.furumi.domain.model.ConnectedJamUser
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -100,7 +100,7 @@ internal fun FullPlayerOverlay(
|
|||||||
onPlayLast: (TrackCard) -> Unit,
|
onPlayLast: (TrackCard) -> Unit,
|
||||||
onShare: (TrackCard) -> Unit,
|
onShare: (TrackCard) -> Unit,
|
||||||
onAddToPlaylist: (TrackCard) -> Unit,
|
onAddToPlaylist: (TrackCard) -> Unit,
|
||||||
onArtistClick: (com.example.furumi_android.domain.model.ArtistCard) -> Unit,
|
onArtistClick: (cy.hexor.furumi.domain.model.ArtistCard) -> Unit,
|
||||||
connectedDevicesState: ConnectedDevicesState?,
|
connectedDevicesState: ConnectedDevicesState?,
|
||||||
connectedDevicesError: String?,
|
connectedDevicesError: String?,
|
||||||
onDeviceClick: (String) -> Unit,
|
onDeviceClick: (String) -> Unit,
|
||||||
@@ -275,7 +275,7 @@ internal fun FullPlayerOverlay(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val artists = track.artistRefs.ifEmpty {
|
val artists = track.artistRefs.ifEmpty {
|
||||||
track.artists.mapIndexed { i, name -> com.example.furumi_android.domain.model.ArtistRef(id = -(i + 1L), name = name) }
|
track.artists.mapIndexed { i, name -> cy.hexor.furumi.domain.model.ArtistRef(id = -(i + 1L), name = name) }
|
||||||
}
|
}
|
||||||
|
|
||||||
Row(
|
Row(
|
||||||
@@ -291,7 +291,7 @@ internal fun FullPlayerOverlay(
|
|||||||
overflow = TextOverflow.Ellipsis,
|
overflow = TextOverflow.Ellipsis,
|
||||||
modifier = Modifier.clickable(enabled = artistRef.id > 0) {
|
modifier = Modifier.clickable(enabled = artistRef.id > 0) {
|
||||||
onArtistClick(
|
onArtistClick(
|
||||||
com.example.furumi_android.domain.model.ArtistCard(
|
cy.hexor.furumi.domain.model.ArtistCard(
|
||||||
id = artistRef.id,
|
id = artistRef.id,
|
||||||
name = artistRef.name,
|
name = artistRef.name,
|
||||||
imageUrl = null,
|
imageUrl = null,
|
||||||
+16
-16
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -58,21 +58,21 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
+16
-16
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -61,21 +61,21 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
+18
-18
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -58,23 +58,23 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.ConnectedDevicesState
|
import cy.hexor.furumi.domain.model.ConnectedDevicesState
|
||||||
import com.example.furumi_android.domain.model.ConnectedPlaybackState
|
import cy.hexor.furumi.domain.model.ConnectedPlaybackState
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
+16
-16
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
@@ -58,21 +58,21 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.ui.theme.FurumiBlack
|
import cy.hexor.furumi.ui.theme.FurumiBlack
|
||||||
import com.example.furumi_android.ui.theme.FurumiElectricCyan
|
import cy.hexor.furumi.ui.theme.FurumiElectricCyan
|
||||||
import com.example.furumi_android.ui.theme.FurumiHotOrange
|
import cy.hexor.furumi.ui.theme.FurumiHotOrange
|
||||||
import com.example.furumi_android.ui.theme.FurumiLine
|
import cy.hexor.furumi.ui.theme.FurumiLine
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonPink
|
import cy.hexor.furumi.ui.theme.FurumiNeonPink
|
||||||
import com.example.furumi_android.ui.theme.FurumiNeonViolet
|
import cy.hexor.furumi.ui.theme.FurumiNeonViolet
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurface
|
import cy.hexor.furumi.ui.theme.FurumiSurface
|
||||||
import com.example.furumi_android.ui.theme.FurumiSurfaceHigh
|
import cy.hexor.furumi.ui.theme.FurumiSurfaceHigh
|
||||||
import com.example.furumi_android.ui.theme.FurumiTextMuted
|
import cy.hexor.furumi.ui.theme.FurumiTextMuted
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
internal fun artistsSubtitle(uiState: PlayerUiState): String {
|
internal fun artistsSubtitle(uiState: PlayerUiState): String {
|
||||||
+20
-20
@@ -1,27 +1,27 @@
|
|||||||
package com.example.furumi_android.ui.player
|
package cy.hexor.furumi.ui.player
|
||||||
|
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.example.furumi_android.data.repository.MediaImageLoader
|
import cy.hexor.furumi.data.repository.MediaImageLoader
|
||||||
import com.example.furumi_android.domain.model.ArtistCard
|
import cy.hexor.furumi.domain.model.ArtistCard
|
||||||
import com.example.furumi_android.domain.model.ArtistDetail
|
import cy.hexor.furumi.domain.model.ArtistDetail
|
||||||
import com.example.furumi_android.domain.model.ConnectedCommand
|
import cy.hexor.furumi.domain.model.ConnectedCommand
|
||||||
import com.example.furumi_android.domain.model.ConnectedDevicesState
|
import cy.hexor.furumi.domain.model.ConnectedDevicesState
|
||||||
import com.example.furumi_android.domain.model.ConnectedJamUser
|
import cy.hexor.furumi.domain.model.ConnectedJamUser
|
||||||
import com.example.furumi_android.domain.model.ConnectedPlaybackState
|
import cy.hexor.furumi.domain.model.ConnectedPlaybackState
|
||||||
import com.example.furumi_android.domain.model.ListeningHistoryItem
|
import cy.hexor.furumi.domain.model.ListeningHistoryItem
|
||||||
import com.example.furumi_android.domain.model.PlaylistCard
|
import cy.hexor.furumi.domain.model.PlaylistCard
|
||||||
import com.example.furumi_android.domain.model.PlaylistDetail
|
import cy.hexor.furumi.domain.model.PlaylistDetail
|
||||||
import com.example.furumi_android.domain.model.ReleaseCard
|
import cy.hexor.furumi.domain.model.ReleaseCard
|
||||||
import com.example.furumi_android.domain.model.ReleaseDetail
|
import cy.hexor.furumi.domain.model.ReleaseDetail
|
||||||
import com.example.furumi_android.domain.model.SearchResults
|
import cy.hexor.furumi.domain.model.SearchResults
|
||||||
import com.example.furumi_android.domain.model.TrackCard
|
import cy.hexor.furumi.domain.model.TrackCard
|
||||||
import com.example.furumi_android.domain.repository.AuthRepository
|
import cy.hexor.furumi.domain.repository.AuthRepository
|
||||||
import com.example.furumi_android.domain.repository.PlayerRepository
|
import cy.hexor.furumi.domain.repository.PlayerRepository
|
||||||
import com.example.furumi_android.playback.AudioPlaybackState
|
import cy.hexor.furumi.playback.AudioPlaybackState
|
||||||
import com.example.furumi_android.playback.PlaybackController
|
import cy.hexor.furumi.playback.PlaybackController
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
@@ -95,7 +95,7 @@ class PlayerViewModel @Inject constructor(
|
|||||||
private val playerRepository: PlayerRepository,
|
private val playerRepository: PlayerRepository,
|
||||||
private val mediaImageLoader: MediaImageLoader,
|
private val mediaImageLoader: MediaImageLoader,
|
||||||
private val playbackController: PlaybackController,
|
private val playbackController: PlaybackController,
|
||||||
appClientInfo: com.example.furumi_android.data.remote.AppClientInfo
|
appClientInfo: cy.hexor.furumi.data.remote.AppClientInfo
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
private val artistDetailCache = mutableMapOf<Long, ArtistDetail>()
|
private val artistDetailCache = mutableMapOf<Long, ArtistDetail>()
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.profile
|
package cy.hexor.furumi.ui.profile
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
+3
-3
@@ -1,9 +1,9 @@
|
|||||||
package com.example.furumi_android.ui.profile
|
package cy.hexor.furumi.ui.profile
|
||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.example.furumi_android.domain.model.User
|
import cy.hexor.furumi.domain.model.User
|
||||||
import com.example.furumi_android.domain.repository.AuthRepository
|
import cy.hexor.furumi.domain.repository.AuthRepository
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.theme
|
package cy.hexor.furumi.ui.theme
|
||||||
|
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.theme
|
package cy.hexor.furumi.ui.theme
|
||||||
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.darkColorScheme
|
import androidx.compose.material3.darkColorScheme
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.ui.theme
|
package cy.hexor.furumi.ui.theme
|
||||||
|
|
||||||
import androidx.compose.material3.Typography
|
import androidx.compose.material3.Typography
|
||||||
import androidx.compose.ui.text.TextStyle
|
import androidx.compose.ui.text.TextStyle
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android
|
package cy.hexor.furumi
|
||||||
|
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.example.furumi_android.domain.model
|
package cy.hexor.furumi.domain.model
|
||||||
|
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Assert.assertTrue
|
import org.junit.Assert.assertTrue
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
Categories:
|
||||||
|
- Multimedia
|
||||||
|
License: WTFPL
|
||||||
|
AuthorName: ab
|
||||||
|
SourceCode: https://gt.hexor.cy/ab/furumi_android
|
||||||
|
IssueTracker: https://gt.hexor.cy/ab/furumi_android/issues
|
||||||
|
|
||||||
|
AutoName: Furumi
|
||||||
|
|
||||||
|
Description: |-
|
||||||
|
Furumi is an Android client for the Furumi self-hosted music streaming server.
|
||||||
|
|
||||||
|
Connect to your own Furumi instance and enjoy your personal music library from anywhere.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
|
||||||
|
* Browse your music library — artists, albums, and tracks
|
||||||
|
* Full playback controls with background playback support
|
||||||
|
* Queue management and listening history
|
||||||
|
* Connect and control multiple remote devices
|
||||||
|
* Jam sessions — listen together with others
|
||||||
|
* Secure authentication with token-based sessions
|
||||||
|
* Material You design with edge-to-edge UI
|
||||||
|
|
||||||
|
Requires a running Furumi server instance to connect to.
|
||||||
|
|
||||||
|
RepoType: git
|
||||||
|
Repo: https://gt.hexor.cy/ab/furumi_android.git
|
||||||
|
|
||||||
|
Builds:
|
||||||
|
- versionName: '1.1'
|
||||||
|
versionCode: 1
|
||||||
|
commit: v1.1
|
||||||
|
subdir: app
|
||||||
|
gradle:
|
||||||
|
- yes
|
||||||
|
|
||||||
|
AutoUpdateMode: Version v%v
|
||||||
|
UpdateCheckMode: Tags
|
||||||
|
CurrentVersion: '1.1'
|
||||||
|
CurrentVersionCode: 1
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Initial release.
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
Furumi is an Android client for the Furumi self-hosted music streaming server.
|
||||||
|
|
||||||
|
Connect to your own Furumi instance and enjoy your personal music library from anywhere.
|
||||||
|
|
||||||
|
Features:
|
||||||
|
* Browse your music library — artists, albums, and tracks
|
||||||
|
* Full playback controls with background playback support
|
||||||
|
* Queue management and listening history
|
||||||
|
* Connect and control multiple remote devices
|
||||||
|
* Jam sessions — listen together with others
|
||||||
|
* Secure authentication with token-based sessions
|
||||||
|
* Material You design with edge-to-edge UI
|
||||||
|
|
||||||
|
Furumi requires a running Furumi server instance to connect to.
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
@@ -0,0 +1 @@
|
|||||||
|
Android client for the Furumi self-hosted music streaming server
|
||||||
@@ -11,9 +11,6 @@ pluginManagement {
|
|||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
plugins {
|
|
||||||
id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
|
|
||||||
}
|
|
||||||
dependencyResolutionManagement {
|
dependencyResolutionManagement {
|
||||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||||
repositories {
|
repositories {
|
||||||
|
|||||||
Reference in New Issue
Block a user