diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/DepartRepository.kt b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/DepartRepository.kt index 2403f3c9..8b2e8361 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/DepartRepository.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/DepartRepository.kt @@ -10,4 +10,8 @@ class DepartRepository { SharedPreference.setCode(department.code) } fun getIsFirstLaunch(): Boolean = SharedPreference.getIsFirstLaunch() + + fun getUserDepartment(): String { + return SharedPreference.getDepartment() + } } \ No newline at end of file diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/standard/util/Department.kt b/app/src/main/java/com/dongyang/android/youdongknowme/standard/util/Department.kt index 4497ee89..e541f62d 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/standard/util/Department.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/standard/util/Department.kt @@ -12,12 +12,14 @@ sealed class Department( object InfoCommunication : Department("정보통신공학과", CODE.INFO_COMMUNICATION_ENGINE_CODE) object ComputerSoftware : Department("컴퓨터소프트웨어공학과", CODE.COMPUTER_SOFTWARE_ENGINE_CODE) object ComputerInfo : Department("컴퓨터정보공학과", CODE.COMPUTER_INFO_ENGINE_CODE) + object FireManagement : Department("소방안전관리과", CODE.COMPUTER_INFO_ENGINE_CODE) object Artificial : Department("인공지능소프트웨어학과", CODE.ARTIFICIAL_ENGINE_CODE) object Biochemical : Department("생명화학공학과", CODE.BIOCHEMICAL_ENGINE_CODE) object BioConvergence : Department("바이오융합공학과", CODE.BIO_CONVERGENCE_ENGINE_CODE) object Architecture : Department("건축과", CODE.ARCHITECTURE_CODE) object InteriorDesign : Department("실내건축디자인과", CODE.INTERIOR_DESIGN_CODE) object VisualDesign : Department("시각디자인과", CODE.VISUAL_DESIGN_CODE) + object ArvrContents : Department("AR-VR콘텐츠디자인과", CODE.COMPUTER_INFO_ENGINE_CODE) object Business : Department("경영학과", CODE.BUSINESS_ADMINISTRATION_CODE) object TaxAccounting : Department("세무회계학과", CODE.TAX_ACCOUNTING_CODE) object DistributionMarketing : Department("유통마케팅학과", CODE.DISTRIBUTION_MARKETING_CODE) @@ -38,6 +40,7 @@ sealed class Department( "정보전자공학과" -> InfoElectrical "반도체전자공학과" -> Semiconductor "정보통신공학과" -> InfoCommunication + "소방안전관리과" -> FireManagement "컴퓨터소프트웨어공학과" -> ComputerSoftware "컴퓨터정보공학과" -> ComputerInfo "인공지능소프트웨어학과" -> Artificial @@ -46,6 +49,7 @@ sealed class Department( "건축과" -> Architecture "실내건축디자인과" -> InteriorDesign "시각디자인과" -> VisualDesign + "AR-VR콘텐츠디자인과" -> ArvrContents "세무회계학과" -> TaxAccounting "유통마케팅학과" -> DistributionMarketing "호텔관광학과" -> HotelTourism @@ -66,12 +70,14 @@ sealed class Department( InfoCommunication, ComputerSoftware, ComputerInfo, + FireManagement, Artificial, Biochemical, BioConvergence, Architecture, InteriorDesign, VisualDesign, + ArvrContents, Business, TaxAccounting, DistributionMarketing, diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/DepartAdapter.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/DepartAdapter.kt index 6f55c0a9..0435365b 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/DepartAdapter.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/DepartAdapter.kt @@ -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 @@ -12,9 +10,10 @@ import com.dongyang.android.youdongknowme.R import com.dongyang.android.youdongknowme.databinding.ItemDepartBinding import com.dongyang.android.youdongknowme.ui.view.depart.DepartClickListener + class DepartAdapter : RecyclerView.Adapter() { - private val item = ArrayList() + private var item = ArrayList() private var itemClickListener: DepartClickListener? = null private var currentPosition = -1 private var beforePosition = -1 @@ -49,6 +48,11 @@ class DepartAdapter : RecyclerView.Adapter() { } } + fun setItems(list: ArrayList) { + this.item = list + notifyDataSetChanged() + } + @SuppressLint("NotifyDataSetChanged") fun submitList(item: ArrayList) { this.item.addAll(item) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/OnboardingDepartAdapter.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/OnboardingDepartAdapter.kt new file mode 100644 index 00000000..1681c685 --- /dev/null +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/OnboardingDepartAdapter.kt @@ -0,0 +1,63 @@ +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 + + +class OnboardingDepartAdapter : RecyclerView.Adapter() { + + private var item = ArrayList() + 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.itemClickListener = itemClickListener + binding.currentPosition = position + } + } + + fun setItems(list: ArrayList) { + this.item = list + notifyDataSetChanged() + } + + @SuppressLint("NotifyDataSetChanged") + fun submitList(item: ArrayList) { + 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 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartActivity.kt index 3f7e1438..52db6631 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartActivity.kt @@ -18,6 +18,7 @@ class DepartActivity : BaseActivity(), D private lateinit var items: ArrayList override fun initStartView() { + // 학과 리스트 items = resources.getStringArray(R.array.dmu_department_list).toCollection(ArrayList()) items.sort() @@ -36,16 +37,18 @@ class DepartActivity : BaseActivity(), D } - override fun initDataBinding() = Unit + override fun initDataBinding() { + viewModel.myDepartment.observe(this) { department -> + viewModel.setSelectPosition(items.indexOf(department)) + } + } override fun initAfterBinding() { viewModel.selectDepartPosition.observe(this) { adapter.submitPosition(it) - - // 포지션 선택 시 스낵바를 통해 알림 표시 if (it != -1) getDepart(items) } - + binding.toolbarDepart.btnToolbarExit.setOnClickListener { finish() } } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartViewModel.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartViewModel.kt index 29fb1fea..553d5f32 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartViewModel.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/DepartViewModel.kt @@ -8,11 +8,24 @@ import com.dongyang.android.youdongknowme.standard.base.BaseViewModel class DepartViewModel(private val departRepository: DepartRepository) : BaseViewModel() { private val _isFirstLaunch: MutableLiveData = MutableLiveData(false) + + private val _myDepartment: MutableLiveData = MutableLiveData() + val myDepartment: LiveData get() = _myDepartment + val isFirstLaunch: LiveData get() = _isFirstLaunch private val _selectDepartPosition = MutableLiveData(-1) val selectDepartPosition: LiveData get() = _selectDepartPosition + init { + getUserDepartment() + } + + fun getUserDepartment() { + val myDepartment = departRepository.getUserDepartment() + _myDepartment.postValue(myDepartment) + } + fun setDepartment(department: String) { departRepository.setDepartment(department) } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/OnboardingDepartActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/OnboardingDepartActivity.kt index 4a17e2b6..20d84e6e 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/OnboardingDepartActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/OnboardingDepartActivity.kt @@ -2,11 +2,13 @@ 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 @@ -16,19 +18,21 @@ class OnboardingDepartActivity : BaseActivity + private var searchList = ArrayList() + private var emptyList = arrayListOf("") override fun initStartView() { viewModel.checkFirstLaunch() + // 학과 리스트 items = resources.getStringArray(R.array.dmu_department_list).toCollection(ArrayList()) items.sort() - // 학과 리스트 - adapter = DepartAdapter().apply { - submitList(items) + adapter = OnboardingDepartAdapter().apply { + submitList(emptyList) setItemClickListener(this@OnboardingDepartActivity) } @@ -45,11 +49,43 @@ class OnboardingDepartActivity : BaseActivity() + + if (searchText.isEmpty()) { + adapter.setItems(emptyList) + } else { + // 검색 단어를 포함하는지 확인 + for (item in items) { + if (item.contains(searchText)) { + searchList.add(item) + } + } + adapter.setItems(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) + } } } diff --git a/app/src/main/res/layout/activity_depart.xml b/app/src/main/res/layout/activity_depart.xml index ff64d8fd..f866a746 100644 --- a/app/src/main/res/layout/activity_depart.xml +++ b/app/src/main/res/layout/activity_depart.xml @@ -35,7 +35,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" diff --git a/app/src/main/res/layout/activity_onboarding_depart.xml b/app/src/main/res/layout/activity_onboarding_depart.xml index 8571a280..e4c66a8a 100644 --- a/app/src/main/res/layout/activity_onboarding_depart.xml +++ b/app/src/main/res/layout/activity_onboarding_depart.xml @@ -29,11 +29,7 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="16dp" android:text="@string/department_title_sub" - android:textColor="@color/gray500" - app:layout_constraintBottom_toTopOf="@id/onboarding_depart_step" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="@id/tv_onboarding_depart_title_main" /> + android:textColor="@color/gray500" /> + tools:listitem="@layout/item_onboarding_depart" /> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 7e823603..738d9bb1 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -9,6 +9,7 @@ 정보전자공학과 반도체전자공학과 정보통신공학과 + 소방안전관리과 컴퓨터소프트웨어공학과 컴퓨터정보공학과 인공지능소프트웨어학과 @@ -17,6 +18,7 @@ 건축과 실내건축디자인과 시각디자인과 + AR-VR콘텐츠디자인과 경영학과 세무회계학과 유통마케팅학과