Skip to content
Merged
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
9 changes: 6 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.GroupFinder">
<activity
android:name=".presentation.view.detail.DetailActivity"
android:exported="false" />
<activity
android:name=".presentation.view.account.login.LoginActivity"
android:exported="true"
Expand All @@ -28,5 +25,11 @@
<activity
android:name=".presentation.view.account.register.RegisterActivity"
android:exported="true" />
<activity
android:name=".presentation.view.write.WriteActivity"
android:exported="true" />
<activity
android:name=".presentation.view.detail.DetailActivity"
android:exported="true" />
</application>
</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ package kr.cosine.groupfinder.data.model
data class SpinnerModel(
val image: Int,
val lane: String
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package kr.cosine.groupfinder.presentation.view.write

import kr.cosine.groupfinder.R
import kr.cosine.groupfinder.data.model.SpinnerModel

object LaneSpinnerItem {
val laneItems = mutableListOf(
SpinnerModel(0, "라인선택"),
SpinnerModel(R.drawable.ic_lane_top, "탑"),
SpinnerModel(R.drawable.ic_lane_jungle, "정글"),
SpinnerModel(R.drawable.ic_lane_mid, "미드"),
SpinnerModel(R.drawable.ic_lane_ad, "원딜"),
SpinnerModel(R.drawable.ic_lane_spt, "서포터")
)
}
Original file line number Diff line number Diff line change
@@ -1,35 +1,107 @@
package kr.cosine.groupfinder.presentation.view.write

import android.os.Bundle
import android.widget.Spinner
import android.util.Log
import android.view.View
import android.widget.AdapterView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import kr.cosine.groupfinder.R
import kr.cosine.groupfinder.data.model.SpinnerModel
import kr.cosine.groupfinder.databinding.ActivityWriteBinding
import kr.cosine.groupfinder.presentation.view.list.adapter.decoration.TagItemDecoration
import kr.cosine.groupfinder.presentation.view.write.adapter.RequireLaneRecyclerViewAdapter
import kr.cosine.groupfinder.presentation.view.write.adapter.SpinnerAdapter
import kr.cosine.groupfinder.presentation.view.write.adapter.TagRecyclerViewAdapter

class WriteActivity : AppCompatActivity() {
private lateinit var binding: ActivityWriteBinding
private lateinit var tagRecyclerViewAdapter: TagRecyclerViewAdapter
lateinit var requireLaneRecyclerViewAdapter: RequireLaneRecyclerViewAdapter

private val selectedMyLaneList = mutableListOf<String>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_write)
binding = ActivityWriteBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
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
}
val spinner = findViewById<Spinner>(R.id.selectMyLaneSpinner)
val items = listOf(
SpinnerModel(R.drawable.ic_lane_top, "탑"),
SpinnerModel(R.drawable.ic_lane_jungle, "정글"),
SpinnerModel(R.drawable.ic_lane_mid, "미드"),
SpinnerModel(R.drawable.ic_lane_ad, "원딜"),
SpinnerModel(R.drawable.ic_lane_spt, "서포터")
)
initSpinner()
setupTagRecyclerViewAdapter()
setupRequireLaneRecyclerViewAdapter()
setOnAddLaneButtonListener()

val tagRecyclerView: RecyclerView = binding.writeTagRecyclerView
tagRecyclerView.addItemDecoration(TagItemDecoration())


}

private fun setupTagRecyclerViewAdapter() {
val layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
binding.writeTagRecyclerView.layoutManager = layoutManager
tagRecyclerViewAdapter = TagRecyclerViewAdapter(dummytag)
binding.writeTagRecyclerView.adapter = tagRecyclerViewAdapter
}

private fun setupRequireLaneRecyclerViewAdapter() {
requireLaneRecyclerViewAdapter = RequireLaneRecyclerViewAdapter(mutableListOf("1"))
binding.requireLanesRecyclerView.apply {
adapter = requireLaneRecyclerViewAdapter
itemAnimator = null
}
}

private fun initSpinner() {
val myLanespinner = binding.selectMyLaneSpinner
val items = LaneSpinnerItem.laneItems
val adapter = SpinnerAdapter(this, items)
spinner.adapter = adapter
myLanespinner.adapter = adapter

myLanespinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
val selectedMyLane = items[position].lane
val defaultLane = items[0].lane
if (selectedMyLane != defaultLane) {
selectedMyLaneList.clear()
selectedMyLaneList.add(selectedMyLane)
}
Log.d("MyLane", selectedMyLaneList.toString())
}

override fun onNothingSelected(parent: AdapterView<*>?) {
// TODO("Not yet implemented")
}

}
}


//라인 더하는 기능
private fun setOnAddLaneButtonListener() {
binding.addLaneCardView.setOnClickListener {
if (requireLaneRecyclerViewAdapter.itemCount >= 4) {
Toast.makeText(this, "더 이상 라인을 추가할 수 없습니다", Toast.LENGTH_SHORT).show()
} else {
requireLaneRecyclerViewAdapter.addLane("1")

}
}
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package kr.cosine.groupfinder.presentation.view.write

import androidx.lifecycle.ViewModel

class WriteViewModel : ViewModel() {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package kr.cosine.groupfinder.presentation.view.write.adapter

import android.content.Context
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.Spinner
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import kr.cosine.groupfinder.databinding.ItemSelectlaneBinding
import kr.cosine.groupfinder.presentation.view.write.LaneSpinnerItem
import kr.cosine.groupfinder.presentation.view.write.WriteActivity

class RequireLaneRecyclerViewAdapter(
private val lanes: MutableList<String>,
) : RecyclerView.Adapter<RequireLaneRecyclerViewAdapter.ViewHolder>() {
private val selectedRequireLanes = mutableMapOf<Int, String>()


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding =
ItemSelectlaneBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val laneRemoveIcon = lanes.size <= 1
holder.bind(holder.itemView.context, laneRemoveIcon)
}

override fun getItemCount(): Int {
return lanes.size
}

inner class ViewHolder(
private val binding: ItemSelectlaneBinding,
) : RecyclerView.ViewHolder(binding.root) {
init {
binding.removeImageView.setOnClickListener {
(binding.root.context as WriteActivity).requireLaneRecyclerViewAdapter.removeLane(
bindingAdapterPosition
)
Log.d("checkSelectedLansesListRemove", selectedRequireLanes.toString())
}
}

fun bind(context: Context, laneRemoveIcon: Boolean) {
val spinner = binding.requireLaneSpinner
val adapter = RequireLaneSpinnerAdapter(context, LaneSpinnerItem.laneItems)
spinner.adapter = adapter
binding.tagbackgroundCardView.visibility =
if (laneRemoveIcon) View.INVISIBLE else View.VISIBLE
setOnSelectedLaneClickListener(spinner, context)
}

private fun setOnSelectedLaneClickListener(spinner: Spinner, context: Context) {
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
val selectedLane = LaneSpinnerItem.laneItems[position].lane
val defaultLane = LaneSpinnerItem.laneItems[0].lane

if (selectedLane != defaultLane) {
selectedRequireLanes[bindingAdapterPosition] = selectedLane

} else {
selectedRequireLanes.remove(bindingAdapterPosition)
}
Log.d("checkSelected", selectedLane)
Log.d("checkSelectedLansesList", selectedRequireLanes.toString())
}

override fun onNothingSelected(parent: AdapterView<*>?) {
TODO("Not yet implemented")
}

}
}

}

fun removeLane(position: Int) {
if (lanes.size > 1 && position < lanes.size) {
lanes.removeAt(position)
selectedRequireLanes.remove(position)
notifyItemRemoved(position)
notifyItemRangeChanged(position, lanes.size)
}
}


//데이터 구조를 다시 잡아야 할듯?
//보여주고 중복된 값이라고 알려주는게 낫다 SnackBar? Toast?
fun addLane(newLane: String) {
lanes.add(newLane)
notifyItemInserted(lanes.size - 1)
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package kr.cosine.groupfinder.presentation.view.write.adapter

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.TextView
import kr.cosine.groupfinder.R
import kr.cosine.groupfinder.data.model.SpinnerModel

class RequireLaneSpinnerAdapter (
private val context: Context,
private val items: List<SpinnerModel>
) : ArrayAdapter<SpinnerModel>(context, 0, items) {

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
return initView(position, convertView, parent)
}

override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
return initView(position, convertView, parent)
}

private fun initView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.item_requirelane_spinner, parent, false)
val imageView = view.findViewById<ImageView>(R.id.requireLaneImageView)
val textView = view.findViewById<TextView>(R.id.requireLaneTextview)
val item = items[position]
imageView.setImageResource(item.image)
textView.text = item.lane
return view
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ import android.widget.ImageView
import android.widget.TextView
import kr.cosine.groupfinder.R
import kr.cosine.groupfinder.data.model.SpinnerModel
import kr.cosine.groupfinder.presentation.view.write.LaneSpinnerItem

class SpinnerAdapter(
private val context: Context,
private val items: List<SpinnerModel>
) : ArrayAdapter<SpinnerModel>(context, 0, items) {

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
return initView(position, convertView, parent)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package kr.cosine.groupfinder.presentation.view.write.adapter


import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kr.cosine.groupfinder.databinding.ActivityWriteBinding
import kr.cosine.groupfinder.databinding.ItemTagBinding


class TagRecyclerViewAdapter(private val tagList: List<String>) :
RecyclerView.Adapter<TagRecyclerViewAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = ItemTagBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(tagList[position])
}

override fun getItemCount(): Int {
return tagList.size
}

class ViewHolder(private val binding: ItemTagBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(tag: String) {
binding.tagTextView.text = tag
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package kr.cosine.groupfinder.presentation.view.write

val dummytag = listOf("tag1","tag2","tag3")
Loading