Skip to content

Commit

Permalink
restructure project
Browse files Browse the repository at this point in the history
  • Loading branch information
jan-tennert committed Mar 29, 2024
1 parent de3ab9d commit 829ff82
Show file tree
Hide file tree
Showing 135 changed files with 856 additions and 1,505 deletions.
6 changes: 4 additions & 2 deletions composeApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ kotlin {
implementation(compose.materialIconsExtended)
implementation(libs.libres)
implementation(libs.voyager.navigator)
implementation(libs.composeImageLoader)
// implementation(libs.composeImageLoader)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.datetime)
Expand All @@ -58,6 +58,7 @@ kotlin {
implementation(libs.okio)
implementation(libs.richeditor)
implementation(libs.filepicker)
implementation(libs.bundles.coil)
}

commonTest.dependencies {
Expand Down Expand Up @@ -116,7 +117,8 @@ android {
}
buildTypes {
release {
isMinifyEnabled = true
isMinifyEnabled = false
isDebuggable = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import android.app.Application
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import io.github.jan.einkaufszettel.di.installModules
import io.github.jan.einkaufszettel.root.di.installModules
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.jan.einkaufszettel.ui.screen.app.tabs.components
package io.github.jan.einkaufszettel.app.ui.components

import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.ui.input.pointer.PointerInputScope
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package io.github.jan.einkaufszettel.app.ui.components

actual suspend fun readClipboard(): String = ""
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.jan.einkaufszettel.ui.screen.login
package io.github.jan.einkaufszettel.auth.ui

import androidx.compose.runtime.Composable
import io.github.jan.supabase.compose.auth.ComposeAuth
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.jan.einkaufszettel.ui.screen.app.tabs.recipes.components
package io.github.jan.einkaufszettel.recipes.ui.components

import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.jan.einkaufszettel.data.local
package io.github.jan.einkaufszettel.root.data.local

import kotlinx.datetime.Instant
import kotlinx.datetime.TimeZone
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.jan.einkaufszettel.data.local.db
package io.github.jan.einkaufszettel.root.data.local.db

import android.content.Context
import app.cash.sqldelight.async.coroutines.synchronous
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.github.jan.einkaufszettel.root.data.local.image

import android.graphics.BitmapFactory
import coil3.Image
import coil3.annotation.ExperimentalCoilApi
import coil3.asCoilImage

@OptIn(ExperimentalCoilApi::class)
actual fun createImage(localImageData: LocalImageData): Image {
val bitmap = BitmapFactory.decodeByteArray(localImageData.data, 0, localImageData.data.size)
return bitmap.asCoilImage()
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.jan.einkaufszettel.data.local.image
package io.github.jan.einkaufszettel.root.data.local.image

import android.content.Context
import android.net.Uri
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.jan.einkaufszettel.di
package io.github.jan.einkaufszettel.root.di

import io.github.jan.einkaufszettel.data.local.db.DatabaseDriverFactory
import io.github.jan.einkaufszettel.root.data.local.db.DatabaseDriverFactory
import org.koin.android.ext.koin.androidContext
import org.koin.core.scope.Scope

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.jan.einkaufszettel.di
package io.github.jan.einkaufszettel.root.di

import io.github.jan.einkaufszettel.data.local.image.LocalImageReader
import io.github.jan.einkaufszettel.root.data.local.image.LocalImageReader
import org.koin.android.ext.koin.androidContext
import org.koin.core.scope.Scope

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.jan.einkaufszettel.theme
package io.github.jan.einkaufszettel.root.ui.theme

import android.app.Activity
import android.os.Build
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,33 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import cafe.adriel.voyager.navigator.Navigator
import io.github.jan.einkaufszettel.data.local.db.DatabaseProvider
import io.github.jan.einkaufszettel.theme.AppTheme
import io.github.jan.einkaufszettel.ui.component.LoadingCircle
import io.github.jan.einkaufszettel.ui.screen.RootScreen
import coil3.ImageLoader
import coil3.PlatformContext
import coil3.annotation.ExperimentalCoilApi
import coil3.compose.setSingletonImageLoaderFactory
import coil3.fetch.Fetcher
import coil3.network.ktor.KtorNetworkFetcherFactory
import coil3.util.DebugLogger
import io.github.jan.einkaufszettel.root.data.local.db.DatabaseProvider
import io.github.jan.einkaufszettel.root.data.local.image.LocalImageFetcher
import io.github.jan.einkaufszettel.root.ui.component.LoadingCircle
import io.github.jan.einkaufszettel.root.ui.screen.RootScreen
import io.github.jan.einkaufszettel.root.ui.theme.AppTheme
import io.github.jan.supabase.annotations.SupabaseExperimental
import io.github.jan.supabase.coil.CoilIntegration
import io.github.jan.supabase.gotrue.Auth
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.koin.compose.koinInject

@OptIn(ExperimentalCoilApi::class)
@Composable
internal fun App() = AppTheme {
LocalImageFetcher.Factory() as Fetcher.Factory<*>
val coil = koinInject<CoilIntegration>()
setSingletonImageLoaderFactory {
createImageLoader(it, coil)
}
Surface(
modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.safeDrawing),
color = MaterialTheme.colorScheme.background
Expand All @@ -49,4 +65,14 @@ internal fun App() = AppTheme {
LoadingCircle()
}
}
}
}

@OptIn(SupabaseExperimental::class)
fun createImageLoader(context: PlatformContext, coilIntegration: CoilIntegration) = ImageLoader.Builder(context).apply {
components {
add(KtorNetworkFetcherFactory())
add(coilIntegration)
add(LocalImageFetcher.Factory())
}
logger(DebugLogger())
}.build()
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.jan.einkaufszettel.ui.screen.app
package io.github.jan.einkaufszettel.app.ui

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
Expand All @@ -9,22 +9,18 @@ import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSiz
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
import cafe.adriel.voyager.core.lifecycle.LifecycleEffect
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.koin.getScreenModel
import cafe.adriel.voyager.navigator.tab.CurrentTab
import cafe.adriel.voyager.navigator.tab.TabNavigator
import com.seiko.imageloader.ImageLoader
import com.seiko.imageloader.LocalImageLoader
import io.github.jan.einkaufszettel.ui.screen.app.navigation.AppNavigationBar
import io.github.jan.einkaufszettel.ui.screen.app.navigation.AppNavigationRail
import io.github.jan.einkaufszettel.ui.screen.app.navigation.AppNavigationTopBar
import io.github.jan.einkaufszettel.ui.screen.app.tabs.home.HomeTab
import io.github.jan.einkaufszettel.app.ui.navigation.AppNavigationBar
import io.github.jan.einkaufszettel.app.ui.navigation.AppNavigationRail
import io.github.jan.einkaufszettel.app.ui.navigation.AppNavigationTopBar
import io.github.jan.einkaufszettel.home.ui.HomeTab
import io.github.jan.supabase.CurrentPlatformTarget
import io.github.jan.supabase.PlatformTarget
import org.koin.compose.koinInject

object AppScreen: Screen {

Expand All @@ -33,7 +29,6 @@ object AppScreen: Screen {
override fun Content() {
val screenModel = getScreenModel<AppScreenModel>()
val windowSizeClass = calculateWindowSizeClass()
val imageLoader = koinInject<ImageLoader>()
// val screenState by screenModel.state.collectAsStateWithLifecycle()

LifecycleEffect(
Expand All @@ -58,9 +53,7 @@ object AppScreen: Screen {
AppNavigationRail()
}
Box {
CompositionLocalProvider(LocalImageLoader provides imageLoader) {
CurrentTab()
}
CurrentTab()
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package io.github.jan.einkaufszettel.ui.screen.app
package io.github.jan.einkaufszettel.app.ui

import cafe.adriel.voyager.core.model.StateScreenModel
import cafe.adriel.voyager.core.model.screenModelScope
import io.github.jan.einkaufszettel.PlatformNetworkContext
import io.github.jan.einkaufszettel.data.local.ProductDataSource
import io.github.jan.einkaufszettel.data.local.ProfileDataSource
import io.github.jan.einkaufszettel.data.local.RecipeDataSource
import io.github.jan.einkaufszettel.data.local.ShopDataSource
import io.github.jan.einkaufszettel.data.remote.ProductApi
import io.github.jan.einkaufszettel.data.remote.ProfileApi
import io.github.jan.einkaufszettel.data.remote.ProfileDto
import io.github.jan.einkaufszettel.data.remote.RecipeApi
import io.github.jan.einkaufszettel.data.remote.ShopApi
import io.github.jan.einkaufszettel.profile.data.local.ProfileDataSource
import io.github.jan.einkaufszettel.profile.data.remote.ProfileApi
import io.github.jan.einkaufszettel.profile.data.remote.ProfileDto
import io.github.jan.einkaufszettel.recipes.data.local.RecipeDataSource
import io.github.jan.einkaufszettel.recipes.data.remote.RecipeApi
import io.github.jan.einkaufszettel.shops.data.local.ProductDataSource
import io.github.jan.einkaufszettel.shops.data.local.ShopDataSource
import io.github.jan.einkaufszettel.shops.data.remote.ProductApi
import io.github.jan.einkaufszettel.shops.data.remote.ShopApi
import io.github.jan.supabase.exceptions.RestException
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
Expand Down Expand Up @@ -43,7 +43,7 @@ class AppScreenModel(
ALL
}

fun refresh(silent: Boolean, type: RefreshType = RefreshType.ALL) {
fun refresh(silent: Boolean, type: RefreshType = RefreshType.ALL, endRefresh: () -> Unit = {}) {
screenModelScope.launch {
mutableState.value = State.Loading
withContext(PlatformNetworkContext) {
Expand Down Expand Up @@ -72,6 +72,7 @@ class AppScreenModel(
}.onSuccess {
mutableState.value = State.Idle
}
endRefresh()
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.github.jan.einkaufszettel.ui.screen.app
package io.github.jan.einkaufszettel.app.ui

import androidx.compose.runtime.Composable
import cafe.adriel.voyager.core.model.StateScreenModel
import io.github.jan.einkaufszettel.Res
import io.github.jan.einkaufszettel.ui.dialog.ErrorDialog
import io.github.jan.einkaufszettel.root.ui.dialog.ErrorDialog

interface AppState {
data object Idle : AppState
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package io.github.jan.einkaufszettel.ui.screen.app.tabs
package io.github.jan.einkaufszettel.app.ui

import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import cafe.adriel.voyager.core.screen.Screen
import io.github.jan.einkaufszettel.collectAsStateWithLifecycle
import io.github.jan.einkaufszettel.ui.screen.app.AppState
import io.github.jan.einkaufszettel.ui.screen.app.AppStateErrorHandler
import io.github.jan.einkaufszettel.ui.screen.app.AppStateModel

interface AppStateScreen<ScreenModel : AppStateModel>: Screen {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.github.jan.einkaufszettel.app.ui

import io.github.jan.einkaufszettel.home.ui.HomeTab
import io.github.jan.einkaufszettel.recipes.ui.RecipesTab
import io.github.jan.einkaufszettel.settings.ui.SettingsTab
import io.github.jan.einkaufszettel.shops.ui.ShopsTab

object Tabs {

val ALL = listOf(
HomeTab,
ShopsTab,
RecipesTab,
SettingsTab
)

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package io.github.jan.einkaufszettel.ui.screen.app.tabs.components
package io.github.jan.einkaufszettel.app.ui.components

import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.interaction.InteractionSource
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.PressInteraction
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.material3.DropdownMenu
Expand All @@ -26,6 +25,7 @@ import io.github.jan.supabase.PlatformTarget
@Composable
fun ContextMenuScope(
modifier: Modifier = Modifier,
isScrolling: () -> Boolean = { false },
onItemClicked: () -> Unit = {},
items: @Composable ColumnScope.(contextMenuVisible: MutableState<Boolean>) -> Unit,
content: @Composable (indication: InteractionSource) -> Unit
Expand All @@ -51,10 +51,12 @@ fun ContextMenuScope(
pressOffset = DpOffset(offset.x.toDp(), offset.y.toDp())
},
onPress = { offset ->
val press = PressInteraction.Press(offset)
interactionSource.emit(press)
tryAwaitRelease()
interactionSource.emit(PressInteraction.Release(press))
/*if(!isScrolling()) {
val press = PressInteraction.Press(offset)
interactionSource.emit(press)
tryAwaitRelease()
interactionSource.emit(PressInteraction.Release(press))
}*/
},
onTap = {
onItemClicked()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.jan.einkaufszettel.ui.screen.app.tabs.components
package io.github.jan.einkaufszettel.app.ui.components

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
Expand Down
Loading

0 comments on commit 829ff82

Please sign in to comment.