Skip to content
Merged
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
110 changes: 58 additions & 52 deletions app/src/main/java/br/com/sailboat/todozy/home/HomeActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package br.com.sailboat.todozy.home

import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.material.BottomNavigation
Expand All @@ -15,7 +16,7 @@ import androidx.compose.material.icons.automirrored.filled.ListAlt
import androidx.compose.material.icons.filled.History
import androidx.compose.material.icons.filled.Settings
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.res.stringResource
Expand All @@ -26,44 +27,44 @@ import br.com.sailboat.todozy.databinding.ActivityHomeBinding
import br.com.sailboat.todozy.feature.navigation.android.HomeDestination
import br.com.sailboat.todozy.feature.navigation.android.HomeNavigationExtras.EXTRA_HOME_DESTINATION
import br.com.sailboat.todozy.feature.navigation.android.HomeTabNavigator
import br.com.sailboat.todozy.home.model.BottomBarItem
import br.com.sailboat.uicomponent.impl.theme.TodozyTheme
import br.com.sailboat.todozy.R as AppR
import br.com.sailboat.uicomponent.impl.R as UiR

class HomeActivity : AppCompatActivity(), HomeTabNavigator {
private lateinit var binding: ActivityHomeBinding
private var selectedTabId by mutableStateOf(AppR.id.nav_tasks)

private val navHostIds =
mapOf(
AppR.id.nav_tasks to AppR.id.tasks_nav_host,
AppR.id.nav_history to AppR.id.history_nav_host,
AppR.id.nav_settings to AppR.id.settings_nav_host,
)
private val navGraphIds =
mapOf(
AppR.id.nav_tasks to AppR.navigation.nav_tasks,
AppR.id.nav_history to AppR.navigation.nav_history,
AppR.id.nav_settings to AppR.navigation.nav_settings,
)
private val bottomBarItems =
listOf(
BottomBarItem(
id = AppR.id.nav_tasks,
icon = Icons.AutoMirrored.Filled.ListAlt,
title = UiR.string.label_tasks,
),
BottomBarItem(
id = AppR.id.nav_history,
icon = Icons.Filled.History,
title = UiR.string.history,
),
BottomBarItem(
id = AppR.id.nav_settings,
icon = Icons.Filled.Settings,
title = UiR.string.settings,
),
)
private var selectedTabId by mutableIntStateOf(AppR.id.nav_tasks)

private val navHostIds = mapOf(
AppR.id.nav_tasks to AppR.id.tasks_nav_host,
AppR.id.nav_history to AppR.id.history_nav_host,
AppR.id.nav_settings to AppR.id.settings_nav_host,
)

private val navGraphIds = mapOf(
AppR.id.nav_tasks to AppR.navigation.nav_tasks,
AppR.id.nav_history to AppR.navigation.nav_history,
AppR.id.nav_settings to AppR.navigation.nav_settings,
)

private val bottomBarItems = listOf(
BottomBarItem(
id = AppR.id.nav_tasks,
icon = Icons.AutoMirrored.Filled.ListAlt,
title = UiR.string.label_tasks,
),
BottomBarItem(
id = AppR.id.nav_history,
icon = Icons.Filled.History,
title = UiR.string.history,
),
BottomBarItem(
id = AppR.id.nav_settings,
icon = Icons.Filled.Settings,
title = UiR.string.settings,
),
)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand All @@ -89,7 +90,10 @@ class HomeActivity : AppCompatActivity(), HomeTabNavigator {
selected = selected,
onClick = { onBottomTabSelected(item.id) },
icon = {
Icon(imageVector = item.icon, contentDescription = stringResource(id = item.title))
Icon(
imageVector = item.icon,
contentDescription = stringResource(id = item.title),
)
},
label = { Text(text = stringResource(id = item.title)) },
selectedContentColor = MaterialTheme.colors.primary,
Expand All @@ -103,12 +107,11 @@ class HomeActivity : AppCompatActivity(), HomeTabNavigator {
}

private fun applyStartDestination() {
val targetDestination =
when (intent.getSerializableExtra(EXTRA_HOME_DESTINATION) as? HomeDestination) {
HomeDestination.HISTORY -> AppR.id.nav_history
HomeDestination.SETTINGS -> AppR.id.nav_settings
else -> AppR.id.nav_tasks
}
val targetDestination = when (intent.homeDestinationExtra()) {
HomeDestination.HISTORY -> AppR.id.nav_history
HomeDestination.SETTINGS -> AppR.id.nav_settings
else -> AppR.id.nav_tasks
}
selectTab(targetDestination, allowReselectPop = false)
}

Expand Down Expand Up @@ -138,7 +141,8 @@ class HomeActivity : AppCompatActivity(), HomeTabNavigator {

navHostIds.forEach { (destinationId, containerId) ->
val fragment = supportFragmentManager.findFragmentById(containerId) ?: return@forEach
val containerView = binding.root.findViewById<androidx.fragment.app.FragmentContainerView>(containerId)
val containerView =
binding.root.findViewById<androidx.fragment.app.FragmentContainerView>(containerId)
if (destinationId == itemId) {
containerView?.isVisible = true
transaction.show(fragment)
Expand Down Expand Up @@ -176,12 +180,11 @@ class HomeActivity : AppCompatActivity(), HomeTabNavigator {
}

override fun switchTo(destination: HomeDestination) {
val targetId =
when (destination) {
HomeDestination.TASKS -> AppR.id.nav_tasks
HomeDestination.HISTORY -> AppR.id.nav_history
HomeDestination.SETTINGS -> AppR.id.nav_settings
}
val targetId = when (destination) {
HomeDestination.TASKS -> AppR.id.nav_tasks
HomeDestination.HISTORY -> AppR.id.nav_history
HomeDestination.SETTINGS -> AppR.id.nav_settings
}
selectTab(targetId, allowReselectPop = false)
}

Expand All @@ -197,11 +200,14 @@ class HomeActivity : AppCompatActivity(), HomeTabNavigator {

private const val HISTORY_REFRESH_KEY = "history-refresh-request"

private data class BottomBarItem(
val id: Int,
val icon: androidx.compose.ui.graphics.vector.ImageVector,
val title: Int,
)
private fun Intent.homeDestinationExtra(): HomeDestination? {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
getSerializableExtra(EXTRA_HOME_DESTINATION, HomeDestination::class.java)
} else {
@Suppress("DEPRECATION")
getSerializableExtra(EXTRA_HOME_DESTINATION) as? HomeDestination
}
}

private fun HomeActivity.notifyHistoryTabSelected() {
val navController = this.navHostFragmentFor(AppR.id.nav_history).navController
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package br.com.sailboat.todozy.home.model

import androidx.compose.ui.graphics.vector.ImageVector

data class BottomBarItem(
val id: Int,
val icon: ImageVector,
val title: Int,
)
Original file line number Diff line number Diff line change
Expand Up @@ -24,34 +24,33 @@ private fun ActivityResultLauncher<Intent>.launchHome(
launch(intent)
}

internal val appNavigationModule: List<Module> =
listOf(
module(override = true) {
factory<TaskListNavigator> {
object : TaskListNavigator {
override fun navigateToTaskList(context: Context) {
context.startHome(HomeDestination.TASKS)
}
internal val appNavigationModule: List<Module> = listOf(
module {
factory<TaskListNavigator> {
object : TaskListNavigator {
override fun navigateToTaskList(context: Context) {
context.startHome(HomeDestination.TASKS)
}
}
}

factory<TaskHistoryNavigator> {
object : TaskHistoryNavigator {
override fun navigateToTaskHistory(context: Context) {
context.startHome(HomeDestination.HISTORY)
}
factory<TaskHistoryNavigator> {
object : TaskHistoryNavigator {
override fun navigateToTaskHistory(context: Context) {
context.startHome(HomeDestination.HISTORY)
}
}
}

factory<SettingsNavigator> {
object : SettingsNavigator {
override fun navigateToSettings(
context: Context,
launcher: ActivityResultLauncher<Intent>,
) {
launcher.launchHome(context, HomeDestination.SETTINGS)
}
factory<SettingsNavigator> {
object : SettingsNavigator {
override fun navigateToSettings(
context: Context,
launcher: ActivityResultLauncher<Intent>,
) {
launcher.launchHome(context, HomeDestination.SETTINGS)
}
}
},
)
}
},
)
35 changes: 16 additions & 19 deletions build-logic/src/main/kotlin/todozy.android.application.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import com.android.build.api.dsl.ApplicationExtension
import java.util.Properties
import org.gradle.api.JavaVersion
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
import java.util.Properties

plugins {
id("com.android.application")
Expand Down Expand Up @@ -56,12 +55,11 @@ extensions.configure<ApplicationExtension> {

buildTypes {
getByName("release") {
signingConfig =
if (hasSigningProps(localProps)) {
signingConfigs.getByName("config")
} else {
signingConfigs.getByName("debug")
}
signingConfig = if (hasSigningProps(localProps)) {
signingConfigs.getByName("config")
} else {
signingConfigs.getByName("debug")
}
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
Expand All @@ -70,12 +68,11 @@ extensions.configure<ApplicationExtension> {
isDebuggable = false
}
getByName("debug") {
signingConfig =
if (hasSigningProps(localProps)) {
signingConfigs.getByName("config")
} else {
signingConfigs.getByName("debug")
}
signingConfig = if (hasSigningProps(localProps)) {
signingConfigs.getByName("config")
} else {
signingConfigs.getByName("debug")
}
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
Expand Down Expand Up @@ -113,8 +110,8 @@ extensions.configure<ApplicationExtension> {
}
}

tasks.withType<KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = "17"
extensions.configure<KotlinAndroidProjectExtension> {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}
12 changes: 6 additions & 6 deletions build-logic/src/main/kotlin/todozy.android.library.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import com.android.build.api.dsl.LibraryExtension
import org.gradle.api.JavaVersion
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.withType
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension

plugins {
id("com.android.library")
Expand Down Expand Up @@ -37,8 +37,8 @@ extensions.configure<LibraryExtension> {
}
}

tasks.withType<KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = "17"
extensions.configure<KotlinAndroidProjectExtension> {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}
11 changes: 7 additions & 4 deletions build-logic/src/main/kotlin/todozy.jvm.library.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import org.gradle.api.JavaVersion
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.gradle.kotlin.dsl.configure
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension

plugins {
`java-library`
Expand All @@ -12,6 +13,8 @@ java {
targetCompatibility = JavaVersion.VERSION_17
}

tasks.withType<KotlinCompile>().configureEach {
kotlinOptions.jvmTarget = "17"
extensions.configure<KotlinJvmProjectExtension> {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ enum class RepeatType {
}

fun indexOf(index: Int): RepeatType {
for (repeatType in values()) {
for (repeatType in RepeatType.entries) {
if (repeatType.ordinal == index) {
return repeatType
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package br.com.sailboat.todozy.domain.model

enum class TaskStatus(val id: Int) {
// TODO: Add TaskStatusData object
NOT_DONE(0),
DONE(1),
;

companion object {
fun getById(id: Int): TaskStatus = values().firstOrNull { it.id == id } ?: NOT_DONE
fun getById(id: Int): TaskStatus = TaskStatus.entries.firstOrNull { it.id == id } ?: NOT_DONE
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,13 @@ import br.com.sailboat.todozy.domain.model.TaskFilter

interface TaskRepository {
suspend fun getTask(taskId: Long): Result<Task>

suspend fun getBeforeTodayTasks(filter: TaskFilter): Result<List<Task>>

suspend fun getTodayTasks(filter: TaskFilter): Result<List<Task>>

suspend fun getTomorrowTasks(filter: TaskFilter): Result<List<Task>>

suspend fun getNextDaysTasks(filter: TaskFilter): Result<List<Task>>

suspend fun getBeforeNowTasks(): Result<List<Task>>

suspend fun getTasksWithAlarms(): Result<List<Task>>

suspend fun insert(task: Task): Result<Task>

suspend fun update(task: Task): Result<Task>

suspend fun disableTask(task: Task): Result<Task>
}
Loading