Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Master #145

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions _config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
theme: jekyll-theme-cayman
4 changes: 3 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,9 @@ dependencies {
implementation Libs.koin
implementation Libs.koinCompose
implementation Libs.koinAndroid
implementation Libs.kotlin_serialization
implementation Libs.kotlinx_serialization
implementation Libs.kotlinx_serialization_json
implementation Libs.kotlin_stdlib
implementation Libs.lifecycle_extensions
implementation Libs.lifecycle_viewmodel
Expand All @@ -114,7 +116,7 @@ dependencies {
implementation 'androidx.compose.material:material:1.0.5'
implementation 'androidx.compose.animation:animation:1.0.5'
implementation 'androidx.compose.ui:ui-tooling:1.0.5'
implementation "androidx.navigation:navigation-compose:2.4.0-beta02"
implementation "androidx.navigation:navigation-compose:2.4.0-rc01"
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.4.0'
androidTestImplementation 'androidx.compose.ui:ui-test-junit4:1.0.5'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package it.ilker.repeatcard

import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.ui.unit.ExperimentalUnitApi
import androidx.multidex.MultiDexApplication
import com.jakewharton.threetenabp.AndroidThreeTen
import it.ilker.repeatcard.di.androidComponents
Expand All @@ -10,14 +11,17 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.startKoin
import org.koin.core.logger.Level
import org.koin.dsl.module
import timber.log.Timber

private const val TAG_LOGGING = "REPEATCARD"

@ExperimentalUnitApi
@ExperimentalCoroutinesApi
@ExperimentalMaterialApi
class RepeatcardApplication : MultiDexApplication() {

@ExperimentalMaterialApi
override fun onCreate() {
super.onCreate()
AndroidThreeTen.init(this)
Expand All @@ -34,7 +38,8 @@ class RepeatcardApplication : MultiDexApplication() {
@ExperimentalCoroutinesApi
private fun setupDI() {
startKoin {
androidLogger()
// Workaround, with Koin 3.2.0 will be resolved
androidLogger(if (BuildConfig.DEBUG) Level.ERROR else Level.NONE)
androidContext(this@RepeatcardApplication)

val appSetupModule = module { single { BuildConfig.DEBUG } }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ class FlashcardDirectoryRepository(private val flashcardDirectoryDao: FlashcardD
suspend fun getDirectories() = flashcardDirectoryDao.getDirectories()

suspend fun getDirectoryContent(id: Int) = flashcardDirectoryDao.getDirectoryContent(id)
.map { flashcard -> flashcard.toDomain() }

suspend fun deleteDirectory(id: Int) = flashcardDirectoryDao.deleteDirectory(id)
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ interface FlashcardDao {
suspend fun getFlashcardsForDirectory(directoryId: Int): List<Flashcard>

@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(flashcard: Flashcard)
suspend fun insert(flashcard: Flashcard): Long

@Update(entity = Flashcard::class)
suspend fun updateFlashcard(flashcard: Flashcard)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,41 @@
package it.ilker.repeatcard.db.flashcard

class FlashcardRepository(private val flashcardDao: FlashcardDao) {

class FlashcardRepository(
private val flashcardDao: FlashcardDao
) {
suspend fun deleteAll() = flashcardDao.deleteAll()

suspend fun deleteFlashcard(id: Int) = flashcardDao.deleteFlashcard(id)
suspend fun deleteFlashcard(id: Int) {
flashcardDao.deleteFlashcard(id)
getFlashcards()
}

suspend fun getFlashcard(id: Int) = flashcardDao.getFlashcard(id).toDomain()

suspend fun getFlashcards() = flashcardDao.getFlashcards().map { flashcard ->
flashcard.toDomain()
}
suspend fun getFlashcards() = flashcardDao.getFlashcards()
.map { flashcard ->
flashcard.toDomain()
}

suspend fun getFlashcardsForDirectory(directoryId: Int) =
flashcardDao.getFlashcardsForDirectory(directoryId).map { flashcard ->
flashcard.toDomain()
}

suspend fun insert(flashcard: me.ilker.business.flashcard.Flashcard) {
flashcardDao.insert(
suspend fun insert(flashcard: me.ilker.business.flashcard.Flashcard) = flashcardDao.insert(
Flashcard(
id = flashcard.id,
title = flashcard.title,
description = flashcard.description,
creationDate = flashcard.creationDate,
lastModified = flashcard.lastModified,
directoryId = flashcard.directoryId,
imageUri = flashcard.imageUri
)
)

suspend fun updateFlashcard(flashcard: me.ilker.business.flashcard.Flashcard) =
flashcardDao.updateFlashcard(
Flashcard(
id = flashcard.id,
title = flashcard.title,
Expand All @@ -29,7 +46,4 @@ class FlashcardRepository(private val flashcardDao: FlashcardDao) {
imageUri = flashcard.imageUri
)
)
}

suspend fun updateFlashcard(flashcard: Flashcard) = flashcardDao.updateFlashcard(flashcard)
}
11 changes: 10 additions & 1 deletion app/src/main/java/it/ilker/repeatcard/di/Module.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package it.ilker.repeatcard.di

import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.ui.unit.ExperimentalUnitApi
import it.ilker.repeatcard.ui.AppNavigator
import it.ilker.repeatcard.ui.addcard.AddCardViewModel
import it.ilker.repeatcard.ui.directories.DirectoriesViewModel
import it.ilker.repeatcard.ui.directory.DirectoryViewModel
import it.ilker.repeatcard.ui.flashcarddetail.FlashcardDetailViewModel
Expand All @@ -18,9 +20,15 @@ import org.koin.dsl.module

val androidComponents = module {
single { androidContext().resources }
single { KeyValueStorageFactory.build(context = androidContext(), name = "repeatcard_prefs") }
single {
KeyValueStorageFactory.build(
context = androidContext(),
name = "repeatcard_prefs"
)
}
}

@ExperimentalUnitApi
@ExperimentalCoroutinesApi
@ExperimentalMaterialApi
val appComponents = module {
Expand All @@ -32,6 +40,7 @@ val viewModels = module {
viewModel { DirectoriesViewModel(get()) }
viewModel { DirectoryViewModel(get()) }
viewModel { FlashcardDetailViewModel(get()) }
viewModel { AddCardViewModel(get()) }
viewModel { EditFlashcardViewModel(get()) }
viewModel { HomeViewModel(get()) }
viewModel { QuestionViewModel() }
Expand Down
14 changes: 0 additions & 14 deletions app/src/main/java/it/ilker/repeatcard/models/question/Question.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,43 +6,47 @@ import androidx.compose.material.Icon
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.graphics.Color.Companion.LightGray
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Color.Companion.Gray
import androidx.compose.ui.graphics.Color.Companion.White
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import it.ilker.repeatcard.BottomNavItem

@Composable
internal fun AppBottomNavigation(
navController: NavHostController,
items: List<BottomNavItem>
) {
BottomNavigation(
backgroundColor = LightGray,
backgroundColor = Gray,
contentColor = White
) {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry?.destination?.route

items.map { it.screen }
.forEach { screen ->
BottomNavigationItem(
icon = {
screen.icon?.let {
Icon(
imageVector = screen.icon,
contentDescription = screen.label
)
}
},
label = { Text(screen.label) },
selected = currentRoute == screen.route,
onClick = {
if (currentRoute != screen.route) {
navController.navigate(screen.route)
items.map { it.screen }.forEach { screen ->
BottomNavigationItem(
icon = {
screen.icon?.let {
Icon(
imageVector = screen.icon,
contentDescription = screen.label
)
}
},
label = { Text(screen.label) },
selected = currentRoute == screen.route,
onClick = {
if (currentRoute != screen.route) {
navController.navigate(screen.route) {
popUpTo(navController.graph.id)
launchSingleTop = true
}
}
)
}
},
selectedContentColor = Color.Black,
unselectedContentColor = White
)
}
}
}
50 changes: 37 additions & 13 deletions app/src/main/java/it/ilker/repeatcard/navigation/NavHostFactory.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,57 @@ package it.ilker.repeatcard.navigation

import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.ExperimentalUnitApi
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import it.ilker.repeatcard.Screen
import androidx.navigation.compose.composable
import it.ilker.repeatcard.ui.addcard.AddCardFactory
import it.ilker.repeatcard.ui.directories.DirectoriesFactory
import it.ilker.repeatcard.ui.flashcarddetail.FlashcardDetailFactory
import it.ilker.repeatcard.ui.home.HomeFactory
import it.ilker.repeatcard.ui.quiz.QuizFactory
import kotlinx.coroutines.ExperimentalCoroutinesApi

@ExperimentalUnitApi
@ExperimentalMaterialApi
@ExperimentalCoroutinesApi
@Composable
internal fun NavHostFactory(navController: NavHostController) = NavHost(
navController = navController,
startDestination = Screen.HomeScreen.route
) {
HomeFactory.create(
navGraphBuilder = this,
navController = navController
)
composable(Screen.HomeScreen.route) {
HomeFactory.Create(
navGraphBuilder = this,
navController = navController
)
}

DirectoriesFactory.create(
navGraphBuilder = this,
navController = navController
)
composable(Screen.DirectoriesScreen.route) {
DirectoriesFactory.Create(
navGraphBuilder = this,
navController = navController
)
}

FlashcardDetailFactory.create(
navGraphBuilder = this,
navController = navController
)
composable(Screen.FlashcardDetailScreen.route) {
FlashcardDetailFactory.Create(
navGraphBuilder = this,
navController = navController
)
}

composable(Screen.AddCardScreen.route) {
AddCardFactory.Create(
navGraphBuilder = this,
navController = navController
)
}

composable(Screen.Quiz.route) {
QuizFactory.Create(
navGraphBuilder = this,
navController = navController
)
}
}
22 changes: 17 additions & 5 deletions app/src/main/java/it/ilker/repeatcard/navigation/Navigation.kt
Original file line number Diff line number Diff line change
@@ -1,26 +1,38 @@
package it.ilker.repeatcard
package it.ilker.repeatcard.navigation

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Done
import androidx.compose.material.icons.rounded.Home
import androidx.compose.material.icons.rounded.List
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder

interface NavFactory {
fun create(navGraphBuilder: NavGraphBuilder, navController: NavController)
@Composable
fun Create(
navGraphBuilder: NavGraphBuilder,
navController: NavController
)
}

sealed class Screen(
val route: String,
val label: String,
val icon: ImageVector? = null
) {
object HomeScreen : Screen(route = "home", label = "Home")
object DirectoriesScreen : Screen(route = "directories", label = "Directories")
object HomeScreen : Screen(route = "home", label = "Home", icon = Icons.Rounded.Home)
object DirectoriesScreen : Screen(route = "directories", label = "Directories", icon = Icons.Rounded.List)
object FlashcardDetailScreen : Screen(route = "flashcard_detail", label = "Flashcard Detail")
object AddCardScreen : Screen(route = "add_card", label = "Add Flashcard")
object Quiz : Screen(route = "quiz", label = "Quiz", icon = Icons.Rounded.Done)
}

data class BottomNavItem(val screen: Screen)

val bottomNavItems = listOf(
BottomNavItem(Screen.HomeScreen),
BottomNavItem(Screen.DirectoriesScreen)
BottomNavItem(Screen.DirectoriesScreen),
BottomNavItem(Screen.Quiz)
)
8 changes: 2 additions & 6 deletions app/src/main/java/it/ilker/repeatcard/ui/AppNavigator.kt
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@ package it.ilker.repeatcard.ui

import android.content.Context
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.ui.unit.ExperimentalUnitApi
import it.ilker.repeatcard.ui.directory.DirectoryScreen
import it.ilker.repeatcard.ui.main.MainScreen
import it.ilker.repeatcard.ui.onboarding.OnboardingScreen
import it.ilker.repeatcard.ui.quiz.QuizScreen
import kotlinx.coroutines.ExperimentalCoroutinesApi

interface Navigator {
fun goToDirectory(id: Int)
fun goToMain()
fun goToOnboarding()
fun goToQuiz()
}

@ExperimentalUnitApi
@ExperimentalCoroutinesApi
@ExperimentalMaterialApi
class AppNavigator(private val context: Context) : Navigator {
Expand All @@ -30,8 +30,4 @@ class AppNavigator(private val context: Context) : Navigator {
override fun goToOnboarding() {
OnboardingScreen.openScreen(context)
}

override fun goToQuiz() {
QuizScreen.openScreen(context)
}
}
Loading