diff --git a/build-logic/src/main/java/com/teamwable/wable/plugin/AndroidFeaturePlugin.kt b/build-logic/src/main/java/com/teamwable/wable/plugin/AndroidFeaturePlugin.kt index fc4590c5..208b76e5 100644 --- a/build-logic/src/main/java/com/teamwable/wable/plugin/AndroidFeaturePlugin.kt +++ b/build-logic/src/main/java/com/teamwable/wable/plugin/AndroidFeaturePlugin.kt @@ -11,9 +11,13 @@ class AndroidFeaturePlugin : Plugin { plugins.apply("com.android.library") configureAndroidCommonPlugin() + with(plugins) { + apply("androidx.navigation.safeargs") + } + val libs = extensions.getByType().named("libs") dependencies { "implementation"(libs.findLibrary("androidx.constraintlayout").get()) } } -} \ No newline at end of file +} diff --git a/build.gradle.kts b/build.gradle.kts index 372ee04e..44cea1f9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,6 +13,7 @@ buildscript { classpath(libs.kotlin.gradleplugin) classpath(libs.hilt.plugin) classpath(libs.agp) + classpath(libs.androidx.navigation.safe.args) } } diff --git a/core/common/src/main/res/drawable/ic_profile_hamberger_btn.xml b/core/common/src/main/res/drawable/ic_profile_hamburger_btn.xml similarity index 100% rename from core/common/src/main/res/drawable/ic_profile_hamberger_btn.xml rename to core/common/src/main/res/drawable/ic_profile_hamburger_btn.xml diff --git a/core/common/src/main/res/drawable/ic_share_bottomsheet_bar.xml b/core/common/src/main/res/drawable/ic_share_bottomsheet_bar.xml new file mode 100644 index 00000000..04e2a8f9 --- /dev/null +++ b/core/common/src/main/res/drawable/ic_share_bottomsheet_bar.xml @@ -0,0 +1,13 @@ + + + diff --git a/core/ui/src/main/java/com/teamwable/ui/util/Constants.kt b/core/ui/src/main/java/com/teamwable/ui/util/Constants.kt index 1e465786..f1d13b64 100644 --- a/core/ui/src/main/java/com/teamwable/ui/util/Constants.kt +++ b/core/ui/src/main/java/com/teamwable/ui/util/Constants.kt @@ -1,2 +1,11 @@ package com.teamwable.ui.util + // 전역적으로 쓰이는 키 값 관리 +object BottomSheetTag { + const val PROFILE_HAMBURGER_BOTTOM_SHEET = "ProfileHamburgerBottomSheet" +} + +object DialogTag { + const val PROFILE_DELETE_DIALOG = "ProfileDeleteDialog" + const val LOGOUT_DIALOG = "LogoutDialog" +} diff --git a/core/ui/src/main/res/color/sel_bottom_btn_color.xml b/core/ui/src/main/res/color/sel_bottom_btn_color.xml new file mode 100644 index 00000000..d0fbcef7 --- /dev/null +++ b/core/ui/src/main/res/color/sel_bottom_btn_color.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/core/ui/src/main/res/drawable/shape_fill_12_rect.xml b/core/ui/src/main/res/drawable/shape_fill_12_rect.xml new file mode 100644 index 00000000..d57fde86 --- /dev/null +++ b/core/ui/src/main/res/drawable/shape_fill_12_rect.xml @@ -0,0 +1,4 @@ + + + + diff --git a/core/ui/src/main/res/drawable/shape_fill_top_16_rect.xml b/core/ui/src/main/res/drawable/shape_fill_top_16_rect.xml new file mode 100644 index 00000000..f5b894a8 --- /dev/null +++ b/core/ui/src/main/res/drawable/shape_fill_top_16_rect.xml @@ -0,0 +1,6 @@ + + + + diff --git a/core/ui/src/main/res/drawable/shape_gray200_line_16_rect.xml b/core/ui/src/main/res/drawable/shape_gray200_line_16_rect.xml new file mode 100644 index 00000000..cfe88b4d --- /dev/null +++ b/core/ui/src/main/res/drawable/shape_gray200_line_16_rect.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/feature/home/src/main/res/navigation/graph_home.xml b/feature/home/src/main/res/navigation/graph_home.xml new file mode 100644 index 00000000..3d536f56 --- /dev/null +++ b/feature/home/src/main/res/navigation/graph_home.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/feature/main/src/main/java/com/teamwable/main/MainActivity.kt b/feature/main/src/main/java/com/teamwable/main/MainActivity.kt index de3bd832..eadd3266 100644 --- a/feature/main/src/main/java/com/teamwable/main/MainActivity.kt +++ b/feature/main/src/main/java/com/teamwable/main/MainActivity.kt @@ -51,16 +51,26 @@ class MainActivity : AppCompatActivity() { private fun initBottomNavigationChangedListener(navController: NavController) { navController.addOnDestinationChangedListener { controller, destination, arguments -> handleBottomNavigationVisibility(destination) - if (destination.id == R.id.navigation_notification) setBadgeOnNotification(false) + if (destination.id == com.teamwable.notification.R.id.navigation_notification) setBadgeOnNotification(false) } } private fun handleBottomNavigationVisibility(destination: NavDestination) { - binding.groupMainBnv.visible(destination.id != R.id.navigation_posting) + if (destination.id in listOf( + com.teamwable.home.R.id.navigation_home, + com.teamwable.news.R.id.navigation_news, + com.teamwable.notification.R.id.navigation_notification, + com.teamwable.profile.R.id.navigation_profile, + ) + ) { + binding.groupMainBnv.visible(true) + } else { + binding.groupMainBnv.visible(false) + } } private fun setBadgeOnNotification(isVisible: Boolean) { - binding.bnvMain.getOrCreateBadge(R.id.navigation_notification).apply { + binding.bnvMain.getOrCreateBadge(R.id.graph_notification).apply { this.isVisible = isVisible horizontalOffset = 1 if (isVisible) backgroundColor = colorOf(com.teamwable.ui.R.color.error) else clearNumber() diff --git a/feature/main/src/main/res/menu/menu_main_navigation.xml b/feature/main/src/main/res/menu/menu_main_navigation.xml index aa0b5213..0b7f97d9 100644 --- a/feature/main/src/main/res/menu/menu_main_navigation.xml +++ b/feature/main/src/main/res/menu/menu_main_navigation.xml @@ -1,19 +1,19 @@ diff --git a/feature/main/src/main/res/navigation/graph_main.xml b/feature/main/src/main/res/navigation/graph_main.xml index a2f91854..0ea25202 100644 --- a/feature/main/src/main/res/navigation/graph_main.xml +++ b/feature/main/src/main/res/navigation/graph_main.xml @@ -1,33 +1,12 @@ + app:startDestination="@id/graph_home"> - - - - - + + + + + diff --git a/feature/news/src/main/res/navigation/graph_news.xml b/feature/news/src/main/res/navigation/graph_news.xml new file mode 100644 index 00000000..da9baacf --- /dev/null +++ b/feature/news/src/main/res/navigation/graph_news.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/feature/notification/src/main/res/navigation/graph_notification.xml b/feature/notification/src/main/res/navigation/graph_notification.xml new file mode 100644 index 00000000..4452946f --- /dev/null +++ b/feature/notification/src/main/res/navigation/graph_notification.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/feature/posting/src/main/res/navigation/graph_posting.xml b/feature/posting/src/main/res/navigation/graph_posting.xml new file mode 100644 index 00000000..8d4fe646 --- /dev/null +++ b/feature/posting/src/main/res/navigation/graph_posting.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/feature/profile/src/main/java/com/teamwable/profile/LogoutDialogFragment.kt b/feature/profile/src/main/java/com/teamwable/profile/LogoutDialogFragment.kt new file mode 100644 index 00000000..de6909b7 --- /dev/null +++ b/feature/profile/src/main/java/com/teamwable/profile/LogoutDialogFragment.kt @@ -0,0 +1,38 @@ +package com.teamwable.profile + +import com.teamwable.profile.databinding.FragmentDeleteDialogBinding +import com.teamwable.ui.base.BindingDialogFragment +import com.teamwable.ui.extensions.dialogFragmentResize +import com.teamwable.ui.extensions.stringOf + +class LogoutDialogFragment : BindingDialogFragment(R.layout.fragment_delete_dialog, FragmentDeleteDialogBinding::inflate) { + override fun initView() { + initText() + initCancelBtnClickListener() + initDeleteBtnClickListener() + } + + private fun initText() { + with(binding) { + tvDeleteDialogTitle.text = stringOf(R.string.tv_logout_dialog_title) + btnDeleteDialogDelete.text = stringOf(R.string.btn_logout_dialog_delete) + } + } + + override fun onResume() { + super.onResume() + context?.dialogFragmentResize(this, 30.0f) + } + + private fun initCancelBtnClickListener() { + binding.btnDeleteDialogCancel.setOnClickListener { + dismiss() + } + } + + private fun initDeleteBtnClickListener() { + binding.btnDeleteDialogDelete.setOnClickListener { + // Todo : 나중에 추가해야 함 + } + } +} diff --git a/feature/profile/src/main/java/com/teamwable/profile/ProfileDeleteConfirmFragment.kt b/feature/profile/src/main/java/com/teamwable/profile/ProfileDeleteConfirmFragment.kt new file mode 100644 index 00000000..880af5d0 --- /dev/null +++ b/feature/profile/src/main/java/com/teamwable/profile/ProfileDeleteConfirmFragment.kt @@ -0,0 +1,46 @@ +package com.teamwable.profile + +import androidx.navigation.fragment.findNavController +import com.teamwable.profile.databinding.FragmentProfileDeleteConfirmBinding +import com.teamwable.ui.base.BindingFragment +import com.teamwable.ui.extensions.colorOf +import com.teamwable.ui.extensions.stringOf +import com.teamwable.ui.util.DialogTag.PROFILE_DELETE_DIALOG + +class ProfileDeleteConfirmFragment : BindingFragment(FragmentProfileDeleteConfirmBinding::inflate) { + override fun initView() { + setAppbarText() + initBackBtnClickListener() + initCheckBoxClickListener() + } + + private fun initCheckBoxClickListener() { + binding.cbProfileDeleteConfirm.setOnClickListener { + binding.btnProfileDeleteConfirmNext.apply { + isEnabled = binding.cbProfileDeleteConfirm.isChecked + if (isEnabled) { + setTextColor(colorOf(com.teamwable.ui.R.color.white)) + setOnClickListener { + showToProfileDeleteDialogFragment() + } + } else { + setTextColor(colorOf(com.teamwable.ui.R.color.gray_600)) + } + } + } + } + + private fun setAppbarText() { + binding.viewProfileDeleteConfirmAppbar.tvProfileAppbarTitle.text = stringOf(R.string.appbar_profile_delete_title) + } + + private fun initBackBtnClickListener() { + binding.viewProfileDeleteConfirmAppbar.btnProfileAppbarBack.setOnClickListener { + findNavController().popBackStack() + } + } + + private fun showToProfileDeleteDialogFragment() { + ProfileDeleteDialogFragment().show(childFragmentManager, PROFILE_DELETE_DIALOG) + } +} diff --git a/feature/profile/src/main/java/com/teamwable/profile/ProfileDeleteDialogFragment.kt b/feature/profile/src/main/java/com/teamwable/profile/ProfileDeleteDialogFragment.kt new file mode 100644 index 00000000..5d99d4ac --- /dev/null +++ b/feature/profile/src/main/java/com/teamwable/profile/ProfileDeleteDialogFragment.kt @@ -0,0 +1,37 @@ +package com.teamwable.profile + +import com.teamwable.profile.databinding.FragmentDeleteDialogBinding +import com.teamwable.ui.base.BindingDialogFragment +import com.teamwable.ui.extensions.dialogFragmentResize +import com.teamwable.ui.extensions.stringOf + +class ProfileDeleteDialogFragment : BindingDialogFragment(R.layout.fragment_delete_dialog, FragmentDeleteDialogBinding::inflate) { + override fun initView() { + initText() + initCancelBtnClickListener() + initDeleteBtnClickListener() + } + + private fun initText() { + with(binding) { + tvDeleteDialogTitle.text = stringOf(R.string.tv_profile_delete_dialog_title) + } + } + + override fun onResume() { + super.onResume() + context?.dialogFragmentResize(this, 30.0f) + } + + private fun initCancelBtnClickListener() { + binding.btnDeleteDialogCancel.setOnClickListener { + dismiss() + } + } + + private fun initDeleteBtnClickListener() { + binding.btnDeleteDialogDelete.setOnClickListener { + // Todo : 나중에 추가해야 함 + } + } +} diff --git a/feature/profile/src/main/java/com/teamwable/profile/ProfileDeleteReasonFragment.kt b/feature/profile/src/main/java/com/teamwable/profile/ProfileDeleteReasonFragment.kt new file mode 100644 index 00000000..5f7b1156 --- /dev/null +++ b/feature/profile/src/main/java/com/teamwable/profile/ProfileDeleteReasonFragment.kt @@ -0,0 +1,66 @@ +package com.teamwable.profile + +import android.widget.CheckBox +import androidx.navigation.fragment.findNavController +import com.teamwable.profile.databinding.FragmentProfileDeleteReasonBinding +import com.teamwable.ui.base.BindingFragment +import com.teamwable.ui.extensions.colorOf + +class ProfileDeleteReasonFragment : BindingFragment(FragmentProfileDeleteReasonBinding::inflate) { + private lateinit var checkBoxList: List + + override fun initView() { + setAppbarText() + initBackBtnClickListener() + initCheckBoxList() + initCheckBoxClickListener() + updateButtonState() + } + + private fun initCheckBoxList() = with(binding) { + checkBoxList = listOf( + cbProfileDeleteReasonCheck1, + cbProfileDeleteReasonCheck2, + cbProfileDeleteReasonCheck3, + cbProfileDeleteReasonCheck4, + cbProfileDeleteReasonCheck5, + cbProfileDeleteReasonCheck6, + cbProfileDeleteReasonCheck7, + ) + } + + private fun updateButtonState() { + val anyChecked = checkBoxList.any { it.isChecked } + binding.btnProfileDeleteReasonNext.apply { + isEnabled = anyChecked + if (isEnabled) { + setTextColor(colorOf(com.teamwable.ui.R.color.white)) + setOnClickListener { + navigateUpToProfileDeleteConfirmFragment() + } + } else setTextColor(colorOf(com.teamwable.ui.R.color.gray_600)) + } + } + + private fun initCheckBoxClickListener() { + checkBoxList.forEach { checkBox -> + checkBox.setOnCheckedChangeListener { _, _ -> + updateButtonState() + } + } + } + + private fun setAppbarText() { + binding.viewProfileDeleteReasonAppbar.tvProfileAppbarTitle.text = getString(R.string.appbar_profile_delete_title) + } + + private fun initBackBtnClickListener() { + binding.viewProfileDeleteReasonAppbar.btnProfileAppbarBack.setOnClickListener { + findNavController().popBackStack() + } + } + + private fun navigateUpToProfileDeleteConfirmFragment() { + findNavController().navigate(R.id.action_navigation_profile_delete_reason_to_navigation_profile_delete_confirm) + } +} diff --git a/feature/profile/src/main/java/com/teamwable/profile/ProfileFragment.kt b/feature/profile/src/main/java/com/teamwable/profile/ProfileFragment.kt index d8e80b07..11ca3c0c 100644 --- a/feature/profile/src/main/java/com/teamwable/profile/ProfileFragment.kt +++ b/feature/profile/src/main/java/com/teamwable/profile/ProfileFragment.kt @@ -2,10 +2,32 @@ package com.teamwable.profile import com.teamwable.profile.databinding.FragmentProfileBinding import com.teamwable.ui.base.BindingFragment +import com.teamwable.ui.extensions.visible +import com.teamwable.ui.util.BottomSheetTag.PROFILE_HAMBURGER_BOTTOM_SHEET import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class ProfileFragment : BindingFragment(FragmentProfileBinding::inflate) { override fun initView() { + initAppbarBtnVisibility() + setAppbarText() + initAppbarHamburgerClickListener() + } + + private fun setAppbarText() { + binding.viewProfileAppbar.tvProfileAppbarTitle.text = "배 차은우" + } + + private fun initAppbarBtnVisibility() { + with(binding.viewProfileAppbar) { + btnProfileAppbarBack.visible(false) + btnProfileAppbarHamburger.visible(true) + } + } + + private fun initAppbarHamburgerClickListener() { + binding.viewProfileAppbar.btnProfileAppbarHamburger.setOnClickListener { + ProfileHamburgerBottomSheet().show(childFragmentManager, PROFILE_HAMBURGER_BOTTOM_SHEET) + } } } diff --git a/feature/profile/src/main/java/com/teamwable/profile/ProfileHamburgerBottomSheet.kt b/feature/profile/src/main/java/com/teamwable/profile/ProfileHamburgerBottomSheet.kt new file mode 100644 index 00000000..90f1f03a --- /dev/null +++ b/feature/profile/src/main/java/com/teamwable/profile/ProfileHamburgerBottomSheet.kt @@ -0,0 +1,48 @@ +package com.teamwable.profile + +import android.content.Intent +import android.net.Uri +import androidx.navigation.fragment.findNavController +import com.teamwable.profile.databinding.BottomsheetProfileHamburgerBinding +import com.teamwable.ui.base.BindingBottomSheetFragment +import com.teamwable.ui.util.DialogTag.LOGOUT_DIALOG + +class ProfileHamburgerBottomSheet : BindingBottomSheetFragment(BottomsheetProfileHamburgerBinding::inflate) { + override fun initView() { + initAccountInformationBtnClickListener() + initNotificationSettingBtnClickListener() + initFeedbackBtnClickListener() + initCustomerServiceBtnClickListener() + initLogoutBtnClickListener() + } + + private fun initAccountInformationBtnClickListener() { + binding.tvProfileHamburgerAccountInformation.setOnClickListener { + findNavController().navigate(R.id.action_profile_to_profile_information) + } + } + + private fun initNotificationSettingBtnClickListener() { + binding.tvProfileHamburgerNotificationSetting.setOnClickListener { + findNavController().navigate(R.id.action_profile_to_push_notification) + } + } + + private fun initFeedbackBtnClickListener() { + // navigateToWeb("") + } + + private fun initCustomerServiceBtnClickListener() { + // navigateToWeb("") + } + + private fun initLogoutBtnClickListener() { + binding.tvProfileHamburgerLogout.setOnClickListener { + LogoutDialogFragment().show(childFragmentManager, LOGOUT_DIALOG) + } + } + + private fun navigateToWeb(uri: String) { + Intent(Intent.ACTION_VIEW, Uri.parse(uri)).also { startActivity(it) } + } +} diff --git a/feature/profile/src/main/java/com/teamwable/profile/ProfileInformationFragment.kt b/feature/profile/src/main/java/com/teamwable/profile/ProfileInformationFragment.kt new file mode 100644 index 00000000..239017a0 --- /dev/null +++ b/feature/profile/src/main/java/com/teamwable/profile/ProfileInformationFragment.kt @@ -0,0 +1,40 @@ +package com.teamwable.profile + +import androidx.navigation.fragment.findNavController +import com.teamwable.profile.databinding.FragmentProfileInformationBinding +import com.teamwable.ui.base.BindingFragment +import com.teamwable.ui.extensions.stringOf + +class ProfileInformationFragment : BindingFragment(FragmentProfileInformationBinding::inflate) { + override fun initView() { + setAppbarText() + setInformationText() + initBackBtnClickListener() + initDeleteBtnClickListener() + } + + private fun setInformationText() { + with(binding) { + tvProfileInformationSocialContent.text = "카카오톡 소셜 로긘" + tvProfileInformationVersionContent.text = "0.0.0" + tvProfileInformationIdContent.text = "wable" + tvProfileInformationRegistrationDateContent.text = "2024-08-15" + } + } + + private fun setAppbarText() { + binding.viewProfileInformationAppbar.tvProfileAppbarTitle.text = stringOf(R.string.appbar_profile_information_title) + } + + private fun initBackBtnClickListener() { + binding.viewProfileInformationAppbar.btnProfileAppbarBack.setOnClickListener { + findNavController().popBackStack() + } + } + + private fun initDeleteBtnClickListener() { + binding.tvProfileInformationDelete.setOnClickListener { + findNavController().navigate(R.id.action_navigation_profile_information_to_navigation_profile_delete_reason) + } + } +} diff --git a/feature/profile/src/main/java/com/teamwable/profile/PushNotificationFragment.kt b/feature/profile/src/main/java/com/teamwable/profile/PushNotificationFragment.kt new file mode 100644 index 00000000..aa397d84 --- /dev/null +++ b/feature/profile/src/main/java/com/teamwable/profile/PushNotificationFragment.kt @@ -0,0 +1,23 @@ +package com.teamwable.profile + +import androidx.navigation.fragment.findNavController +import com.teamwable.profile.databinding.FragmentPushNotificationBinding +import com.teamwable.ui.base.BindingFragment +import com.teamwable.ui.extensions.stringOf + +class PushNotificationFragment : BindingFragment(FragmentPushNotificationBinding::inflate) { + override fun initView() { + setAppbarText() + initBackBtnClickListener() + } + + private fun setAppbarText() { + binding.viewPushNotificationAppbar.tvProfileAppbarTitle.text = stringOf(R.string.appbar_push_notification_title) + } + + private fun initBackBtnClickListener() { + binding.viewPushNotificationAppbar.btnProfileAppbarBack.setOnClickListener { + findNavController().popBackStack() + } + } +} diff --git a/feature/profile/src/main/res/drawable/sel_profile_delete_checkbox.xml b/feature/profile/src/main/res/drawable/sel_profile_delete_checkbox.xml new file mode 100644 index 00000000..aa87dec6 --- /dev/null +++ b/feature/profile/src/main/res/drawable/sel_profile_delete_checkbox.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/feature/profile/src/main/res/layout/bottomsheet_profile_hamburger.xml b/feature/profile/src/main/res/layout/bottomsheet_profile_hamburger.xml new file mode 100644 index 00000000..a66bb45d --- /dev/null +++ b/feature/profile/src/main/res/layout/bottomsheet_profile_hamburger.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + diff --git a/feature/profile/src/main/res/layout/fragment_delete_dialog.xml b/feature/profile/src/main/res/layout/fragment_delete_dialog.xml new file mode 100644 index 00000000..ebe9af16 --- /dev/null +++ b/feature/profile/src/main/res/layout/fragment_delete_dialog.xml @@ -0,0 +1,60 @@ + + + + + + + + + + diff --git a/feature/profile/src/main/res/layout/fragment_profile.xml b/feature/profile/src/main/res/layout/fragment_profile.xml index 82859f26..3bcfa545 100644 --- a/feature/profile/src/main/res/layout/fragment_profile.xml +++ b/feature/profile/src/main/res/layout/fragment_profile.xml @@ -4,6 +4,10 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + - \ No newline at end of file + diff --git a/feature/profile/src/main/res/layout/fragment_profile_delete_confirm.xml b/feature/profile/src/main/res/layout/fragment_profile_delete_confirm.xml new file mode 100644 index 00000000..e006fdd8 --- /dev/null +++ b/feature/profile/src/main/res/layout/fragment_profile_delete_confirm.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/feature/profile/src/main/res/layout/fragment_profile_delete_reason.xml b/feature/profile/src/main/res/layout/fragment_profile_delete_reason.xml new file mode 100644 index 00000000..e5ee91e3 --- /dev/null +++ b/feature/profile/src/main/res/layout/fragment_profile_delete_reason.xml @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/feature/profile/src/main/res/layout/fragment_profile_information.xml b/feature/profile/src/main/res/layout/fragment_profile_information.xml new file mode 100644 index 00000000..db2af62b --- /dev/null +++ b/feature/profile/src/main/res/layout/fragment_profile_information.xml @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/feature/profile/src/main/res/layout/fragment_push_notification.xml b/feature/profile/src/main/res/layout/fragment_push_notification.xml new file mode 100644 index 00000000..06da45f4 --- /dev/null +++ b/feature/profile/src/main/res/layout/fragment_push_notification.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + diff --git a/feature/profile/src/main/res/layout/view_profile_appbar.xml b/feature/profile/src/main/res/layout/view_profile_appbar.xml new file mode 100644 index 00000000..f4c1e979 --- /dev/null +++ b/feature/profile/src/main/res/layout/view_profile_appbar.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + diff --git a/feature/profile/src/main/res/navigation/graph_profile.xml b/feature/profile/src/main/res/navigation/graph_profile.xml new file mode 100644 index 00000000..4d5e3f1e --- /dev/null +++ b/feature/profile/src/main/res/navigation/graph_profile.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + diff --git a/feature/profile/src/main/res/values/strings.xml b/feature/profile/src/main/res/values/strings.xml new file mode 100644 index 00000000..226ec828 --- /dev/null +++ b/feature/profile/src/main/res/values/strings.xml @@ -0,0 +1,58 @@ + + + + 계정 정보 + 알림 설정 + 피드백 남기기 + 고객센터 + 로그아웃 + + + 삭제하기 + + + 로그아웃하시겠어요? + 로그아웃하기 + + + 계정을 삭제하시겠어요? + + + 계정을 삭제하기 전,\n아래 내용을 꼭 확인해 주세요 + + 계정 삭제 처리된 이메일 아이디는 재가입 방지를 위해 30일간 보존된 후 삭제 처리됩니다. + 탈퇴와 재가입을 통해 아이디를 교체하며 선량한 이용자들께 피해를 끼치는 행위를 방지하려는 조치 오니 넓은 양해 부탁드립니다. + 안내사항을 모두 확인하였으며, 이에 동의합니다. + + + 정말 떠나시는 건가요? + 계정을 삭제하시려는 이유를 말씀해 주세요\n서비스 개선에 중요한 자료로 활용하겠습니다 + 온화하지 못한 내용이 많이 보여요. + 원하는 콘텐츠가 없어요. + 필요한 커뮤니티 기능이 없어요. + 자주 사용하지 않아요. + 앱 오류가 있어 사용하기 불편해요. + 가입할 때 사용한 소셜 계정이 바뀔 예정이에요. + 기타 + + + 계속 + 계정 삭제 + + + 소셜 로그인 + 버전 정보 + 아이디 + 가입일 + 이용약관 + 자세히 보기 + 계정 삭제하기 + 계정 정보 + + + 푸시 알림 + on + off + 알림 설정 + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 347fd079..d105b81e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -88,6 +88,7 @@ paging = { module = "androidx.paging:paging-runtime-ktx", version.ref = "paging" paging-domain = { module = "androidx.paging:paging-common", version.ref = "paging" } androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "navigationFragmentKtx" } androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigationUiKtx" } +androidx-navigation-safe-args = { group = "androidx.navigation", name = "navigation-safe-args-gradle-plugin", version.ref = "navigationFragmentKtx" } lifecycle-livedata = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "lifecycle" } androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }