diff --git a/README.md b/README.md index 74182d9c..2b969a94 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,7 @@ # 숭실대에서 먹자, 잇슈! - - -## 📌 Project Init - - 숭실대 학식 리뷰 앱 - 기간: 2023.03 ~ -- [PlayStore 바로가기](https://play.google.com/store/apps/details?id=com.eassu.android) +- [PlayStore](https://play.google.com/store/apps/details?id=com.eassu.android) 출시일 2023.11.28 ~ ![그래픽이미지](https://github.com/user-attachments/assets/e89f46bb-dece-45a9-a453-a00bf9d463cd) @@ -31,24 +27,28 @@ ## 📄 Package ``` -com.eatssu.android -├── base -├── data -│ ├── dto -│ │ ├── request -│ │ └── response -│ ├── enums -│ ├── model -│ ├── repository -│ ├── service -│ └── usecase -├── di -├── ui -│ ├── common -│ └── feature -│ ├── ViewModel -│ └── View -└── util +📦com.eatssu.android +├── 📂base +├── 📂data +│ ├── 📂db +│ ├── 📂dto +│ │ ├── 📂request +│ │ └── 📂response +│ ├── 📂enums +│ └── 📂repository(impl) +├── 📂di +├── 📂domain +│ ├── 📂model +│ ├── 📂repository +│ ├── 📂service +│ └── 📂usecase +├── 📂presentation +│ ├── 📂common +│ └── 📂feature +│ ├── 📂viewModel +│ └── 📂view +├── 📂util +└── 📄App ``` diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 716e102d..f3674674 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -21,8 +21,8 @@ android { applicationId = "com.eatssu.android" minSdk = 23 targetSdk = 34 - versionCode = 21 - versionName = "2.1.1" + versionCode = 22 + versionName = "2.1.2" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/eatssu/android/ui/mypage/MyPageActivity.kt b/app/src/main/java/com/eatssu/android/ui/mypage/MyPageActivity.kt index 4645b303..bfff4ae0 100644 --- a/app/src/main/java/com/eatssu/android/ui/mypage/MyPageActivity.kt +++ b/app/src/main/java/com/eatssu/android/ui/mypage/MyPageActivity.kt @@ -27,9 +27,12 @@ import com.eatssu.android.ui.mypage.terms.WebViewActivity import com.eatssu.android.ui.mypage.usernamechange.UserNameChangeActivity import com.eatssu.android.util.extension.showToast import com.eatssu.android.util.extension.startActivity +import com.google.android.material.snackbar.Snackbar import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter @AndroidEntryPoint class MyPageActivity : BaseActivity(ActivityMyPageBinding::inflate) { @@ -47,6 +50,7 @@ class MyPageActivity : BaseActivity(ActivityMyPageBinding } + @RequiresApi(Build.VERSION_CODES.O) private fun setupObservers() { lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { @@ -57,29 +61,40 @@ class MyPageActivity : BaseActivity(ActivityMyPageBinding binding.tvNickname.text = it.nickname } + // Switch 상태를 설정할 때 리스너를 임시로 null로 설정 + binding.alarmSwitch.setOnCheckedChangeListener(null) binding.alarmSwitch.isChecked = it.isAlarmOn + // 상태 설정 후에 리스너 추가 + binding.alarmSwitch.setOnCheckedChangeListener { _, isChecked -> + handleAlarmSwitchChange(isChecked) + } } } } } @RequiresApi(Build.VERSION_CODES.O) - private fun setOnClickListener() { + private fun handleAlarmSwitchChange(isChecked: Boolean) { + val nowDatetime = LocalDateTime.now() + val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") + val formattedDate = nowDatetime.format(formatter) - binding.alarmSwitch.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - if (checkNotificationPermission(this)) { //허용되어 있는 상태 - myPageViewModel.setNotificationOn() - showToast("EAT-SSU 알림 수신을 동의하였습니다.") - } else { // 알림 권한이 없을 때 사용자에게 설정 화면으로 이동하라고 알림 - showNotificationPermissionDialog() - } - } else { - myPageViewModel.setNotificationOff() - showToast("EAT-SSU 알림 수신을 거부하였습니다.") + if (isChecked) { + if (checkNotificationPermission(this)) { // 권한이 있는 상태 + myPageViewModel.setNotificationOn() + showSnackbar("EAT-SSU 알림 수신을 동의하였습니다.\n$formattedDate") + } else { // 권한이 없으면 설정 화면으로 이동 알림 + showNotificationPermissionDialog() } + } else { + myPageViewModel.setNotificationOff() + showSnackbar("EAT-SSU 알림 수신을 거부하였습니다.\n$formattedDate") } + } + + @RequiresApi(Build.VERSION_CODES.O) + private fun setOnClickListener() { binding.llNickname.setOnClickListener { startActivity() } @@ -271,6 +286,9 @@ class MyPageActivity : BaseActivity(ActivityMyPageBinding context.startActivity(intent) } + private fun showSnackbar(message: String) { + Snackbar.make(binding.root, message, Snackbar.LENGTH_SHORT).show() + } companion object { private const val REQUEST_NOTIFICATION_PERMISSION = 1001 diff --git a/app/src/main/java/com/eatssu/android/util/NotificationReceiver.kt b/app/src/main/java/com/eatssu/android/util/NotificationReceiver.kt index 3d40135d..3b1c1417 100644 --- a/app/src/main/java/com/eatssu/android/util/NotificationReceiver.kt +++ b/app/src/main/java/com/eatssu/android/util/NotificationReceiver.kt @@ -7,14 +7,22 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.os.Build +import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat import com.eatssu.android.R import com.eatssu.android.ui.main.MainActivity +import java.time.DayOfWeek +import java.time.LocalDateTime class NotificationReceiver : BroadcastReceiver() { + @RequiresApi(Build.VERSION_CODES.O) override fun onReceive(context: Context, intent: Intent) { - showNotification(context) + // 현재 요일이 평일인 경우에만 알림을 발송 + val currentDay = LocalDateTime.now().dayOfWeek + if (currentDay != DayOfWeek.SATURDAY && currentDay != DayOfWeek.SUNDAY) { + showNotification(context) + } } private fun showNotification(context: Context) {