From c9794739c28c1b1e276cae9e0c38201c54c57366 Mon Sep 17 00:00:00 2001
From: Richter3766 <97567615+Richter3766@users.noreply.github.com>
Date: Fri, 14 Mar 2025 19:37:59 +0900
Subject: [PATCH 1/5] =?UTF-8?q?build:=20=EC=B6=9C=EC=8B=9C=20=EC=A0=84=20?=
=?UTF-8?q?=EB=B2=84=EC=A0=84=20=EB=84=98=EB=B2=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1.0.0
---
app/build.gradle.kts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index c2fee4c..5e87546 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -14,10 +14,10 @@ android {
defaultConfig {
applicationId = "com.example.notimanager"
- minSdk = 28
+ minSdk = 26
targetSdk = 35
versionCode = 1
- versionName = "1.0"
+ versionName = "1.0.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
resValue("string", "admob_app_id", System.getenv("ADMOB_APP_ID") ?: "")
resValue("string", "admob_banner_id", System.getenv("ADMOB_BANNER_ID") ?: "")
From 139500fbfd01aae1dff06276ed5aa361a65ae116 Mon Sep 17 00:00:00 2001
From: Richter3766 <97567615+Richter3766@users.noreply.github.com>
Date: Fri, 14 Mar 2025 19:37:38 +0900
Subject: [PATCH 2/5] =?UTF-8?q?chore:=20=EA=B4=91=EA=B3=A0=20=ED=82=A4=20?=
=?UTF-8?q?=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
시크릿키로 등록하니 제대로 찾지 못해서 하드코딩으로 주입.
---
app/src/main/AndroidManifest.xml | 2 +-
.../java/com/example/notimanager/presentation/ui/ads/AdSize.kt | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3145652..9d98232 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -19,7 +19,7 @@
tools:targetApi="35">
+ android:value="ca-app-pub-4472438519886520~1562656818"/>
Date: Fri, 14 Mar 2025 19:37:01 +0900
Subject: [PATCH 3/5] =?UTF-8?q?fix:=20=EB=A7=88=EC=A7=80=EB=A7=89=20?=
=?UTF-8?q?=EC=95=84=EC=9D=B4=ED=85=9C=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C=20?=
=?UTF-8?q?=EC=9E=88=EB=8D=98=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
앱, 제목 리스트에서 마지막 아이템을 삭제했을 경우,
삭제는 정상적으로 되지만, UI 상으로 사라지지 않고 남던 현상 수정.
---
.../component/list/NotificationAppListView.kt | 47 +++++++-------
.../list/NotificationTitleListView.kt | 64 ++++++++++---------
.../presentation/ui/screen/TitleScreen.kt | 19 +++---
3 files changed, 66 insertions(+), 64 deletions(-)
diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/component/list/NotificationAppListView.kt b/app/src/main/java/com/example/notimanager/presentation/ui/component/list/NotificationAppListView.kt
index 472c5a2..e6afdd3 100644
--- a/app/src/main/java/com/example/notimanager/presentation/ui/component/list/NotificationAppListView.kt
+++ b/app/src/main/java/com/example/notimanager/presentation/ui/component/list/NotificationAppListView.kt
@@ -1,7 +1,6 @@
package com.example.notimanager.presentation.ui.component.list
import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
@@ -15,7 +14,6 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -34,7 +32,7 @@ import com.example.notimanager.presentation.ui.component.item.NotificationAppIte
fun NotificationAppListView(
navController: NavController,
viewModel: NotificationAppViewModel,
- priorityViewModel: NotificationAppPriorityViewModel
+ priorityViewModel: NotificationAppPriorityViewModel,
) {
val notificationAppState by viewModel.notificationAppState.observeAsState(NotificationAppState())
val priorityState by priorityViewModel.notificationAppPriorityState.observeAsState((NotificationAppPriorityState()))
@@ -63,31 +61,32 @@ fun NotificationAppListView(
.fillMaxSize()
.padding(bottom = 56.dp) // AndroidView의 높이만큼 패딩 추가
) {
- items(currentNotiPriority) { notification ->
- NotificationAppItemView(
- notification = notification,
- onClick = {
- navController.navigate("titleScreen/${notification.appName}")
- },
- viewModel = viewModel,
- priorityViewModel = priorityViewModel
- )
- }
- if (currentNotiPriority.isNotEmpty()) {
+ if(currentNotiPriority.isNotEmpty()){
+ items(currentNotiPriority) { notification ->
+ NotificationAppItemView(
+ notification = notification,
+ onClick = {
+ navController.navigate("titleScreen/${notification.appName}")
+ },
+ viewModel = viewModel,
+ priorityViewModel = priorityViewModel
+ )
+ }
item {
HorizontalDivider()
}
}
-
- items(currentNoti) { notification ->
- NotificationAppItemView(
- notification = notification,
- onClick = {
- navController.navigate("titleScreen/${notification.appName}")
- },
- viewModel = viewModel,
- priorityViewModel = priorityViewModel
- )
+ if (currentNoti.isNotEmpty()){
+ items(currentNoti) { notification ->
+ NotificationAppItemView(
+ notification = notification,
+ onClick = {
+ navController.navigate("titleScreen/${notification.appName}")
+ },
+ viewModel = viewModel,
+ priorityViewModel = priorityViewModel
+ )
+ }
}
}
diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/component/list/NotificationTitleListView.kt b/app/src/main/java/com/example/notimanager/presentation/ui/component/list/NotificationTitleListView.kt
index eaf7074..5479714 100644
--- a/app/src/main/java/com/example/notimanager/presentation/ui/component/list/NotificationTitleListView.kt
+++ b/app/src/main/java/com/example/notimanager/presentation/ui/component/list/NotificationTitleListView.kt
@@ -33,7 +33,7 @@ import com.example.notimanager.presentation.ui.component.item.NotificationTitleI
fun NotificationTitleListView(
navController: NavController,
viewModel: NotificationTitleViewModel,
- priorityViewModel: NotificationTitlePriorityViewModel
+ priorityViewModel: NotificationTitlePriorityViewModel,
) {
val notificationTitleState by viewModel.notificationTitleState.observeAsState(
NotificationTitleState()
@@ -63,42 +63,44 @@ fun NotificationTitleListView(
LazyColumn(
modifier = Modifier.fillMaxSize().padding(bottom = 56.dp)
) {
- items(currentNotiPriority) { notification ->
- NotificationTitleItemView(notification = notification, onClick = {
- if (notification.subText == "") navController.navigate("notificationScreen/${viewModel.getAppName()}/${getEncodedString(notification.title)}/False")
- else navController.navigate("notificationScreen/${viewModel.getAppName()}/${getEncodedString(notification.subText)}/True")
- }, viewModel = viewModel, priorityViewModel = priorityViewModel)
- }
+ if(currentNotiPriority.isNotEmpty()){
+ items(currentNotiPriority) { notification ->
+ NotificationTitleItemView(notification = notification, onClick = {
+ if (notification.subText == "") navController.navigate("notificationScreen/${viewModel.getAppName()}/${getEncodedString(notification.title)}/False")
+ else navController.navigate("notificationScreen/${viewModel.getAppName()}/${getEncodedString(notification.subText)}/True")
+ }, viewModel = viewModel, priorityViewModel = priorityViewModel)
+ }
- if (currentNotiPriority.isNotEmpty()){
item {
HorizontalDivider()
}
}
-
- items(currentNoti) { notification ->
- NotificationTitleItemView(notification = notification, onClick = {
- if (notification.subText == "") {
- viewModel.updateAsRead(notification.title)
- navController.navigate(
- "notificationScreen/${viewModel.getAppName()}/${
- getEncodedString(
- notification.title
- )
- }/False"
- )
- }
- else {
- viewModel.updateAsSubText(notification.subText)
- navController.navigate(
- "notificationScreen/${viewModel.getAppName()}/${
- getEncodedString(
- notification.subText
- )
- }/True"
- )
- }}, viewModel = viewModel, priorityViewModel = priorityViewModel)
+ if(currentNoti.isNotEmpty()){
+ items(currentNoti) { notification ->
+ NotificationTitleItemView(notification = notification, onClick = {
+ if (notification.subText == "") {
+ viewModel.updateAsRead(notification.title)
+ navController.navigate(
+ "notificationScreen/${viewModel.getAppName()}/${
+ getEncodedString(
+ notification.title
+ )
+ }/False"
+ )
+ }
+ else {
+ viewModel.updateAsSubText(notification.subText)
+ navController.navigate(
+ "notificationScreen/${viewModel.getAppName()}/${
+ getEncodedString(
+ notification.subText
+ )
+ }/True"
+ )
+ }}, viewModel = viewModel, priorityViewModel = priorityViewModel)
+ }
}
+
}
AndroidView(
diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/screen/TitleScreen.kt b/app/src/main/java/com/example/notimanager/presentation/ui/screen/TitleScreen.kt
index c1be346..92c9ae9 100644
--- a/app/src/main/java/com/example/notimanager/presentation/ui/screen/TitleScreen.kt
+++ b/app/src/main/java/com/example/notimanager/presentation/ui/screen/TitleScreen.kt
@@ -35,6 +35,15 @@ fun TitleScreen(navController: NavController, appName: String = ""){
val coroutineScope = rememberCoroutineScope()
var isClicked by remember { mutableStateOf(false) }
+ val onRefresh: () -> Unit = {
+ isRefreshing = true
+ viewModel.loadNotificationTitles()
+ priorityViewModel.loadNotificationTitles()
+ coroutineScope.launch {
+ delay(500)
+ isRefreshing = false
+ }
+ }
LaunchedEffect(appName) {
viewModel.setArgs(appName)
@@ -65,15 +74,7 @@ fun TitleScreen(navController: NavController, appName: String = ""){
PullToRefreshBox(
isRefreshing = isRefreshing,
- onRefresh = {
- isRefreshing = true
- viewModel.loadNotificationTitles()
- priorityViewModel.loadNotificationTitles()
- coroutineScope.launch {
- delay(500)
- isRefreshing = false
- }
- },
+ onRefresh = onRefresh,
modifier = Modifier.padding(innerPadding)
) {
NotificationTitleListView(navController, viewModel, priorityViewModel)
From 4ce6e2f967a7b4acf63efe5ed8bab6b9df9ce73c Mon Sep 17 00:00:00 2001
From: Richter3766 <97567615+Richter3766@users.noreply.github.com>
Date: Sun, 16 Mar 2025 14:00:03 +0900
Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=EA=B8=B0=EB=B3=B8=20=EC=95=8C?=
=?UTF-8?q?=EB=A6=BC=20=EC=83=81=ED=83=9C=EB=B0=94=20=EC=84=A4=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
중요 알림이 아닌 알림을 수집했을 경우
통합해서 새로운 알림이 있다고만 알려주도록 설정.
---
.../domain/service/ForegroundNotiService.kt | 4 ++--
.../domain/service/NotiListenerService.kt | 13 ++++++++++++-
app/src/main/res/values-ko/strings.xml | 1 +
app/src/main/res/values/strings.xml | 1 +
4 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/com/example/notimanager/domain/service/ForegroundNotiService.kt b/app/src/main/java/com/example/notimanager/domain/service/ForegroundNotiService.kt
index 97689bf..390f1a5 100644
--- a/app/src/main/java/com/example/notimanager/domain/service/ForegroundNotiService.kt
+++ b/app/src/main/java/com/example/notimanager/domain/service/ForegroundNotiService.kt
@@ -29,7 +29,7 @@ class ForegroundNotiService: Service() {
val appName = intent?.extras?.getString("appName") ?: ""
val content = intent?.extras?.getString("content") ?: ""
- val isGroupSummary = intent?.extras?.getBoolean("isGroupSummary") ?: false
+ val isGroupSummary = intent?.extras?.getBoolean("isGroupSummary") == true
putNotification(appName, content, isGroupSummary)
return START_STICKY
@@ -48,7 +48,7 @@ class ForegroundNotiService: Service() {
appName: String,
content: String,
isGroupSummary: Boolean) {
- val appContent = if (isGroupSummary) content else getString(R.string.status_app_content, content)
+ val appContent = content
val notificationIntent = Intent(this, MainActivity::class.java).apply {
putExtra("appName", appName)
diff --git a/app/src/main/java/com/example/notimanager/domain/service/NotiListenerService.kt b/app/src/main/java/com/example/notimanager/domain/service/NotiListenerService.kt
index d431394..554fabd 100644
--- a/app/src/main/java/com/example/notimanager/domain/service/NotiListenerService.kt
+++ b/app/src/main/java/com/example/notimanager/domain/service/NotiListenerService.kt
@@ -4,6 +4,7 @@ import android.content.Intent
import android.graphics.drawable.Icon
import android.service.notification.NotificationListenerService
import android.service.notification.StatusBarNotification
+import com.example.notimanager.R
import com.example.notimanager.data.model.AppIconModel
import com.example.notimanager.data.model.NotificationIconModel
import com.example.notimanager.data.model.NotificationMetaModel
@@ -128,7 +129,17 @@ class NotiListenerService: NotificationListenerService() {
if (count != 0){
val serviceIntent = Intent(this, ForegroundNotiService::class.java).apply {
putExtra("appName", appName)
- putExtra("content", count.toString())
+ putExtra("content", getString(R.string.status_app_content, count.toString()))
+ }
+ startService(serviceIntent)
+ }
+ else{
+ val basicTitle = getString(R.string.status_basic_title)
+ val notiContent = getString(R.string.status_noti_content)
+ val serviceIntent = Intent(this, ForegroundNotiService::class.java).apply {
+ putExtra("appName", basicTitle)
+ putExtra("content", notiContent)
+ putExtra("isGroupSummary", true)
}
startService(serviceIntent)
}
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 8d6a350..0fab5eb 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -40,6 +40,7 @@
NotiManager
모든 중요 알림을 확인했어요.
%1$s개의 읽지 않은 알림이 있어요.
+ 새로운 알림이 있어요.
방금
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d90d68f..d8c95f2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -40,6 +40,7 @@
NotiManager
You have checked all important notifications.
You have %1$s unread notifications.
+ You have a new notification.
Just now
From 5017c4c2c3c48793156f3212d8815d474373e5cd Mon Sep 17 00:00:00 2001
From: Richter3766 <97567615+Richter3766@users.noreply.github.com>
Date: Sun, 16 Mar 2025 14:32:51 +0900
Subject: [PATCH 5/5] =?UTF-8?q?fix:=20=EB=92=A4=EB=A1=9C=EA=B0=80=EA=B8=B0?=
=?UTF-8?q?=20=EC=8B=9C=20=ED=9D=B0=ED=99=94=EB=A9=B4=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
모바일 뒤로가기 후 앱의 뒤로가기 버튼을 누를 경우
흰 화면이 뜨던 현상 수정.
---
.../presentation/ui/screen/DateFormatterScreen.kt | 4 +++-
.../presentation/ui/screen/FilteredListScreen.kt | 5 +++--
.../presentation/ui/screen/NotificationScreen.kt | 4 +++-
.../presentation/ui/screen/NotificationSubScreen.kt | 5 +++--
.../notimanager/presentation/ui/screen/SettingScreen.kt | 4 +++-
.../notimanager/presentation/ui/screen/TitleScreen.kt | 7 ++++---
6 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/screen/DateFormatterScreen.kt b/app/src/main/java/com/example/notimanager/presentation/ui/screen/DateFormatterScreen.kt
index 11f8d55..b6eef7a 100644
--- a/app/src/main/java/com/example/notimanager/presentation/ui/screen/DateFormatterScreen.kt
+++ b/app/src/main/java/com/example/notimanager/presentation/ui/screen/DateFormatterScreen.kt
@@ -30,7 +30,9 @@ fun DateFormatterScreen(
CommonTopAppBar(title) {
if (!isClicked) {
isClicked = true
- navController.popBackStack()
+ if (navController.previousBackStackEntry != null) {
+ navController.popBackStack()
+ }
}
}
}
diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/screen/FilteredListScreen.kt b/app/src/main/java/com/example/notimanager/presentation/ui/screen/FilteredListScreen.kt
index b9981be..f27c6c1 100644
--- a/app/src/main/java/com/example/notimanager/presentation/ui/screen/FilteredListScreen.kt
+++ b/app/src/main/java/com/example/notimanager/presentation/ui/screen/FilteredListScreen.kt
@@ -33,8 +33,9 @@ fun FilteredListScreen(
CommonTopAppBar(title = title, onBackClick = {
if (!isClicked){
isClicked = true
-
- navController.popBackStack()
+ if (navController.previousBackStackEntry != null) {
+ navController.popBackStack()
+ }
}
})
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 453bb95..429ec70 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
@@ -51,7 +51,9 @@ fun NotificationScreen(navController: NavController, appName: String = "", title
CommonTopAppBar(title = title, onBackClick = {
if(!isClicked){
isClicked = true
- navController.popBackStack()
+ if (navController.previousBackStackEntry != null) {
+ navController.popBackStack()
+ }
} }
)
}
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 d4bb7ac..baecd1c 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
@@ -50,9 +50,10 @@ fun NotificationSubScreen(navController: NavController, appName: String = "", su
CommonTopAppBar(title = subText, onBackClick = {
if(!isClicked){
isClicked = true
- navController.popBackStack()
+ if (navController.previousBackStackEntry != null) {
+ navController.popBackStack()
+ }
}
-
})
}
) { innerPadding ->
diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/screen/SettingScreen.kt b/app/src/main/java/com/example/notimanager/presentation/ui/screen/SettingScreen.kt
index 6e43bb9..8505036 100644
--- a/app/src/main/java/com/example/notimanager/presentation/ui/screen/SettingScreen.kt
+++ b/app/src/main/java/com/example/notimanager/presentation/ui/screen/SettingScreen.kt
@@ -30,7 +30,9 @@ fun SettingScreen(
CommonTopAppBar(title){
if (!isClicked){
isClicked = true
- navController.popBackStack()
+ if (navController.previousBackStackEntry != null) {
+ navController.popBackStack()
+ }
}
}
}
diff --git a/app/src/main/java/com/example/notimanager/presentation/ui/screen/TitleScreen.kt b/app/src/main/java/com/example/notimanager/presentation/ui/screen/TitleScreen.kt
index 92c9ae9..1703451 100644
--- a/app/src/main/java/com/example/notimanager/presentation/ui/screen/TitleScreen.kt
+++ b/app/src/main/java/com/example/notimanager/presentation/ui/screen/TitleScreen.kt
@@ -1,5 +1,6 @@
package com.example.notimanager.presentation.ui.screen
+import android.util.Log
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
@@ -60,9 +61,9 @@ fun TitleScreen(navController: NavController, appName: String = ""){
CommonTopAppBar(title = appName, onBackClick = {
if (!isClicked) {
isClicked = true
-
- navController.popBackStack()
-
+ if (navController.previousBackStackEntry != null) {
+ navController.popBackStack()
+ }
}
})
}