diff --git a/Jetcaster/app/build.gradle.kts b/Jetcaster/app/build.gradle.kts index 0344801aa8..46d0d4c8b4 100644 --- a/Jetcaster/app/build.gradle.kts +++ b/Jetcaster/app/build.gradle.kts @@ -101,6 +101,7 @@ dependencies { implementation(libs.androidx.compose.foundation) implementation(libs.androidx.compose.material) + implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.materialWindow) implementation(libs.androidx.compose.material.iconsExtended) implementation(libs.androidx.compose.ui.tooling.preview) @@ -117,15 +118,8 @@ dependencies { implementation(libs.coil.kt.compose) - implementation(libs.okhttp3) - implementation(libs.okhttp.logging) + implementation(project(":core")) + implementation(project(":designsystem")) - implementation(libs.rometools.rome) - implementation(libs.rometools.modules) - - implementation(libs.androidx.room.runtime) - implementation(libs.androidx.room.ktx) - - ksp(libs.androidx.room.compiler) coreLibraryDesugaring(libs.core.jdk.desugaring) } diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/JetcasterApplication.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/JetcasterApplication.kt index 42b4d133ba..1493a62e3f 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/JetcasterApplication.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/JetcasterApplication.kt @@ -19,6 +19,7 @@ package com.example.jetcaster import android.app.Application import coil.ImageLoader import coil.ImageLoaderFactory +import com.example.jetcaster.core.data.di.Graph /** * Application which sets up our dependency [Graph] with a context. diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt index 571648e9cc..b7db0741ad 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/Home.kt @@ -75,9 +75,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import coil.compose.AsyncImage import com.example.jetcaster.R -import com.example.jetcaster.data.Category -import com.example.jetcaster.data.EpisodeToPodcast -import com.example.jetcaster.data.PodcastWithExtraInfo +import com.example.jetcaster.core.data.database.model.Category +import com.example.jetcaster.core.data.database.model.EpisodeToPodcast +import com.example.jetcaster.core.data.database.model.PodcastWithExtraInfo import com.example.jetcaster.ui.home.category.PodcastCategoryViewState import com.example.jetcaster.ui.home.discover.DiscoverViewState import com.example.jetcaster.ui.home.discover.discoverItems diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/HomeViewModel.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/HomeViewModel.kt index 9240c54076..07317b592f 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/HomeViewModel.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/HomeViewModel.kt @@ -18,14 +18,14 @@ package com.example.jetcaster.ui.home import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.example.jetcaster.Graph -import com.example.jetcaster.data.Category -import com.example.jetcaster.data.CategoryStore -import com.example.jetcaster.data.EpisodeStore -import com.example.jetcaster.data.EpisodeToPodcast -import com.example.jetcaster.data.PodcastStore -import com.example.jetcaster.data.PodcastWithExtraInfo -import com.example.jetcaster.data.PodcastsRepository +import com.example.jetcaster.core.data.database.model.Category +import com.example.jetcaster.core.data.database.model.EpisodeToPodcast +import com.example.jetcaster.core.data.database.model.PodcastWithExtraInfo +import com.example.jetcaster.core.data.di.Graph +import com.example.jetcaster.core.data.repository.CategoryStore +import com.example.jetcaster.core.data.repository.EpisodeStore +import com.example.jetcaster.core.data.repository.PodcastStore +import com.example.jetcaster.core.data.repository.PodcastsRepository import com.example.jetcaster.ui.home.category.PodcastCategoryViewState import com.example.jetcaster.ui.home.discover.DiscoverViewState import com.example.jetcaster.util.combine diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/PreviewData.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/PreviewData.kt index 3a6d96ecc3..a0968fd164 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/PreviewData.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/PreviewData.kt @@ -16,11 +16,11 @@ package com.example.jetcaster.ui.home -import com.example.jetcaster.data.Category -import com.example.jetcaster.data.Episode -import com.example.jetcaster.data.EpisodeToPodcast -import com.example.jetcaster.data.Podcast -import com.example.jetcaster.data.PodcastWithExtraInfo +import com.example.jetcaster.core.data.database.model.Category +import com.example.jetcaster.core.data.database.model.Episode +import com.example.jetcaster.core.data.database.model.EpisodeToPodcast +import com.example.jetcaster.core.data.database.model.Podcast +import com.example.jetcaster.core.data.database.model.PodcastWithExtraInfo import java.time.OffsetDateTime import java.time.ZoneOffset import kotlinx.collections.immutable.toPersistentList diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/category/PodcastCategory.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/category/PodcastCategory.kt index e8f3528724..321d72e3f8 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/category/PodcastCategory.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/category/PodcastCategory.kt @@ -68,10 +68,10 @@ import androidx.constraintlayout.compose.Dimension.Companion.preferredWrapConten import coil.compose.AsyncImage import coil.request.ImageRequest import com.example.jetcaster.R -import com.example.jetcaster.data.Episode -import com.example.jetcaster.data.EpisodeToPodcast -import com.example.jetcaster.data.Podcast -import com.example.jetcaster.data.PodcastWithExtraInfo +import com.example.jetcaster.core.data.database.model.Episode +import com.example.jetcaster.core.data.database.model.EpisodeToPodcast +import com.example.jetcaster.core.data.database.model.Podcast +import com.example.jetcaster.core.data.database.model.PodcastWithExtraInfo import com.example.jetcaster.ui.home.PreviewEpisodes import com.example.jetcaster.ui.home.PreviewPodcasts import com.example.jetcaster.ui.theme.JetcasterTheme @@ -218,15 +218,16 @@ fun EpisodeListItem( ) CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) { + val duration = episode.duration Text( text = when { - episode.duration != null -> { + duration != null -> { // If we have the duration, we combine the date/duration via a // formatted string stringResource( R.string.episode_date_duration, MediumDateFormatter.format(episode.published), - episode.duration.toMinutes().toInt() + duration.toMinutes().toInt() ) } // Otherwise we just use the date diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/discover/Discover.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/discover/Discover.kt index 638ea2fb24..817d620b70 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/discover/Discover.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/discover/Discover.kt @@ -30,7 +30,7 @@ import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import com.example.jetcaster.data.Category +import com.example.jetcaster.core.data.database.model.Category import com.example.jetcaster.ui.home.category.PodcastCategoryViewState import com.example.jetcaster.ui.home.category.podcastCategory import com.example.jetcaster.ui.theme.Keyline1 diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/library/Library.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/library/Library.kt index 8f12f6a591..490ea28c9b 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/library/Library.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/home/library/Library.kt @@ -19,7 +19,7 @@ package com.example.jetcaster.ui.home.library import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.items import androidx.compose.ui.Modifier -import com.example.jetcaster.data.EpisodeToPodcast +import com.example.jetcaster.core.data.database.model.EpisodeToPodcast import com.example.jetcaster.ui.home.category.EpisodeListItem fun LazyListScope.libraryItems( diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/player/PlayerViewModel.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/player/PlayerViewModel.kt index 73265ee436..177104f714 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/player/PlayerViewModel.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/player/PlayerViewModel.kt @@ -26,9 +26,9 @@ import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.savedstate.SavedStateRegistryOwner -import com.example.jetcaster.Graph -import com.example.jetcaster.data.EpisodeStore -import com.example.jetcaster.data.PodcastStore +import com.example.jetcaster.core.data.di.Graph +import com.example.jetcaster.core.data.repository.EpisodeStore +import com.example.jetcaster.core.data.repository.PodcastStore import java.time.Duration import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/theme/Theme.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/theme/Theme.kt index 477332fe46..a6c728a5eb 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/theme/Theme.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/theme/Theme.kt @@ -16,8 +16,232 @@ package com.example.jetcaster.ui.theme +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView +import androidx.core.view.WindowCompat +import com.example.jetcaster.designsystem.theme.backgroundDark +import com.example.jetcaster.designsystem.theme.backgroundDarkHighContrast +import com.example.jetcaster.designsystem.theme.backgroundDarkMediumContrast +import com.example.jetcaster.designsystem.theme.backgroundLight +import com.example.jetcaster.designsystem.theme.backgroundLightHighContrast +import com.example.jetcaster.designsystem.theme.backgroundLightMediumContrast +import com.example.jetcaster.designsystem.theme.errorContainerDark +import com.example.jetcaster.designsystem.theme.errorContainerDarkHighContrast +import com.example.jetcaster.designsystem.theme.errorContainerDarkMediumContrast +import com.example.jetcaster.designsystem.theme.errorContainerLight +import com.example.jetcaster.designsystem.theme.errorContainerLightHighContrast +import com.example.jetcaster.designsystem.theme.errorContainerLightMediumContrast +import com.example.jetcaster.designsystem.theme.errorDark +import com.example.jetcaster.designsystem.theme.errorDarkHighContrast +import com.example.jetcaster.designsystem.theme.errorDarkMediumContrast +import com.example.jetcaster.designsystem.theme.errorLight +import com.example.jetcaster.designsystem.theme.errorLightHighContrast +import com.example.jetcaster.designsystem.theme.errorLightMediumContrast +import com.example.jetcaster.designsystem.theme.inverseOnSurfaceDark +import com.example.jetcaster.designsystem.theme.inverseOnSurfaceDarkHighContrast +import com.example.jetcaster.designsystem.theme.inverseOnSurfaceDarkMediumContrast +import com.example.jetcaster.designsystem.theme.inverseOnSurfaceLight +import com.example.jetcaster.designsystem.theme.inverseOnSurfaceLightHighContrast +import com.example.jetcaster.designsystem.theme.inverseOnSurfaceLightMediumContrast +import com.example.jetcaster.designsystem.theme.inversePrimaryDark +import com.example.jetcaster.designsystem.theme.inversePrimaryDarkHighContrast +import com.example.jetcaster.designsystem.theme.inversePrimaryDarkMediumContrast +import com.example.jetcaster.designsystem.theme.inversePrimaryLight +import com.example.jetcaster.designsystem.theme.inversePrimaryLightHighContrast +import com.example.jetcaster.designsystem.theme.inversePrimaryLightMediumContrast +import com.example.jetcaster.designsystem.theme.inverseSurfaceDark +import com.example.jetcaster.designsystem.theme.inverseSurfaceDarkHighContrast +import com.example.jetcaster.designsystem.theme.inverseSurfaceDarkMediumContrast +import com.example.jetcaster.designsystem.theme.inverseSurfaceLight +import com.example.jetcaster.designsystem.theme.inverseSurfaceLightHighContrast +import com.example.jetcaster.designsystem.theme.inverseSurfaceLightMediumContrast +import com.example.jetcaster.designsystem.theme.onBackgroundDark +import com.example.jetcaster.designsystem.theme.onBackgroundDarkHighContrast +import com.example.jetcaster.designsystem.theme.onBackgroundDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onBackgroundLight +import com.example.jetcaster.designsystem.theme.onBackgroundLightHighContrast +import com.example.jetcaster.designsystem.theme.onBackgroundLightMediumContrast +import com.example.jetcaster.designsystem.theme.onErrorContainerDark +import com.example.jetcaster.designsystem.theme.onErrorContainerDarkHighContrast +import com.example.jetcaster.designsystem.theme.onErrorContainerDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onErrorContainerLight +import com.example.jetcaster.designsystem.theme.onErrorContainerLightHighContrast +import com.example.jetcaster.designsystem.theme.onErrorContainerLightMediumContrast +import com.example.jetcaster.designsystem.theme.onErrorDark +import com.example.jetcaster.designsystem.theme.onErrorDarkHighContrast +import com.example.jetcaster.designsystem.theme.onErrorDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onErrorLight +import com.example.jetcaster.designsystem.theme.onErrorLightHighContrast +import com.example.jetcaster.designsystem.theme.onErrorLightMediumContrast +import com.example.jetcaster.designsystem.theme.onPrimaryContainerDark +import com.example.jetcaster.designsystem.theme.onPrimaryContainerDarkHighContrast +import com.example.jetcaster.designsystem.theme.onPrimaryContainerDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onPrimaryContainerLight +import com.example.jetcaster.designsystem.theme.onPrimaryContainerLightHighContrast +import com.example.jetcaster.designsystem.theme.onPrimaryContainerLightMediumContrast +import com.example.jetcaster.designsystem.theme.onPrimaryDark +import com.example.jetcaster.designsystem.theme.onPrimaryDarkHighContrast +import com.example.jetcaster.designsystem.theme.onPrimaryDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onPrimaryLight +import com.example.jetcaster.designsystem.theme.onPrimaryLightHighContrast +import com.example.jetcaster.designsystem.theme.onPrimaryLightMediumContrast +import com.example.jetcaster.designsystem.theme.onSecondaryContainerDark +import com.example.jetcaster.designsystem.theme.onSecondaryContainerDarkHighContrast +import com.example.jetcaster.designsystem.theme.onSecondaryContainerDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onSecondaryContainerLight +import com.example.jetcaster.designsystem.theme.onSecondaryContainerLightHighContrast +import com.example.jetcaster.designsystem.theme.onSecondaryContainerLightMediumContrast +import com.example.jetcaster.designsystem.theme.onSecondaryDark +import com.example.jetcaster.designsystem.theme.onSecondaryDarkHighContrast +import com.example.jetcaster.designsystem.theme.onSecondaryDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onSecondaryLight +import com.example.jetcaster.designsystem.theme.onSecondaryLightHighContrast +import com.example.jetcaster.designsystem.theme.onSecondaryLightMediumContrast +import com.example.jetcaster.designsystem.theme.onSurfaceDark +import com.example.jetcaster.designsystem.theme.onSurfaceDarkHighContrast +import com.example.jetcaster.designsystem.theme.onSurfaceDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onSurfaceLight +import com.example.jetcaster.designsystem.theme.onSurfaceLightHighContrast +import com.example.jetcaster.designsystem.theme.onSurfaceLightMediumContrast +import com.example.jetcaster.designsystem.theme.onSurfaceVariantDark +import com.example.jetcaster.designsystem.theme.onSurfaceVariantDarkHighContrast +import com.example.jetcaster.designsystem.theme.onSurfaceVariantDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onSurfaceVariantLight +import com.example.jetcaster.designsystem.theme.onSurfaceVariantLightHighContrast +import com.example.jetcaster.designsystem.theme.onSurfaceVariantLightMediumContrast +import com.example.jetcaster.designsystem.theme.onTertiaryContainerDark +import com.example.jetcaster.designsystem.theme.onTertiaryContainerDarkHighContrast +import com.example.jetcaster.designsystem.theme.onTertiaryContainerDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onTertiaryContainerLight +import com.example.jetcaster.designsystem.theme.onTertiaryContainerLightHighContrast +import com.example.jetcaster.designsystem.theme.onTertiaryContainerLightMediumContrast +import com.example.jetcaster.designsystem.theme.onTertiaryDark +import com.example.jetcaster.designsystem.theme.onTertiaryDarkHighContrast +import com.example.jetcaster.designsystem.theme.onTertiaryDarkMediumContrast +import com.example.jetcaster.designsystem.theme.onTertiaryLight +import com.example.jetcaster.designsystem.theme.onTertiaryLightHighContrast +import com.example.jetcaster.designsystem.theme.onTertiaryLightMediumContrast +import com.example.jetcaster.designsystem.theme.outlineDark +import com.example.jetcaster.designsystem.theme.outlineDarkHighContrast +import com.example.jetcaster.designsystem.theme.outlineDarkMediumContrast +import com.example.jetcaster.designsystem.theme.outlineLight +import com.example.jetcaster.designsystem.theme.outlineLightHighContrast +import com.example.jetcaster.designsystem.theme.outlineLightMediumContrast +import com.example.jetcaster.designsystem.theme.outlineVariantDark +import com.example.jetcaster.designsystem.theme.outlineVariantDarkHighContrast +import com.example.jetcaster.designsystem.theme.outlineVariantDarkMediumContrast +import com.example.jetcaster.designsystem.theme.outlineVariantLight +import com.example.jetcaster.designsystem.theme.outlineVariantLightHighContrast +import com.example.jetcaster.designsystem.theme.outlineVariantLightMediumContrast +import com.example.jetcaster.designsystem.theme.primaryContainerDark +import com.example.jetcaster.designsystem.theme.primaryContainerDarkHighContrast +import com.example.jetcaster.designsystem.theme.primaryContainerDarkMediumContrast +import com.example.jetcaster.designsystem.theme.primaryContainerLight +import com.example.jetcaster.designsystem.theme.primaryContainerLightHighContrast +import com.example.jetcaster.designsystem.theme.primaryContainerLightMediumContrast +import com.example.jetcaster.designsystem.theme.primaryDark +import com.example.jetcaster.designsystem.theme.primaryDarkHighContrast +import com.example.jetcaster.designsystem.theme.primaryDarkMediumContrast +import com.example.jetcaster.designsystem.theme.primaryLight +import com.example.jetcaster.designsystem.theme.primaryLightHighContrast +import com.example.jetcaster.designsystem.theme.primaryLightMediumContrast +import com.example.jetcaster.designsystem.theme.scrimDark +import com.example.jetcaster.designsystem.theme.scrimDarkHighContrast +import com.example.jetcaster.designsystem.theme.scrimDarkMediumContrast +import com.example.jetcaster.designsystem.theme.scrimLight +import com.example.jetcaster.designsystem.theme.scrimLightHighContrast +import com.example.jetcaster.designsystem.theme.scrimLightMediumContrast +import com.example.jetcaster.designsystem.theme.secondaryContainerDark +import com.example.jetcaster.designsystem.theme.secondaryContainerDarkHighContrast +import com.example.jetcaster.designsystem.theme.secondaryContainerDarkMediumContrast +import com.example.jetcaster.designsystem.theme.secondaryContainerLight +import com.example.jetcaster.designsystem.theme.secondaryContainerLightHighContrast +import com.example.jetcaster.designsystem.theme.secondaryContainerLightMediumContrast +import com.example.jetcaster.designsystem.theme.secondaryDark +import com.example.jetcaster.designsystem.theme.secondaryDarkHighContrast +import com.example.jetcaster.designsystem.theme.secondaryDarkMediumContrast +import com.example.jetcaster.designsystem.theme.secondaryLight +import com.example.jetcaster.designsystem.theme.secondaryLightHighContrast +import com.example.jetcaster.designsystem.theme.secondaryLightMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceBrightDark +import com.example.jetcaster.designsystem.theme.surfaceBrightDarkHighContrast +import com.example.jetcaster.designsystem.theme.surfaceBrightDarkMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceBrightLight +import com.example.jetcaster.designsystem.theme.surfaceBrightLightHighContrast +import com.example.jetcaster.designsystem.theme.surfaceBrightLightMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerDark +import com.example.jetcaster.designsystem.theme.surfaceContainerDarkHighContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerDarkMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerHighDark +import com.example.jetcaster.designsystem.theme.surfaceContainerHighDarkHighContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerHighDarkMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerHighLight +import com.example.jetcaster.designsystem.theme.surfaceContainerHighLightHighContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerHighLightMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerHighestDark +import com.example.jetcaster.designsystem.theme.surfaceContainerHighestDarkHighContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerHighestDarkMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerHighestLight +import com.example.jetcaster.designsystem.theme.surfaceContainerHighestLightHighContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerHighestLightMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerLight +import com.example.jetcaster.designsystem.theme.surfaceContainerLightHighContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerLightMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerLowDark +import com.example.jetcaster.designsystem.theme.surfaceContainerLowDarkHighContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerLowDarkMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerLowLight +import com.example.jetcaster.designsystem.theme.surfaceContainerLowLightHighContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerLowLightMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerLowestDark +import com.example.jetcaster.designsystem.theme.surfaceContainerLowestDarkHighContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerLowestDarkMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerLowestLight +import com.example.jetcaster.designsystem.theme.surfaceContainerLowestLightHighContrast +import com.example.jetcaster.designsystem.theme.surfaceContainerLowestLightMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceDark +import com.example.jetcaster.designsystem.theme.surfaceDarkHighContrast +import com.example.jetcaster.designsystem.theme.surfaceDarkMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceDimDark +import com.example.jetcaster.designsystem.theme.surfaceDimDarkHighContrast +import com.example.jetcaster.designsystem.theme.surfaceDimDarkMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceDimLight +import com.example.jetcaster.designsystem.theme.surfaceDimLightHighContrast +import com.example.jetcaster.designsystem.theme.surfaceDimLightMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceLight +import com.example.jetcaster.designsystem.theme.surfaceLightHighContrast +import com.example.jetcaster.designsystem.theme.surfaceLightMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceVariantDark +import com.example.jetcaster.designsystem.theme.surfaceVariantDarkHighContrast +import com.example.jetcaster.designsystem.theme.surfaceVariantDarkMediumContrast +import com.example.jetcaster.designsystem.theme.surfaceVariantLight +import com.example.jetcaster.designsystem.theme.surfaceVariantLightHighContrast +import com.example.jetcaster.designsystem.theme.surfaceVariantLightMediumContrast +import com.example.jetcaster.designsystem.theme.tertiaryContainerDark +import com.example.jetcaster.designsystem.theme.tertiaryContainerDarkHighContrast +import com.example.jetcaster.designsystem.theme.tertiaryContainerDarkMediumContrast +import com.example.jetcaster.designsystem.theme.tertiaryContainerLight +import com.example.jetcaster.designsystem.theme.tertiaryContainerLightHighContrast +import com.example.jetcaster.designsystem.theme.tertiaryContainerLightMediumContrast +import com.example.jetcaster.designsystem.theme.tertiaryDark +import com.example.jetcaster.designsystem.theme.tertiaryDarkHighContrast +import com.example.jetcaster.designsystem.theme.tertiaryDarkMediumContrast +import com.example.jetcaster.designsystem.theme.tertiaryLight +import com.example.jetcaster.designsystem.theme.tertiaryLightHighContrast +import com.example.jetcaster.designsystem.theme.tertiaryLightMediumContrast @Composable fun JetcasterTheme( @@ -30,3 +254,275 @@ fun JetcasterTheme( content = content ) } + +private val lightScheme = lightColorScheme( + primary = primaryLight, + onPrimary = onPrimaryLight, + primaryContainer = primaryContainerLight, + onPrimaryContainer = onPrimaryContainerLight, + secondary = secondaryLight, + onSecondary = onSecondaryLight, + secondaryContainer = secondaryContainerLight, + onSecondaryContainer = onSecondaryContainerLight, + tertiary = tertiaryLight, + onTertiary = onTertiaryLight, + tertiaryContainer = tertiaryContainerLight, + onTertiaryContainer = onTertiaryContainerLight, + error = errorLight, + onError = onErrorLight, + errorContainer = errorContainerLight, + onErrorContainer = onErrorContainerLight, + background = backgroundLight, + onBackground = onBackgroundLight, + surface = surfaceLight, + onSurface = onSurfaceLight, + surfaceVariant = surfaceVariantLight, + onSurfaceVariant = onSurfaceVariantLight, + outline = outlineLight, + outlineVariant = outlineVariantLight, + scrim = scrimLight, + inverseSurface = inverseSurfaceLight, + inverseOnSurface = inverseOnSurfaceLight, + inversePrimary = inversePrimaryLight, + surfaceDim = surfaceDimLight, + surfaceBright = surfaceBrightLight, + surfaceContainerLowest = surfaceContainerLowestLight, + surfaceContainerLow = surfaceContainerLowLight, + surfaceContainer = surfaceContainerLight, + surfaceContainerHigh = surfaceContainerHighLight, + surfaceContainerHighest = surfaceContainerHighestLight, +) + +private val darkScheme = darkColorScheme( + primary = primaryDark, + onPrimary = onPrimaryDark, + primaryContainer = primaryContainerDark, + onPrimaryContainer = onPrimaryContainerDark, + secondary = secondaryDark, + onSecondary = onSecondaryDark, + secondaryContainer = secondaryContainerDark, + onSecondaryContainer = onSecondaryContainerDark, + tertiary = tertiaryDark, + onTertiary = onTertiaryDark, + tertiaryContainer = tertiaryContainerDark, + onTertiaryContainer = onTertiaryContainerDark, + error = errorDark, + onError = onErrorDark, + errorContainer = errorContainerDark, + onErrorContainer = onErrorContainerDark, + background = backgroundDark, + onBackground = onBackgroundDark, + surface = surfaceDark, + onSurface = onSurfaceDark, + surfaceVariant = surfaceVariantDark, + onSurfaceVariant = onSurfaceVariantDark, + outline = outlineDark, + outlineVariant = outlineVariantDark, + scrim = scrimDark, + inverseSurface = inverseSurfaceDark, + inverseOnSurface = inverseOnSurfaceDark, + inversePrimary = inversePrimaryDark, + surfaceDim = surfaceDimDark, + surfaceBright = surfaceBrightDark, + surfaceContainerLowest = surfaceContainerLowestDark, + surfaceContainerLow = surfaceContainerLowDark, + surfaceContainer = surfaceContainerDark, + surfaceContainerHigh = surfaceContainerHighDark, + surfaceContainerHighest = surfaceContainerHighestDark, +) + +private val mediumContrastLightColorScheme = lightColorScheme( + primary = primaryLightMediumContrast, + onPrimary = onPrimaryLightMediumContrast, + primaryContainer = primaryContainerLightMediumContrast, + onPrimaryContainer = onPrimaryContainerLightMediumContrast, + secondary = secondaryLightMediumContrast, + onSecondary = onSecondaryLightMediumContrast, + secondaryContainer = secondaryContainerLightMediumContrast, + onSecondaryContainer = onSecondaryContainerLightMediumContrast, + tertiary = tertiaryLightMediumContrast, + onTertiary = onTertiaryLightMediumContrast, + tertiaryContainer = tertiaryContainerLightMediumContrast, + onTertiaryContainer = onTertiaryContainerLightMediumContrast, + error = errorLightMediumContrast, + onError = onErrorLightMediumContrast, + errorContainer = errorContainerLightMediumContrast, + onErrorContainer = onErrorContainerLightMediumContrast, + background = backgroundLightMediumContrast, + onBackground = onBackgroundLightMediumContrast, + surface = surfaceLightMediumContrast, + onSurface = onSurfaceLightMediumContrast, + surfaceVariant = surfaceVariantLightMediumContrast, + onSurfaceVariant = onSurfaceVariantLightMediumContrast, + outline = outlineLightMediumContrast, + outlineVariant = outlineVariantLightMediumContrast, + scrim = scrimLightMediumContrast, + inverseSurface = inverseSurfaceLightMediumContrast, + inverseOnSurface = inverseOnSurfaceLightMediumContrast, + inversePrimary = inversePrimaryLightMediumContrast, + surfaceDim = surfaceDimLightMediumContrast, + surfaceBright = surfaceBrightLightMediumContrast, + surfaceContainerLowest = surfaceContainerLowestLightMediumContrast, + surfaceContainerLow = surfaceContainerLowLightMediumContrast, + surfaceContainer = surfaceContainerLightMediumContrast, + surfaceContainerHigh = surfaceContainerHighLightMediumContrast, + surfaceContainerHighest = surfaceContainerHighestLightMediumContrast, +) + +private val highContrastLightColorScheme = lightColorScheme( + primary = primaryLightHighContrast, + onPrimary = onPrimaryLightHighContrast, + primaryContainer = primaryContainerLightHighContrast, + onPrimaryContainer = onPrimaryContainerLightHighContrast, + secondary = secondaryLightHighContrast, + onSecondary = onSecondaryLightHighContrast, + secondaryContainer = secondaryContainerLightHighContrast, + onSecondaryContainer = onSecondaryContainerLightHighContrast, + tertiary = tertiaryLightHighContrast, + onTertiary = onTertiaryLightHighContrast, + tertiaryContainer = tertiaryContainerLightHighContrast, + onTertiaryContainer = onTertiaryContainerLightHighContrast, + error = errorLightHighContrast, + onError = onErrorLightHighContrast, + errorContainer = errorContainerLightHighContrast, + onErrorContainer = onErrorContainerLightHighContrast, + background = backgroundLightHighContrast, + onBackground = onBackgroundLightHighContrast, + surface = surfaceLightHighContrast, + onSurface = onSurfaceLightHighContrast, + surfaceVariant = surfaceVariantLightHighContrast, + onSurfaceVariant = onSurfaceVariantLightHighContrast, + outline = outlineLightHighContrast, + outlineVariant = outlineVariantLightHighContrast, + scrim = scrimLightHighContrast, + inverseSurface = inverseSurfaceLightHighContrast, + inverseOnSurface = inverseOnSurfaceLightHighContrast, + inversePrimary = inversePrimaryLightHighContrast, + surfaceDim = surfaceDimLightHighContrast, + surfaceBright = surfaceBrightLightHighContrast, + surfaceContainerLowest = surfaceContainerLowestLightHighContrast, + surfaceContainerLow = surfaceContainerLowLightHighContrast, + surfaceContainer = surfaceContainerLightHighContrast, + surfaceContainerHigh = surfaceContainerHighLightHighContrast, + surfaceContainerHighest = surfaceContainerHighestLightHighContrast, +) + +private val mediumContrastDarkColorScheme = darkColorScheme( + primary = primaryDarkMediumContrast, + onPrimary = onPrimaryDarkMediumContrast, + primaryContainer = primaryContainerDarkMediumContrast, + onPrimaryContainer = onPrimaryContainerDarkMediumContrast, + secondary = secondaryDarkMediumContrast, + onSecondary = onSecondaryDarkMediumContrast, + secondaryContainer = secondaryContainerDarkMediumContrast, + onSecondaryContainer = onSecondaryContainerDarkMediumContrast, + tertiary = tertiaryDarkMediumContrast, + onTertiary = onTertiaryDarkMediumContrast, + tertiaryContainer = tertiaryContainerDarkMediumContrast, + onTertiaryContainer = onTertiaryContainerDarkMediumContrast, + error = errorDarkMediumContrast, + onError = onErrorDarkMediumContrast, + errorContainer = errorContainerDarkMediumContrast, + onErrorContainer = onErrorContainerDarkMediumContrast, + background = backgroundDarkMediumContrast, + onBackground = onBackgroundDarkMediumContrast, + surface = surfaceDarkMediumContrast, + onSurface = onSurfaceDarkMediumContrast, + surfaceVariant = surfaceVariantDarkMediumContrast, + onSurfaceVariant = onSurfaceVariantDarkMediumContrast, + outline = outlineDarkMediumContrast, + outlineVariant = outlineVariantDarkMediumContrast, + scrim = scrimDarkMediumContrast, + inverseSurface = inverseSurfaceDarkMediumContrast, + inverseOnSurface = inverseOnSurfaceDarkMediumContrast, + inversePrimary = inversePrimaryDarkMediumContrast, + surfaceDim = surfaceDimDarkMediumContrast, + surfaceBright = surfaceBrightDarkMediumContrast, + surfaceContainerLowest = surfaceContainerLowestDarkMediumContrast, + surfaceContainerLow = surfaceContainerLowDarkMediumContrast, + surfaceContainer = surfaceContainerDarkMediumContrast, + surfaceContainerHigh = surfaceContainerHighDarkMediumContrast, + surfaceContainerHighest = surfaceContainerHighestDarkMediumContrast, +) + +private val highContrastDarkColorScheme = darkColorScheme( + primary = primaryDarkHighContrast, + onPrimary = onPrimaryDarkHighContrast, + primaryContainer = primaryContainerDarkHighContrast, + onPrimaryContainer = onPrimaryContainerDarkHighContrast, + secondary = secondaryDarkHighContrast, + onSecondary = onSecondaryDarkHighContrast, + secondaryContainer = secondaryContainerDarkHighContrast, + onSecondaryContainer = onSecondaryContainerDarkHighContrast, + tertiary = tertiaryDarkHighContrast, + onTertiary = onTertiaryDarkHighContrast, + tertiaryContainer = tertiaryContainerDarkHighContrast, + onTertiaryContainer = onTertiaryContainerDarkHighContrast, + error = errorDarkHighContrast, + onError = onErrorDarkHighContrast, + errorContainer = errorContainerDarkHighContrast, + onErrorContainer = onErrorContainerDarkHighContrast, + background = backgroundDarkHighContrast, + onBackground = onBackgroundDarkHighContrast, + surface = surfaceDarkHighContrast, + onSurface = onSurfaceDarkHighContrast, + surfaceVariant = surfaceVariantDarkHighContrast, + onSurfaceVariant = onSurfaceVariantDarkHighContrast, + outline = outlineDarkHighContrast, + outlineVariant = outlineVariantDarkHighContrast, + scrim = scrimDarkHighContrast, + inverseSurface = inverseSurfaceDarkHighContrast, + inverseOnSurface = inverseOnSurfaceDarkHighContrast, + inversePrimary = inversePrimaryDarkHighContrast, + surfaceDim = surfaceDimDarkHighContrast, + surfaceBright = surfaceBrightDarkHighContrast, + surfaceContainerLowest = surfaceContainerLowestDarkHighContrast, + surfaceContainerLow = surfaceContainerLowDarkHighContrast, + surfaceContainer = surfaceContainerDarkHighContrast, + surfaceContainerHigh = surfaceContainerHighDarkHighContrast, + surfaceContainerHighest = surfaceContainerHighestDarkHighContrast, +) + +@Immutable +data class ColorFamily( + val color: Color, + val onColor: Color, + val colorContainer: Color, + val onColorContainer: Color +) + +val unspecified_scheme = ColorFamily( + Color.Unspecified, Color.Unspecified, Color.Unspecified, Color.Unspecified +) + +@Composable +fun JetcasterThemeM3( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> darkScheme + else -> lightScheme + } + val view = LocalView.current + if (!view.isInEditMode) { + SideEffect { + val window = (view.context as Activity).window + window.statusBarColor = colorScheme.primary.toArgb() + WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme + } + } + + androidx.compose.material3.MaterialTheme( + colorScheme = colorScheme, + typography = JetcasterTypographyM3, + content = content + ) +} diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/theme/Type.kt b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/theme/Type.kt index 1c407e52cb..0fcabdd969 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/ui/theme/Type.kt +++ b/Jetcaster/app/src/main/java/com/example/jetcaster/ui/theme/Type.kt @@ -18,18 +18,9 @@ package com.example.jetcaster.ui.theme import androidx.compose.material.Typography import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.Font -import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp -import com.example.jetcaster.R - -private val Montserrat = FontFamily( - Font(R.font.montserrat_light, FontWeight.Light), - Font(R.font.montserrat_regular, FontWeight.Normal), - Font(R.font.montserrat_medium, FontWeight.Medium), - Font(R.font.montserrat_semibold, FontWeight.SemiBold) -) +import com.example.jetcaster.designsystem.theme.Montserrat val JetcasterTypography = Typography( h1 = TextStyle( @@ -120,3 +111,105 @@ val JetcasterTypography = Typography( letterSpacing = 1.sp ) ) + +val JetcasterTypographyM3 = androidx.compose.material3.Typography( + displayLarge = TextStyle( + fontFamily = Montserrat, + fontSize = 57.sp, + fontWeight = FontWeight.W400, + lineHeight = 64.sp, + letterSpacing = (-0.25).sp + ), + displayMedium = TextStyle( + fontFamily = Montserrat, + fontSize = 45.sp, + fontWeight = FontWeight.W400, + lineHeight = 52.sp + ), + displaySmall = TextStyle( + fontFamily = Montserrat, + fontSize = 36.sp, + fontWeight = FontWeight.W400, + lineHeight = 44.sp + ), + headlineLarge = TextStyle( + fontFamily = Montserrat, + fontSize = 32.sp, + fontWeight = FontWeight.W500, + lineHeight = 40.sp + ), + headlineMedium = TextStyle( + fontFamily = Montserrat, + fontSize = 28.sp, + fontWeight = FontWeight.W500, + lineHeight = 36.sp + ), + headlineSmall = TextStyle( + fontFamily = Montserrat, + fontSize = 24.sp, + fontWeight = FontWeight.W500, + lineHeight = 32.sp + ), + titleLarge = TextStyle( + fontFamily = Montserrat, + fontSize = 22.sp, + fontWeight = FontWeight.W400, + lineHeight = 28.sp + ), + titleMedium = TextStyle( + fontFamily = Montserrat, + fontSize = 16.sp, + fontWeight = FontWeight.W500, + lineHeight = 24.sp, + letterSpacing = 0.15.sp + ), + titleSmall = TextStyle( + fontFamily = Montserrat, + fontSize = 14.sp, + fontWeight = FontWeight.W500, + lineHeight = 20.sp, + letterSpacing = 0.1.sp + ), + labelLarge = TextStyle( + fontFamily = Montserrat, + fontSize = 14.sp, + fontWeight = FontWeight.W500, + lineHeight = 20.sp, + letterSpacing = 0.1.sp + ), + labelMedium = TextStyle( + fontFamily = Montserrat, + fontSize = 12.sp, + fontWeight = FontWeight.W500, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ), + labelSmall = TextStyle( + fontFamily = Montserrat, + fontSize = 11.sp, + fontWeight = FontWeight.W500, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ), + bodyLarge = TextStyle( + fontFamily = Montserrat, + fontSize = 16.sp, + fontWeight = FontWeight.W500, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ), + bodyMedium = TextStyle( + fontFamily = Montserrat, + fontSize = 14.sp, + fontWeight = FontWeight.W500, + lineHeight = 20.sp, + letterSpacing = 0.25.sp + ), + bodySmall = TextStyle( + fontFamily = Montserrat, + fontSize = 12.sp, + fontWeight = FontWeight.W500, + lineHeight = 16.sp, + letterSpacing = 0.4.sp + ), +) diff --git a/Jetcaster/build.gradle.kts b/Jetcaster/build.gradle.kts index c83db36f52..c9c401efd5 100644 --- a/Jetcaster/build.gradle.kts +++ b/Jetcaster/build.gradle.kts @@ -15,8 +15,11 @@ */ plugins { + alias(libs.plugins.android.application) apply false + alias(libs.plugins.android.library) apply false + alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.gradle.versions) alias(libs.plugins.version.catalog.update) } -apply("${project.rootDir}/buildscripts/toml-updater-config.gradle") \ No newline at end of file +apply("${project.rootDir}/buildscripts/toml-updater-config.gradle") diff --git a/Jetcaster/core/.gitignore b/Jetcaster/core/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/Jetcaster/core/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/Jetcaster/core/build.gradle.kts b/Jetcaster/core/build.gradle.kts new file mode 100644 index 0000000000..b4d57239f4 --- /dev/null +++ b/Jetcaster/core/build.gradle.kts @@ -0,0 +1,57 @@ +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.ksp) +} + +// TODO(chris): Set up convention plugin +android { + namespace = "com.example.jetcaster.core" + compileSdk = libs.versions.compileSdk.get().toInt() + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildFeatures { + buildConfig = true + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + isCoreLibraryDesugaringEnabled = true + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } +} + +dependencies { + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.androidx.compose.runtime) + + implementation(libs.coil.kt.compose) + + val composeBom = platform(libs.androidx.compose.bom) + implementation(composeBom) + + implementation(libs.okhttp3) + implementation(libs.okhttp.logging) + + implementation(libs.androidx.room.runtime) + implementation(libs.androidx.room.ktx) + ksp(libs.androidx.room.compiler) + + implementation(libs.rometools.rome) + implementation(libs.rometools.modules) + + coreLibraryDesugaring(libs.core.jdk.desugaring) +} diff --git a/Jetcaster/core/consumer-rules.pro b/Jetcaster/core/consumer-rules.pro new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Jetcaster/core/proguard-rules.pro b/Jetcaster/core/proguard-rules.pro new file mode 100644 index 0000000000..481bb43481 --- /dev/null +++ b/Jetcaster/core/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/Jetcaster/core/src/main/AndroidManifest.xml b/Jetcaster/core/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..8bdb7e14b3 --- /dev/null +++ b/Jetcaster/core/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/DateTimeTypeConverters.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/DateTimeTypeConverters.kt similarity index 97% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/room/DateTimeTypeConverters.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/DateTimeTypeConverters.kt index 4b4fb5d0a9..0199678c4c 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/DateTimeTypeConverters.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/DateTimeTypeConverters.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data.room +package com.example.jetcaster.core.data.database import androidx.room.TypeConverter import java.time.Duration diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/JetcasterDatabase.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/JetcasterDatabase.kt similarity index 63% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/room/JetcasterDatabase.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/JetcasterDatabase.kt index cc4f2a24e7..ced5d408b0 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/JetcasterDatabase.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/JetcasterDatabase.kt @@ -14,16 +14,22 @@ * limitations under the License. */ -package com.example.jetcaster.data.room +package com.example.jetcaster.core.data.database import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters -import com.example.jetcaster.data.Category -import com.example.jetcaster.data.Episode -import com.example.jetcaster.data.Podcast -import com.example.jetcaster.data.PodcastCategoryEntry -import com.example.jetcaster.data.PodcastFollowedEntry +import com.example.jetcaster.core.data.database.dao.CategoriesDao +import com.example.jetcaster.core.data.database.dao.EpisodesDao +import com.example.jetcaster.core.data.database.dao.PodcastCategoryEntryDao +import com.example.jetcaster.core.data.database.dao.PodcastFollowedEntryDao +import com.example.jetcaster.core.data.database.dao.PodcastsDao +import com.example.jetcaster.core.data.database.dao.TransactionRunnerDao +import com.example.jetcaster.core.data.database.model.Category +import com.example.jetcaster.core.data.database.model.Episode +import com.example.jetcaster.core.data.database.model.Podcast +import com.example.jetcaster.core.data.database.model.PodcastCategoryEntry +import com.example.jetcaster.core.data.database.model.PodcastFollowedEntry /** * The [RoomDatabase] we use in this app. diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/BaseDao.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/BaseDao.kt similarity index 95% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/room/BaseDao.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/BaseDao.kt index 4eac0f395b..eca987c370 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/BaseDao.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/BaseDao.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data.room +package com.example.jetcaster.core.data.database.dao import androidx.room.Delete import androidx.room.Insert diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/CategoriesDao.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/CategoriesDao.kt similarity index 92% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/room/CategoriesDao.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/CategoriesDao.kt index 7f851339fa..f9b36601cb 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/CategoriesDao.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/CategoriesDao.kt @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.example.jetcaster.data.room +package com.example.jetcaster.core.data.database.dao import androidx.room.Dao import androidx.room.Query -import com.example.jetcaster.data.Category +import com.example.jetcaster.core.data.database.model.Category import kotlinx.coroutines.flow.Flow /** diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/EpisodesDao.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/EpisodesDao.kt similarity index 90% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/room/EpisodesDao.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/EpisodesDao.kt index 52701d6298..5ba874532c 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/EpisodesDao.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/EpisodesDao.kt @@ -14,13 +14,13 @@ * limitations under the License. */ -package com.example.jetcaster.data.room +package com.example.jetcaster.core.data.database.dao import androidx.room.Dao import androidx.room.Query import androidx.room.Transaction -import com.example.jetcaster.data.Episode -import com.example.jetcaster.data.EpisodeToPodcast +import com.example.jetcaster.core.data.database.model.Episode +import com.example.jetcaster.core.data.database.model.EpisodeToPodcast import kotlinx.coroutines.flow.Flow /** diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/PodcastCategoryEntryDao.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/PodcastCategoryEntryDao.kt similarity index 86% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/room/PodcastCategoryEntryDao.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/PodcastCategoryEntryDao.kt index 681c828125..5291649e34 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/PodcastCategoryEntryDao.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/PodcastCategoryEntryDao.kt @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.example.jetcaster.data.room +package com.example.jetcaster.core.data.database.dao import androidx.room.Dao -import com.example.jetcaster.data.PodcastCategoryEntry +import com.example.jetcaster.core.data.database.model.PodcastCategoryEntry /** * [Room] DAO for [PodcastCategoryEntry] related operations. diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/PodcastFollowedEntryDao.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/PodcastFollowedEntryDao.kt similarity index 90% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/room/PodcastFollowedEntryDao.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/PodcastFollowedEntryDao.kt index 69c8dbf0d9..0816cc05e7 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/PodcastFollowedEntryDao.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/PodcastFollowedEntryDao.kt @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.example.jetcaster.data.room +package com.example.jetcaster.core.data.database.dao import androidx.room.Dao import androidx.room.Query -import com.example.jetcaster.data.PodcastFollowedEntry +import com.example.jetcaster.core.data.database.model.PodcastFollowedEntry @Dao abstract class PodcastFollowedEntryDao : BaseDao { diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/PodcastsDao.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/PodcastsDao.kt similarity index 94% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/room/PodcastsDao.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/PodcastsDao.kt index 7c04dcd005..9a5426e849 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/PodcastsDao.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/PodcastsDao.kt @@ -14,13 +14,13 @@ * limitations under the License. */ -package com.example.jetcaster.data.room +package com.example.jetcaster.core.data.database.dao import androidx.room.Dao import androidx.room.Query import androidx.room.Transaction -import com.example.jetcaster.data.Podcast -import com.example.jetcaster.data.PodcastWithExtraInfo +import com.example.jetcaster.core.data.database.model.Podcast +import com.example.jetcaster.core.data.database.model.PodcastWithExtraInfo import kotlinx.coroutines.flow.Flow /** diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/TransactionRunnerDao.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/TransactionRunnerDao.kt similarity index 95% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/room/TransactionRunnerDao.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/TransactionRunnerDao.kt index e7c51cad4f..6f4b0c49e6 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/room/TransactionRunnerDao.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/dao/TransactionRunnerDao.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data.room +package com.example.jetcaster.core.data.database.dao import androidx.room.Dao import androidx.room.Ignore diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/Category.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/Category.kt similarity index 94% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/Category.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/Category.kt index 3279017b3a..4dff2871ef 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/Category.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/Category.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.database.model import androidx.compose.runtime.Immutable import androidx.room.ColumnInfo diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/Episode.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/Episode.kt similarity index 97% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/Episode.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/Episode.kt index b5dc88b94d..6a035d9646 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/Episode.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/Episode.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.database.model import androidx.compose.runtime.Immutable import androidx.room.ColumnInfo diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/EpisodeToPodcast.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/EpisodeToPodcast.kt similarity index 96% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/EpisodeToPodcast.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/EpisodeToPodcast.kt index 4f87ba9e05..7945f20316 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/EpisodeToPodcast.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/EpisodeToPodcast.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.database.model import androidx.room.Embedded import androidx.room.Ignore diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/Podcast.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/Podcast.kt similarity index 95% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/Podcast.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/Podcast.kt index 969908f14a..1d86f31f91 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/Podcast.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/Podcast.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.database.model import androidx.compose.runtime.Immutable import androidx.room.ColumnInfo diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastCategoryEntry.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/PodcastCategoryEntry.kt similarity index 96% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastCategoryEntry.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/PodcastCategoryEntry.kt index 394af2fca8..3c2c67878d 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastCategoryEntry.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/PodcastCategoryEntry.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.database.model import androidx.compose.runtime.Immutable import androidx.room.ColumnInfo diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastFollowedEntry.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/PodcastFollowedEntry.kt similarity index 96% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastFollowedEntry.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/PodcastFollowedEntry.kt index 0be51c77bc..420e68f38f 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastFollowedEntry.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/PodcastFollowedEntry.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.database.model import androidx.compose.runtime.Immutable import androidx.room.ColumnInfo diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastWithExtraInfo.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/PodcastWithExtraInfo.kt similarity index 96% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastWithExtraInfo.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/PodcastWithExtraInfo.kt index 200e6248c2..8794a46e47 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastWithExtraInfo.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/database/model/PodcastWithExtraInfo.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.database.model import androidx.room.ColumnInfo import androidx.room.Embedded diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/Graph.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/di/Graph.kt similarity index 85% rename from Jetcaster/app/src/main/java/com/example/jetcaster/Graph.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/di/Graph.kt index 3d831558a7..30b6069fd6 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/Graph.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/di/Graph.kt @@ -14,17 +14,18 @@ * limitations under the License. */ -package com.example.jetcaster +package com.example.jetcaster.core.data.di import android.content.Context import androidx.room.Room -import com.example.jetcaster.data.CategoryStore -import com.example.jetcaster.data.EpisodeStore -import com.example.jetcaster.data.PodcastStore -import com.example.jetcaster.data.PodcastsFetcher -import com.example.jetcaster.data.PodcastsRepository -import com.example.jetcaster.data.room.JetcasterDatabase -import com.example.jetcaster.data.room.TransactionRunner +import com.example.jetcaster.core.BuildConfig +import com.example.jetcaster.core.data.database.JetcasterDatabase +import com.example.jetcaster.core.data.database.dao.TransactionRunner +import com.example.jetcaster.core.data.network.PodcastsFetcher +import com.example.jetcaster.core.data.repository.CategoryStore +import com.example.jetcaster.core.data.repository.EpisodeStore +import com.example.jetcaster.core.data.repository.PodcastStore +import com.example.jetcaster.core.data.repository.PodcastsRepository import com.rometools.rome.io.SyndFeedInput import java.io.File import kotlinx.coroutines.CoroutineDispatcher diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/Feeds.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/network/Feeds.kt similarity index 97% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/Feeds.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/network/Feeds.kt index 651ebf423f..ead4bbb3e4 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/Feeds.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/network/Feeds.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.network /** * A hand selected list of feeds URLs used for the purposes of displaying real information diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/OkHttpExtensions.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/network/OkHttpExtensions.kt similarity index 97% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/OkHttpExtensions.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/network/OkHttpExtensions.kt index e9a516f0ed..147fed436e 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/OkHttpExtensions.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/network/OkHttpExtensions.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.network import java.io.IOException import kotlin.coroutines.resumeWithException diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastFetcher.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/network/PodcastFetcher.kt similarity index 96% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastFetcher.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/network/PodcastFetcher.kt index a13cdca901..eaf619487d 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastFetcher.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/network/PodcastFetcher.kt @@ -14,9 +14,12 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.network import coil.network.HttpException +import com.example.jetcaster.core.data.database.model.Category +import com.example.jetcaster.core.data.database.model.Episode +import com.example.jetcaster.core.data.database.model.Podcast import com.rometools.modules.itunes.EntryInformation import com.rometools.modules.itunes.FeedInformation import com.rometools.rome.feed.synd.SyndEntry diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/CategoryStore.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/CategoryStore.kt similarity index 81% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/CategoryStore.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/CategoryStore.kt index cabf7e9e29..20af8ee599 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/CategoryStore.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/CategoryStore.kt @@ -14,12 +14,16 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.repository -import com.example.jetcaster.data.room.CategoriesDao -import com.example.jetcaster.data.room.EpisodesDao -import com.example.jetcaster.data.room.PodcastCategoryEntryDao -import com.example.jetcaster.data.room.PodcastsDao +import com.example.jetcaster.core.data.database.dao.CategoriesDao +import com.example.jetcaster.core.data.database.dao.EpisodesDao +import com.example.jetcaster.core.data.database.dao.PodcastCategoryEntryDao +import com.example.jetcaster.core.data.database.dao.PodcastsDao +import com.example.jetcaster.core.data.database.model.Category +import com.example.jetcaster.core.data.database.model.EpisodeToPodcast +import com.example.jetcaster.core.data.database.model.PodcastCategoryEntry +import com.example.jetcaster.core.data.database.model.PodcastWithExtraInfo import kotlinx.coroutines.flow.Flow /** diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/EpisodeStore.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/EpisodeStore.kt similarity index 86% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/EpisodeStore.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/EpisodeStore.kt index d60fa6e7c4..bc21bac561 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/EpisodeStore.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/EpisodeStore.kt @@ -14,9 +14,11 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.repository -import com.example.jetcaster.data.room.EpisodesDao +import com.example.jetcaster.core.data.database.dao.EpisodesDao +import com.example.jetcaster.core.data.database.model.Episode +import com.example.jetcaster.core.data.database.model.EpisodeToPodcast import kotlinx.coroutines.flow.Flow /** diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastStore.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/PodcastStore.kt similarity index 84% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastStore.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/PodcastStore.kt index b9ace6b52e..5d47decb4f 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastStore.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/PodcastStore.kt @@ -14,11 +14,14 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.repository -import com.example.jetcaster.data.room.PodcastFollowedEntryDao -import com.example.jetcaster.data.room.PodcastsDao -import com.example.jetcaster.data.room.TransactionRunner +import com.example.jetcaster.core.data.database.dao.PodcastFollowedEntryDao +import com.example.jetcaster.core.data.database.dao.PodcastsDao +import com.example.jetcaster.core.data.database.dao.TransactionRunner +import com.example.jetcaster.core.data.database.model.Podcast +import com.example.jetcaster.core.data.database.model.PodcastFollowedEntry +import com.example.jetcaster.core.data.database.model.PodcastWithExtraInfo import kotlinx.coroutines.flow.Flow /** diff --git a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastsRepository.kt b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/PodcastsRepository.kt similarity index 89% rename from Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastsRepository.kt rename to Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/PodcastsRepository.kt index f078b12f85..2458eb5a22 100644 --- a/Jetcaster/app/src/main/java/com/example/jetcaster/data/PodcastsRepository.kt +++ b/Jetcaster/core/src/main/java/com/example/jetcaster/core/data/repository/PodcastsRepository.kt @@ -14,13 +14,15 @@ * limitations under the License. */ -package com.example.jetcaster.data +package com.example.jetcaster.core.data.repository -import com.example.jetcaster.data.room.TransactionRunner +import com.example.jetcaster.core.data.database.dao.TransactionRunner +import com.example.jetcaster.core.data.network.PodcastRssResponse +import com.example.jetcaster.core.data.network.PodcastsFetcher +import com.example.jetcaster.core.data.network.SampleFeeds import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch diff --git a/Jetcaster/designsystem/.gitignore b/Jetcaster/designsystem/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/Jetcaster/designsystem/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/Jetcaster/designsystem/build.gradle.kts b/Jetcaster/designsystem/build.gradle.kts new file mode 100644 index 0000000000..566a565b39 --- /dev/null +++ b/Jetcaster/designsystem/build.gradle.kts @@ -0,0 +1,38 @@ +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) +} + +// TODO(chris): Set up convention plugin +android { + namespace = "com.example.jetcaster.designsystem" + compileSdk = libs.versions.compileSdk.get().toInt() + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } +} + +dependencies { + val composeBom = platform(libs.androidx.compose.bom) + implementation(composeBom) + implementation(libs.androidx.compose.ui.graphics) + implementation(libs.androidx.compose.ui.text) + + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) +} diff --git a/Jetcaster/designsystem/consumer-rules.pro b/Jetcaster/designsystem/consumer-rules.pro new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Jetcaster/designsystem/proguard-rules.pro b/Jetcaster/designsystem/proguard-rules.pro new file mode 100644 index 0000000000..481bb43481 --- /dev/null +++ b/Jetcaster/designsystem/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/Jetcaster/designsystem/src/main/AndroidManifest.xml b/Jetcaster/designsystem/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..8bdb7e14b3 --- /dev/null +++ b/Jetcaster/designsystem/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Jetcaster/designsystem/src/main/java/com/example/jetcaster/designsystem/theme/Color.kt b/Jetcaster/designsystem/src/main/java/com/example/jetcaster/designsystem/theme/Color.kt new file mode 100644 index 0000000000..51ab6000bc --- /dev/null +++ b/Jetcaster/designsystem/src/main/java/com/example/jetcaster/designsystem/theme/Color.kt @@ -0,0 +1,234 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.jetcaster.designsystem.theme +import androidx.compose.ui.graphics.Color + +val primaryLight = Color(0xFF885200) +val onPrimaryLight = Color(0xFFFFFFFF) +val primaryContainerLight = Color(0xFFFFAC46) +val onPrimaryContainerLight = Color(0xFF482900) +val secondaryLight = Color(0xFF7A5817) +val onSecondaryLight = Color(0xFFFFFFFF) +val secondaryContainerLight = Color(0xFFFFD798) +val onSecondaryContainerLight = Color(0xFF5C3F00) +val tertiaryLight = Color(0xFF994700) +val onTertiaryLight = Color(0xFFFFFFFF) +val tertiaryContainerLight = Color(0xFFFF801F) +val onTertiaryContainerLight = Color(0xFF2D1000) +val errorLight = Color(0xFFA4384A) +val onErrorLight = Color(0xFFFFFFFF) +val errorContainerLight = Color(0xFFF87889) +val onErrorContainerLight = Color(0xFF32000A) +val backgroundLight = Color(0xFFFFF8F4) +val onBackgroundLight = Color(0xFF221A11) +val surfaceLight = Color(0xFFFFF8F4) +val onSurfaceLight = Color(0xFF221A11) +val surfaceVariantLight = Color(0xFFF7DEC8) +val onSurfaceVariantLight = Color(0xFF544434) +val outlineLight = Color(0xFF877461) +val outlineVariantLight = Color(0xFFDAC3AD) +val scrimLight = Color(0xFF000000) +val inverseSurfaceLight = Color(0xFF382F25) +val inverseOnSurfaceLight = Color(0xFFFFEEDF) +val inversePrimaryLight = Color(0xFFFFB868) +val surfaceDimLight = Color(0xFFE8D7C9) +val surfaceBrightLight = Color(0xFFFFF8F4) +val surfaceContainerLowestLight = Color(0xFFFFFFFF) +val surfaceContainerLowLight = Color(0xFFFFF1E6) +val surfaceContainerLight = Color(0xFFFCEBDC) +val surfaceContainerHighLight = Color(0xFFF6E5D7) +val surfaceContainerHighestLight = Color(0xFFF1E0D1) + +val primaryLightMediumContrast = Color(0xFF623A00) +val onPrimaryLightMediumContrast = Color(0xFFFFFFFF) +val primaryContainerLightMediumContrast = Color(0xFFA76600) +val onPrimaryContainerLightMediumContrast = Color(0xFFFFFFFF) +val secondaryLightMediumContrast = Color(0xFF5A3D00) +val onSecondaryLightMediumContrast = Color(0xFFFFFFFF) +val secondaryContainerLightMediumContrast = Color(0xFF936E2B) +val onSecondaryContainerLightMediumContrast = Color(0xFFFFFFFF) +val tertiaryLightMediumContrast = Color(0xFF6F3100) +val onTertiaryLightMediumContrast = Color(0xFFFFFFFF) +val tertiaryContainerLightMediumContrast = Color(0xFFBC5800) +val onTertiaryContainerLightMediumContrast = Color(0xFFFFFFFF) +val errorLightMediumContrast = Color(0xFF7F1B30) +val onErrorLightMediumContrast = Color(0xFFFFFFFF) +val errorContainerLightMediumContrast = Color(0xFFC14E5F) +val onErrorContainerLightMediumContrast = Color(0xFFFFFFFF) +val backgroundLightMediumContrast = Color(0xFFFFF8F4) +val onBackgroundLightMediumContrast = Color(0xFF221A11) +val surfaceLightMediumContrast = Color(0xFFFFF8F4) +val onSurfaceLightMediumContrast = Color(0xFF221A11) +val surfaceVariantLightMediumContrast = Color(0xFFF7DEC8) +val onSurfaceVariantLightMediumContrast = Color(0xFF504030) +val outlineLightMediumContrast = Color(0xFF6E5C4A) +val outlineVariantLightMediumContrast = Color(0xFF8B7765) +val scrimLightMediumContrast = Color(0xFF000000) +val inverseSurfaceLightMediumContrast = Color(0xFF382F25) +val inverseOnSurfaceLightMediumContrast = Color(0xFFFFEEDF) +val inversePrimaryLightMediumContrast = Color(0xFFFFB868) +val surfaceDimLightMediumContrast = Color(0xFFE8D7C9) +val surfaceBrightLightMediumContrast = Color(0xFFFFF8F4) +val surfaceContainerLowestLightMediumContrast = Color(0xFFFFFFFF) +val surfaceContainerLowLightMediumContrast = Color(0xFFFFF1E6) +val surfaceContainerLightMediumContrast = Color(0xFFFCEBDC) +val surfaceContainerHighLightMediumContrast = Color(0xFFF6E5D7) +val surfaceContainerHighestLightMediumContrast = Color(0xFFF1E0D1) + +val primaryLightHighContrast = Color(0xFF351D00) +val onPrimaryLightHighContrast = Color(0xFFFFFFFF) +val primaryContainerLightHighContrast = Color(0xFF623A00) +val onPrimaryContainerLightHighContrast = Color(0xFFFFFFFF) +val secondaryLightHighContrast = Color(0xFF301F00) +val onSecondaryLightHighContrast = Color(0xFFFFFFFF) +val secondaryContainerLightHighContrast = Color(0xFF5A3D00) +val onSecondaryContainerLightHighContrast = Color(0xFFFFFFFF) +val tertiaryLightHighContrast = Color(0xFF3C1800) +val onTertiaryLightHighContrast = Color(0xFFFFFFFF) +val tertiaryContainerLightHighContrast = Color(0xFF6F3100) +val onTertiaryContainerLightHighContrast = Color(0xFFFFFFFF) +val errorLightHighContrast = Color(0xFF4C0014) +val onErrorLightHighContrast = Color(0xFFFFFFFF) +val errorContainerLightHighContrast = Color(0xFF7F1B30) +val onErrorContainerLightHighContrast = Color(0xFFFFFFFF) +val backgroundLightHighContrast = Color(0xFFFFF8F4) +val onBackgroundLightHighContrast = Color(0xFF221A11) +val surfaceLightHighContrast = Color(0xFFFFF8F4) +val onSurfaceLightHighContrast = Color(0xFF000000) +val surfaceVariantLightHighContrast = Color(0xFFF7DEC8) +val onSurfaceVariantLightHighContrast = Color(0xFF2E2113) +val outlineLightHighContrast = Color(0xFF504030) +val outlineVariantLightHighContrast = Color(0xFF504030) +val scrimLightHighContrast = Color(0xFF000000) +val inverseSurfaceLightHighContrast = Color(0xFF382F25) +val inverseOnSurfaceLightHighContrast = Color(0xFFFFFFFF) +val inversePrimaryLightHighContrast = Color(0xFFFFE8D4) +val surfaceDimLightHighContrast = Color(0xFFE8D7C9) +val surfaceBrightLightHighContrast = Color(0xFFFFF8F4) +val surfaceContainerLowestLightHighContrast = Color(0xFFFFFFFF) +val surfaceContainerLowLightHighContrast = Color(0xFFFFF1E6) +val surfaceContainerLightHighContrast = Color(0xFFFCEBDC) +val surfaceContainerHighLightHighContrast = Color(0xFFF6E5D7) +val surfaceContainerHighestLightHighContrast = Color(0xFFF1E0D1) + +val primaryDark = Color(0xFFFFCF9E) +val onPrimaryDark = Color(0xFF482900) +val primaryContainerDark = Color(0xFFF79900) +val onPrimaryContainerDark = Color(0xFF371E00) +val secondaryDark = Color(0xFFFFFEFF) +val onSecondaryDark = Color(0xFF422C00) +val secondaryContainerDark = Color(0xFFFBCC80) +val onSecondaryContainerDark = Color(0xFF553A00) +val tertiaryDark = Color(0xFFFFB68B) +val onTertiaryDark = Color(0xFF522300) +val tertiaryContainerDark = Color(0xFFE76E00) +val onTertiaryContainerDark = Color(0xFF000000) +val errorDark = Color(0xFFFFB2B9) +val onErrorDark = Color(0xFF65041F) +val errorContainerDark = Color(0xFFC14E5F) +val onErrorContainerDark = Color(0xFFFFFFFF) +val backgroundDark = Color(0xFF1A120A) +val onBackgroundDark = Color(0xFFF1E0D1) +val surfaceDark = Color(0xFF1A120A) +val onSurfaceDark = Color(0xFFF1E0D1) +val surfaceVariantDark = Color(0xFF544434) +val onSurfaceVariantDark = Color(0xFFDAC3AD) +val outlineDark = Color(0xFFA28D7A) +val outlineVariantDark = Color(0xFF544434) +val scrimDark = Color(0xFF000000) +val inverseSurfaceDark = Color(0xFFF1E0D1) +val inverseOnSurfaceDark = Color(0xFF382F25) +val inversePrimaryDark = Color(0xFF885200) +val surfaceDimDark = Color(0xFF1A120A) +val surfaceBrightDark = Color(0xFF42372D) +val surfaceContainerLowestDark = Color(0xFF140D06) +val surfaceContainerLowDark = Color(0xFF221A11) +val surfaceContainerDark = Color(0xFF271E15) +val surfaceContainerHighDark = Color(0xFF32281F) +val surfaceContainerHighestDark = Color(0xFF3D3329) + +val primaryDarkMediumContrast = Color(0xFFFFCF9E) +val onPrimaryDarkMediumContrast = Color(0xFF351D00) +val primaryContainerDarkMediumContrast = Color(0xFFF79900) +val onPrimaryContainerDarkMediumContrast = Color(0xFF000000) +val secondaryDarkMediumContrast = Color(0xFFFFFEFF) +val onSecondaryDarkMediumContrast = Color(0xFF422C00) +val secondaryContainerDarkMediumContrast = Color(0xFFFBCC80) +val onSecondaryContainerDarkMediumContrast = Color(0xFF2C1C00) +val tertiaryDarkMediumContrast = Color(0xFFFFBC95) +val onTertiaryDarkMediumContrast = Color(0xFF2A0E00) +val tertiaryContainerDarkMediumContrast = Color(0xFFE76E00) +val onTertiaryContainerDarkMediumContrast = Color(0xFF000000) +val errorDarkMediumContrast = Color(0xFFFFB8BE) +val onErrorDarkMediumContrast = Color(0xFF36000C) +val errorContainerDarkMediumContrast = Color(0xFFE5697A) +val onErrorContainerDarkMediumContrast = Color(0xFF000000) +val backgroundDarkMediumContrast = Color(0xFF1A120A) +val onBackgroundDarkMediumContrast = Color(0xFFF1E0D1) +val surfaceDarkMediumContrast = Color(0xFF1A120A) +val onSurfaceDarkMediumContrast = Color(0xFFFFFAF8) +val surfaceVariantDarkMediumContrast = Color(0xFF544434) +val onSurfaceVariantDarkMediumContrast = Color(0xFFDEC7B1) +val outlineDarkMediumContrast = Color(0xFFB59F8B) +val outlineVariantDarkMediumContrast = Color(0xFF93806D) +val scrimDarkMediumContrast = Color(0xFF000000) +val inverseSurfaceDarkMediumContrast = Color(0xFFF1E0D1) +val inverseOnSurfaceDarkMediumContrast = Color(0xFF32281F) +val inversePrimaryDarkMediumContrast = Color(0xFF693E00) +val surfaceDimDarkMediumContrast = Color(0xFF1A120A) +val surfaceBrightDarkMediumContrast = Color(0xFF42372D) +val surfaceContainerLowestDarkMediumContrast = Color(0xFF140D06) +val surfaceContainerLowDarkMediumContrast = Color(0xFF221A11) +val surfaceContainerDarkMediumContrast = Color(0xFF271E15) +val surfaceContainerHighDarkMediumContrast = Color(0xFF32281F) +val surfaceContainerHighestDarkMediumContrast = Color(0xFF3D3329) + +val primaryDarkHighContrast = Color(0xFFFFFAF8) +val onPrimaryDarkHighContrast = Color(0xFF000000) +val primaryContainerDarkHighContrast = Color(0xFFFFBE76) +val onPrimaryContainerDarkHighContrast = Color(0xFF000000) +val secondaryDarkHighContrast = Color(0xFFFFFEFF) +val onSecondaryDarkHighContrast = Color(0xFF000000) +val secondaryContainerDarkHighContrast = Color(0xFFFBCC80) +val onSecondaryContainerDarkHighContrast = Color(0xFF000000) +val tertiaryDarkHighContrast = Color(0xFFFFFAF8) +val onTertiaryDarkHighContrast = Color(0xFF000000) +val tertiaryContainerDarkHighContrast = Color(0xFFFFBC95) +val onTertiaryContainerDarkHighContrast = Color(0xFF000000) +val errorDarkHighContrast = Color(0xFFFFF9F9) +val onErrorDarkHighContrast = Color(0xFF000000) +val errorContainerDarkHighContrast = Color(0xFFFFB8BE) +val onErrorContainerDarkHighContrast = Color(0xFF000000) +val backgroundDarkHighContrast = Color(0xFF1A120A) +val onBackgroundDarkHighContrast = Color(0xFFF1E0D1) +val surfaceDarkHighContrast = Color(0xFF1A120A) +val onSurfaceDarkHighContrast = Color(0xFFFFFFFF) +val surfaceVariantDarkHighContrast = Color(0xFF544434) +val onSurfaceVariantDarkHighContrast = Color(0xFFFFFAF8) +val outlineDarkHighContrast = Color(0xFFDEC7B1) +val outlineVariantDarkHighContrast = Color(0xFFDEC7B1) +val scrimDarkHighContrast = Color(0xFF000000) +val inverseSurfaceDarkHighContrast = Color(0xFFF1E0D1) +val inverseOnSurfaceDarkHighContrast = Color(0xFF000000) +val inversePrimaryDarkHighContrast = Color(0xFF3F2400) +val surfaceDimDarkHighContrast = Color(0xFF1A120A) +val surfaceBrightDarkHighContrast = Color(0xFF42372D) +val surfaceContainerLowestDarkHighContrast = Color(0xFF140D06) +val surfaceContainerLowDarkHighContrast = Color(0xFF221A11) +val surfaceContainerDarkHighContrast = Color(0xFF271E15) +val surfaceContainerHighDarkHighContrast = Color(0xFF32281F) +val surfaceContainerHighestDarkHighContrast = Color(0xFF3D3329) diff --git a/Jetcaster/designsystem/src/main/java/com/example/jetcaster/designsystem/theme/Typography.kt b/Jetcaster/designsystem/src/main/java/com/example/jetcaster/designsystem/theme/Typography.kt new file mode 100644 index 0000000000..bd9320cd6d --- /dev/null +++ b/Jetcaster/designsystem/src/main/java/com/example/jetcaster/designsystem/theme/Typography.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.jetcaster.designsystem.theme + +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import com.example.jetcaster.designsystem.R + +val Montserrat = FontFamily( + Font(R.font.montserrat_light, FontWeight.Light), + Font(R.font.montserrat_regular, FontWeight.Normal), + Font(R.font.montserrat_medium, FontWeight.Medium), + Font(R.font.montserrat_semibold, FontWeight.SemiBold) +) diff --git a/Jetcaster/app/src/main/res/font/montserrat_light.ttf b/Jetcaster/designsystem/src/main/res/font/montserrat_light.ttf similarity index 100% rename from Jetcaster/app/src/main/res/font/montserrat_light.ttf rename to Jetcaster/designsystem/src/main/res/font/montserrat_light.ttf diff --git a/Jetcaster/app/src/main/res/font/montserrat_medium.ttf b/Jetcaster/designsystem/src/main/res/font/montserrat_medium.ttf similarity index 100% rename from Jetcaster/app/src/main/res/font/montserrat_medium.ttf rename to Jetcaster/designsystem/src/main/res/font/montserrat_medium.ttf diff --git a/Jetcaster/app/src/main/res/font/montserrat_regular.ttf b/Jetcaster/designsystem/src/main/res/font/montserrat_regular.ttf similarity index 100% rename from Jetcaster/app/src/main/res/font/montserrat_regular.ttf rename to Jetcaster/designsystem/src/main/res/font/montserrat_regular.ttf diff --git a/Jetcaster/app/src/main/res/font/montserrat_semibold.ttf b/Jetcaster/designsystem/src/main/res/font/montserrat_semibold.ttf similarity index 100% rename from Jetcaster/app/src/main/res/font/montserrat_semibold.ttf rename to Jetcaster/designsystem/src/main/res/font/montserrat_semibold.ttf diff --git a/Jetcaster/gradle/libs.versions.toml b/Jetcaster/gradle/libs.versions.toml index 502cf6f9aa..402d8fdfb2 100644 --- a/Jetcaster/gradle/libs.versions.toml +++ b/Jetcaster/gradle/libs.versions.toml @@ -77,9 +77,11 @@ androidx-compose-runtime = { module = "androidx.compose.runtime:runtime" } androidx-compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata" } androidx-compose-ui = { module = "androidx.compose.ui:ui" } androidx-compose-ui-googlefonts = { module = "androidx.compose.ui:ui-text-google-fonts" } +androidx-compose-ui-graphics = { module = "androidx.compose.ui:ui-graphics" } androidx-compose-ui-test = { module = "androidx.compose.ui:ui-test" } androidx-compose-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4" } androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" } +androidx-compose-ui-text = { module = "androidx.compose.ui:ui-text" } androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" } androidx-compose-ui-util = { module = "androidx.compose.ui:ui-util" } @@ -134,6 +136,7 @@ rometools-rome = { module = "com.rometools:rome", version.ref = "rome" } [plugins] android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" } android-test = { id = "com.android.test", version.ref = "androidGradlePlugin" } +android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" } gradle-versions = { id = "com.github.ben-manes.versions", version.ref = "gradle-versions" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } diff --git a/Jetcaster/settings.gradle.kts b/Jetcaster/settings.gradle.kts index a7c272a185..966fed261f 100644 --- a/Jetcaster/settings.gradle.kts +++ b/Jetcaster/settings.gradle.kts @@ -35,5 +35,4 @@ dependencyResolutionManagement { } } rootProject.name = "Jetcaster" -include(":app") - +include(":app", ":core", ":designsystem")