diff --git a/app/src/main/java/com/example/noogabab/presentation/ui/main/home/HomeFragment.kt b/app/src/main/java/com/example/noogabab/presentation/ui/main/home/HomeFragment.kt index 73e7f37..62cfd58 100644 --- a/app/src/main/java/com/example/noogabab/presentation/ui/main/home/HomeFragment.kt +++ b/app/src/main/java/com/example/noogabab/presentation/ui/main/home/HomeFragment.kt @@ -13,23 +13,31 @@ import androidx.lifecycle.Observer import com.bumptech.glide.Glide import com.example.noogabab.R import com.example.noogabab.data.api.model.ResultData +import com.example.noogabab.data.api.request.FeedRequest import com.example.noogabab.presentation.dialog.AlertDialog import com.example.noogabab.presentation.ui.main.MainActivity import com.example.noogabab.presentation.ui.main.MainViewModel import com.example.noogabab.presentation.ui.main.timeline.TimelineActivity import com.example.noogabab.util.SharedDog +import com.example.noogabab.util.SharedGroup import com.example.noogabab.util.SharedProfile +import com.example.noogabab.util.SharedUser import kotlinx.android.synthetic.main.fragment_home.* class HomeFragment : Fragment(R.layout.fragment_home), View.OnClickListener { private val homeViewModel: HomeViewModel by activityViewModels() private lateinit var sharedDog: SharedPreferences private lateinit var sharedProfile: SharedPreferences + private lateinit var sharedGroup: SharedPreferences + private lateinit var sharedUser: SharedPreferences override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) sharedDog = requireActivity().getSharedPreferences(SharedDog.NAME, Context.MODE_PRIVATE) - sharedProfile = requireActivity().getSharedPreferences(SharedProfile.NAME, Context.MODE_PRIVATE) + sharedProfile = + requireActivity().getSharedPreferences(SharedProfile.NAME, Context.MODE_PRIVATE) + sharedGroup = requireActivity().getSharedPreferences(SharedGroup.NAME, Context.MODE_PRIVATE) + sharedUser = requireActivity().getSharedPreferences(SharedUser.NAME, Context.MODE_PRIVATE) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -63,18 +71,22 @@ class HomeFragment : Fragment(R.layout.fragment_home), View.OnClickListener { } private fun observe() { + getLatest() + homeViewModel.currentMealLatest.observe(requireActivity(), Observer { + txt_status_time.text = it + }) + } + + private fun getLatest() { val dogId = sharedDog.getInt(SharedDog.DOG_ID_KEY, -1) if (dogId == -1) return homeViewModel.getMealLatest(dogId).observe(requireActivity(), Observer { resultData -> - when(resultData) { + when (resultData) { is ResultData.Loading -> homeViewModel.updateMealLatest("로딩 중") is ResultData.Success -> homeViewModel.updateMealLatest(resultData.data!!.content!!) else -> homeViewModel.updateMealLatest("로딩 중") } }) - homeViewModel.currentMealLatest.observe(requireActivity(), Observer { - txt_status_time.text = it - }) } private fun clickTimeline() { @@ -88,14 +100,58 @@ class HomeFragment : Fragment(R.layout.fragment_home), View.OnClickListener { private fun clickFeedBob() { AlertDialog().defaultAlert( - requireContext(), "밥을 먹일까요?", "선택한 식사는 취소가 불가능합니다.", "확인", "취소", { - }, { - }) + requireContext(), + "밥을 먹일까요?", + "선택한 식사는 취소가 불가능합니다.", + "확인", + "취소", { + homeViewModel.feedMeal( + sharedGroup.getString(SharedGroup.GROUP_UUID_KEY, "")!!, + sharedDog.getInt(SharedDog.DOG_ID_KEY, -1), + FeedRequest(sharedUser.getInt(SharedUser.USER_ID_KEY, -1)) + ).observe(requireActivity(), Observer { resultData -> + when (resultData) { + is ResultData.Loading -> { + } + is ResultData.Success -> { + Toast.makeText(requireContext(), "밥 주기 완료!", Toast.LENGTH_SHORT).show() + getLatest() + } + else -> { + Toast.makeText( + requireContext(), + getString(R.string.toast_server_exception), + Toast.LENGTH_SHORT + ).show() + } + } + }) + }, {}) } private fun clickFeedSnack() { AlertDialog().defaultAlert( requireContext(), "간식을 먹일까요?", "선택한 식사는 취소가 불가능합니다.", "확인", "취소", { + homeViewModel.feedSnack( + sharedGroup.getString(SharedGroup.GROUP_UUID_KEY, "")!!, + sharedDog.getInt(SharedDog.DOG_ID_KEY, -1), + FeedRequest(sharedUser.getInt(SharedUser.USER_ID_KEY, -1)) + ).observe(requireActivity(), Observer { resultData -> + when (resultData) { + is ResultData.Loading -> { + } + is ResultData.Success -> { + Toast.makeText(requireContext(), "간식 주기 완료!", Toast.LENGTH_SHORT).show() + } + else -> { + Toast.makeText( + requireContext(), + getString(R.string.toast_server_exception), + Toast.LENGTH_SHORT + ).show() + } + } + }) }, { }) } diff --git a/app/src/main/java/com/example/noogabab/presentation/ui/main/home/HomeViewModel.kt b/app/src/main/java/com/example/noogabab/presentation/ui/main/home/HomeViewModel.kt index 2c0bdc7..a008fa1 100644 --- a/app/src/main/java/com/example/noogabab/presentation/ui/main/home/HomeViewModel.kt +++ b/app/src/main/java/com/example/noogabab/presentation/ui/main/home/HomeViewModel.kt @@ -6,6 +6,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.liveData import com.example.noogabab.data.api.model.ResultData +import com.example.noogabab.data.api.request.FeedRequest import com.example.noogabab.domain.usecase.DogUseCase class HomeViewModel @ViewModelInject constructor(private val useCase: DogUseCase): ViewModel() { @@ -24,6 +25,16 @@ class HomeViewModel @ViewModelInject constructor(private val useCase: DogUseCase emit(useCase.getMealLatest(dogId)) } + fun feedMeal(key: String, dogId: Int, feed: FeedRequest) = liveData { + emit(ResultData.Loading()) + emit(useCase.feedMeal(key, dogId, feed)) + } + + fun feedSnack(key: String, dogId: Int, feed: FeedRequest) = liveData { + emit(ResultData.Loading()) + emit(useCase.feedSnack(key, dogId, feed)) + } + fun updateMealLatest(input: String) { _currentMealLatest.value = "최근 식사 $input" } diff --git a/app/src/main/java/com/example/noogabab/util/NetworkConstants.kt b/app/src/main/java/com/example/noogabab/util/NetworkConstants.kt index 5ae9244..b6d8c50 100644 --- a/app/src/main/java/com/example/noogabab/util/NetworkConstants.kt +++ b/app/src/main/java/com/example/noogabab/util/NetworkConstants.kt @@ -17,7 +17,7 @@ object NetworkConstants { // dogs const val URL_DOGS = "dogs" const val URL_DOGS_DOG = "dogs/{dogId}" - const val URL_DOGS_MEAL = "dogs/{dogId}/meal" + const val URL_DOGS_MEAL = "dogs/{dogId}/meals" const val URL_DOGS_MEAL_LATEST = "dogs/{dogId}/meal/latest" - const val URL_DOGS_SNACK = "dogs/{dogId}/snack" + const val URL_DOGS_SNACK = "dogs/{dogId}/snacks" } \ No newline at end of file