From ee1d72db362e3404c6ed878d83b7d8abbbea9283 Mon Sep 17 00:00:00 2001 From: ikseong00 <127182222+ikseong00@users.noreply.github.com> Date: Sun, 19 Jan 2025 06:56:01 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[feat]:=20progress=20api=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gdg_c/data/model/calendar/CalendarDay.kt | 8 +- .../repsonse/schedule/TaskProgressResponse.kt | 11 ++ .../example/gdg_c/data/remote/MyService.kt | 7 +- .../example/gdg_c/data/remote/TaskService.kt | 8 ++ .../gdg_c/data/repository/TaskRepository.kt | 8 +- .../com/example/gdg_c/ui/my/MyFragment.kt | 1 + .../gdg_c/ui/my/adapter/TaskListAdapter.kt | 6 - .../gdg_c/ui/survey/SettingActivity.kt | 8 +- .../com/example/gdg_c/ui/task/TaskFragment.kt | 105 ++++++++++++++++-- .../ui/task/adapter/TaskCalendarAdapter.kt | 51 +++++++-- app/src/main/res/layout/fragment_task.xml | 35 ++++-- 11 files changed, 197 insertions(+), 51 deletions(-) create mode 100644 app/src/main/java/com/example/gdg_c/data/model/repsonse/schedule/TaskProgressResponse.kt delete mode 100644 app/src/main/java/com/example/gdg_c/ui/my/adapter/TaskListAdapter.kt diff --git a/app/src/main/java/com/example/gdg_c/data/model/calendar/CalendarDay.kt b/app/src/main/java/com/example/gdg_c/data/model/calendar/CalendarDay.kt index 7519456..c103b52 100644 --- a/app/src/main/java/com/example/gdg_c/data/model/calendar/CalendarDay.kt +++ b/app/src/main/java/com/example/gdg_c/data/model/calendar/CalendarDay.kt @@ -3,5 +3,9 @@ package com.example.gdg_c.data.model.calendar data class CalendarDay( val day: Int?, val progress: Int?, - val hasTask: Boolean = false -) + var hasTask: Boolean = false +) { + init { + hasTask = progress != 0 + } +} diff --git a/app/src/main/java/com/example/gdg_c/data/model/repsonse/schedule/TaskProgressResponse.kt b/app/src/main/java/com/example/gdg_c/data/model/repsonse/schedule/TaskProgressResponse.kt new file mode 100644 index 0000000..7ce3fbd --- /dev/null +++ b/app/src/main/java/com/example/gdg_c/data/model/repsonse/schedule/TaskProgressResponse.kt @@ -0,0 +1,11 @@ +package com.example.gdg_c.data.model.repsonse.schedule + + +import com.google.gson.annotations.SerializedName + +class TaskProgressResponse : ArrayList(){ + data class TaskProgressResponseItem( + val day: Int?, + val progress: Int? + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/example/gdg_c/data/remote/MyService.kt b/app/src/main/java/com/example/gdg_c/data/remote/MyService.kt index 8afc65e..51f0d81 100644 --- a/app/src/main/java/com/example/gdg_c/data/remote/MyService.kt +++ b/app/src/main/java/com/example/gdg_c/data/remote/MyService.kt @@ -9,8 +9,9 @@ import retrofit2.http.Query interface MyService { @GET("user/my/{userIdentity}") suspend fun getMyInfo( - @Path("userIdentity") userIdentity: String, - @Query("year") year: Int, - @Query("month") month: Int, + @Path("userIdentity") + userIdentity: String, + year: Int, + month: Int ): BaseResponse } \ No newline at end of file diff --git a/app/src/main/java/com/example/gdg_c/data/remote/TaskService.kt b/app/src/main/java/com/example/gdg_c/data/remote/TaskService.kt index aa61ca3..0a84877 100644 --- a/app/src/main/java/com/example/gdg_c/data/remote/TaskService.kt +++ b/app/src/main/java/com/example/gdg_c/data/remote/TaskService.kt @@ -2,6 +2,7 @@ package com.example.gdg_c.data.remote import com.example.gdg_c.data.model.repsonse.BaseResponse import com.example.gdg_c.data.model.repsonse.schedule.TaskListResponse +import com.example.gdg_c.data.model.repsonse.schedule.TaskProgressResponse import com.example.gdg_c.data.model.repsonse.schedule.TaskResponse import com.example.gdg_c.data.model.request.TaskPostRequest import retrofit2.http.Body @@ -19,4 +20,11 @@ interface TaskService { @Query("year") year: Int, @Query("month") month: Int ): BaseResponse + + @GET("schedule/progress") + suspend fun getTaskProgress( + @Query("userIdentity") userIdentity: String, + @Query("year") year: Int, + @Query("month") month: Int + ): BaseResponse } \ No newline at end of file diff --git a/app/src/main/java/com/example/gdg_c/data/repository/TaskRepository.kt b/app/src/main/java/com/example/gdg_c/data/repository/TaskRepository.kt index 02d1166..80a9e24 100644 --- a/app/src/main/java/com/example/gdg_c/data/repository/TaskRepository.kt +++ b/app/src/main/java/com/example/gdg_c/data/repository/TaskRepository.kt @@ -33,9 +33,13 @@ class TaskRepository { return response } - suspend fun getTasks( + suspend fun getTasks() = RetrofitInstance.taskService.getTasks( + userIdentity = "dfjnsdfnj34", + year = 2025, + month = 1 + ) - ) = RetrofitInstance.taskService.getTasks( + suspend fun getTaskProgress() = RetrofitInstance.taskService.getTaskProgress( userIdentity = "dfjnsdfnj34", year = 2025, month = 1 diff --git a/app/src/main/java/com/example/gdg_c/ui/my/MyFragment.kt b/app/src/main/java/com/example/gdg_c/ui/my/MyFragment.kt index 1ac21b2..4d4a73c 100644 --- a/app/src/main/java/com/example/gdg_c/ui/my/MyFragment.kt +++ b/app/src/main/java/com/example/gdg_c/ui/my/MyFragment.kt @@ -46,6 +46,7 @@ class MyFragment : Fragment() { } private fun getMyInfo() { + viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) { kotlin.runCatching { repository.getMyInfo("dfjnsdfnj34", 2025, 1) diff --git a/app/src/main/java/com/example/gdg_c/ui/my/adapter/TaskListAdapter.kt b/app/src/main/java/com/example/gdg_c/ui/my/adapter/TaskListAdapter.kt deleted file mode 100644 index c709676..0000000 --- a/app/src/main/java/com/example/gdg_c/ui/my/adapter/TaskListAdapter.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.example.gdg_c.ui.my.adapter - -import androidx.recyclerview.widget.ListAdapter - -//class TaskListAdapter: ListAdapter { -//} \ No newline at end of file diff --git a/app/src/main/java/com/example/gdg_c/ui/survey/SettingActivity.kt b/app/src/main/java/com/example/gdg_c/ui/survey/SettingActivity.kt index 3b22ae9..21ef7c8 100644 --- a/app/src/main/java/com/example/gdg_c/ui/survey/SettingActivity.kt +++ b/app/src/main/java/com/example/gdg_c/ui/survey/SettingActivity.kt @@ -10,6 +10,7 @@ import androidx.core.view.WindowInsetsCompat import androidx.lifecycle.lifecycleScope import com.example.gdg_c.MainActivity import com.example.gdg_c.R +import com.example.gdg_c.data.local.PreferenceManager import com.example.gdg_c.data.repository.UserRepository import com.example.gdg_c.databinding.ActivitySettingBinding import kotlinx.coroutines.launch @@ -44,12 +45,9 @@ class SettingActivity : AppCompatActivity() { binding.major.text = major binding.desiredJob.text = desiredJob + val preferenceManager = PreferenceManager(applicationContext) + preferenceManager.saveUserIdentity(userIdentity) - ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> - val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) - v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) - insets - } with(binding) { postUser(birthDate, nickname, userIdentity, major, desiredJob, targetEmploymentPeriod) diff --git a/app/src/main/java/com/example/gdg_c/ui/task/TaskFragment.kt b/app/src/main/java/com/example/gdg_c/ui/task/TaskFragment.kt index acbdb15..f33e6e8 100644 --- a/app/src/main/java/com/example/gdg_c/ui/task/TaskFragment.kt +++ b/app/src/main/java/com/example/gdg_c/ui/task/TaskFragment.kt @@ -15,6 +15,7 @@ import com.example.gdg_c.R import com.example.gdg_c.data.model.calendar.CalendarData import com.example.gdg_c.data.model.calendar.CalendarDay import com.example.gdg_c.data.model.repsonse.schedule.TaskListResponse +import com.example.gdg_c.data.model.repsonse.schedule.TaskProgressResponse import com.example.gdg_c.data.model.repsonse.schedule.TaskResponse import com.example.gdg_c.data.repository.TaskRepository import com.example.gdg_c.databinding.FragmentTaskBinding @@ -54,7 +55,6 @@ class TaskFragment : Fragment() { // Inflate the layout for this fragment _binding = FragmentTaskBinding.inflate(inflater, container, false) - initTaskCalendarAdapter() setUpCalendar() initPostButton() @@ -99,7 +99,10 @@ class TaskFragment : Fragment() { runCatching { - Log.d("parameter", "startDate: $startDateFormat, endDate: $endDateFormat, mustDoTasks: ${binding.etTaskTask.text}, requirements: ${binding.etTaskAdditional.text}, title: ${binding.etTaskTitle.text}, userIdentity: dfjnsdfnj34") + Log.d( + "parameter", + "startDate: $startDateFormat, endDate: $endDateFormat, mustDoTasks: ${binding.etTaskTask.text}, requirements: ${binding.etTaskAdditional.text}, title: ${binding.etTaskTitle.text}, userIdentity: dfjnsdfnj34" + ) repository.postTask( endDate = endDateFormat, mustDoTasks = binding.etTaskTask.text.toString(), @@ -122,7 +125,7 @@ class TaskFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - initTaskCalendarAdapter() + getTaskProgress() getTaskList() } @@ -154,20 +157,100 @@ class TaskFragment : Fragment() { } - private fun initTaskCalendarAdapter() { - taskCalendarAdapter = TaskCalendarAdapter { hasTask -> - if (hasTask) { - binding.clAddTaskContainer.visibility = View.GONE - binding.clTaskListContainer.visibility = View.VISIBLE - } else { - binding.clAddTaskContainer.visibility = View.VISIBLE - binding.clTaskListContainer.visibility = View.GONE + private fun getTaskProgress() { + viewLifecycleOwner.lifecycleScope.launch { + runCatching { + repository.getTaskProgress() + }.onSuccess { + // 성공 시 + withContext(Dispatchers.Main) { + initTaskCalendarAdapter(it.data) + } + }.onFailure { + // 실패 시 + Log.e("PANGMOO", "getTaskProgress: ${it.message}") + } + } + } + + private fun initTaskCalendarAdapter(data: TaskProgressResponse) { + + taskCalendarAdapter = TaskCalendarAdapter { item -> + Log.d("progress", "progress: $item.progress") + if (item.progress != null) { + if (item.progress > 0) { + binding.clAddTaskContainer.visibility = View.GONE + binding.clTaskListContainer.visibility = View.VISIBLE + binding.tvTaskListTitleDay.text = "${item.day}일 일정" + } else { + binding.clAddTaskContainer.visibility = View.VISIBLE + binding.clTaskListContainer.visibility = View.GONE + binding.tvTaskTitle.text = "${item.day}일 일정의 제목을 입력해주세요." + } } } binding.rvTaskCalender.apply { adapter = taskCalendarAdapter layoutManager = GridLayoutManager(context, 7) } + var list = data.toMutableList() + list = addNullDays( + list, 2025, 1 + ) + + taskCalendarAdapter.submitList(list) + } + + // 연과 월을 가지고 시작 요일을 구하는 함수 + private fun getFirstDayOfMonth( + list: MutableList, + year: Int, + month: Int + ): Int { + // Calendar 객체 생성 + val calendar = Calendar.getInstance() + + // 연도와 월 설정 (월은 0부터 시작하므로 1을 빼야 합니다) + calendar.set(Calendar.YEAR, year) + calendar.set(Calendar.MONTH, month - 1) // 월은 0부터 시작 + calendar.set(Calendar.DAY_OF_MONTH, 1) // 날짜를 1일로 설정 + + // 요일 숫자 가져오기 (1=일요일, 7=토요일) + val dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) + + // 요일을 문자로 변환 + return when (dayOfWeek) { + Calendar.SUNDAY -> 0 + Calendar.MONDAY -> 1 + Calendar.TUESDAY -> 2 + Calendar.WEDNESDAY -> 3 + Calendar.THURSDAY -> 4 + Calendar.FRIDAY -> 5 + Calendar.SATURDAY -> 6 + else -> 7 + } + } + + // 시작 요일을 가지고 null 값을 days 에 넣어주는 함수 + private fun addNullDays( + list: MutableList, + year: Int, + month: Int + ): MutableList { + val addDays = getFirstDayOfMonth( + list = list, + year = year, + month = month + ) + + for (i in 0 until addDays) { + list.add( + 0, TaskProgressResponse.TaskProgressResponseItem( + null, null + ) + ) + } + return list } override fun onDestroy() { diff --git a/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskCalendarAdapter.kt b/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskCalendarAdapter.kt index dbc94a9..47cdeb7 100644 --- a/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskCalendarAdapter.kt +++ b/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskCalendarAdapter.kt @@ -8,19 +8,39 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.example.gdg_c.data.model.calendar.CalendarDay +import com.example.gdg_c.data.model.repsonse.schedule.TaskProgressResponse import com.example.gdg_c.databinding.ItemCalendarDayBinding import com.example.gdg_c.ui.my.adapter.CalendarAdapter class TaskCalendarAdapter( - private val onClick: (Boolean) -> Unit -) : ListAdapter(diffUtil) { + private val onClick: (TaskProgressResponse.TaskProgressResponseItem) -> Unit +) : ListAdapter( + diffUtil +) { inner class ViewHolder(private val binding: ItemCalendarDayBinding) : RecyclerView.ViewHolder(binding.root) { @SuppressLint("SetTextI18n") - fun bind(item: CalendarDay) { + fun bind(item: TaskProgressResponse.TaskProgressResponseItem, position: Int) { - binding.root.setOnClickListener { onClick(item.hasTask) } + binding.root.setOnClickListener { onClick(item) } + + binding.tvCalendarDay.text = item.day?.toString() ?: "" + item.progress?.let { + binding.sivCalendarDayColor.setBackgroundColor( + if (item.progress == 0) Color.WHITE + else if (item.progress <= 20) Color.parseColor("#9911FB44") + else if (item.progress <= 40) Color.parseColor("#6619D71F") + else if (item.progress <= 60) Color.parseColor("#B352BF6D") + else if (item.progress <= 80) Color.parseColor("#B353F607") + else Color.parseColor("#6CA683") + ) + } + if (position % 7 == 0) { + binding.tvCalendarDay.setTextColor(Color.RED) + } else if (position % 7 == 6) { + binding.tvCalendarDay.setTextColor(Color.BLUE) + } } } @@ -34,18 +54,25 @@ class TaskCalendarAdapter( } override fun onBindViewHolder(holder: TaskCalendarAdapter.ViewHolder, position: Int) { - holder.bind(currentList[position]) + holder.bind(currentList[position], position) } companion object { - val diffUtil = object : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: CalendarDay, newItem: CalendarDay): Boolean { - return oldItem == newItem - } + val diffUtil = + object : DiffUtil.ItemCallback() { + override fun areItemsTheSame( + oldItem: TaskProgressResponse.TaskProgressResponseItem, + newItem: TaskProgressResponse.TaskProgressResponseItem + ): Boolean { + return oldItem == newItem + } - override fun areContentsTheSame(oldItem: CalendarDay, newItem: CalendarDay): Boolean { - return oldItem == newItem + override fun areContentsTheSame( + oldItem: TaskProgressResponse.TaskProgressResponseItem, + newItem: TaskProgressResponse.TaskProgressResponseItem + ): Boolean { + return oldItem == newItem + } } - } } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_task.xml b/app/src/main/res/layout/fragment_task.xml index f0ae2ee..f688edc 100644 --- a/app/src/main/res/layout/fragment_task.xml +++ b/app/src/main/res/layout/fragment_task.xml @@ -179,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" - android:visibility="visible" + android:visibility="gone" app:layout_constraintTop_toBottomOf="@id/rv_task_calender"> @@ -310,18 +310,33 @@ android:background="@drawable/background_top_radius_20_white" app:layout_constraintTop_toTopOf="parent"> - + app:layout_constraintTop_toTopOf="parent"> + + + + + From fdb0504d3874cd3c1984a74547e81df146846f07 Mon Sep 17 00:00:00 2001 From: ikseong00 <127182222+ikseong00@users.noreply.github.com> Date: Sun, 19 Jan 2025 07:46:36 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[feat]:=20=EB=B3=B8=20=EB=82=A0=EC=A7=9C=20?= =?UTF-8?q?=EB=B3=B4=EC=9D=B4=EA=B2=8C=20=EA=B5=AC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repsonse/schedule/TaskListResponse.kt | 4 +- .../gdg_c/data/network/RetrofitInstance.kt | 9 ++++ .../gdg_c/data/repository/TaskRepository.kt | 14 ++++-- .../com/example/gdg_c/ui/my/MyFragment.kt | 5 +- .../gdg_c/ui/survey/SettingActivity.kt | 5 +- .../com/example/gdg_c/ui/task/TaskFragment.kt | 42 +++++++++++++--- .../ui/task/adapter/TaskCalendarAdapter.kt | 2 + .../gdg_c/ui/task/adapter/TaskListAdapter.kt | 49 +++++++++++++------ app/src/main/res/layout/fragment_task.xml | 4 +- 9 files changed, 101 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/example/gdg_c/data/model/repsonse/schedule/TaskListResponse.kt b/app/src/main/java/com/example/gdg_c/data/model/repsonse/schedule/TaskListResponse.kt index 6c50580..40e6b1d 100644 --- a/app/src/main/java/com/example/gdg_c/data/model/repsonse/schedule/TaskListResponse.kt +++ b/app/src/main/java/com/example/gdg_c/data/model/repsonse/schedule/TaskListResponse.kt @@ -28,7 +28,7 @@ class TaskListResponse : ArrayList(){ val year: Int ) { override fun toString(): String { - return "$year-$month-$day" + return "$year-$month-$day, $hour:$minute" } } @@ -40,7 +40,7 @@ class TaskListResponse : ArrayList(){ val year: Int ) { override fun toString(): String { - return "$year-$month-$day" + return "$year-$month-$day, $hour:$minute" } } } diff --git a/app/src/main/java/com/example/gdg_c/data/network/RetrofitInstance.kt b/app/src/main/java/com/example/gdg_c/data/network/RetrofitInstance.kt index 2d9a9bf..3854b9b 100644 --- a/app/src/main/java/com/example/gdg_c/data/network/RetrofitInstance.kt +++ b/app/src/main/java/com/example/gdg_c/data/network/RetrofitInstance.kt @@ -3,8 +3,10 @@ package com.example.gdg_c.data.network import com.example.gdg_c.data.remote.MyService import com.example.gdg_c.data.remote.SurveyService import com.example.gdg_c.data.remote.TaskService +import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory +import java.util.concurrent.TimeUnit object RetrofitInstance { private const val BASE_URL = "https://api.gdgoc-team3.site/" @@ -13,9 +15,16 @@ object RetrofitInstance { Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) + .client(okHttpClient) .build() } + private val okHttpClient: OkHttpClient = OkHttpClient.Builder() + .connectTimeout(1200, TimeUnit.SECONDS) // 연결 타임아웃 (기본값: 10초) + .readTimeout(1200, TimeUnit.SECONDS) // 읽기 타임아웃 (기본값: 10초) + .writeTimeout(1800, TimeUnit.SECONDS) // 쓰기 타임아웃 (기본값: 10초) + .build() + val myService: MyService by lazy { retrofit.create(MyService::class.java) } diff --git a/app/src/main/java/com/example/gdg_c/data/repository/TaskRepository.kt b/app/src/main/java/com/example/gdg_c/data/repository/TaskRepository.kt index 80a9e24..1bcbb23 100644 --- a/app/src/main/java/com/example/gdg_c/data/repository/TaskRepository.kt +++ b/app/src/main/java/com/example/gdg_c/data/repository/TaskRepository.kt @@ -33,15 +33,21 @@ class TaskRepository { return response } - suspend fun getTasks() = RetrofitInstance.taskService.getTasks( - userIdentity = "dfjnsdfnj34", + suspend fun getTasks( + userIdentity: String + ) = RetrofitInstance.taskService.getTasks( + userIdentity = userIdentity, year = 2025, month = 1 ) - suspend fun getTaskProgress() = RetrofitInstance.taskService.getTaskProgress( - userIdentity = "dfjnsdfnj34", + suspend fun getTaskProgress( + userIdentity: String + ) = RetrofitInstance.taskService.getTaskProgress( + userIdentity = userIdentity, year = 2025, month = 1 ) + + } \ No newline at end of file diff --git a/app/src/main/java/com/example/gdg_c/ui/my/MyFragment.kt b/app/src/main/java/com/example/gdg_c/ui/my/MyFragment.kt index 4d4a73c..f840675 100644 --- a/app/src/main/java/com/example/gdg_c/ui/my/MyFragment.kt +++ b/app/src/main/java/com/example/gdg_c/ui/my/MyFragment.kt @@ -9,6 +9,7 @@ import android.view.View import android.view.ViewGroup import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager +import com.example.gdg_c.data.local.PreferenceManager import com.example.gdg_c.data.model.calendar.CalendarData import com.example.gdg_c.data.model.calendar.CalendarDay import com.example.gdg_c.data.model.repsonse.my.MyInfoResponse @@ -48,8 +49,10 @@ class MyFragment : Fragment() { private fun getMyInfo() { viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) { + val preferenceManager = PreferenceManager(requireContext()) + val userIdentity = preferenceManager.getUserIdentity() kotlin.runCatching { - repository.getMyInfo("dfjnsdfnj34", 2025, 1) + repository.getMyInfo(userIdentity!!, 2025, 1) }.onSuccess { // setUpCalendarAdapter(it.data) withContext(Dispatchers.Main) { diff --git a/app/src/main/java/com/example/gdg_c/ui/survey/SettingActivity.kt b/app/src/main/java/com/example/gdg_c/ui/survey/SettingActivity.kt index 21ef7c8..ab59c12 100644 --- a/app/src/main/java/com/example/gdg_c/ui/survey/SettingActivity.kt +++ b/app/src/main/java/com/example/gdg_c/ui/survey/SettingActivity.kt @@ -45,8 +45,7 @@ class SettingActivity : AppCompatActivity() { binding.major.text = major binding.desiredJob.text = desiredJob - val preferenceManager = PreferenceManager(applicationContext) - preferenceManager.saveUserIdentity(userIdentity) + with(binding) { @@ -82,6 +81,8 @@ class SettingActivity : AppCompatActivity() { desiredJob, targetEmploymentPeriod ) + val preferenceManager = PreferenceManager(applicationContext) + preferenceManager.saveUserIdentity(userIdentity) }.onSuccess { Log.d("success", "postUser Success") }.onFailure { diff --git a/app/src/main/java/com/example/gdg_c/ui/task/TaskFragment.kt b/app/src/main/java/com/example/gdg_c/ui/task/TaskFragment.kt index f33e6e8..96ca64d 100644 --- a/app/src/main/java/com/example/gdg_c/ui/task/TaskFragment.kt +++ b/app/src/main/java/com/example/gdg_c/ui/task/TaskFragment.kt @@ -12,6 +12,7 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import com.example.gdg_c.R +import com.example.gdg_c.data.local.PreferenceManager import com.example.gdg_c.data.model.calendar.CalendarData import com.example.gdg_c.data.model.calendar.CalendarDay import com.example.gdg_c.data.model.repsonse.schedule.TaskListResponse @@ -44,6 +45,7 @@ class TaskFragment : Fragment() { private var startDate: Calendar? = Calendar.getInstance() private var endDate: Calendar? = Calendar.getInstance() + private var taskList = mutableListOf() @@ -67,17 +69,21 @@ class TaskFragment : Fragment() { val startMonth: Calendar = Calendar.getInstance().apply { set(2022, Calendar.JANUARY, 1) } - val endMonth: Calendar = Calendar.getInstance().apply { + val nowMonth: Calendar = Calendar.getInstance().apply { set( LocalDateTime.now().year, LocalDateTime.now().monthValue - 1, LocalDateTime.now().dayOfMonth ) } - + val endMonth: Calendar = Calendar.getInstance().apply { + set( + 2025, Calendar.DECEMBER, 31 + ) + } with(binding.cvTaskDateRangeCalendar) { setVisibleMonthRange(startMonth, endMonth) - setCurrentMonth(endMonth) + setCurrentMonth(nowMonth) setSelectableDateRange(startMonth, endMonth) } @@ -97,6 +103,9 @@ class TaskFragment : Fragment() { val startDateFormat = dateFormat.format(startDate!!.time) val endDateFormat = dateFormat.format(endDate!!.time) + val preferenceManager = PreferenceManager(requireContext()) + val userIdentity = preferenceManager.getUserIdentity() + runCatching { Log.d( @@ -109,11 +118,13 @@ class TaskFragment : Fragment() { requirements = binding.etTaskAdditional.text.toString(), startDate = startDateFormat, title = binding.etTaskTitle.text.toString(), - userIdentity = "dfjnsdfnj34" + userIdentity = userIdentity!! ) }.onSuccess { // 성공 시 Log.d("success", "postTask: ${it.message}") + getTaskList() + }.onFailure { // 실패 시 Log.e("PANGMOO", "postTask: ${it.message}") @@ -131,8 +142,14 @@ class TaskFragment : Fragment() { private fun getTaskList() { viewLifecycleOwner.lifecycleScope.launch { + + val preferenceManager = PreferenceManager(requireContext()) + val userIdentity = preferenceManager.getUserIdentity() + Log.d("PANGMOO", "getTaskList: $userIdentity") runCatching { - repository.getTasks() + repository.getTasks( + userIdentity = userIdentity!!, + ) }.onSuccess { // 성공 시 withContext(Dispatchers.Main) { @@ -146,9 +163,10 @@ class TaskFragment : Fragment() { } private fun setUpTaskList(data: TaskListResponse) { - taskList = data[0].tasks.toMutableList() - binding.tvTaskListTitle.text = data[0].title + taskList = if (data.isEmpty()) mutableListOf() else data[0].tasks.toMutableList() + + binding.tvTaskListTitle.text = if (data.isEmpty()) "" else data[0].title binding.rvTaskList.adapter = taskListAdapter.apply { submitList(taskList) @@ -159,8 +177,12 @@ class TaskFragment : Fragment() { private fun getTaskProgress() { viewLifecycleOwner.lifecycleScope.launch { + val preferenceManager = PreferenceManager(requireContext()) + val userIdentity = preferenceManager.getUserIdentity() runCatching { - repository.getTaskProgress() + repository.getTaskProgress( + userIdentity = userIdentity!! + ) }.onSuccess { // 성공 시 withContext(Dispatchers.Main) { @@ -182,6 +204,10 @@ class TaskFragment : Fragment() { binding.clAddTaskContainer.visibility = View.GONE binding.clTaskListContainer.visibility = View.VISIBLE binding.tvTaskListTitleDay.text = "${item.day}일 일정" + taskListAdapter.submitList(taskList) + taskListAdapter.updateList( + taskList, + item.day.toString()) } else { binding.clAddTaskContainer.visibility = View.VISIBLE binding.clTaskListContainer.visibility = View.GONE diff --git a/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskCalendarAdapter.kt b/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskCalendarAdapter.kt index 47cdeb7..f3ab7c8 100644 --- a/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskCalendarAdapter.kt +++ b/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskCalendarAdapter.kt @@ -57,6 +57,8 @@ class TaskCalendarAdapter( holder.bind(currentList[position], position) } + + companion object { val diffUtil = object : DiffUtil.ItemCallback() { diff --git a/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskListAdapter.kt b/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskListAdapter.kt index 7d81780..2bdce0b 100644 --- a/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskListAdapter.kt +++ b/app/src/main/java/com/example/gdg_c/ui/task/adapter/TaskListAdapter.kt @@ -12,7 +12,10 @@ import com.example.gdg_c.data.model.repsonse.schedule.TaskResponse import com.example.gdg_c.databinding.ItemCalendarDayBinding import com.example.gdg_c.databinding.ItemCheckListBinding -class TaskListAdapter : ListAdapter(diffUtil) { +class TaskListAdapter : + ListAdapter(diffUtil) { + + var today = "" inner class TaskViewHolder(private val binding: ItemCheckListBinding) : RecyclerView.ViewHolder(binding.root) { @@ -22,6 +25,10 @@ class TaskListAdapter : ListAdapter, + today: String + ) { + submitList(taskList) + val list = taskList + val newList = list.filter { item -> + item.startDate.day.toString() == today + } + submitList(newList) + + } + companion object { - val diffUtil = object : DiffUtil.ItemCallback() { - override fun areItemsTheSame( - oldItem: TaskListResponse.TaskListResponseItem.Task, - newItem: TaskListResponse.TaskListResponseItem.Task - ): Boolean { - return oldItem == newItem - } + val diffUtil = + object : DiffUtil.ItemCallback() { + override fun areItemsTheSame( + oldItem: TaskListResponse.TaskListResponseItem.Task, + newItem: TaskListResponse.TaskListResponseItem.Task + ): Boolean { + return oldItem == newItem + } - override fun areContentsTheSame( - oldItem: TaskListResponse.TaskListResponseItem.Task, - newItem: TaskListResponse.TaskListResponseItem.Task - ): Boolean { - return oldItem == newItem + override fun areContentsTheSame( + oldItem: TaskListResponse.TaskListResponseItem.Task, + newItem: TaskListResponse.TaskListResponseItem.Task + ): Boolean { + return oldItem == newItem + } } - } } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_task.xml b/app/src/main/res/layout/fragment_task.xml index f688edc..5462312 100644 --- a/app/src/main/res/layout/fragment_task.xml +++ b/app/src/main/res/layout/fragment_task.xml @@ -179,7 +179,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" - android:visibility="gone" + android:visibility="visible" app:layout_constraintTop_toBottomOf="@id/rv_task_calender">