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 }