From f09b157230e5a01282bdacd250d8cf129b60b6ce Mon Sep 17 00:00:00 2001 From: Son Myeongji Date: Thu, 28 Mar 2024 16:41:27 +0900 Subject: [PATCH 1/9] =?UTF-8?q?feat=20:=20FCM=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youdongknowme/service/FCMService.kt | 24 +++++--- .../android/youdongknowme/service/Topic.kt | 24 ++++++++ .../youdongknowme/standard/util/Mapping.kt | 58 +++++-------------- 3 files changed, 56 insertions(+), 50 deletions(-) create mode 100644 app/src/main/java/com/dongyang/android/youdongknowme/service/Topic.kt diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt b/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt index 0bb10a83..18230f90 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt @@ -6,6 +6,7 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import android.media.RingtoneManager +import android.net.Uri import android.os.Build import androidx.core.app.NotificationCompat import com.dongyang.android.youdongknowme.ui.view.main.MainActivity @@ -14,12 +15,15 @@ import com.google.firebase.messaging.RemoteMessage class FCMService : FirebaseMessagingService() { - override fun onMessageReceived(remoteMessage: RemoteMessage) { - val title = remoteMessage.notification?.title ?: "기본 제목" - val message = remoteMessage.notification?.body ?: "기본 메시지" + override fun onMessageReceived(message: RemoteMessage) { + super.onMessageReceived(message) + + val title = message.notification?.title ?: "기본 제목" + val messageBody = message.notification?.body ?: "기본 메시지" + val url = message.data["url"] ?: "" // 알림 채널 ID - val channelId = "your_channel_id" + val channelId = "DMforU" // NotificationManager 인스턴스 생성 val notificationManager = @@ -36,9 +40,15 @@ class FCMService : FirebaseMessagingService() { } // Intent 및 PendingIntent 생성 - val intent = Intent(this, MainActivity::class.java).apply { - flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP + val intent = if (url.isNullOrEmpty().not()) { + val uri = Uri.parse(url) + Intent(Intent.ACTION_VIEW, uri) + } else { + Intent(this, MainActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP + } } + val pendingIntent = PendingIntent.getActivity( this, 0, @@ -50,7 +60,7 @@ class FCMService : FirebaseMessagingService() { val builder = NotificationCompat.Builder(this, channelId) .setSmallIcon(com.dongyang.android.youdongknowme.R.mipmap.ic_logo) // 알림 아이콘 설정 .setContentTitle(title) // 알림 제목 - .setContentText(message) // 알림 내용 + .setContentText(messageBody) // 알림 내용 .setAutoCancel(true) // 터치 시 자동으로 삭제되도록 설정 .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) // 알림 소리 설정 .setVibrate(longArrayOf(0, 1000, 500, 1000)) // 진동 패턴 설정 diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/service/Topic.kt b/app/src/main/java/com/dongyang/android/youdongknowme/service/Topic.kt new file mode 100644 index 00000000..5cce1720 --- /dev/null +++ b/app/src/main/java/com/dongyang/android/youdongknowme/service/Topic.kt @@ -0,0 +1,24 @@ +package com.dongyang.android.youdongknowme.service + +enum class Topic(korean: String, english: String) { + exam("시험", "exam"), + signup("수강", "signup"), + speciallecture("특강", "speciallecture"), + seasonalsemester("계절학기", "seasonalsemester"), + leaveofabsence("휴학", "leaveofabsence"), + returntoschool("복학", "returntoschool"), + graduate("졸업", "graduate"), + switchmajors("전과", "switchmajors"), + givingupthesemester("학기포기", "givingupthesemester"), + scholarship("장학", "scholarship"), + nationalscholarship("국가장학", "nationalscholarship"), + registration("등록", "registration"), + employment("채용", "employment"), + contest("공모전", "contest"), + competition("대회", "competition"), + fieldtraining("현장실습", "fieldtraining"), + volunteer("봉사", "volunteer"), + dormitory("기숙사", "dormitory"), + group("동아리", "group"), + studentcouncil("학생회", "studentcouncil"); +} \ No newline at end of file diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/standard/util/Mapping.kt b/app/src/main/java/com/dongyang/android/youdongknowme/standard/util/Mapping.kt index 5a047c3d..dab80262 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/standard/util/Mapping.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/standard/util/Mapping.kt @@ -3,53 +3,25 @@ package com.dongyang.android.youdongknowme.standard.util fun mapKeywordEnglishToKorean(english: String): String { return when (english) { "exam" -> "시험" - "course" -> "수강" - "lecture" -> "특강" - "season" -> "계절학기" + "signup" -> "수강" + "speciallecture" -> "특강" + "seasonalsemester" -> "계절학기" + "leaveofabsence" -> "휴학" + "returntoschool" -> "복학" + "graduate" -> "졸업" + "switchmajors" -> "전과" + "givingupthesemester" -> "학기포기" "scholarship" -> "장학" - "tuition" -> "등록" - "leave" -> "휴학" - "return" -> "복학" - "graduation" -> "졸업" - "transfer" -> "전과" - "drop" -> "학기포기" - "recruitment" -> "채용" + "nationalscholarship" -> "국가장학" + "registration" -> "등록" + "employment" -> "채용" "contest" -> "공모전" - "field" -> "현장실습" "competition" -> "대회" - "service" -> "봉사" + "fieldtraining" -> "현장실습" + "volunteer" -> "봉사" "dormitory" -> "기숙사" - "corona" -> "코로나19" - "club" -> "동아리" - else -> throw IllegalArgumentException("올바른 타입이 아닙니다.") - } -} - -fun mapDepartmentCodeToKorean(code: Int): String { - return when (code) { - CODE.SCHOOL_CODE -> "학교" - CODE.MECHANICAL_ENGINE_CODE -> "기계공학과" - CODE.MECHANICAL_DESIGN_CODE -> "기계설계공학과" - CODE.AUTOMATION_ENGINE_CODE -> "자동화공학과" - CODE.ROBOT_ENGINE_CODE -> "로봇공학과" - CODE.COMPUTER_SOFTWARE_ENGINE_CODE -> "컴퓨터소프트웨어공학과" - CODE.COMPUTER_INFO_ENGINE_CODE -> "컴퓨터정보공학과" - CODE.ARTIFICIAL_ENGINE_CODE -> "인공지능소프트웨어공학과" - CODE.ELECTRICAL_ENGINE_CODE -> "전기공학과" - CODE.INFO_ELECTRONIC_ENGINE_CODE -> "정보전자공학과" - CODE.SEMICONDUCTOR_ENGINE_CODE -> "반도체전자공학과" - CODE.INFO_COMMUNICATION_ENGINE_CODE -> "정보통신공학과" - CODE.BIOCHEMICAL_ENGINE_CODE -> "생명화학공학과" - CODE.BIO_CONVERGENCE_ENGINE_CODE -> "바이오융합공학과" - CODE.ARCHITECTURE_CODE -> "건축과" - CODE.INTERIOR_DESIGN_CODE -> "실내건축디자인과" - CODE.VISUAL_DESIGN_CODE -> "시각디자인과" - CODE.BUSINESS_ADMINISTRATION_CODE -> "경영학과" - CODE.TAX_ACCOUNTING_CODE -> "세무회계학과" - CODE.DISTRIBUTION_MARKETING_CODE -> "유통마케팅학과" - CODE.HOTEL_TOURISM_CODE -> "호텔관광학과" - CODE.MANAGEMENT_INFORMATION_CODE -> "경영정보학과" - CODE.BIG_DATA_MANAGEMENT_CODE -> "빅데이터경영과" + "group" -> "동아리" + "studentcouncil" -> "학생회" else -> throw IllegalArgumentException("올바른 타입이 아닙니다.") } } From 8338ffa6078463210687df125b30183e011f4165 Mon Sep 17 00:00:00 2001 From: Son Myeongji Date: Thu, 28 Mar 2024 17:20:37 +0900 Subject: [PATCH 2/9] =?UTF-8?q?feat=20:=20=EB=94=94=ED=85=8C=EC=9D=BC?= =?UTF-8?q?=EB=B7=B0=EB=A1=9C=20url=20=EB=84=98=EA=B8=B0=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dongyang/android/youdongknowme/service/FCMService.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt b/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt index 18230f90..18c93693 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt @@ -6,9 +6,9 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import android.media.RingtoneManager -import android.net.Uri import android.os.Build import androidx.core.app.NotificationCompat +import com.dongyang.android.youdongknowme.ui.view.detail.DetailActivity import com.dongyang.android.youdongknowme.ui.view.main.MainActivity import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.RemoteMessage @@ -41,8 +41,9 @@ class FCMService : FirebaseMessagingService() { // Intent 및 PendingIntent 생성 val intent = if (url.isNullOrEmpty().not()) { - val uri = Uri.parse(url) - Intent(Intent.ACTION_VIEW, uri) + DetailActivity.newIntent(this, url).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } } else { Intent(this, MainActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP From 3f06eb4ace0db1843415680a69bced7ede59003b Mon Sep 17 00:00:00 2001 From: Son Myeongji Date: Fri, 29 Mar 2024 08:55:12 +0900 Subject: [PATCH 3/9] =?UTF-8?q?feat=20:=20=EB=A9=94=EC=9D=B8=20=EC=95=A1?= =?UTF-8?q?=ED=8B=B0=EB=B9=84=ED=8B=B0=20=EB=B0=B1=EC=8A=A4=ED=83=9D=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youdongknowme/service/FCMService.kt | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt b/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt index 18c93693..6a0bb209 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/service/FCMService.kt @@ -3,6 +3,7 @@ package com.dongyang.android.youdongknowme.service import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent +import android.app.TaskStackBuilder import android.content.Context import android.content.Intent import android.media.RingtoneManager @@ -39,23 +40,33 @@ class FCMService : FirebaseMessagingService() { notificationManager.createNotificationChannel(channel) } - // Intent 및 PendingIntent 생성 - val intent = if (url.isNullOrEmpty().not()) { - DetailActivity.newIntent(this, url).apply { - addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - } + // MainActivity를 시작하는 Intent 생성 + val mainIntent = Intent(this, MainActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP + } + + // DetailActivity를 열기 위한 Intent 생성 + val detailIntent = if (!url.isNullOrEmpty()) { + DetailActivity.newIntent(this, url) } else { - Intent(this, MainActivity::class.java).apply { - flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP - } + null // URL이 없는 경우에는 null 할당 } - val pendingIntent = PendingIntent.getActivity( - this, - 0, - intent, - PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT - ) + // PendingIntent 생성 + val pendingIntent = if (detailIntent != null) { + TaskStackBuilder.create(this).run { + addNextIntent(mainIntent) + addNextIntentWithParentStack(detailIntent) // DetailActivity를 부모 스택으로 추가 + getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT) + } + } else { + PendingIntent.getActivity( + this, + 0, + mainIntent, + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT + ) + } // 알림 생성 val builder = NotificationCompat.Builder(this, channelId) From 0a1c4e4d5dace27596ae03cb6fa069bbbeee8bb7 Mon Sep 17 00:00:00 2001 From: Son Myeongji Date: Mon, 1 Apr 2024 01:38:09 +0900 Subject: [PATCH 4/9] =?UTF-8?q?feat=20:=20=ED=95=99=EA=B3=BC=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20=EC=97=B0=EA=B2=B0=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/repository/DepartRepository.kt | 1 + .../data/repository/SettingRepository.kt | 2 + .../ui/view/depart/DepartActivity.kt | 2 + .../ui/view/main/MainActivity.kt | 3 ++ .../ui/view/setting/SettingFragment.kt | 46 +++++++++++++------ .../ui/view/setting/SettingViewModel.kt | 16 +++++-- 6 files changed, 51 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/DepartRepository.kt b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/DepartRepository.kt index 8b2e8361..824cd919 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/DepartRepository.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/DepartRepository.kt @@ -9,6 +9,7 @@ class DepartRepository { SharedPreference.setDepartment(department.name) SharedPreference.setCode(department.code) } + fun getIsFirstLaunch(): Boolean = SharedPreference.getIsFirstLaunch() fun getUserDepartment(): String { diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/SettingRepository.kt b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/SettingRepository.kt index 8281ee08..65defcf1 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/SettingRepository.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/SettingRepository.kt @@ -9,6 +9,7 @@ import com.dongyang.android.youdongknowme.data.remote.service.SettingService import com.dongyang.android.youdongknowme.standard.network.ErrorResponseHandler import com.dongyang.android.youdongknowme.standard.network.NetworkResult import com.dongyang.android.youdongknowme.standard.network.RetrofitObject +import timber.log.Timber class SettingRepository( private val keywordDao: KeywordDao, @@ -28,6 +29,7 @@ class SettingRepository( } fun getUserDepartment(): String { + Timber.d("update settingRepo ${SharedPreference.getDepartment()}") return SharedPreference.getDepartment() } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartActivity.kt index 62c03183..ea557982 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartActivity.kt @@ -11,6 +11,7 @@ import com.dongyang.android.youdongknowme.standard.base.BaseActivity import com.dongyang.android.youdongknowme.ui.adapter.DepartAdapter import com.dongyang.android.youdongknowme.ui.view.main.MainActivity import org.koin.androidx.viewmodel.ext.android.viewModel +import timber.log.Timber class DepartActivity : BaseActivity(), DepartClickListener { @@ -64,6 +65,7 @@ class DepartActivity : BaseActivity(), D private fun getDepart(items: ArrayList) { return binding.btnDepartComplete.setOnClickListener { viewModel.setDepartment(items[viewModel.selectDepartPosition.value ?: 0]) + setResult(RESULT_OK) finish() } } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt index f57227a5..eb2c1393 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt @@ -13,6 +13,7 @@ import com.dongyang.android.youdongknowme.ui.view.util.KeepStateNavigator import com.google.android.gms.tasks.OnCompleteListener import com.google.firebase.messaging.FirebaseMessaging import org.koin.androidx.viewmodel.ext.android.viewModel +import timber.log.Timber /* 메인 액티비티 */ class MainActivity : BaseActivity() { @@ -50,6 +51,8 @@ class MainActivity : BaseActivity() { val token = task.result SharedPreference.setFcmToken(token) + + Timber.d("token : ${token}") }) } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt index 8bec3cef..bc4c14f1 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt @@ -12,6 +12,7 @@ import com.dongyang.android.youdongknowme.ui.view.depart.DepartActivity import com.dongyang.android.youdongknowme.ui.view.keyword.KeywordActivity import com.dongyang.android.youdongknowme.ui.view.license.LicenseActivity import org.koin.androidx.viewmodel.ext.android.viewModel +import timber.log.Timber /* 설정 화면 */ class SettingFragment : BaseFragment() { @@ -19,22 +20,28 @@ class SettingFragment : BaseFragment() override val layoutResourceId: Int = R.layout.fragment_setting override val viewModel: SettingViewModel by viewModel() - private lateinit var resultLauncher: ActivityResultLauncher + private lateinit var resultLauncherKeyword: ActivityResultLauncher + private lateinit var resultResultDepartment: ActivityResultLauncher + private var topics: List = emptyList() + private var department: String = "" override fun initStartView() { binding.tvSettingAppVersion.text = getAppVersion() setResultKeyword() + setResultDepartment() } override fun initDataBinding() { viewModel.myDepartment.observe(viewLifecycleOwner) { myDepartment -> binding.tvSettingDepartment.text = myDepartment + department = myDepartment + viewModel.updateUserDepartment(department) } viewModel.myTopics.observe(viewLifecycleOwner) { myTopics -> - topics = topics + topics = myTopics } viewModel.isAccessUniversityAlarm.observe(viewLifecycleOwner) { isChecked -> @@ -54,7 +61,9 @@ class SettingFragment : BaseFragment() binding.switchSettingUniversityAlarm.setOnCheckedChangeListener { compoundButton, _ -> if (compoundButton.isChecked) { - viewModel.updateUserTopic(topics) + if (topics.isNotEmpty()) { + viewModel.updateUserTopic(topics) + } } else { viewModel.removeUserTopic() } @@ -62,7 +71,9 @@ class SettingFragment : BaseFragment() binding.switchSettingDepartmentAlarm.setOnCheckedChangeListener { compoundButton, _ -> if (compoundButton.isChecked) { - viewModel.updateUserDepartment() + if (department.isNotEmpty()) { + viewModel.updateUserDepartment(department) + } } else { viewModel.removeUserDepartment() } @@ -70,20 +81,19 @@ class SettingFragment : BaseFragment() binding.btnSettingEditKeyword.setOnClickListener { val intent = Intent(requireActivity(), KeywordActivity::class.java) - resultLauncher.launch(intent) + resultLauncherKeyword.launch(intent) } binding.btnSettingEditDepartment.setOnClickListener { val intent = Intent(requireActivity(), DepartActivity::class.java) - startActivity(intent) + resultResultDepartment.launch(intent) } binding.btnSettingAppHelp.setOnClickListener { - val intent = - Intent( - Intent.ACTION_VIEW, - Uri.parse("https://docs.google.com/forms/d/e/1FAIpQLSeRTKalenelmffTbCZeK4mqmQg0palobghkXSoie1FlmV22ZQ/viewform") - ) + val intent = Intent( + Intent.ACTION_VIEW, + Uri.parse("https://docs.google.com/forms/d/e/1FAIpQLSeRTKalenelmffTbCZeK4mqmQg0palobghkXSoie1FlmV22ZQ/viewform") + ) startActivity(intent) } @@ -108,11 +118,19 @@ class SettingFragment : BaseFragment() } private fun setResultKeyword() { - resultLauncher = + resultLauncherKeyword = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { - viewModel.getUserTopic() - viewModel.updateUserTopic(topics) + viewModel.getUserTopic().run { viewModel.updateUserTopic(topics) } + } + } + } + + private fun setResultDepartment() { + resultResultDepartment = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + viewModel.getUserDepartment() } } } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt index 29d51831..1284d72d 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt @@ -11,6 +11,7 @@ import com.dongyang.android.youdongknowme.standard.base.BaseViewModel import com.dongyang.android.youdongknowme.standard.network.NetworkResult import com.dongyang.android.youdongknowme.ui.view.util.Event import kotlinx.coroutines.launch +import timber.log.Timber /* 설정 뷰모델 */ class SettingViewModel(private val settingRepository: SettingRepository) : BaseViewModel() { @@ -41,6 +42,7 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV init { getUserFCMToken() + getUserDepartment() } fun checkAccessAlarm() { @@ -60,14 +62,17 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV } fun getUserDepartment() { - val myDepartment = settingRepository.getUserDepartment() - _myDepartment.postValue(myDepartment) + viewModelScope.launch { + val department = settingRepository.getUserDepartment() + _myDepartment.postValue(department) + Timber.d("update viewmodel $department") + } } fun getUserTopic() { viewModelScope.launch { val keyword = settingRepository.getUserTopic() - _myTopics.value = keyword + _myTopics.postValue(keyword) } } @@ -76,17 +81,18 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV _FCMToken.postValue(token) } - fun updateUserDepartment() { + fun updateUserDepartment(department: String) { _isLoading.postValue(true) viewModelScope.launch { when (val result = settingRepository.updateUserDepartment( UpdateDepartment( token = FCMToken.value.toString(), - department = myDepartment.value.toString() + department = department ) )) { is NetworkResult.Success -> { + Timber.d("update network $department") settingRepository.setIsAccessDepartAlarm(true) _isLoading.postValue(false) _isError.postValue(false) From 6f0445799722c23689db271e3b3d1609ac249b97 Mon Sep 17 00:00:00 2001 From: Son Myeongji Date: Mon, 1 Apr 2024 17:21:00 +0900 Subject: [PATCH 5/9] =?UTF-8?q?refactor=20:=20=ED=8C=80=EB=B2=84=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/repository/SettingRepository.kt | 2 -- .../ui/view/setting/SettingFragment.kt | 2 +- .../ui/view/setting/SettingViewModel.kt | 16 ++++------------ 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/SettingRepository.kt b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/SettingRepository.kt index 65defcf1..8281ee08 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/SettingRepository.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/SettingRepository.kt @@ -9,7 +9,6 @@ import com.dongyang.android.youdongknowme.data.remote.service.SettingService import com.dongyang.android.youdongknowme.standard.network.ErrorResponseHandler import com.dongyang.android.youdongknowme.standard.network.NetworkResult import com.dongyang.android.youdongknowme.standard.network.RetrofitObject -import timber.log.Timber class SettingRepository( private val keywordDao: KeywordDao, @@ -29,7 +28,6 @@ class SettingRepository( } fun getUserDepartment(): String { - Timber.d("update settingRepo ${SharedPreference.getDepartment()}") return SharedPreference.getDepartment() } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt index bc4c14f1..be1bf212 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt @@ -12,7 +12,6 @@ import com.dongyang.android.youdongknowme.ui.view.depart.DepartActivity import com.dongyang.android.youdongknowme.ui.view.keyword.KeywordActivity import com.dongyang.android.youdongknowme.ui.view.license.LicenseActivity import org.koin.androidx.viewmodel.ext.android.viewModel -import timber.log.Timber /* 설정 화면 */ class SettingFragment : BaseFragment() { @@ -42,6 +41,7 @@ class SettingFragment : BaseFragment() viewModel.myTopics.observe(viewLifecycleOwner) { myTopics -> topics = myTopics + viewModel.updateUserTopic(topics) } viewModel.isAccessUniversityAlarm.observe(viewLifecycleOwner) { isChecked -> diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt index 1284d72d..1c66cca7 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt @@ -11,7 +11,6 @@ import com.dongyang.android.youdongknowme.standard.base.BaseViewModel import com.dongyang.android.youdongknowme.standard.network.NetworkResult import com.dongyang.android.youdongknowme.ui.view.util.Event import kotlinx.coroutines.launch -import timber.log.Timber /* 설정 뷰모델 */ class SettingViewModel(private val settingRepository: SettingRepository) : BaseViewModel() { @@ -62,23 +61,17 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV } fun getUserDepartment() { - viewModelScope.launch { - val department = settingRepository.getUserDepartment() - _myDepartment.postValue(department) - Timber.d("update viewmodel $department") - } + _myDepartment.value = settingRepository.getUserDepartment() } fun getUserTopic() { viewModelScope.launch { - val keyword = settingRepository.getUserTopic() - _myTopics.postValue(keyword) + _myTopics.postValue(settingRepository.getUserTopic()) } } private fun getUserFCMToken() { - val token = settingRepository.getUserFCMToken() - _FCMToken.postValue(token) + _FCMToken.value = settingRepository.getUserFCMToken() } fun updateUserDepartment(department: String) { @@ -92,7 +85,6 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV ) )) { is NetworkResult.Success -> { - Timber.d("update network $department") settingRepository.setIsAccessDepartAlarm(true) _isLoading.postValue(false) _isError.postValue(false) @@ -158,7 +150,7 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV fun removeUserTopic() { _isLoading.postValue(true) - + viewModelScope.launch { when (val result = settingRepository.removeUserTopic( From 63d1a6042bcc51a662e7108c3a71305152ae3d2d Mon Sep 17 00:00:00 2001 From: Son Myeongji Date: Mon, 1 Apr 2024 20:38:46 +0900 Subject: [PATCH 6/9] =?UTF-8?q?fix=20:=20init=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youdongknowme/ui/view/main/MainActivity.kt | 11 ++++++----- .../youdongknowme/ui/view/main/MainViewModel.kt | 4 +++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt index 6108b317..a25da2a4 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt @@ -36,20 +36,21 @@ class MainActivity : BaseActivity() { binding.mainNvBottom.setupWithNavController(navController) viewModel.checkFirstLaunch() + } - if (viewModel.isFirstLaunch.value == true) { - getFcmToken() + override fun initDataBinding() { + viewModel.isFirstLaunch.observe(this) { boolean -> + if (boolean) getFcmToken() } } - override fun initDataBinding() = Unit override fun initAfterBinding() = Unit private fun getFcmToken() { FirebaseMessaging.getInstance().token.addOnCompleteListener { task -> if (task.isSuccessful) { - viewModel.setFCMToken(task.result) - viewModel.setInitToken() + viewModel.setFCMToken(task.result).run { viewModel.setInitToken() } + Timber.d("first ${task.result}") } else { return@addOnCompleteListener } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainViewModel.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainViewModel.kt index c9cc52b3..119f2bd7 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainViewModel.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainViewModel.kt @@ -9,6 +9,7 @@ import com.dongyang.android.youdongknowme.standard.base.BaseViewModel import com.dongyang.android.youdongknowme.standard.network.NetworkResult import com.dongyang.android.youdongknowme.ui.view.util.Event import kotlinx.coroutines.launch +import timber.log.Timber class MainViewModel(private val mainRepository: MainRepository) : BaseViewModel() { private val _errorState: MutableLiveData> = MutableLiveData() @@ -45,7 +46,7 @@ class MainViewModel(private val mainRepository: MainRepository) : BaseViewModel( fun setFCMToken(token: String){ mainRepository.setFCMToken(token) - _FCMToken.postValue(token) + _FCMToken.value = token } private fun getUserDepart(){ @@ -69,6 +70,7 @@ class MainViewModel(private val mainRepository: MainRepository) : BaseViewModel( ) )) { is NetworkResult.Success -> { + Timber.d("first ${FCMToken.value.toString()}") mainRepository.setIsFirstLaunch(false) _isFirstLaunch.postValue(false) _isLoading.postValue(false) From 0ebf9e17879e61ac28793a626223b31ae149f1fa Mon Sep 17 00:00:00 2001 From: Son Myeongji Date: Mon, 1 Apr 2024 21:09:24 +0900 Subject: [PATCH 7/9] =?UTF-8?q?fix=20:=20=ED=82=A4=EC=9B=8C=EB=93=9C=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=95=88=20=EB=90=98=EB=8A=94=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/youdongknowme/ui/view/keyword/KeywordActivity.kt | 1 + .../android/youdongknowme/ui/view/setting/SettingViewModel.kt | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/KeywordActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/KeywordActivity.kt index 0a7750d8..01187d2b 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/KeywordActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/KeywordActivity.kt @@ -38,6 +38,7 @@ class KeywordActivity : BaseActivity() viewModel.getLocalKeywordList() binding.btnKeywordComplete.setOnClickListener { + viewModel.subscribeCheckedKeyword() setResult(RESULT_OK) finish() } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt index 1c66cca7..99be380b 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt @@ -66,7 +66,8 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV fun getUserTopic() { viewModelScope.launch { - _myTopics.postValue(settingRepository.getUserTopic()) + val keyword = settingRepository.getUserTopic() + _myTopics.value = keyword } } From dece8afe249bad526a781aa9b1fb8b16a725190e Mon Sep 17 00:00:00 2001 From: Son Myeongji Date: Tue, 2 Apr 2024 15:37:05 +0900 Subject: [PATCH 8/9] =?UTF-8?q?feat=20:=20=EC=95=8C=EB=A6=BC=20=EA=BA=BC?= =?UTF-8?q?=EC=A7=84=20=EC=83=81=ED=83=9C=EC=97=90=EC=84=9C=20=ED=95=99?= =?UTF-8?q?=EA=B3=BC/=ED=82=A4=EC=9B=8C=EB=93=9C=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=8B=9C=20=EC=8A=A4=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EC=BC=9C=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youdongknowme/ui/view/setting/SettingFragment.kt | 2 ++ .../youdongknowme/ui/view/setting/SettingViewModel.kt | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt index be1bf212..f0bc15e0 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt @@ -122,6 +122,7 @@ class SettingFragment : BaseFragment() registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { viewModel.getUserTopic().run { viewModel.updateUserTopic(topics) } + binding.switchSettingUniversityAlarm.isChecked = true } } } @@ -131,6 +132,7 @@ class SettingFragment : BaseFragment() registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { viewModel.getUserDepartment() + binding.switchSettingDepartmentAlarm.isChecked = true } } } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt index 99be380b..85779b9e 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingViewModel.kt @@ -86,7 +86,7 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV ) )) { is NetworkResult.Success -> { - settingRepository.setIsAccessDepartAlarm(true) + setIsAccessDepartAlarm(true) _isLoading.postValue(false) _isError.postValue(false) } @@ -110,7 +110,7 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV ) ) { is NetworkResult.Success -> { - settingRepository.setIsAccessDepartAlarm(false) + setIsAccessDepartAlarm(false) _isLoading.postValue(false) _isError.postValue(false) } @@ -135,7 +135,7 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV ) )) { is NetworkResult.Success -> { - settingRepository.setIsAccessSchoolAlarm(true) + setIsAccessUniversityAlarm(true) _isLoading.postValue(false) _isError.postValue(false) } @@ -158,7 +158,7 @@ class SettingViewModel(private val settingRepository: SettingRepository) : BaseV RemoveToken(token = FCMToken.value.toString()) )) { is NetworkResult.Success -> { - settingRepository.setIsAccessSchoolAlarm(false) + setIsAccessUniversityAlarm(false) _isLoading.postValue(false) _isError.postValue(false) } From f120350ea8a87c4b69433def0b3e4f0c180581fc Mon Sep 17 00:00:00 2001 From: Son Myeongji Date: Tue, 2 Apr 2024 15:37:47 +0900 Subject: [PATCH 9/9] =?UTF-8?q?refactor=20:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=ED=8C=8C=EC=9D=BC=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/youdongknowme/service/Topic.kt | 24 ------------------- 1 file changed, 24 deletions(-) delete mode 100644 app/src/main/java/com/dongyang/android/youdongknowme/service/Topic.kt diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/service/Topic.kt b/app/src/main/java/com/dongyang/android/youdongknowme/service/Topic.kt deleted file mode 100644 index 5cce1720..00000000 --- a/app/src/main/java/com/dongyang/android/youdongknowme/service/Topic.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.dongyang.android.youdongknowme.service - -enum class Topic(korean: String, english: String) { - exam("시험", "exam"), - signup("수강", "signup"), - speciallecture("특강", "speciallecture"), - seasonalsemester("계절학기", "seasonalsemester"), - leaveofabsence("휴학", "leaveofabsence"), - returntoschool("복학", "returntoschool"), - graduate("졸업", "graduate"), - switchmajors("전과", "switchmajors"), - givingupthesemester("학기포기", "givingupthesemester"), - scholarship("장학", "scholarship"), - nationalscholarship("국가장학", "nationalscholarship"), - registration("등록", "registration"), - employment("채용", "employment"), - contest("공모전", "contest"), - competition("대회", "competition"), - fieldtraining("현장실습", "fieldtraining"), - volunteer("봉사", "volunteer"), - dormitory("기숙사", "dormitory"), - group("동아리", "group"), - studentcouncil("학생회", "studentcouncil"); -} \ No newline at end of file