diff --git a/.github/workflows/pr_builder.yml b/.github/workflows/pr_builder.yml index a21a3c0ad..bb4da3d10 100644 --- a/.github/workflows/pr_builder.yml +++ b/.github/workflows/pr_builder.yml @@ -45,7 +45,7 @@ jobs: - name: Access BASE_URL env: HFM_BASE_URL: ${{ secrets.BASE_URL }} - run: echo "base.url=\"$BASE_URL\"" >> local.properties + run: echo "dev.base.url=\"$BASE_URL\"" >> local.properties - name: Access IO_SENTRY_DSN env: diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7cbeef69b..f01aa69a3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,12 +26,10 @@ android { applicationId = "org.sopt.pingle" minSdk = 28 targetSdk = 34 - versionCode = 15 - versionName = "1.1.0" + versionCode = 16 + versionName = "2.0.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - buildConfigField("String", "BASE_URL", properties["base.url"].toString()) - buildConfigField("String", "ACCESS_TOKEN", properties["access.token"].toString()) buildConfigField( "String", "NAVER_MAP_CLIENT_ID", @@ -50,11 +48,13 @@ android { buildTypes { debug { isMinifyEnabled = false + buildConfigField("String", "BASE_URL", properties["dev.base.url"].toString()) buildConfigField("String", "AMPLITUDE_API_KEY", properties["amplitude.dev.api.key"].toString()) } release { isMinifyEnabled = true isShrinkResources = true + buildConfigField("String", "BASE_URL", properties["prod.base.url"].toString()) buildConfigField("String", "AMPLITUDE_API_KEY", properties["amplitude.prod.api.key"].toString()) proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b8920df5c..5f541aa11 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -82,16 +82,12 @@ android:exported="false" android:screenOrientation="portrait" tools:ignore="LockedOrientationActivity" /> + - - + (R.layout.activity_auth } private fun addListeners() { - binding.btnAuthKakao.setOnClickListener { + binding.btnAuthKakao.setOnSingleClickListener { kakaoAuthService.loginKakao(viewModel::login, viewModel::saveAccount) AmplitudeUtils.trackEventWithProperty(START_SIGNUP, SIGNUP_TYPE, KAKAO) } diff --git a/app/src/main/java/org/sopt/pingle/presentation/ui/auth/AuthViewModel.kt b/app/src/main/java/org/sopt/pingle/presentation/ui/auth/AuthViewModel.kt index 661385306..180fa21bb 100644 --- a/app/src/main/java/org/sopt/pingle/presentation/ui/auth/AuthViewModel.kt +++ b/app/src/main/java/org/sopt/pingle/presentation/ui/auth/AuthViewModel.kt @@ -32,11 +32,11 @@ class AuthViewModel @Inject constructor( authRepository.postLogin( kakaoAccessToken, RequestAuthDto(LOGIN_PLATFORM) - ).onSuccess { authEntitiy -> + ).onSuccess { authEntity -> with(localStorage) { isLogin = true - accessToken = (HEADER_BEARER + authEntitiy.accessToken) - refreshToken = (HEADER_BEARER + authEntitiy.refreshToken) + accessToken = (HEADER_BEARER + authEntity.accessToken) + refreshToken = (HEADER_BEARER + authEntity.refreshToken) } _loginState.value = UiState.Success(Unit) }.onFailure { diff --git a/app/src/main/java/org/sopt/pingle/presentation/ui/joingroup/JoinGroupCodeActivity.kt b/app/src/main/java/org/sopt/pingle/presentation/ui/joingroup/JoinGroupCodeActivity.kt index e6ca4682b..2ebb2785b 100644 --- a/app/src/main/java/org/sopt/pingle/presentation/ui/joingroup/JoinGroupCodeActivity.kt +++ b/app/src/main/java/org/sopt/pingle/presentation/ui/joingroup/JoinGroupCodeActivity.kt @@ -18,6 +18,7 @@ import org.sopt.pingle.util.component.PingleSnackbar import org.sopt.pingle.util.context.hideKeyboard import org.sopt.pingle.util.context.stringOf import org.sopt.pingle.util.view.UiState +import org.sopt.pingle.util.view.setOnSingleClickListener import timber.log.Timber @AndroidEntryPoint @@ -45,10 +46,10 @@ class JoinGroupCodeActivity : hideKeyboard(binding.etJoinGroupCodeInvitation) } - binding.btnJoinGroupCodeNext.setOnClickListener { + binding.btnJoinGroupCodeNext.setOnSingleClickListener { viewModel.joinGroupCodeState( teamId = teamId, - joinGroupEntity = JoinGroupCodeEntity(viewModel.joinGroupCodeEditText.value.toString()) + joinGroupEntity = JoinGroupCodeEntity(viewModel.joinGroupCodeEditText.value) ) AmplitudeUtils.trackEvent(CLICK_EXISTINGGROUP_ENTER) @@ -141,7 +142,7 @@ class JoinGroupCodeActivity : companion object { const val TEAM_ID = "teamId" const val GROUP_NAME = "groupName" - const val LOADING = "Loding" + const val LOADING = "Loading" const val EMPTY = "Empty" const val JOIN_GROUP_CODE_ACTIVITY = "JoinGroupCodeActivity" const val SNACKBAR_BOTTOM_MARGIN = 97 diff --git a/app/src/main/java/org/sopt/pingle/presentation/ui/main/home/map/MapFragment.kt b/app/src/main/java/org/sopt/pingle/presentation/ui/main/home/map/MapFragment.kt index b57d3e5f9..37dd1c7b9 100644 --- a/app/src/main/java/org/sopt/pingle/presentation/ui/main/home/map/MapFragment.kt +++ b/app/src/main/java/org/sopt/pingle/presentation/ui/main/home/map/MapFragment.kt @@ -358,7 +358,7 @@ class MapFragment : BindingFragment(R.layout.fragment_map), private fun makeMarkers(pinEntityList: List) { homeViewModel.clearMarkerModelData() - pinEntityList.mapIndexed { index, pinEntity -> + pinEntityList.mapIndexed { _, pinEntity -> pinEntity.toMarkerModel().apply { this.marker.apply { map = naverMap diff --git a/app/src/main/java/org/sopt/pingle/presentation/ui/main/more/MoreFragment.kt b/app/src/main/java/org/sopt/pingle/presentation/ui/main/more/MoreFragment.kt index ac333c66a..64648535f 100644 --- a/app/src/main/java/org/sopt/pingle/presentation/ui/main/more/MoreFragment.kt +++ b/app/src/main/java/org/sopt/pingle/presentation/ui/main/more/MoreFragment.kt @@ -25,6 +25,7 @@ import org.sopt.pingle.util.component.PingleSnackbar import org.sopt.pingle.util.fragment.navigateToWebView import org.sopt.pingle.util.fragment.stringOf import org.sopt.pingle.util.view.UiState +import org.sopt.pingle.util.view.setOnSingleClickListener import timber.log.Timber @AndroidEntryPoint @@ -55,11 +56,11 @@ class MoreFragment : BindingFragment(R.layout.fragment_more } private fun addListeners() { - binding.tvMoreContactTitle.setOnClickListener { + binding.tvMoreContactTitle.setOnSingleClickListener { startActivity(navigateToWebView(CONTACT)) } - binding.tvMoreNoticeTitle.setOnClickListener { + binding.tvMoreNoticeTitle.setOnSingleClickListener { startActivity(navigateToWebView(NOTICE)) } diff --git a/app/src/main/java/org/sopt/pingle/presentation/ui/plan/planlocation/PlanLocationFragment.kt b/app/src/main/java/org/sopt/pingle/presentation/ui/plan/planlocation/PlanLocationFragment.kt index df5022397..4041108db 100644 --- a/app/src/main/java/org/sopt/pingle/presentation/ui/plan/planlocation/PlanLocationFragment.kt +++ b/app/src/main/java/org/sopt/pingle/presentation/ui/plan/planlocation/PlanLocationFragment.kt @@ -30,6 +30,11 @@ class PlanLocationFragment : collectData() } + override fun onDestroyView() { + binding.rvPlanLocationList.adapter = null + super.onDestroyView() + } + private fun initLayout() { binding.rvPlanLocationList.adapter = planLocationAdapter } @@ -77,9 +82,4 @@ class PlanLocationFragment : private fun deleteOldPosition(position: Int) { planLocationViewModel.updatePlanLocationList(position) } - - override fun onDestroyView() { - binding.rvPlanLocationList.adapter = null - super.onDestroyView() - } } diff --git a/app/src/main/java/org/sopt/pingle/presentation/ui/plan/planopenchatting/PlanOpenChattingFragment.kt b/app/src/main/java/org/sopt/pingle/presentation/ui/plan/planopenchatting/PlanOpenChattingFragment.kt index b895f8484..f61a821fe 100644 --- a/app/src/main/java/org/sopt/pingle/presentation/ui/plan/planopenchatting/PlanOpenChattingFragment.kt +++ b/app/src/main/java/org/sopt/pingle/presentation/ui/plan/planopenchatting/PlanOpenChattingFragment.kt @@ -33,7 +33,7 @@ class PlanOpenChattingFragment : } private fun collectData() { - planViewModel.planOpenChattingLink.flowWithLifecycle(viewLifecycleOwner.lifecycle).onEach { openChattingLink -> + planViewModel.planOpenChattingLink.flowWithLifecycle(viewLifecycleOwner.lifecycle).onEach { planViewModel.validityOpenChattingLink() }.launchIn(viewLifecycleOwner.lifecycleScope) } diff --git a/app/src/main/java/org/sopt/pingle/util/base/BindingFragment.kt b/app/src/main/java/org/sopt/pingle/util/base/BindingFragment.kt index 263c09992..49212351d 100644 --- a/app/src/main/java/org/sopt/pingle/util/base/BindingFragment.kt +++ b/app/src/main/java/org/sopt/pingle/util/base/BindingFragment.kt @@ -24,8 +24,4 @@ abstract class BindingFragment(@LayoutRes private val layou binding.lifecycleOwner = this.viewLifecycleOwner return binding.root } - - override fun onDestroyView() { - super.onDestroyView() - } } diff --git a/app/src/main/java/org/sopt/pingle/util/component/AllModalDialogFragment.kt b/app/src/main/java/org/sopt/pingle/util/component/AllModalDialogFragment.kt index 45794f1cb..882271533 100644 --- a/app/src/main/java/org/sopt/pingle/util/component/AllModalDialogFragment.kt +++ b/app/src/main/java/org/sopt/pingle/util/component/AllModalDialogFragment.kt @@ -7,6 +7,7 @@ import android.view.View import org.sopt.pingle.R import org.sopt.pingle.databinding.DialogAllModalBinding import org.sopt.pingle.util.base.BindingDialogFragment +import org.sopt.pingle.util.view.setOnSingleClickListener class AllModalDialogFragment( private val title: String, @@ -42,12 +43,12 @@ class AllModalDialogFragment( } private fun addListeners() { - binding.btnAllModalButton.setOnClickListener { + binding.btnAllModalButton.setOnSingleClickListener { clickBtn() dismiss() } - binding.tvAllModalTextButton.setOnClickListener { + binding.tvAllModalTextButton.setOnSingleClickListener { clickTextBtn() dismiss() } diff --git a/app/src/main/java/org/sopt/pingle/util/component/PingleCardBottom.kt b/app/src/main/java/org/sopt/pingle/util/component/PingleCardBottom.kt index f43540d38..bc16663df 100644 --- a/app/src/main/java/org/sopt/pingle/util/component/PingleCardBottom.kt +++ b/app/src/main/java/org/sopt/pingle/util/component/PingleCardBottom.kt @@ -10,6 +10,7 @@ import org.sopt.pingle.databinding.BottomCardPingleBinding import org.sopt.pingle.domain.model.PingleEntity import org.sopt.pingle.presentation.mapper.isCompleted import org.sopt.pingle.util.view.DateTimeUtils +import org.sopt.pingle.util.view.setOnSingleClickListener import org.sopt.pingle.util.view.stringOf @SuppressLint("CustomViewStyleable") @@ -31,11 +32,11 @@ class PingleCardBottom @JvmOverloads constructor( } private fun addListeners() { - binding.btnCardBottomMapChat.setOnClickListener { + binding.btnCardBottomMapChat.setOnSingleClickListener { onChatButtonClick() } - binding.btnCardBottomMapParticipate.setOnClickListener { + binding.btnCardBottomMapParticipate.setOnClickListener() { onParticipateButtonClick(pinId) } } diff --git a/app/src/main/java/org/sopt/pingle/util/component/PingleModalDialogFragment.kt b/app/src/main/java/org/sopt/pingle/util/component/PingleModalDialogFragment.kt index d3e2edd17..10faa730b 100644 --- a/app/src/main/java/org/sopt/pingle/util/component/PingleModalDialogFragment.kt +++ b/app/src/main/java/org/sopt/pingle/util/component/PingleModalDialogFragment.kt @@ -8,6 +8,7 @@ import org.sopt.pingle.databinding.DialogPingleModalBinding import org.sopt.pingle.presentation.type.CategoryType import org.sopt.pingle.util.base.BindingDialogFragment import org.sopt.pingle.util.fragment.colorOf +import org.sopt.pingle.util.view.setOnSingleClickListener class PingleModalDialogFragment( private val category: CategoryType, @@ -39,12 +40,12 @@ class PingleModalDialogFragment( } private fun addListeners() { - binding.btnPingleModal.setOnClickListener { + binding.btnPingleModal.setOnSingleClickListener { clickBtn() dismiss() } - binding.layoutPingleModalBackground.setOnClickListener { + binding.layoutPingleModalBackground.setOnSingleClickListener { dismiss() } } diff --git a/app/src/main/java/org/sopt/pingle/util/view/ViewExt.kt b/app/src/main/java/org/sopt/pingle/util/view/ViewExt.kt index 4e2e8039a..081edca73 100644 --- a/app/src/main/java/org/sopt/pingle/util/view/ViewExt.kt +++ b/app/src/main/java/org/sopt/pingle/util/view/ViewExt.kt @@ -36,3 +36,19 @@ fun View.copyGroupCode(copyCode: String) { snackbarType = SnackbarType.CHECK ) } + +inline fun View.setOnSingleClickListener( + delay: Long = 500L, + crossinline block: (View) -> Unit +) { + var isClickable = true + setOnClickListener { view -> + if (isClickable) { + isClickable = false + block(view) + view.postDelayed({ + isClickable = true + }, delay) + } + } +} diff --git a/app/src/main/res/drawable-xhdpi/img_work_graphic.png b/app/src/main/res/drawable-xhdpi/img_work_graphic.png deleted file mode 100644 index 9a25c089c..000000000 Binary files a/app/src/main/res/drawable-xhdpi/img_work_graphic.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/img_work_graphic.png b/app/src/main/res/drawable-xxhdpi/img_work_graphic.png deleted file mode 100644 index 1603cf064..000000000 Binary files a/app/src/main/res/drawable-xxhdpi/img_work_graphic.png and /dev/null differ diff --git a/app/src/main/res/drawable/img_work_graphic.png b/app/src/main/res/drawable/img_work_graphic.png deleted file mode 100644 index 82ed05fca..000000000 Binary files a/app/src/main/res/drawable/img_work_graphic.png and /dev/null differ diff --git a/app/src/main/res/drawable/selector_indicator_onboarding.xml b/app/src/main/res/drawable/selector_indicator_onboarding.xml index 1cd0ca1c5..622e347b6 100644 --- a/app/src/main/res/drawable/selector_indicator_onboarding.xml +++ b/app/src/main/res/drawable/selector_indicator_onboarding.xml @@ -1,6 +1,6 @@ - - + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_indicator_onboarding_deselect_8.xml b/app/src/main/res/drawable/shape_ring_g_03.xml similarity index 100% rename from app/src/main/res/drawable/shape_indicator_onboarding_deselect_8.xml rename to app/src/main/res/drawable/shape_ring_g_03.xml diff --git a/app/src/main/res/drawable/shape_indicator_onboarding_select_8.xml b/app/src/main/res/drawable/shape_ring_white.xml similarity index 100% rename from app/src/main/res/drawable/shape_indicator_onboarding_select_8.xml rename to app/src/main/res/drawable/shape_ring_white.xml diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4f9d0a159..2d7e69c9c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -260,10 +260,6 @@ 다음으로 건너뛰기 - - 아직 공사중! - 아직 구현중인 기능이에요\n조금만 기다려주세요 - 참여현황 개최자 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 35f929f10..75f1236c8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,9 +16,9 @@ splash = "1.0.1" # Google material = "1.11.0" -google-services = "4.4.0" +google-services = "4.4.1" firebase-crashlytics = "2.9.9" -firebase-bom = "32.7.1" +firebase-bom = "32.7.4" # Test junit = "4.13.2" @@ -38,7 +38,7 @@ retrofit-kotlin-serialization-converter = "1.0.0" kotlin-serialization-json = "1.5.1" sentry = "4.1.1" naver-maps = "3.17.0" -play-services-location = "21.0.1" +play-services-location = "21.2.0" progress-bar = "1.1.3" kakao = "2.15.0" amplitude = "1.+"