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 : 학과 선택 진입시 이전 학과 활성화 #210

Closed
wants to merge 41 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 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
a476365
style : 불필요 주석 제거
huiwoo-jo Mar 26, 2024
1c16e55
feat : 온보딩 학과 선택 어댑터 분리
huiwoo-jo Mar 26, 2024
4f1b00b
feat : 온보딩 학과 검색
huiwoo-jo Mar 27, 2024
550204b
style : 자동 정렬
huiwoo-jo Mar 28, 2024
e8e4ad7
refactor : 불필요한 코드 복구
huiwoo-jo Mar 28, 2024
2c90708
refactor : 학과 추가
huiwoo-jo Mar 28, 2024
23938e3
refactor : 미사용 함수 Unit처리
huiwoo-jo Mar 28, 2024
f861242
refactor : 검색어 공백 제거
huiwoo-jo Mar 28, 2024
0e80ead
refactor : editText의 커서 위치 변동 문제 해결
huiwoo-jo Mar 28, 2024
6d71e16
feat : 학과 선택 - 온보딩 화면 분리
huiwoo-jo Feb 19, 2024
40f208f
design : 세팅용 학과선택 화면
huiwoo-jo Feb 19, 2024
3cb23e9
feature : 온보딩용 학과선택 화면 복제
huiwoo-jo Feb 19, 2024
0bbf005
refactor : coordinate 및 snackbar 삭제
huiwoo-jo Feb 19, 2024
f43ff4a
refactor : 첫 시작 경로 수정
huiwoo-jo Feb 19, 2024
4f23695
refactor : 온보딩 학과 선택 - 뷰에 맞는 id 설정
huiwoo-jo Feb 19, 2024
b86f9f9
design : 세팅 학과 선택 액티비티 디자인
huiwoo-jo Feb 19, 2024
e20435c
refactor : 온보딩 학과 선택 - 온보딩 스텝 id 수정
huiwoo-jo Feb 20, 2024
d93dbd8
refactor : 학과 선택 툴바 아이디 수정
huiwoo-jo Feb 20, 2024
0309fa5
feature : 세팅 - 학과 선택 뒤로가기
huiwoo-jo Feb 20, 2024
02ca35e
refactor : 학과 선택 - 버튼 id 수정
huiwoo-jo Feb 20, 2024
74a60fb
refactor : 학과 선택 BaseActivity 기반 코드로 수정
huiwoo-jo Feb 20, 2024
99173cd
refactor : 온보딩 학과 선택 BaseActivity 기반 코드로 수정
huiwoo-jo Feb 20, 2024
ef9b528
refactor : 데이터 바인딩 제거
huiwoo-jo Feb 29, 2024
eedbd08
refactor : 미사용 함수 Unit 처리
huiwoo-jo Feb 29, 2024
864478a
refactor : adapter private 처리
huiwoo-jo Feb 29, 2024
87188dd
feat : 기존에 선택한 학과 활성화
huiwoo-jo Mar 27, 2024
61398af
refactor : viewModel 함수 init 처리
huiwoo-jo Mar 27, 2024
8af8078
refactor : rebase과정 변동사항
huiwoo-jo Mar 28, 2024
06b2b3e
refactor : 중복 include 제거
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 @@ -10,4 +10,8 @@ class DepartRepository {
SharedPreference.setCode(department.code)
}
fun getIsFirstLaunch(): Boolean = SharedPreference.getIsFirstLaunch()

fun getUserDepartment(): String {
return SharedPreference.getDepartment()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
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콘텐츠디자인과" -> ArvrContents
"세무회계학과" -> TaxAccounting
"유통마케팅학과" -> DistributionMarketing
"호텔관광학과" -> HotelTourism
Expand All @@ -66,12 +70,14 @@ sealed class Department(
InfoCommunication,
ComputerSoftware,
ComputerInfo,
FireManagement,
Artificial,
Biochemical,
BioConvergence,
Architecture,
InteriorDesign,
VisualDesign,
ArvrContents,
Business,
TaxAccounting,
DistributionMarketing,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,18 @@ 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
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<DepartAdapter.ViewHolder>() {

private val item = ArrayList<String>()
private var item = ArrayList<String>()
private var itemClickListener: DepartClickListener? = null
private var currentPosition = -1
private var beforePosition = -1
Expand Down Expand Up @@ -49,6 +48,11 @@ class DepartAdapter : RecyclerView.Adapter<DepartAdapter.ViewHolder>() {
}
}

fun setItems(list: ArrayList<String>) {
this.item = list
notifyDataSetChanged()
}

@SuppressLint("NotifyDataSetChanged")
fun submitList(item: ArrayList<String>) {
this.item.addAll(item)
Expand Down
Original file line number Diff line number Diff line change
@@ -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<OnboardingDepartAdapter.ViewHolder>() {

private var 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.itemClickListener = itemClickListener
binding.currentPosition = position
}
}

fun setItems(list: ArrayList<String>) {
this.item = list
notifyDataSetChanged()
}

@SuppressLint("NotifyDataSetChanged")
fun submitList(item: ArrayList<String>) {
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
Expand Up @@ -18,6 +18,7 @@ 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()
Expand All @@ -36,16 +37,18 @@ class DepartActivity : BaseActivity<ActivityDepartBinding, DepartViewModel>(), 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() }
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,24 @@ import com.dongyang.android.youdongknowme.standard.base.BaseViewModel
class DepartViewModel(private val departRepository: DepartRepository) : BaseViewModel() {

private val _isFirstLaunch: MutableLiveData<Boolean> = MutableLiveData(false)

private val _myDepartment: MutableLiveData<String> = MutableLiveData()
val myDepartment: LiveData<String> get() = _myDepartment

val isFirstLaunch: LiveData<Boolean> get() = _isFirstLaunch

private val _selectDepartPosition = MutableLiveData(-1)
val selectDepartPosition: LiveData<Int> get() = _selectDepartPosition

init {
getUserDepartment()
}

fun getUserDepartment() {
val myDepartment = departRepository.getUserDepartment()
_myDepartment.postValue(myDepartment)
}

fun setDepartment(department: String) {
departRepository.setDepartment(department)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -16,19 +18,21 @@ class OnboardingDepartActivity : BaseActivity<ActivityOnboardingDepartBinding, D

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 +49,43 @@ class OnboardingDepartActivity : BaseActivity<ActivityOnboardingDepartBinding, D
override fun initDataBinding() = Unit

override fun initAfterBinding() {
binding.ibOnboardingDepartSearchClear.setOnClickListener {
binding.etOnboardingDepartSearch.setText("")
}

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.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)
}
}
}

Expand Down
1 change: 0 additions & 1 deletion app/src/main/res/layout/activity_depart.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
13 changes: 5 additions & 8 deletions app/src/main/res/layout/activity_onboarding_depart.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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" />

<include
android:id="@+id/onboarding_depart_step"
Expand Down Expand Up @@ -75,9 +71,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 +91,13 @@
android:id="@+id/rv_onboarding_depart"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="16dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="0dp"
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
40 changes: 40 additions & 0 deletions app/src/main/res/layout/item_onboarding_depart.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<layout>

<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/item_onboarding_depart_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:onClick="@{() -> itemClickListener.containerClick(currentPosition)}"
android:outlineProvider="none"
app:cardCornerRadius="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<TextView
android:id="@+id/item_onboarding_depart_name"
style="@style/PretendardMedium16"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="left"
android:padding="16dp"
android:textColor="@color/gray300"
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