Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat : 온보딩 학과 검색 기능 추가 #211

Merged
merged 58 commits into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
0ed581c
refactor : 온보딩 학과 선택 - snackbar 제거
huiwoo-jo Feb 12, 2024
cb04e0a
design : 온보딩 학과 선택 - 아이템 디자인 변경
huiwoo-jo Feb 12, 2024
dba4ed0
refactor : 온보딩 학과 선택 마진값 조정
huiwoo-jo Feb 12, 2024
be155e7
feat : 온보딩 학과 선택 - 학과 검색
huiwoo-jo Feb 12, 2024
59ebaf8
chore : 학과 리스트 수정
huiwoo-jo Feb 12, 2024
7f1ed10
style : 불필요 주석 제거
huiwoo-jo Mar 26, 2024
9cb138c
design : 온보딩 학과선택 아이템 추가
huiwoo-jo Mar 26, 2024
02e27e0
feat : 온보딩 학과 선택 어댑터 분리
huiwoo-jo Mar 26, 2024
6c87808
feat : 온보딩 학과 검색
huiwoo-jo Mar 27, 2024
052f4ea
refactor : 학과 리스트 초기 출력 초기화
huiwoo-jo Mar 27, 2024
c1f8b84
refactor : 학과 검색창 비어있음 처리
huiwoo-jo Mar 27, 2024
50b78f6
refactor : 검색창이 빈 경우 빈 리스트 반환
huiwoo-jo Mar 28, 2024
326edfa
feat : 온보딩 학과 선택 어댑터 분리
huiwoo-jo Mar 26, 2024
6f04622
feat : 온보딩 학과 검색
huiwoo-jo Mar 27, 2024
901f222
refactor : 학과 검색창 비어있음 처리
huiwoo-jo Mar 27, 2024
5a13239
style : 자동 정렬
huiwoo-jo Mar 28, 2024
b3a9c78
refactor : 불필요한 코드 복구
huiwoo-jo Mar 28, 2024
3172790
refactor : 학과 추가
huiwoo-jo Mar 28, 2024
f22c9ce
refactor : 미사용 함수 Unit처리
huiwoo-jo Mar 28, 2024
329a130
refactor : 검색어 공백 제거
huiwoo-jo Mar 28, 2024
8269336
refactor : editText의 커서 위치 변동 문제 해결
huiwoo-jo Mar 28, 2024
f51089c
refactor : setItems 제거
huiwoo-jo Mar 28, 2024
9b062a0
refactor : 온보딩 학과 검색 setItems 제거
huiwoo-jo Mar 28, 2024
971a4b6
refactor : marginTop 제거
huiwoo-jo Mar 28, 2024
9a82a75
refactor : setText에서 clear로 수정
huiwoo-jo Mar 28, 2024
4ee85e9
style : 자동 정렬 및 공백 제거
huiwoo-jo Mar 28, 2024
8cb7e60
refactor : Constants Code 추가
huiwoo-jo Mar 28, 2024
6bd8372
refactor : 데이터 바인딩 제거
huiwoo-jo Mar 28, 2024
96bff96
Merge branch 'develop' into feature/onboarding-#1
huiwoo-jo Mar 28, 2024
2610bc2
Merge branch 'develop' into feature/onboarding-#1
huiwoo-jo Mar 28, 2024
8634aab
refactor : 온보딩 학과 선택 - snackbar 제거
huiwoo-jo Feb 12, 2024
93d0022
design : 온보딩 학과 선택 - 아이템 디자인 변경
huiwoo-jo Feb 12, 2024
d0f24b7
refactor : 온보딩 학과 선택 마진값 조정
huiwoo-jo Feb 12, 2024
4991912
feat : 온보딩 학과 선택 - 학과 검색
huiwoo-jo Feb 12, 2024
dc78e1b
chore : 학과 리스트 수정
huiwoo-jo Feb 12, 2024
98ddda5
style : 불필요 주석 제거
huiwoo-jo Mar 26, 2024
a139763
design : 온보딩 학과선택 아이템 추가
huiwoo-jo Mar 26, 2024
93dde45
feat : 온보딩 학과 선택 어댑터 분리
huiwoo-jo Mar 26, 2024
b3b1647
feat : 온보딩 학과 검색
huiwoo-jo Mar 27, 2024
653b835
refactor : 학과 리스트 초기 출력 초기화
huiwoo-jo Mar 27, 2024
915fa35
refactor : 학과 검색창 비어있음 처리
huiwoo-jo Mar 27, 2024
46933ce
refactor : 검색창이 빈 경우 빈 리스트 반환
huiwoo-jo Mar 28, 2024
ee2b352
feat : 온보딩 학과 선택 어댑터 분리
huiwoo-jo Mar 26, 2024
b8cf8cc
feat : 온보딩 학과 검색
huiwoo-jo Mar 27, 2024
b40652f
refactor : 학과 검색창 비어있음 처리
huiwoo-jo Mar 27, 2024
df4c994
style : 자동 정렬
huiwoo-jo Mar 28, 2024
47ada16
refactor : 불필요한 코드 복구
huiwoo-jo Mar 28, 2024
d695fe8
refactor : 학과 추가
huiwoo-jo Mar 28, 2024
8f6d446
refactor : 미사용 함수 Unit처리
huiwoo-jo Mar 28, 2024
f2340e0
refactor : 검색어 공백 제거
huiwoo-jo Mar 28, 2024
ae7455c
refactor : editText의 커서 위치 변동 문제 해결
huiwoo-jo Mar 28, 2024
b0eb077
refactor : 온보딩 학과 검색 setItems 제거
huiwoo-jo Mar 28, 2024
fa12f94
refactor : marginTop 제거
huiwoo-jo Mar 28, 2024
0857dae
refactor : setText에서 clear로 수정
huiwoo-jo Mar 28, 2024
98fab9f
style : 자동 정렬 및 공백 제거
huiwoo-jo Mar 28, 2024
1be623f
refactor : Constants Code 추가
huiwoo-jo Mar 28, 2024
34cfe7e
refactor : 데이터 바인딩 제거
huiwoo-jo Mar 28, 2024
7d0b979
Merge branch 'feature/onboarding-#1' of https://github.com/TeamDMU/DM…
huiwoo-jo Mar 28, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,14 @@ object CODE {
const val INFO_ELECTRONIC_ENGINE_CODE = 402
const val SEMICONDUCTOR_ENGINE_CODE = 403
const val INFO_COMMUNICATION_ENGINE_CODE = 404
const val FIRE_MANAGEMENT_CODE = 405

const val BIOCHEMICAL_ENGINE_CODE = 501
const val BIO_CONVERGENCE_ENGINE_CODE = 502
const val ARCHITECTURE_CODE = 503
const val INTERIOR_DESIGN_CODE = 504
const val VISUAL_DESIGN_CODE = 505
const val AR_VR_CONTENT_CODE = 506

const val BUSINESS_ADMINISTRATION_CODE = 601
const val TAX_ACCOUNTING_CODE = 602
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ sealed class Department(
object InfoElectrical : Department("정보전자공학과", CODE.INFO_ELECTRONIC_ENGINE_CODE)
object Semiconductor : Department("반도체전자공학과", CODE.SEMICONDUCTOR_ENGINE_CODE)
object InfoCommunication : Department("정보통신공학과", CODE.INFO_COMMUNICATION_ENGINE_CODE)
object FireManagement : Department("소방안전관리과", CODE.FIRE_MANAGEMENT_CODE)
object ComputerSoftware : Department("컴퓨터소프트웨어공학과", CODE.COMPUTER_SOFTWARE_ENGINE_CODE)
object ComputerInfo : Department("컴퓨터정보공학과", CODE.COMPUTER_INFO_ENGINE_CODE)
object Artificial : Department("인공지능소프트웨어학과", CODE.ARTIFICIAL_ENGINE_CODE)
Expand All @@ -18,6 +19,7 @@ sealed class Department(
object Architecture : Department("건축과", CODE.ARCHITECTURE_CODE)
object InteriorDesign : Department("실내건축디자인과", CODE.INTERIOR_DESIGN_CODE)
object VisualDesign : Department("시각디자인과", CODE.VISUAL_DESIGN_CODE)
object ArVrContent : Department("AR-VR콘텐츠디자인과", CODE.AR_VR_CONTENT_CODE)
object Business : Department("경영학과", CODE.BUSINESS_ADMINISTRATION_CODE)
object TaxAccounting : Department("세무회계학과", CODE.TAX_ACCOUNTING_CODE)
object DistributionMarketing : Department("유통마케팅학과", CODE.DISTRIBUTION_MARKETING_CODE)
Expand All @@ -38,6 +40,7 @@ sealed class Department(
"정보전자공학과" -> InfoElectrical
"반도체전자공학과" -> Semiconductor
"정보통신공학과" -> InfoCommunication
"소방안전관리과" -> FireManagement
"컴퓨터소프트웨어공학과" -> ComputerSoftware
"컴퓨터정보공학과" -> ComputerInfo
"인공지능소프트웨어학과" -> Artificial
Expand All @@ -46,6 +49,7 @@ sealed class Department(
"건축과" -> Architecture
"실내건축디자인과" -> InteriorDesign
"시각디자인과" -> VisualDesign
"AR-VR콘텐츠디자인과" -> ArVrContent
"세무회계학과" -> TaxAccounting
"유통마케팅학과" -> DistributionMarketing
"호텔관광학과" -> HotelTourism
Expand All @@ -66,12 +70,14 @@ sealed class Department(
InfoCommunication,
ComputerSoftware,
ComputerInfo,
FireManagement,
Artificial,
Biochemical,
BioConvergence,
Architecture,
InteriorDesign,
VisualDesign,
ArVrContent,
Business,
TaxAccounting,
DistributionMarketing,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ package com.dongyang.android.youdongknowme.ui.adapter

import android.annotation.SuppressLint
import android.content.res.ColorStateList
import android.graphics.Typeface
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
Expand All @@ -24,20 +22,32 @@ class DepartAdapter : RecyclerView.Adapter<DepartAdapter.ViewHolder>() {
@SuppressLint("UseCompatLoadingForColorStateLists")
fun bind(item: String, position: Int) {
binding.itemDepartName.text = item
binding.itemClickListener = itemClickListener
binding.currentPosition = position

binding.itemDepartContainer.setOnClickListener {
itemClickListener?.containerClick(position)
}

// 선택한 포지션이 맞을 때 강조 표시
if (currentPosition == position) {
binding.itemDepartContainer.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(binding.root.context, R.color.blue300))
binding.itemDepartContainer.backgroundTintList = ColorStateList.valueOf(
ContextCompat.getColor(
binding.root.context,
R.color.blue300
)
)
binding.itemDepartName.setTextColor(
ContextCompat.getColor(
binding.root.context,
R.color.white
)
)
} else {
binding.itemDepartContainer.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(binding.root.context, R.color.white))
binding.itemDepartContainer.backgroundTintList = ColorStateList.valueOf(
ContextCompat.getColor(
binding.root.context,
R.color.white
)
)
binding.itemDepartName.setTextColor(
ContextCompat.getColor(
binding.root.context,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.dongyang.android.youdongknowme.ui.adapter

import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.dongyang.android.youdongknowme.databinding.ItemOnboardingDepartBinding
import com.dongyang.android.youdongknowme.ui.view.depart.DepartClickListener


huiwoo-jo marked this conversation as resolved.
Show resolved Hide resolved
class OnboardingDepartAdapter : RecyclerView.Adapter<OnboardingDepartAdapter.ViewHolder>() {

private val item = ArrayList<String>()
private var itemClickListener: DepartClickListener? = null
private var currentPosition = -1
private var beforePosition = -1

inner class ViewHolder(private val binding: ItemOnboardingDepartBinding) :
RecyclerView.ViewHolder(binding.root) {
@SuppressLint("UseCompatLoadingForColorStateLists")
fun bind(item: String, position: Int) {
binding.itemOnboardingDepartName.text = item

binding.itemOnboardingDepartContainer.setOnClickListener {
itemClickListener?.containerClick(position)
}
}
}

@SuppressLint("NotifyDataSetChanged")
fun submitList(item: ArrayList<String>) {
this.item.clear()
this.item.addAll(item)
notifyDataSetChanged()
}

fun submitPosition(currentPosition: Int) {
this.beforePosition = this.currentPosition
this.currentPosition = currentPosition
notifyItemChanged(beforePosition)
notifyItemChanged(this.currentPosition)
}

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

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

override fun getItemCount(): Int = item.size

fun setItemClickListener(listener: DepartClickListener) {
itemClickListener = listener
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.dongyang.android.youdongknowme.ui.view.depart

import android.content.Intent
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import androidx.recyclerview.widget.LinearLayoutManager
import com.dongyang.android.youdongknowme.R
import com.dongyang.android.youdongknowme.databinding.ActivityDepartBinding
Expand All @@ -9,6 +12,7 @@ import com.dongyang.android.youdongknowme.ui.adapter.DepartAdapter
import com.dongyang.android.youdongknowme.ui.view.main.MainActivity
import org.koin.androidx.viewmodel.ext.android.viewModel


class DepartActivity : BaseActivity<ActivityDepartBinding, DepartViewModel>(), DepartClickListener {


Expand All @@ -18,11 +22,11 @@ class DepartActivity : BaseActivity<ActivityDepartBinding, DepartViewModel>(), D
private lateinit var items: ArrayList<String>

override fun initStartView() {
// 학과 리스트
items =
resources.getStringArray(R.array.dmu_department_list).toCollection(ArrayList<String>())
items.sort()

// 학과 리스트
adapter = DepartAdapter().apply {
submitList(items)
setItemClickListener(this@DepartActivity)
Expand All @@ -33,7 +37,6 @@ class DepartActivity : BaseActivity<ActivityDepartBinding, DepartViewModel>(), D
this.layoutManager = LinearLayoutManager(this@DepartActivity)
this.setHasFixedSize(true)
}

}

override fun initDataBinding() {
Expand All @@ -46,10 +49,9 @@ class DepartActivity : BaseActivity<ActivityDepartBinding, DepartViewModel>(), D
viewModel.selectDepartPosition.observe(this) {
adapter.submitPosition(it)

// 포지션 선택 시 스낵바를 통해 알림 표시
if (it != -1) getDepart(items)
}

binding.toolbarDepart.btnToolbarExit.setOnClickListener { finish() }
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,38 @@ package com.dongyang.android.youdongknowme.ui.view.depart

import android.content.Context
import android.content.Intent
import android.text.Editable
import android.text.TextWatcher
import androidx.recyclerview.widget.LinearLayoutManager
import com.dongyang.android.youdongknowme.R
import com.dongyang.android.youdongknowme.databinding.ActivityOnboardingDepartBinding
import com.dongyang.android.youdongknowme.standard.base.BaseActivity
import com.dongyang.android.youdongknowme.ui.adapter.DepartAdapter
import com.dongyang.android.youdongknowme.ui.adapter.OnboardingDepartAdapter
import com.dongyang.android.youdongknowme.ui.view.keyword.OnboardingKeywordActivity
import com.dongyang.android.youdongknowme.ui.view.main.MainActivity
import org.koin.androidx.viewmodel.ext.android.viewModel


class OnboardingDepartActivity : BaseActivity<ActivityOnboardingDepartBinding, DepartViewModel>(),
DepartClickListener {

override val layoutResourceId: Int = R.layout.activity_onboarding_depart
override val viewModel: DepartViewModel by viewModel()
private lateinit var adapter: DepartAdapter
private lateinit var adapter: OnboardingDepartAdapter
private lateinit var items: ArrayList<String>
private var searchList = ArrayList<String>()
private var emptyList = arrayListOf<String>("")

override fun initStartView() {
viewModel.checkFirstLaunch()

// 학과 리스트
items =
resources.getStringArray(R.array.dmu_department_list).toCollection(ArrayList<String>())
items.sort()

// 학과 리스트
adapter = DepartAdapter().apply {
submitList(items)
adapter = OnboardingDepartAdapter().apply {
submitList(emptyList)
setItemClickListener(this@OnboardingDepartActivity)
}

Expand All @@ -45,11 +50,43 @@ class OnboardingDepartActivity : BaseActivity<ActivityOnboardingDepartBinding, D
override fun initDataBinding() = Unit

override fun initAfterBinding() {
binding.ibOnboardingDepartSearchClear.setOnClickListener {
binding.etOnboardingDepartSearch.text.clear()
}

binding.etOnboardingDepartSearch.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence?, i: Int, i1: Int, i2: Int) = Unit

override fun onTextChanged(charSequence: CharSequence?, i: Int, i1: Int, i2: Int) = Unit

override fun afterTextChanged(editable: Editable?) {
val searchText = binding.etOnboardingDepartSearch.text.toString().replace("\\s".toRegex(), "")
searchList = ArrayList<String>()

if (searchText.isEmpty()) {
adapter.submitList(emptyList)
} else {
// 검색 단어를 포함하는지 확인
for (item in items) {
if (item.contains(searchText)) {
searchList.add(item)
}
}
adapter.submitList(searchList)
}
}
})

viewModel.selectDepartPosition.observe(this) {
adapter.submitPosition(it)

// 포지션 선택 시 스낵바를 통해 알림 표시
if (it != -1) getDepart(items)
if (it != -1) {
getDepart(searchList)
binding.etOnboardingDepartSearch.setText(
searchList[viewModel.selectDepartPosition.value ?: 0]
)
binding.etOnboardingDepartSearch.setSelection(binding.etOnboardingDepartSearch.text.length)
}
}
}

Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/layout/activity_depart.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.view.depart.DepartActivity">
tools:context=".ui.view.depart.DepartActivity"
android:paddingHorizontal="16dp">

<include
android:id="@+id/toolbar_depart"
Expand Down Expand Up @@ -35,7 +36,6 @@
style="@style/PretendardRegular20"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_marginHorizontal="16dp"
android:layout_marginBottom="20dp"
android:background="@drawable/btn_gray_to_blue_10dp_enabled"
android:text="@string/department_complete"
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/res/layout/activity_onboarding_depart.xml
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@
android:hint="@string/department_search_message"
android:imeOptions="actionSearch"
android:inputType="text"
android:maxLines="1"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:maxLines="1"
android:textColorHint="@color/gray300" />

<ImageButton
Expand All @@ -95,12 +95,12 @@
android:id="@+id/rv_onboarding_depart"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="16dp"
android:layout_marginHorizontal="16dp"
app:layout_constraintBottom_toBottomOf="@id/btn_onboarding_depart_next"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/linearLayout_onboarding_depart_search"
tools:listitem="@layout/item_depart" />
tools:listitem="@layout/item_onboarding_depart" />

<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_onboarding_depart_next"
Expand Down
12 changes: 0 additions & 12 deletions app/src/main/res/layout/item_depart.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
android:layout_margin="8dp"
android:clickable="true"
android:focusable="true"
android:onClick="@{() -> itemClickListener.containerClick(currentPosition)}"
android:outlineProvider="none"
app:cardCornerRadius="10dp"
app:layout_constraintEnd_toEndOf="parent"
Expand All @@ -27,15 +26,4 @@
app:layout_constraintTop_toTopOf="parent" />

</com.google.android.material.card.MaterialCardView>

<data>

<variable
name="currentPosition"
type="int" />

<variable
name="itemClickListener"
type="com.dongyang.android.youdongknowme.ui.view.depart.DepartClickListener" />
</data>
</layout>
Loading
Loading