From f586d7475912c7b3683b5ce6f518704a153a4991 Mon Sep 17 00:00:00 2001 From: sanjeok77 Date: Fri, 13 Mar 2026 00:27:42 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=ED=9C=B4=EA=B0=80=EA=B4=80=EB=A6=AC=20U?= =?UTF-8?q?I=20=EC=A0=95=EB=A6=AC=20=EB=B0=8F=20=EC=9E=90=EB=8F=99=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 중복된 '연차: -1일 / 반년: -0.5일 차감' 텍스트 제거 - 중복된 Spinner/NumberPicker 뷰 정리 - 저장 버튼 제거하고 Spinner 선택 시 자동 저장되도록 개선 - 버전 업데이트 v1.4.6 (1146) Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus --- .../example/shiftalarm/FragmentSettingsLab.kt | 46 +++++++++++++------ .../main/res/layout/fragment_settings_lab.xml | 34 ++------------ version.json | 8 ++-- 3 files changed, 40 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/com/example/shiftalarm/FragmentSettingsLab.kt b/app/src/main/java/com/example/shiftalarm/FragmentSettingsLab.kt index 9af5596..67942b8 100644 --- a/app/src/main/java/com/example/shiftalarm/FragmentSettingsLab.kt +++ b/app/src/main/java/com/example/shiftalarm/FragmentSettingsLab.kt @@ -4,16 +4,19 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import com.example.shiftalarm.databinding.FragmentSettingsLabBinding import kotlinx.coroutines.launch +import kotlinx.coroutines.delay class FragmentSettingsLab : Fragment() { private var _binding: FragmentSettingsLabBinding? = null private val binding get() = _binding!! + private var isInitialLoad = true override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -28,7 +31,6 @@ class FragmentSettingsLab : Fragment() { setupSpinner() loadAnnualLeave() - setupSaveButton() } private fun setupSpinner() { @@ -37,10 +39,25 @@ class FragmentSettingsLab : Fragment() { val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, daysList) adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) binding.spinnerTotalDays.adapter = adapter + + // 선택 시 자동 저장 + binding.spinnerTotalDays.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { + if (!isInitialLoad) { + val totalDays = position + 1 // 0-indexed to actual days + saveAnnualLeave(totalDays) + } + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + // Do nothing + } + } } private fun loadAnnualLeave() { lifecycleScope.launch { + isInitialLoad = true val repo = ShiftRepository(requireContext()) val annualLeave = repo.getAnnualLeave() @@ -53,24 +70,23 @@ class FragmentSettingsLab : Fragment() { binding.spinnerTotalDays.setSelection(14) binding.tvRemainingDays.text = "15" } + + // 초기 로드 완료 후 플래그 변경 (약간의 딜레이로 초기 선택 이벤트 방지) + delay(300) + isInitialLoad = false } } - private fun setupSaveButton() { - binding.btnSaveAnnualLeave.setOnClickListener { - val selectedPosition = binding.spinnerTotalDays.selectedItemPosition - val totalDays = selectedPosition + 1 // 0-indexed to actual days + private fun saveAnnualLeave(totalDays: Int) { + lifecycleScope.launch { + val repo = ShiftRepository(requireContext()) - lifecycleScope.launch { - val repo = ShiftRepository(requireContext()) - - repo.recalculateAndSaveAnnualLeave(totalDays.toFloat()) - - val updated = repo.getAnnualLeave() - updated?.let { - binding.tvRemainingDays.text = formatRemainingDays(it.remainingDays) - showCustomToast(requireContext(), "총 연차 ${totalDays}일로 저장되었습니다 (남은 연차: ${formatRemainingDays(it.remainingDays)}일)") - } + repo.recalculateAndSaveAnnualLeave(totalDays.toFloat()) + + val updated = repo.getAnnualLeave() + updated?.let { + binding.tvRemainingDays.text = formatRemainingDays(it.remainingDays) + showCustomToast(requireContext(), "총 연차 ${totalDays}일로 저장되었습니다 (남은 연차: ${formatRemainingDays(it.remainingDays)}일)") } } } diff --git a/app/src/main/res/layout/fragment_settings_lab.xml b/app/src/main/res/layout/fragment_settings_lab.xml index edd2c2a..b9a054f 100644 --- a/app/src/main/res/layout/fragment_settings_lab.xml +++ b/app/src/main/res/layout/fragment_settings_lab.xml @@ -15,13 +15,13 @@ android:textSize="18sp" android:textStyle="bold" android:textColor="@color/text_primary" - android:layout_marginBottom="16dp"/> + android:layout_marginBottom="24dp"/> @@ -30,7 +30,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="12dp" + android:padding="16dp" android:gravity="center_vertical"> - android:id="@+id/npTotalDays" - android:layout_width="60dp" - android:layout_height="100dp"/> @@ -79,7 +76,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:padding="12dp" + android:padding="16dp" android:gravity="center_vertical"> - - - - - - diff --git a/version.json b/version.json index 60f2160..5eee115 100644 --- a/version.json +++ b/version.json @@ -1,7 +1,7 @@ { - "versionCode": 1145, - "versionName": "1.4.5", - "apkUrl": "https://git.webpluss.net/attachments/aeb7b079-f81b-4c77-b8ee-b8fde90a530e", - "changelog": "v1.4.5: 연차 최초적용 수정, 휴가관리 Spinner 변경, 동그라미 크기 확대", + "versionCode": 1146, + "versionName": "1.4.6", + "apkUrl": "https://git.webpluss.net/attachments/94d91eff-db0f-44af-b043-b03918cba243", + "changelog": "v1.4.6: 휴가관리 중복 텍스트 제거, 자동 저장 기능 추가", "forceUpdate": false }