Skip to content

Commit

Permalink
[feat]: 프로젝트 상세 페이지 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
kangyuri1114 committed Apr 1, 2024
1 parent d1b6c3f commit fdebbcf
Show file tree
Hide file tree
Showing 18 changed files with 783 additions and 42 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.zucchini.domain.model

data class ProjectDetailDevInfo(
val name: String = "",
val role1: String = "",
val role2: String = "",
)
9 changes: 6 additions & 3 deletions feature/projects/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<application>

<activity
android:name="com.zucchini.projects.ProjectDetailActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:exported="false" />
<activity
android:name="com.zucchini.projects.MainActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />

<activity
android:name="com.zucchini.projects.DevDetailActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import com.zucchini.feature.projects.databinding.ActivityDevDetailBinding
import com.zucchini.projects.adapter.DevDetailProjectAdapter
import com.zucchini.projects.dummy.DevProjectsDummy

class DevDetailActivity : AppCompatActivity() {
private lateinit var binding: ActivityDevDetailBinding
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import com.zucchini.feature.projects.databinding.FragmentDevInfoBinding
import com.zucchini.projects.adapter.DeveloperInfoAdapter
import com.zucchini.projects.dummy.DeveloperInfoDummy

class DevInfoFragment : Fragment() {
private var _binding: FragmentDevInfoBinding? = null
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.zucchini.projects

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.GridLayoutManager
import com.zucchini.feature.projects.databinding.ActivityProjectDetailBinding
import com.zucchini.projects.adapter.ProjectDetailDevAdapter
import com.zucchini.projects.dummy.ProjectDetailDevDummy

class ProjectDetailActivity : AppCompatActivity() {
lateinit var binding: ActivityProjectDetailBinding
override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivityProjectDetailBinding.inflate(layoutInflater)
super.onCreate(savedInstanceState)
setContentView(binding.root)

initDevInfoAdapter()
}

private fun initDevInfoAdapter() {
val adapter = ProjectDetailDevAdapter()
binding.rvProjectDetailDev.adapter = adapter
binding.rvProjectDetailDev.layoutManager = GridLayoutManager(this, 3)
adapter.submitList(ProjectDetailDevDummy.projectDetailDevList)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.zucchini.domain.model.KeywordList
import com.zucchini.feature.projects.databinding.FragmentProjectsBinding
import com.zucchini.projects.adapter.ProjectsAdapter
import com.zucchini.projects.adapter.SearchKeywordAdapter
import com.zucchini.projects.dummy.ProjectDummyList

class ProjectsFragment : Fragment() {
private var _binding: FragmentProjectsBinding? = null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.zucchini.domain.model.DevDetailProjectInfo
import com.zucchini.feature.projects.R
import com.zucchini.feature.projects.databinding.ItemDevDetailProjectsBinding
import com.zucchini.projects.DevDetailActivity
import com.zucchini.projects.ProjectDetailActivity
import com.zucchini.view.ItemDiffCallback

class DevDetailProjectAdapter :
Expand Down Expand Up @@ -44,7 +45,7 @@ class DevDetailProjectAdapter :
tvProjectDescription.text = devDetailProjectInfo.description
tvSortedProject.text = devDetailProjectInfo.sorted
tvNavigateToProject.setOnClickListener {
val intent = Intent(binding.root.context, DevDetailActivity::class.java)
val intent = Intent(binding.root.context, ProjectDetailActivity::class.java)
startActivity(binding.root.context, intent, null)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.zucchini.projects.adapter

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.zucchini.domain.model.ProjectDetailDevInfo
import com.zucchini.feature.projects.databinding.ItemProjectDetailDevBinding
import com.zucchini.view.ItemDiffCallback

class ProjectDetailDevAdapter :
ListAdapter<ProjectDetailDevInfo, ProjectDetailDevAdapter.ProjectDetailDevViewHolder>(
ItemDiffCallback<ProjectDetailDevInfo>(
onItemsTheSame = { old, new -> old == new },
onContentsTheSame = { old, new -> old == new },
),
) {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
): ProjectDetailDevViewHolder {
val inflater = LayoutInflater.from(parent.context)
val binding = ItemProjectDetailDevBinding.inflate(inflater, parent, false)
return ProjectDetailDevViewHolder(binding)
}

override fun onBindViewHolder(holder: ProjectDetailDevViewHolder, position: Int) {
holder.bind(getItem(position))
}

inner class ProjectDetailDevViewHolder(private val binding: ItemProjectDetailDevBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(projectDetailDevInfo: ProjectDetailDevInfo) {
binding.run {
tvDeveloperName.text = projectDetailDevInfo.name
tvDeveloperInfo1.text = projectDetailDevInfo.role1
tvDeveloperInfo2.text = projectDetailDevInfo.role2
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package com.zucchini.projects.adapter

import android.content.Intent
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat.startActivity
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.zucchini.feature.projects.R
import com.zucchini.feature.projects.databinding.ItemProjectsBinding
import com.zucchini.domain.model.ProjectInfo
import com.zucchini.feature.projects.databinding.ItemProjectsBinding
import com.zucchini.projects.ProjectDetailActivity
import com.zucchini.view.ItemDiffCallback

class ProjectsAdapter : ListAdapter<ProjectInfo, ProjectsAdapter.ProjectsViewHolder>(
Expand All @@ -31,13 +33,20 @@ class ProjectsAdapter : ListAdapter<ProjectInfo, ProjectsAdapter.ProjectsViewHol
inner class ProjectsViewHolder(private val binding: ItemProjectsBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(projectInfo: ProjectInfo) {
binding.ivProjectProfile.setImageResource(
projectInfo.image ?: com.zucchini.core.designsystem.R.drawable.project_profile_default,
)
binding.tvProjectName.text = projectInfo.name
binding.tvProjectDescription.text = projectInfo.description
binding.tvProjectSorted.text = projectInfo.sorted
binding.tvProjectClicked.text = "조회수 +${projectInfo.clicked}"
binding.run {
ivProjectProfile.setImageResource(
projectInfo.image
?: com.zucchini.core.designsystem.R.drawable.project_profile_default,
)
tvProjectName.text = projectInfo.name
tvProjectDescription.text = projectInfo.description
tvProjectSorted.text = projectInfo.sorted
tvProjectClicked.text = "조회수 +${projectInfo.clicked}"
root.setOnClickListener {
val intent = Intent(root.context, ProjectDetailActivity::class.java)
startActivity(root.context, intent, null)
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.zucchini.domain.model.Keyword
import com.zucchini.feature.projects.databinding.ItemSearchKeywordBinding
import com.zucchini.view.ItemDiffCallback
import com.zucchini.domain.model.Keyword

class SearchKeywordAdapter : ListAdapter<Keyword, SearchKeywordAdapter.SearchKeywordViewHolder>(
ItemDiffCallback<Keyword>(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zucchini.projects
package com.zucchini.projects.dummy

import com.zucchini.domain.model.DevDetailProjectInfo
import com.zucchini.feature.projects.R
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zucchini.projects
package com.zucchini.projects.dummy

import com.zucchini.domain.model.DeveloperInfo
import com.zucchini.feature.projects.R
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.zucchini.projects.dummy

import com.zucchini.domain.model.ProjectDetailDevInfo

object ProjectDetailDevDummy {
val projectDetailDevList = listOf(
ProjectDetailDevInfo(
name = "사람1",
role1 = "안드로이드 개발",
role2 = "빅데이터",
),
ProjectDetailDevInfo(
name = "사람2",
role1 = "서버 개발",
role2 = "빅데이터",
),
ProjectDetailDevInfo(
name = "사람3",
role1 = "안드로이드 개발",
role2 = "빅데이터",
),
ProjectDetailDevInfo(
name = "사람4",
role1 = "안드로이드 개발",
role2 = "빅데이터",
),
ProjectDetailDevInfo(
name = "사람5",
role1 = "안드로이드 개발",
role2 = "빅데이터",
),
)
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zucchini.projects
package com.zucchini.projects.dummy

import com.zucchini.domain.model.ProjectInfo
import com.zucchini.feature.projects.R
Expand Down
Loading

0 comments on commit fdebbcf

Please sign in to comment.