Skip to content

Commit 1db26cd

Browse files
committed
HW2: Managing a List of Tasks
- Add Task (used to add a new task) - Edit Task (used to update the selected task) - Updated Task List Items - Store Task and TaskType data with Room database - Added a Date and Time Picker - Changed Task Types
1 parent 49ff5f8 commit 1db26cd

30 files changed

+704
-367
lines changed

app/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,7 @@ dependencies {
8585

8686
// Work Manager
8787
implementation "androidx.work:work-runtime-ktx:2.7.1"
88+
89+
// Swipe
90+
implementation "me.saket.swipe:swipe:1.0.0"
8891
}

app/src/main/java/com/chandistudios/taskrapid/Graph.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.chandistudios.taskrapid
22

33
import android.content.Context
44
import androidx.room.Room
5+
import com.chandistudios.taskrapid.data.repository.TaskIconRepository
56
import com.chandistudios.taskrapid.data.repository.TaskRepository
67
import com.chandistudios.taskrapid.data.repository.TaskTypeRepository
78
import com.chandistudios.taskrapid.data.room.TaskRapidDatabase
@@ -15,6 +16,7 @@ object Graph {
1516
private set
1617

1718
lateinit var appContext: Context
19+
1820
val taskRepository by lazy {
1921
TaskRepository(
2022
taskDao = database.taskDao()
@@ -27,6 +29,8 @@ object Graph {
2729
)
2830
}
2931

32+
val taskIconRepository by lazy { TaskIconRepository() }
33+
3034
fun provide(context: Context) {
3135
appContext = context
3236
database = Room.databaseBuilder(context, TaskRapidDatabase::class.java, "task_rapid.db")

app/src/main/java/com/chandistudios/taskrapid/MainActivity.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package com.chandistudios.taskrapid
22

33
import android.content.Context
44
import android.content.SharedPreferences
5+
import android.os.Build
56
import android.os.Bundle
67
import androidx.activity.ComponentActivity
78
import androidx.activity.compose.setContent
9+
import androidx.annotation.RequiresApi
810
import androidx.compose.foundation.layout.fillMaxSize
911
import androidx.compose.material.MaterialTheme
1012
import androidx.compose.material.Surface
@@ -17,6 +19,7 @@ import com.chandistudios.taskrapid.util.UserProfile
1719

1820
class MainActivity : ComponentActivity() {
1921

22+
@RequiresApi(Build.VERSION_CODES.O)
2023
override fun onCreate(savedInstanceState: Bundle?) {
2124
super.onCreate(savedInstanceState)
2225

app/src/main/java/com/chandistudios/taskrapid/TaskRapidAppState.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.chandistudios.taskrapid
22

33
import androidx.compose.runtime.Composable
44
import androidx.compose.runtime.remember
5-
import androidx.navigation.NavController
65
import androidx.navigation.NavHostController
76
import androidx.navigation.compose.rememberNavController
87

app/src/main/java/com/chandistudios/taskrapid/data/entity/Task.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ data class Task (
2929
@ColumnInfo(name = "task_date") val taskDate: String?,
3030
@ColumnInfo(name = "task_time") val taskTime: String?,
3131
@ColumnInfo(name = "location_x") val locationX: String?, // TODO (HW4)
32-
@ColumnInfo(name = "location_y") val locationY: String?, // TODO: (HW4)
32+
@ColumnInfo(name = "location_y") val locationY: String?, // TODO (HW4)
3333
@ColumnInfo(name = "task_type_id") val taskTypeId: Long,
3434
@ColumnInfo(name = "task_completed") val taskCompleted: Int = 0,
3535
@ColumnInfo(name = "task_icon") val taskIcon: Long = 0
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.chandistudios.taskrapid.data.repository
2+
3+
import androidx.compose.material.icons.Icons
4+
import androidx.compose.material.icons.filled.*
5+
import com.chandistudios.taskrapid.data.entity.TaskIcon
6+
import kotlinx.coroutines.flow.Flow
7+
import kotlinx.coroutines.flow.flow
8+
9+
class TaskIconRepository() {
10+
private val iconList = getIconList()
11+
12+
fun getTaskIconWithId(id: Long): TaskIcon {
13+
iconList.forEach { ic ->
14+
if(ic.iconId == id)
15+
return ic
16+
}
17+
return iconList.get(0)
18+
}
19+
20+
fun getIconList(): List<TaskIcon> {
21+
return mutableListOf(
22+
TaskIcon(iconId = 0, iconName = "Default Task", icon = Icons.Filled.Task),
23+
TaskIcon(iconId = 1, iconName = "Home/Household", icon = Icons.Filled.Home),
24+
TaskIcon(iconId = 2, iconName = "Outdoors/Eco-friendly", icon = Icons.Filled.Eco),
25+
TaskIcon(iconId = 3, iconName = "Work/City", icon = Icons.Filled.EmojiTransportation),
26+
TaskIcon(iconId = 4, iconName = "Mail", icon = Icons.Filled.Mail),
27+
TaskIcon(iconId = 5, iconName = "Travel", icon = Icons.Filled.Flight),
28+
TaskIcon(iconId = 6, iconName = "Shopping", icon = Icons.Filled.ShoppingCart),
29+
TaskIcon(iconId = 7, iconName = "Payments", icon = Icons.Filled.Payments),
30+
TaskIcon(iconId = 8, iconName = "School/Studies", icon = Icons.Filled.School),
31+
TaskIcon(iconId = 9, iconName = "Reading", icon = Icons.Filled.MenuBook),
32+
TaskIcon(iconId = 10, iconName = "Food/Dining", icon = Icons.Filled.Fastfood),
33+
TaskIcon(iconId = 11, iconName = "Beverages", icon = Icons.Filled.EmojiFoodBeverage),
34+
TaskIcon(iconId = 12, iconName = "Wellbeing", icon = Icons.Filled.Accessibility),
35+
TaskIcon(iconId = 13, iconName = "Sports", icon = Icons.Filled.SportsTennis),
36+
TaskIcon(iconId = 14, iconName = "Entertainment", icon = Icons.Filled.TheaterComedy),
37+
TaskIcon(iconId = 15, iconName = "Movies/Series", icon = Icons.Filled.Movie),
38+
TaskIcon(iconId = 16, iconName = "Gaming", icon = Icons.Filled.SportsEsports),
39+
TaskIcon(iconId = 17, iconName = "Celebration/Party", icon = Icons.Filled.Celebration),
40+
TaskIcon(iconId = 18, iconName = "Energy/Energetic", icon = Icons.Filled.Bolt),
41+
TaskIcon(iconId = 19, iconName = "Favorites", icon = Icons.Filled.Favorite),
42+
TaskIcon(iconId = 20, iconName = "Misc", icon = Icons.Filled.Category),
43+
)
44+
}
45+
}

app/src/main/java/com/chandistudios/taskrapid/data/repository/TaskRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class TaskRepository(
1717
/**
1818
* Retrieve the task using their taskId
1919
* */
20-
fun getTaskWithId(taskId: Long) = taskDao.getTaskWithId(taskId)
20+
fun getTaskWithId(taskId: Long): Flow<Task?> = taskDao.getTaskWithId(taskId)
2121

2222
/**
2323
* Retrieve the tasks with a specific task type

app/src/main/java/com/chandistudios/taskrapid/data/repository/TaskTypeRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class TaskTypeRepository(
1717
/**
1818
* Retrieves a task type with a specific id
1919
* */
20-
fun getTaskTypeWithId(id: Long) = taskTypeDao.getTaskTypeWithId(id)
20+
fun getTaskTypeWithId(id: Long): Flow<TaskType?> = taskTypeDao.getTaskTypeWithId(id)
2121

2222
/**
2323
* Add a task type if it does not exist in the database

app/src/main/java/com/chandistudios/taskrapid/data/room/TaskDao.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ abstract class TaskDao {
99

1010
// get task with taskId
1111
@Query(value = "SELECT * FROM tasks WHERE task_id = :taskId")
12-
abstract fun getTaskWithId(taskId: Long): Task?
12+
abstract fun getTaskWithId(taskId: Long): Flow<Task>
1313

1414
// get task with taskName
1515
@Query(value = "SELECT * FROM tasks WHERE task_name = :name")

app/src/main/java/com/chandistudios/taskrapid/data/room/TaskRapidDatabase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.chandistudios.taskrapid.data.entity.TaskType
77

88
@Database(
99
entities = [Task::class, TaskType::class],
10-
version = 3,
10+
version = 5,
1111
exportSchema = false
1212
)
1313

0 commit comments

Comments
 (0)