diff --git a/app/src/main/java/com/example/notimanager/data/dto/NotificationDto.kt b/app/src/main/java/com/example/notimanager/data/dto/NotificationDto.kt index c1659ae..258be61 100644 --- a/app/src/main/java/com/example/notimanager/data/dto/NotificationDto.kt +++ b/app/src/main/java/com/example/notimanager/data/dto/NotificationDto.kt @@ -5,6 +5,7 @@ import com.example.notimanager.domain.utils.IntentHelper.retrieveIntent import com.example.notimanager.domain.model.Notification data class NotificationDto( + val id: Long, val title: String, val subText: String, val content: String, @@ -15,6 +16,7 @@ data class NotificationDto( ){ fun toDomain(): Notification { return Notification( + id = this.id, title = this.title, subText = this.subText, content = this.content, diff --git a/app/src/main/java/com/example/notimanager/data/repository/NotificationAppRepository.kt b/app/src/main/java/com/example/notimanager/data/repository/NotificationAppRepository.kt index 00243b1..4a7c271 100644 --- a/app/src/main/java/com/example/notimanager/data/repository/NotificationAppRepository.kt +++ b/app/src/main/java/com/example/notimanager/data/repository/NotificationAppRepository.kt @@ -35,4 +35,9 @@ class NotificationAppRepository( ): Int { return appIconDao.removePriority(appName) } + override suspend fun deleteNotificationApp( + appName: String + ): Int{ + return notificationDao.deleteNotificationByAppName(appName) + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/data/repository/NotificationDomainRepository.kt b/app/src/main/java/com/example/notimanager/data/repository/NotificationDomainRepository.kt index eb34120..5e9b8d5 100644 --- a/app/src/main/java/com/example/notimanager/data/repository/NotificationDomainRepository.kt +++ b/app/src/main/java/com/example/notimanager/data/repository/NotificationDomainRepository.kt @@ -26,4 +26,8 @@ class NotificationDomainRepository( .map { it.toDomain() } .toList() } + + override suspend fun deleteNotification(id: Long): Int { + return notificationDao.deleteNotificationById(id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/data/repository/NotificationTitleRepository.kt b/app/src/main/java/com/example/notimanager/data/repository/NotificationTitleRepository.kt index 6b94c41..12d4726 100644 --- a/app/src/main/java/com/example/notimanager/data/repository/NotificationTitleRepository.kt +++ b/app/src/main/java/com/example/notimanager/data/repository/NotificationTitleRepository.kt @@ -39,4 +39,12 @@ class NotificationTitleRepository( return notificationIconDao.removePriority(notificationId) } + override suspend fun deleteByTitle(appName: String, title: String): Int { + return notificationDao.deleteNotificationByTitle(appName, title) + } + + override suspend fun deleteBySubText(appName: String, subText: String): Int { + return notificationDao.deleteNotificationBySubText(appName, subText) + } + } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/data/source/local/dao/NotificationDao.kt b/app/src/main/java/com/example/notimanager/data/source/local/dao/NotificationDao.kt index eae9e60..427f3f9 100644 --- a/app/src/main/java/com/example/notimanager/data/source/local/dao/NotificationDao.kt +++ b/app/src/main/java/com/example/notimanager/data/source/local/dao/NotificationDao.kt @@ -1,6 +1,7 @@ package com.example.notimanager.data.source.local.dao import androidx.room.Dao +import androidx.room.Delete import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query @@ -77,7 +78,7 @@ interface NotificationDao { @Query( """ - SELECT n.title, n.subText, n.content, n.timestamp, nm.intentActive, nm.intentArray, ni.iconBytes + SELECT n.id, n.title, n.subText, n.content, n.timestamp, nm.intentActive, nm.intentArray, ni.iconBytes FROM notification AS n INNER JOIN notification_meta AS nm ON n.id = nm.notificationId INNER JOIN notification_icon AS ni ON n.id = ni.notificationId @@ -89,7 +90,7 @@ interface NotificationDao { @Query( """ - SELECT n.title, n.subText, n.content, n.timestamp, nm.intentActive, nm.intentArray, ni.iconBytes + SELECT n.id, n.title, n.subText, n.content, n.timestamp, nm.intentActive, nm.intentArray, ni.iconBytes FROM notification AS n INNER JOIN notification_meta AS nm ON n.id = nm.notificationId INNER JOIN notification_icon AS ni ON n.id = ni.notificationId @@ -98,4 +99,16 @@ interface NotificationDao { """ ) suspend fun getNotificationSubTextList(appName: String, subText: String): List + + @Query("DELETE FROM Notification WHERE appName = :appName") + suspend fun deleteNotificationByAppName(appName: String): Int + + @Query("DELETE FROM Notification WHERE appName = :appName AND title = :title") + suspend fun deleteNotificationByTitle(appName: String, title: String): Int + + @Query("DELETE FROM Notification WHERE appName = :appName AND subText = :subText") + suspend fun deleteNotificationBySubText(appName: String, subText: String): Int + + @Query("DELETE FROM Notification WHERE id = :id") + suspend fun deleteNotificationById(id: Long): Int } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/domain/model/Notification.kt b/app/src/main/java/com/example/notimanager/domain/model/Notification.kt index bb2ab0b..82eaedf 100644 --- a/app/src/main/java/com/example/notimanager/domain/model/Notification.kt +++ b/app/src/main/java/com/example/notimanager/domain/model/Notification.kt @@ -4,6 +4,7 @@ import android.content.Intent import android.graphics.Bitmap data class Notification( + val id: Long, val title: String, val subText: String, val content: String, diff --git a/app/src/main/java/com/example/notimanager/domain/repository/NotificationAppRepositoryInterface.kt b/app/src/main/java/com/example/notimanager/domain/repository/NotificationAppRepositoryInterface.kt index 50ca889..a2c53c0 100644 --- a/app/src/main/java/com/example/notimanager/domain/repository/NotificationAppRepositoryInterface.kt +++ b/app/src/main/java/com/example/notimanager/domain/repository/NotificationAppRepositoryInterface.kt @@ -7,4 +7,5 @@ interface NotificationAppRepositoryInterface { suspend fun getNotificationAppPriorityList(): List suspend fun setAppPriority(appName: String, newPriority: Int): Int suspend fun removeAppPriority(appName: String): Int + suspend fun deleteNotificationApp(appName: String): Int } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/domain/repository/NotificationDomainRepositoryInterface.kt b/app/src/main/java/com/example/notimanager/domain/repository/NotificationDomainRepositoryInterface.kt index 04e5fea..441f730 100644 --- a/app/src/main/java/com/example/notimanager/domain/repository/NotificationDomainRepositoryInterface.kt +++ b/app/src/main/java/com/example/notimanager/domain/repository/NotificationDomainRepositoryInterface.kt @@ -5,4 +5,5 @@ import com.example.notimanager.domain.model.Notification interface NotificationDomainRepositoryInterface { suspend fun getNotificationList(appName: String, title: String): List suspend fun getNotificationSubTextList(appName: String, subText: String): List + suspend fun deleteNotification(id: Long): Int } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/domain/repository/NotificationTitleRepositoryInterface.kt b/app/src/main/java/com/example/notimanager/domain/repository/NotificationTitleRepositoryInterface.kt index d267cd0..c19aee8 100644 --- a/app/src/main/java/com/example/notimanager/domain/repository/NotificationTitleRepositoryInterface.kt +++ b/app/src/main/java/com/example/notimanager/domain/repository/NotificationTitleRepositoryInterface.kt @@ -7,4 +7,6 @@ interface NotificationTitleRepositoryInterface { suspend fun getNotificationTitlePriorityList(appName: String): List suspend fun setTitlePriority(notificationId: Long, newPriority: Int): Int suspend fun removeTitlePriority(notificationId: Long): Int + suspend fun deleteByTitle(appName: String, title: String): Int + suspend fun deleteBySubText(appName: String, subText: String): Int } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/domain/usecase/NotificationAppUseCase.kt b/app/src/main/java/com/example/notimanager/domain/usecase/NotificationAppUseCase.kt index d0504d0..8ab0bbf 100644 --- a/app/src/main/java/com/example/notimanager/domain/usecase/NotificationAppUseCase.kt +++ b/app/src/main/java/com/example/notimanager/domain/usecase/NotificationAppUseCase.kt @@ -26,4 +26,10 @@ class NotificationAppUseCase( ): Int { return repository.removeAppPriority(appName) } + + suspend fun deleteNotificationApp( + appName: String, + ): Int{ + return repository.deleteNotificationApp(appName) + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/domain/usecase/NotificationTitleUseCase.kt b/app/src/main/java/com/example/notimanager/domain/usecase/NotificationTitleUseCase.kt index bb0b2a9..85a49ae 100644 --- a/app/src/main/java/com/example/notimanager/domain/usecase/NotificationTitleUseCase.kt +++ b/app/src/main/java/com/example/notimanager/domain/usecase/NotificationTitleUseCase.kt @@ -30,4 +30,18 @@ class NotificationTitleUseCase( ): Int { return repository.removeTitlePriority(notificationId) } + + suspend fun deleteByTitle( + appName: String, + title: String + ): Int{ + return repository.deleteByTitle(appName, title) + } + + suspend fun deleteBySubText( + appName: String, + subText: String + ): Int{ + return repository.deleteBySubText(appName, subText) + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/domain/usecase/NotificationUseCase.kt b/app/src/main/java/com/example/notimanager/domain/usecase/NotificationUseCase.kt index be2945a..d252280 100644 --- a/app/src/main/java/com/example/notimanager/domain/usecase/NotificationUseCase.kt +++ b/app/src/main/java/com/example/notimanager/domain/usecase/NotificationUseCase.kt @@ -13,4 +13,8 @@ class NotificationUseCase( suspend fun getNotificationSubTextList(appName: String, subText: String): List{ return repository.getNotificationSubTextList(appName, subText) } + + suspend fun deleteNotification(id: Long): Int{ + return repository.deleteNotification(id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationAppPriorityViewModel.kt b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationAppPriorityViewModel.kt index 35de140..6716f29 100644 --- a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationAppPriorityViewModel.kt +++ b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationAppPriorityViewModel.kt @@ -48,4 +48,11 @@ class NotificationAppPriorityViewModel @Inject constructor( onComplete() } } + + fun deleteApp(appName: String) { + viewModelScope.launch { + notificationAppUseCase.deleteNotificationApp(appName) + loadNotificationAppPriority() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationAppViewModel.kt b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationAppViewModel.kt index 9414855..d90fc70 100644 --- a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationAppViewModel.kt +++ b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationAppViewModel.kt @@ -41,4 +41,11 @@ class NotificationAppViewModel @Inject constructor( onComplete() } } + + fun deleteNotificationApp(appName: String) { + viewModelScope.launch { + notificationAppUseCase.deleteNotificationApp(appName) + loadNotificationApps() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationSubTextViewModel.kt b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationSubTextViewModel.kt index a2f4902..535d342 100644 --- a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationSubTextViewModel.kt +++ b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationSubTextViewModel.kt @@ -42,4 +42,11 @@ class NotificationSubTextViewModel @Inject constructor( } } } + + fun deleteNotification(id: Long){ + viewModelScope.launch { + notificationUseCase.deleteNotification(id) + loadNotification() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationTitlePriorityViewModel.kt b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationTitlePriorityViewModel.kt index 96bd6db..7a4827a 100644 --- a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationTitlePriorityViewModel.kt +++ b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationTitlePriorityViewModel.kt @@ -51,4 +51,22 @@ class NotificationTitlePriorityViewModel @Inject constructor( onComplete() } } + + fun deleteByTitle( + title: String + ){ + viewModelScope.launch { + notificationTitleUseCase.deleteByTitle(appName, title) + loadNotificationTitles() + } + } + + fun deleteBySubText( + subText: String + ){ + viewModelScope.launch { + notificationTitleUseCase.deleteBySubText(appName, subText) + loadNotificationTitles() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationTitleViewModel.kt b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationTitleViewModel.kt index dd3d993..c2d3723 100644 --- a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationTitleViewModel.kt +++ b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationTitleViewModel.kt @@ -48,4 +48,26 @@ class NotificationTitleViewModel @Inject constructor( onComplete() } } + + fun deleteByTitle( + title: String, + onComplete: () -> Unit + ){ + viewModelScope.launch { + notificationTitleUseCase.deleteByTitle(appName, title) + loadNotificationTitles() + onComplete() + } + } + + fun deleteBySubText( + subText: String, + onComplete: () -> Unit + ){ + viewModelScope.launch { + notificationTitleUseCase.deleteBySubText(appName, subText) + loadNotificationTitles() + onComplete() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationViewModel.kt b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationViewModel.kt index 72b81f1..91dbe2c 100644 --- a/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationViewModel.kt +++ b/app/src/main/java/com/example/notimanager/presentation/stateholder/viewmodel/NotificationViewModel.kt @@ -42,4 +42,11 @@ class NotificationViewModel @Inject constructor( } } } + + fun deleteNotification(id: Long){ + viewModelScope.launch { + notificationUseCase.deleteNotification(id) + loadNotification() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationAppListView.kt b/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationAppListView.kt index 8c57d42..2a7c4e0 100644 --- a/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationAppListView.kt +++ b/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationAppListView.kt @@ -175,7 +175,10 @@ fun NotificationAppItemView( showModal = false }) } - ClickableTextView(text = "삭제", onClick = {}) + ClickableTextView(text = "삭제", onClick = { + viewModel.deleteNotificationApp(notification.appName) + showModal = false + }) } } } diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationListView.kt b/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationListView.kt index 9fd1b8e..60b0a7c 100644 --- a/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationListView.kt +++ b/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationListView.kt @@ -29,7 +29,11 @@ import com.example.notimanager.presentation.stateholder.state.NotificationState @Composable -fun NotificationListView(notificationState: NotificationState) { +fun NotificationListView( + notificationState: NotificationState, + onDelete: (Long) -> Unit + +) { val context = LocalContext.current var currentNoti by remember { mutableStateOf(notificationState.notificationList) } @@ -38,21 +42,26 @@ fun NotificationListView(notificationState: NotificationState) { currentNoti = notificationState.notificationList } } + LazyColumn( modifier = Modifier.fillMaxSize() ) { items(currentNoti) { notification -> NotificationItemView (notification = notification, onClick = { - if (notification.intent?.action != null) { - context.startActivity(notification.intent); - } - }) + if (notification.intent?.action != null) + context.startActivity(notification.intent) }, + onDelete = onDelete + ) } } } @Composable -fun NotificationItemView(notification: Notification, onClick: () -> Unit) { +fun NotificationItemView( + notification: Notification, + onClick: () -> Unit, + onDelete: (Long) -> Unit +) { var showModal by remember { mutableStateOf(false) } Row( modifier = Modifier @@ -107,6 +116,7 @@ fun NotificationItemView(notification: Notification, onClick: () -> Unit) { }) ClickableTextView(text = "삭제", onClick = { + onDelete(notification.id) showModal = false }) } diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationTitleListView.kt b/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationTitleListView.kt index e49e50b..e8cecbc 100644 --- a/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationTitleListView.kt +++ b/app/src/main/java/com/example/notimanager/presentation/ui/component/NotificationTitleListView.kt @@ -161,7 +161,13 @@ fun NotificationTitleItemView( showModal = false }) } - ClickableTextView(text = "삭제", onClick = {}) + ClickableTextView(text = "삭제", onClick = { + if (notification.subText == "") + viewModel.deleteByTitle(notification.title) { priorityViewModel.loadNotificationTitles() } + else + viewModel.deleteBySubText(notification.subText) { priorityViewModel.loadNotificationTitles() } + showModal = false + }) } } } diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/screen/NotificationScreen.kt b/app/src/main/java/com/example/notimanager/presentation/ui/screen/NotificationScreen.kt index 41c7e28..88be77d 100644 --- a/app/src/main/java/com/example/notimanager/presentation/ui/screen/NotificationScreen.kt +++ b/app/src/main/java/com/example/notimanager/presentation/ui/screen/NotificationScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavController import com.example.notimanager.presentation.stateholder.state.NotificationState import com.example.notimanager.presentation.stateholder.viewmodel.NotificationViewModel @@ -59,7 +60,7 @@ fun NotificationScreen(navController: NavController, appName: String = "", title modifier = Modifier.padding(innerPadding) ) { val notificationState by viewModel.notificationState.observeAsState(NotificationState()) - NotificationListView(notificationState) + NotificationListView(notificationState, viewModel::deleteNotification) } } diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/screen/NotificationSubScreen.kt b/app/src/main/java/com/example/notimanager/presentation/ui/screen/NotificationSubScreen.kt index 25242d7..d3c20df 100644 --- a/app/src/main/java/com/example/notimanager/presentation/ui/screen/NotificationSubScreen.kt +++ b/app/src/main/java/com/example/notimanager/presentation/ui/screen/NotificationSubScreen.kt @@ -59,7 +59,7 @@ fun NotificationSubScreen(navController: NavController, appName: String = "", su modifier = Modifier.padding(innerPadding) ) { val notificationState by viewModel.notificationState.observeAsState(NotificationState()) - NotificationListView(notificationState) + NotificationListView(notificationState, viewModel::deleteNotification) } } } \ No newline at end of file