diff --git a/domain/src/main/java/com/zucchini/domain/model/DeveloperInfo.kt b/domain/src/main/java/com/zucchini/domain/model/DeveloperInfo.kt new file mode 100644 index 0000000..9649ddb --- /dev/null +++ b/domain/src/main/java/com/zucchini/domain/model/DeveloperInfo.kt @@ -0,0 +1,10 @@ +package com.zucchini.domain.model + +data class DeveloperInfo( + + val image: Int? = null, + val name: String = "", + val field: String = "", + val githubId: String = "", + val clicked: Int = 0, +) diff --git a/feature/devInfo/build.gradle.kts b/feature/devInfo/build.gradle.kts index b91d5ac..7a2a28d 100644 --- a/feature/devInfo/build.gradle.kts +++ b/feature/devInfo/build.gradle.kts @@ -39,6 +39,7 @@ android { dependencies { implementation(project(":domain")) implementation(project(":core:designsystem")) + implementation(project(":core:common")) KotlinDependencies.run { implementation(kotlin) diff --git a/feature/devInfo/src/main/java/com/zucchini/feature/devInfo/DevInfoFragment.kt b/feature/devInfo/src/main/java/com/zucchini/feature/devInfo/DevInfoFragment.kt index 75761dd..a529f71 100644 --- a/feature/devInfo/src/main/java/com/zucchini/feature/devInfo/DevInfoFragment.kt +++ b/feature/devInfo/src/main/java/com/zucchini/feature/devInfo/DevInfoFragment.kt @@ -1,59 +1,39 @@ package com.zucchini.feature.devInfo import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.GridLayoutManager +import com.zucchini.feature.devInfo.adapter.DeveloperInfoAdapter +import com.zucchini.feature.devInfo.databinding.FragmentDevInfoBinding -// TODO: Rename parameter arguments, choose names that match -// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER -private const val ARG_PARAM1 = "param1" -private const val ARG_PARAM2 = "param2" - -/** - * A simple [Fragment] subclass. - * Use the [DevInfoFragment.newInstance] factory method to - * create an instance of this fragment. - */ class DevInfoFragment : Fragment() { - // TODO: Rename and change types of parameters - private var param1: String? = null - private var param2: String? = null + private var _binding: FragmentDevInfoBinding? = null + private val binding: FragmentDevInfoBinding get() = _binding!! - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - arguments?.let { - param1 = it.getString(ARG_PARAM1) - param2 = it.getString(ARG_PARAM2) - } + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?, + ): View { + _binding = FragmentDevInfoBinding.inflate(inflater, container, false) + + initDeveloperAdapter() + + return binding.root } - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_dev_info, container, false) + private fun initDeveloperAdapter() { + val developerInfoAdapter = DeveloperInfoAdapter() + binding.rvDevinfo.adapter = developerInfoAdapter + binding.rvDevinfo.layoutManager = GridLayoutManager(context, 2) + developerInfoAdapter.submitList(DeveloperInfoDummy.developerInfoList) } - companion object { - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment DevInfoFragment. - */ - // TODO: Rename and change types and number of parameters - @JvmStatic - fun newInstance(param1: String, param2: String) = - DevInfoFragment().apply { - arguments = Bundle().apply { - putString(ARG_PARAM1, param1) - putString(ARG_PARAM2, param2) - } - } + override fun onDestroyView() { + super.onDestroyView() + _binding = null } -} \ No newline at end of file +} diff --git a/feature/devInfo/src/main/java/com/zucchini/feature/devInfo/DeveloperInfoDummy.kt b/feature/devInfo/src/main/java/com/zucchini/feature/devInfo/DeveloperInfoDummy.kt new file mode 100644 index 0000000..5fb69f4 --- /dev/null +++ b/feature/devInfo/src/main/java/com/zucchini/feature/devInfo/DeveloperInfoDummy.kt @@ -0,0 +1,80 @@ +package com.zucchini.feature.devInfo + +import com.zucchini.domain.model.DeveloperInfo + +object DeveloperInfoDummy { + val developerInfoList = listOf( + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발\n빅데이터", + githubId = "sjkfjklsdf", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "최숙희", + field = "서버 개발", + githubId = "234543213", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발", + githubId = "sjkfjklsdf", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발", + githubId = "sjkfjklsdf", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발", + githubId = "sjkfjklsdf", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발", + githubId = "sjkfjklsdf", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발", + githubId = "sjkfjklsdf", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발", + githubId = "sjkfjklsdf", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발", + githubId = "sjkfjklsdf", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발", + githubId = "sjkfjklsdf", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발", + githubId = "sjkfjklsdf", + ), + DeveloperInfo( + image = R.drawable.developer_default_image, + name = "강유리", + field = "안드로이드 개발", + githubId = "sjkfjklsdf", + ), + ) +} diff --git a/feature/devInfo/src/main/java/com/zucchini/feature/devInfo/adapter/DeveloperInfoAdapter.kt b/feature/devInfo/src/main/java/com/zucchini/feature/devInfo/adapter/DeveloperInfoAdapter.kt new file mode 100644 index 0000000..799491c --- /dev/null +++ b/feature/devInfo/src/main/java/com/zucchini/feature/devInfo/adapter/DeveloperInfoAdapter.kt @@ -0,0 +1,45 @@ +package com.zucchini.feature.devInfo.adapter + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import com.zucchini.domain.model.DeveloperInfo +import com.zucchini.feature.devInfo.R +import com.zucchini.feature.devInfo.databinding.ItemDeveloperBinding +import com.zucchini.view.ItemDiffCallback + +class DeveloperInfoAdapter : + ListAdapter( + ItemDiffCallback( + onItemsTheSame = { old, new -> old == new }, + onContentsTheSame = { old, new -> old == new }, + ), + ) { + + override fun onCreateViewHolder( + parent: ViewGroup, + viewType: Int, + ): DeveloperInfoViewHolder { + val inflater = LayoutInflater.from(parent.context) + val binding = ItemDeveloperBinding.inflate(inflater, parent, false) + return DeveloperInfoViewHolder(binding) + } + + override fun onBindViewHolder(holder: DeveloperInfoViewHolder, position: Int) { + holder.bind(getItem(position)) + } + + inner class DeveloperInfoViewHolder(private val binding: ItemDeveloperBinding) : + RecyclerView.ViewHolder(binding.root) { + fun bind(developerInfo: DeveloperInfo) { + binding.ivProjectProfile.setImageResource( + developerInfo.image ?: R.drawable.developer_default_image, + ) + binding.tvDeveloperName.text = developerInfo.name + binding.tvDeveloperField.text = developerInfo.field + binding.tvDeveloperGithub.text = "Github: ${developerInfo.githubId}" + binding.tvDeveloperClicked.text = "조회수 +${developerInfo.clicked}" + } + } +} diff --git a/feature/devInfo/src/main/res/drawable/developer_default_image.xml b/feature/devInfo/src/main/res/drawable/developer_default_image.xml new file mode 100644 index 0000000..6485bef --- /dev/null +++ b/feature/devInfo/src/main/res/drawable/developer_default_image.xml @@ -0,0 +1,12 @@ + + + + diff --git a/feature/devInfo/src/main/res/drawable/devinfo_background.xml b/feature/devInfo/src/main/res/drawable/devinfo_background.xml new file mode 100644 index 0000000..99e2c75 --- /dev/null +++ b/feature/devInfo/src/main/res/drawable/devinfo_background.xml @@ -0,0 +1,9 @@ + + + diff --git a/feature/devInfo/src/main/res/layout/fragment_dev_info.xml b/feature/devInfo/src/main/res/layout/fragment_dev_info.xml index 51080c3..4ec3038 100644 --- a/feature/devInfo/src/main/res/layout/fragment_dev_info.xml +++ b/feature/devInfo/src/main/res/layout/fragment_dev_info.xml @@ -1,14 +1,15 @@ @@ -29,14 +30,24 @@ app:layout_constraintTop_toTopOf="parent" /> + + diff --git a/feature/devInfo/src/main/res/layout/item_developer.xml b/feature/devInfo/src/main/res/layout/item_developer.xml new file mode 100644 index 0000000..813dba5 --- /dev/null +++ b/feature/devInfo/src/main/res/layout/item_developer.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + \ No newline at end of file