Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion app/src/main/java/com/eatssu/android/data/MySharedPreferences.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ package com.eatssu.android.data
import android.content.Context
import android.content.SharedPreferences

//자동 로그인을 위한 SharedPreferences
object MySharedPreferences {
private val MY_ACCOUNT: String = "account"

Expand Down Expand Up @@ -100,4 +99,14 @@ object MySharedPreferences {
context.getSharedPreferences(MY_ACCOUNT, Context.MODE_PRIVATE)
return prefs.getBoolean("ALARM_ON", false)
}

fun savePreTimePosition(context: Context, position: Int) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

다른 함수들처럼 save보다는 set 어떨까요??

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그리고 아침 점심 저녁은 0,1,2로 저장하기 보다는 ENUM이나 String으로 저장하는게 좋지 않을까요??

val prefs = context.getSharedPreferences(MY_ACCOUNT, Context.MODE_PRIVATE)
prefs.edit().putInt("PRE_TIME_POSITION", position).apply()
}

fun getPreTimePosition(context: Context): Int {
val prefs = context.getSharedPreferences(MY_ACCOUNT, Context.MODE_PRIVATE)
return prefs.getInt("PRE_TIME_POSITION", -1)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import com.eatssu.android.App
import com.eatssu.android.data.MySharedPreferences
import com.eatssu.android.databinding.FragmentCafeteriaBinding
import com.eatssu.android.presentation.base.BaseFragment
import com.eatssu.android.presentation.MainViewModel
import com.eatssu.android.presentation.base.BaseFragment
import com.eatssu.android.presentation.cafeteria.calendar.CalendarAdapter
import com.eatssu.android.presentation.cafeteria.calendar.CalendarAdapter.OnItemListener
import com.eatssu.android.presentation.util.CalendarUtil
Expand Down Expand Up @@ -45,11 +47,20 @@ class CafeteriaFragment : BaseFragment<FragmentCafeteriaBinding>(), OnItemListen

val viewpagerFragmentAdapter = CafeteriaViewPagerAdapter(requireActivity())
viewPager.adapter = viewpagerFragmentAdapter
viewPager.setCurrentItem(viewpagerFragmentAdapter.getDefaultFragmentPosition(), false)
viewPager.setCurrentItem(
viewpagerFragmentAdapter.getDefaultFragmentPosition(App.appContext),
Copy link

Copilot AI May 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Using a global App.appContext can hinder testability and may mask context-related issues. Consider passing requireContext() directly to getDefaultFragmentPosition instead of using a static application context.

Suggested change
viewpagerFragmentAdapter.getDefaultFragmentPosition(App.appContext),
viewpagerFragmentAdapter.getDefaultFragmentPosition(requireContext()),

Copilot uses AI. Check for mistakes.
false
)

val tabTitles = listOf("아침", "점심", "저녁")
TabLayoutMediator(tabLayout, viewPager) { tab, position -> tab.text = tabTitles[position] }.attach()

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
MySharedPreferences.savePreTimePosition(requireContext(), position)
}
})
Comment on lines +58 to +62
Copy link

Copilot AI May 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The registered OnPageChangeCallback is never unregistered, which may cause a memory leak when the fragment's view is destroyed. Unregister the callback in onDestroyView().

Suggested change
viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
MySharedPreferences.savePreTimePosition(requireContext(), position)
}
})
val pageChangeCallback = object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
MySharedPreferences.savePreTimePosition(requireContext(), position)
}
}
viewPager.registerOnPageChangeCallback(pageChangeCallback)
this.pageChangeCallback = pageChangeCallback

Copilot uses AI. Check for mistakes.

initWidgets()
CalendarUtil.selectedDate = LocalDate.now()
mainViewModel.setData(CalendarUtil.selectedDate)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
package com.eatssu.android.presentation.cafeteria

import android.os.Build
import androidx.annotation.RequiresApi
import android.content.Context
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.eatssu.android.data.MySharedPreferences
import com.eatssu.android.data.enums.Time
import com.eatssu.android.presentation.cafeteria.menu.MenuFragment
import java.time.LocalTime

class CafeteriaViewPagerAdapter(fragmentActivity: FragmentActivity) :
FragmentStateAdapter(fragmentActivity) {

// 1. ViewPager2에 연결할 Fragment 들을 생성
private val fragmentList = listOf(
MenuFragment.newInstance(Time.MORNING),
MenuFragment.newInstance(Time.LUNCH),
Expand All @@ -21,33 +20,24 @@ class CafeteriaViewPagerAdapter(fragmentActivity: FragmentActivity) :

lateinit var menuDate : String

// 2. ViesPager2에서 노출시킬 Fragment 의 갯수 설정
override fun getItemCount(): Int {
return fragmentList.size
}

// 3. ViewPager2의 각 페이지에서 노출할 Fragment 설정
override fun createFragment(position: Int): Fragment {
/*if(fragmentList[position] is LunchFragment) {
(fragmentList[position] as LunchFragment).setDate(menuDate)
}*/
return fragmentList[position]
}

// 4. 디폴트로 노출할 Fragment의 위치를 설정
@RequiresApi(Build.VERSION_CODES.O)
fun getDefaultFragmentPosition(): Int {
// 여기에서 디폴트로 노출할 Fragment의 위치를 반환해줍니다.
// 예를 들어, 첫 번째 Fragment를 디폴트로 설정하려면 0을 반환합니다.

val time = LocalTime.now()

val selectedIndex: Int = when (time.hour) {
in 0..9 -> 0 //아침
in 10..15 -> 1 //점심
in 16..24 -> 2 //저녁
else -> 1
fun getDefaultFragmentPosition(context: Context): Int {
val savedPosition = MySharedPreferences.getPreTimePosition(context)
return if (savedPosition in 0..2) savedPosition else {
val time = LocalTime.now()
when (time.hour) {
Comment on lines +34 to +35
Copy link

Copilot AI May 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method uses LocalTime.now() without any API level guard. Re-adding @RequiresApi(Build.VERSION_CODES.O) or checking the SDK version before calling Java Time APIs will prevent crashes on older devices.

Copilot uses AI. Check for mistakes.
in 0..9 -> 0
in 10..15 -> 1
in 16..23 -> 2
else -> 1
}
}
return selectedIndex
}
}