diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 23d161f4..4c16f9e2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -36,6 +36,9 @@
+
-}
+ @GET("api/v1/dmu/notice/{searchWord}")
+ suspend fun getSearchNotice(
+ @Path("searchWord") searchWord: String,
+ @Query("department") department: String,
+ @Query("page") page: Int,
+ @Query("size") size: Int
+ ): List
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/NoticeRepository.kt b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/NoticeRepository.kt
index 169aa27f..e6c2481a 100644
--- a/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/NoticeRepository.kt
+++ b/app/src/main/java/com/dongyang/android/youdongknowme/data/repository/NoticeRepository.kt
@@ -21,7 +21,10 @@ class NoticeRepository(
}
}
- suspend fun fetchDepartmentNotices(department: String, page: Int): NetworkResult> {
+ suspend fun fetchDepartmentNotices(
+ department: String,
+ page: Int)
+ : NetworkResult> {
return try {
val departmentNotices = RetrofitObject.getNetwork().create(NoticeService::class.java)
.getDepartmentNotice(department, page, DEFAULT_SIZE)
@@ -32,6 +35,20 @@ class NoticeRepository(
}
}
+ suspend fun fetchSearchNotices(
+ searchWord: String,
+ page: Int
+ ): NetworkResult> {
+ return try {
+ val searchNotices = RetrofitObject.getNetwork().create(NoticeService::class.java)
+ .getSearchNotice(searchWord, "컴퓨터소프트웨어공학과", page, DEFAULT_SIZE)
+ NetworkResult.Success(searchNotices)
+ } catch (exception: Exception) {
+ val error = errorResponseHandler.getError(exception)
+ NetworkResult.Error(error)
+ }
+ }
+
companion object {
private const val DEFAULT_SIZE = 20
}
diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/function/SetSpanText.kt b/app/src/main/java/com/dongyang/android/youdongknowme/function/SetSpanText.kt
deleted file mode 100644
index f115fa02..00000000
--- a/app/src/main/java/com/dongyang/android/youdongknowme/function/SetSpanText.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.dongyang.android.youdongknowme.function
-
-import android.content.Context
-import android.text.Spannable
-import android.text.SpannableStringBuilder
-import android.text.style.ForegroundColorSpan
-import android.widget.TextView
-import androidx.core.content.ContextCompat.getColor
-import com.dongyang.android.youdongknowme.R
-
-fun setSpanText(mContext: Context, spanTextView: TextView, startIdx: Int, endIdx: Int) {
- SpannableStringBuilder(spanTextView.text).apply {
- setSpan(
- ForegroundColorSpan(getColor(mContext, R.color.blue300)),
- startIdx,
- endIdx,
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
- )
- spanTextView.text = this
- }
-}
diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/standard/base/BaseActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/standard/base/BaseActivity.kt
index 377cac76..081d450d 100644
--- a/app/src/main/java/com/dongyang/android/youdongknowme/standard/base/BaseActivity.kt
+++ b/app/src/main/java/com/dongyang/android/youdongknowme/standard/base/BaseActivity.kt
@@ -1,5 +1,6 @@
package com.dongyang.android.youdongknowme.standard.base
+import android.content.Context
import android.os.Bundle
import android.text.Spannable
import android.text.SpannableStringBuilder
@@ -32,7 +33,12 @@ abstract class BaseActivity : AppCompatA
initAfterBinding()
}
- protected fun setSpanText(spanTextView: TextView, startIdx: Int, endIdx: Int){
+ protected fun setSpanText(
+ baseContext: Context,
+ spanTextView: TextView,
+ startIdx: Int,
+ endIdx: Int
+ ){
SpannableStringBuilder(spanTextView.text).apply {
setSpan(
ForegroundColorSpan(getColor(com.dongyang.android.youdongknowme.R.color.main)),
diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/standard/di/KoinModules.kt b/app/src/main/java/com/dongyang/android/youdongknowme/standard/di/KoinModules.kt
index 46a61215..1f28c5c0 100644
--- a/app/src/main/java/com/dongyang/android/youdongknowme/standard/di/KoinModules.kt
+++ b/app/src/main/java/com/dongyang/android/youdongknowme/standard/di/KoinModules.kt
@@ -31,7 +31,6 @@ import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch
import org.koin.android.ext.koin.androidContext
import org.koin.androidx.viewmodel.dsl.viewModel
-import org.koin.core.scope.get
import org.koin.dsl.module
val databaseModule = module {
@@ -97,7 +96,7 @@ val viewModelModule = module {
LicenseViewModel()
}
viewModel {
- SearchViewModel()
+ SearchViewModel(get())
}
}
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 c8f2ffba..6f55c0a9 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
@@ -1,6 +1,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
@@ -20,6 +21,7 @@ class DepartAdapter : RecyclerView.Adapter() {
inner class ViewHolder(private val binding: ItemDepartBinding) :
RecyclerView.ViewHolder(binding.root) {
+ @SuppressLint("UseCompatLoadingForColorStateLists")
fun bind(item: String, position: Int) {
binding.itemDepartName.text = item
binding.itemClickListener = itemClickListener
@@ -27,21 +29,22 @@ class DepartAdapter : RecyclerView.Adapter() {
// 선택한 포지션이 맞을 때 강조 표시
if (currentPosition == position) {
- binding.itemDepartCheck.visibility = View.VISIBLE
+ binding.itemDepartContainer.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(binding.root.context, R.color.blue300))
binding.itemDepartName.setTextColor(
ContextCompat.getColor(
binding.root.context,
- R.color.sub
+ R.color.white
)
)
} else {
- binding.itemDepartCheck.visibility = View.INVISIBLE
+ binding.itemDepartContainer.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(binding.root.context, R.color.white))
binding.itemDepartName.setTextColor(
ContextCompat.getColor(
binding.root.context,
- R.color.black
+ R.color.gray400
)
)
+
}
}
}
diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/NoticeAdapter.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/NoticeAdapter.kt
index 83f10cc4..95e303f2 100644
--- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/NoticeAdapter.kt
+++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/adapter/NoticeAdapter.kt
@@ -8,7 +8,7 @@ import com.dongyang.android.youdongknowme.data.remote.entity.Notice
import com.dongyang.android.youdongknowme.databinding.ItemNoticeBinding
import com.dongyang.android.youdongknowme.ui.viewholder.NoticeViewHolder
-class NoticeAdapter(private val clickListener: (url: String) -> Unit) :
+class NoticeAdapter(private val onItemClick: (url: String) -> Unit) :
RecyclerView.Adapter() {
private val noticeList = arrayListOf()
@@ -24,7 +24,7 @@ class NoticeAdapter(private val clickListener: (url: String) -> Unit) :
return NoticeViewHolder(
ItemNoticeBinding.inflate(
LayoutInflater.from(parent.context), parent, false
- ), clickListener
+ ), onItemClick
)
}
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 944e2a81..3f7e1438 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
@@ -1,47 +1,28 @@
package com.dongyang.android.youdongknowme.ui.view.depart
import android.content.Intent
-import android.graphics.Typeface
-import android.os.Bundle
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.appcompat.app.AppCompatActivity
-import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.LinearLayoutManager
import com.dongyang.android.youdongknowme.R
import com.dongyang.android.youdongknowme.databinding.ActivityDepartBinding
-import com.dongyang.android.youdongknowme.function.setSpanText
+import com.dongyang.android.youdongknowme.standard.base.BaseActivity
import com.dongyang.android.youdongknowme.ui.adapter.DepartAdapter
-import com.dongyang.android.youdongknowme.ui.view.keyword.KeywordActivity
import com.dongyang.android.youdongknowme.ui.view.main.MainActivity
-import com.google.android.material.snackbar.BaseTransientBottomBar
-import com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_LONG
-import com.google.android.material.snackbar.Snackbar
import org.koin.androidx.viewmodel.ext.android.viewModel
-class DepartActivity : AppCompatActivity(), DepartClickListener {
+class DepartActivity : BaseActivity(), DepartClickListener {
- private lateinit var adapter: DepartAdapter
- private lateinit var binding: ActivityDepartBinding
- private val viewModel: DepartViewModel by viewModel()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- binding = ActivityDepartBinding.inflate(layoutInflater)
- setContentView(binding.root)
-
- binding.vm = viewModel
- viewModel.checkFirstLaunch()
-
- // 부분 색상 지정
- setSpanText(baseContext, binding.tvDepartTitleMain, startIdx = 0, endIdx = 5)
+ override val layoutResourceId: Int = R.layout.activity_depart
+ override val viewModel: DepartViewModel by viewModel()
+ private lateinit var adapter: DepartAdapter
+ private lateinit var items: ArrayList
- // 학과 리스트
- val items =
+ override fun initStartView() {
+ items =
resources.getStringArray(R.array.dmu_department_list).toCollection(ArrayList())
items.sort()
+ // 학과 리스트
adapter = DepartAdapter().apply {
submitList(items)
setItemClickListener(this@DepartActivity)
@@ -53,13 +34,19 @@ class DepartActivity : AppCompatActivity(), DepartClickListener {
this.setHasFixedSize(true)
}
- // 선택 포지션을 실시간 옵저빙
+ }
+
+ override fun initDataBinding() = Unit
+
+ override fun initAfterBinding() {
viewModel.selectDepartPosition.observe(this) {
adapter.submitPosition(it)
// 포지션 선택 시 스낵바를 통해 알림 표시
- if (it != -1) getSnackBar(items).show()
+ if (it != -1) getDepart(items)
}
+
+ binding.toolbarDepart.btnToolbarExit.setOnClickListener { finish() }
}
// 컨테이너 클릭 시 선택한 학과의 포지션 저장
@@ -68,51 +55,13 @@ class DepartActivity : AppCompatActivity(), DepartClickListener {
}
// 확인 버튼을 누르면 내부 DB에 학과를 담고 메인 액티비티로 이동
- private fun getSnackBar(items: ArrayList): Snackbar {
- val snackbar =
- Snackbar.make(
- binding.coordinatorDepart,
- getString(R.string.department_snackbar_title),
- LENGTH_LONG
- )
- .setAction(getString(R.string.department_snackbar_positive_button)) {
- viewModel.setDepartment(items[viewModel.selectDepartPosition.value ?: 0])
- if (viewModel.isFirstLaunch.value == true) {
- val intent = Intent(this, KeywordActivity::class.java)
- startActivity(intent)
- finish()
- } else {
- val intent = Intent(this, MainActivity::class.java)
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
- startActivity(intent)
- finish()
- }
- }.addCallback(object : BaseTransientBottomBar.BaseCallback() {
- override fun onShown(transientBottomBar: Snackbar?) {
- super.onShown(transientBottomBar)
-
- binding.rvDepart.updateLayoutParams {
- setMargins(0, 0, 0, transientBottomBar?.view?.height ?: 0)
- }
- }
-
- override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
- super.onDismissed(transientBottomBar, event)
-
- binding.rvDepart.updateLayoutParams {
- setMargins(0, 0, 0, 0)
- }
- }
- })
-
-
- val snackBarView = snackbar.view
- val snackBarText =
- snackBarView.findViewById(com.google.android.material.R.id.snackbar_text)
- snackBarText.typeface = Typeface.createFromAsset(this.assets, "pretendard_regular.otf")
-
- snackbar.animationMode = BaseTransientBottomBar.ANIMATION_MODE_SLIDE
-
- return snackbar
+ private fun getDepart(items: ArrayList) {
+ return binding.btnDepartComplete.setOnClickListener {
+ viewModel.setDepartment(items[viewModel.selectDepartPosition.value ?: 0])
+ val intent = Intent(this, MainActivity::class.java)
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
+ startActivity(intent)
+ finish()
+ }
}
-}
\ No newline at end of file
+}
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
new file mode 100644
index 00000000..b744af8b
--- /dev/null
+++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/depart/OnboardingDepartActivity.kt
@@ -0,0 +1,76 @@
+package com.dongyang.android.youdongknowme.ui.view.depart
+
+import android.content.Intent
+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.view.keyword.OnboardingKeywordActivity
+import com.dongyang.android.youdongknowme.ui.view.main.MainActivity
+import org.koin.androidx.viewmodel.ext.android.viewModel
+
+class OnboardingDepartActivity : BaseActivity(),
+ DepartClickListener {
+
+ override val layoutResourceId: Int = R.layout.activity_onboarding_depart
+ override val viewModel: DepartViewModel by viewModel()
+ private lateinit var adapter: DepartAdapter
+ private lateinit var items: ArrayList
+
+ override fun initStartView() {
+ viewModel.checkFirstLaunch()
+
+ items =
+ resources.getStringArray(R.array.dmu_department_list).toCollection(ArrayList())
+ items.sort()
+
+ // 학과 리스트
+ adapter = DepartAdapter().apply {
+ submitList(items)
+ setItemClickListener(this@OnboardingDepartActivity)
+ }
+
+ binding.rvOnboardingDepart.apply {
+ this.adapter = this@OnboardingDepartActivity.adapter
+ this.layoutManager = LinearLayoutManager(this@OnboardingDepartActivity)
+ this.setHasFixedSize(true)
+ }
+
+ // 부분 색상 지정
+ setSpanText(baseContext, binding.tvOnboardingDepartTitleMain, startIdx = 0, endIdx = 5)
+ }
+
+ override fun initDataBinding() = Unit
+
+ override fun initAfterBinding() {
+ viewModel.selectDepartPosition.observe(this) {
+ adapter.submitPosition(it)
+
+ // 포지션 선택 시 스낵바를 통해 알림 표시
+ if (it != -1) getDepart(items)
+ }
+ }
+
+ // 컨테이너 클릭 시 선택한 학과의 포지션 저장
+ override fun containerClick(position: Int) {
+ viewModel.setSelectPosition(position)
+ }
+
+ // 확인 버튼을 누르면 내부 DB에 학과를 담고 메인 액티비티로 이동
+ private fun getDepart(items: ArrayList) {
+ return binding.btnOnboardingDepartNext.setOnClickListener {
+ viewModel.setDepartment(items[viewModel.selectDepartPosition.value ?: 0])
+ if (viewModel.isFirstLaunch.value == true) {
+ val intent = Intent(this, OnboardingKeywordActivity::class.java)
+ startActivity(intent)
+ finish()
+ } else {
+ val intent = Intent(this, MainActivity::class.java)
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
+ startActivity(intent)
+ finish()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/SearchFragment.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/SearchFragment.kt
index fd5a5d17..80cf977c 100644
--- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/SearchFragment.kt
+++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/SearchFragment.kt
@@ -4,9 +4,15 @@ import android.annotation.SuppressLint
import android.text.Editable
import android.text.TextWatcher
import android.view.View
+import android.view.inputmethod.EditorInfo
+import androidx.recyclerview.widget.DividerItemDecoration
+import androidx.recyclerview.widget.LinearLayoutManager
import com.dongyang.android.youdongknowme.R
import com.dongyang.android.youdongknowme.databinding.FragmentSearchBinding
import com.dongyang.android.youdongknowme.standard.base.BaseFragment
+import com.dongyang.android.youdongknowme.ui.adapter.NoticeAdapter
+import com.dongyang.android.youdongknowme.ui.view.detail.DetailActivity
+import com.dongyang.android.youdongknowme.ui.view.util.EventObserver
import com.dongyang.android.youdongknowme.ui.view.util.hideKeyboard
import com.dongyang.android.youdongknowme.ui.view.util.showKeyboard
import org.koin.androidx.viewmodel.ext.android.viewModel
@@ -16,16 +22,50 @@ class SearchFragment : BaseFragment() {
override val layoutResourceId: Int = R.layout.fragment_search
override val viewModel: SearchViewModel by viewModel()
+ private lateinit var adapter: NoticeAdapter
+
override fun initStartView() {
- binding.searchViewModel = viewModel
setupUI()
setTextClearButtonClickListener()
}
+ override fun initDataBinding() {
+ viewModel.isLoading.observe(viewLifecycleOwner) {
+ if (it) showLoading()
+ else dismissLoading()
+ }
+
+ viewModel.searchNotices.observe(viewLifecycleOwner) { searchNotices ->
+ if (searchNotices.isNotEmpty()) {
+ adapter.submitList(searchNotices)
+ }
+ }
+
+ viewModel.errorState.observe(viewLifecycleOwner, EventObserver { resId ->
+ showToast(getString(resId))
+ })
+ }
+
+ override fun initAfterBinding() = Unit
+
private fun setupUI() {
+ adapter = NoticeAdapter (onItemClick = { url -> navigateToDetail(url) })
+ binding.rvSearchResult.apply {
+ adapter = this@SearchFragment.adapter
+ layoutManager = LinearLayoutManager(requireActivity())
+ itemAnimator = null
+ setHasFixedSize(true)
+ addItemDecoration(
+ DividerItemDecoration(
+ requireContext(),
+ DividerItemDecoration.VERTICAL
+ )
+ )
+ }
showKeyboardOnEditTextFocus()
setupHideKeyboardOnOutsideTouch()
setTextClearButtonVisibility()
+ onSearchBtnClickListener()
}
private fun showKeyboardOnEditTextFocus() {
@@ -43,7 +83,12 @@ class SearchFragment : BaseFragment() {
private fun setTextClearButtonVisibility() {
binding.etSearchBar.addTextChangedListener(object : TextWatcher {
- override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
+ override fun beforeTextChanged(
+ s: CharSequence?,
+ start: Int,
+ count: Int,
+ after: Int
+ ) = Unit
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
@@ -63,9 +108,20 @@ class SearchFragment : BaseFragment() {
}
}
- override fun initDataBinding() {
+ private fun onSearchBtnClickListener() {
+ binding.etSearchBar.setOnEditorActionListener { v, actionId, event ->
+ if (actionId == EditorInfo.IME_ACTION_SEARCH) {
+ viewModel.fetchSearchNotices()
+ requireContext().hideKeyboard(binding.root)
+ true
+ } else {
+ false
+ }
+ }
}
- override fun initAfterBinding() {
+ private fun navigateToDetail(url: String) {
+ val intent = DetailActivity.newIntent(requireContext(), url)
+ startActivity(intent)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/SearchViewModel.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/SearchViewModel.kt
index fbf438fd..7c4d11dc 100644
--- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/SearchViewModel.kt
+++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/SearchViewModel.kt
@@ -2,14 +2,38 @@ package com.dongyang.android.youdongknowme.ui.view.search
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import com.dongyang.android.youdongknowme.data.remote.entity.Notice
+import com.dongyang.android.youdongknowme.data.repository.NoticeRepository
import com.dongyang.android.youdongknowme.standard.base.BaseViewModel
+import com.dongyang.android.youdongknowme.standard.network.NetworkResult
+import com.dongyang.android.youdongknowme.ui.view.util.Event
+import kotlinx.coroutines.launch
+
+class SearchViewModel(
+ private val noticeRepository: NoticeRepository
+) : BaseViewModel() {
+
+ private val _errorState: MutableLiveData> = MutableLiveData()
+ val errorState: LiveData> = _errorState
+
+ private val _isLoading: MutableLiveData = MutableLiveData()
+ val isLoading: LiveData = _isLoading
+
+ private val _isError: MutableLiveData = MutableLiveData()
+ val isError: LiveData = _isError
-class SearchViewModel : BaseViewModel() {
private val _searchContent: MutableLiveData = MutableLiveData()
+ val searchContent: LiveData = _searchContent
private val _searchClearVisibility: MutableLiveData = MutableLiveData()
val searchClearVisibility: LiveData get() = _searchClearVisibility
+ private val _searchNotices: MutableLiveData> = MutableLiveData()
+ val searchNotices: LiveData> = _searchNotices
+
+ private var searchNoticeCurrentPage = 1
+
fun updateSearchContent(newContent: String) {
_searchContent.value = newContent
validateSearchClearButtonVisibility()
@@ -18,4 +42,27 @@ class SearchViewModel : BaseViewModel() {
private fun validateSearchClearButtonVisibility() {
_searchClearVisibility.value = _searchContent.value.isNullOrEmpty().not()
}
+
+ fun fetchSearchNotices() {
+ viewModelScope.launch {
+ when (val result =
+ noticeRepository.fetchSearchNotices(
+ _searchContent.value.toString(),
+ searchNoticeCurrentPage
+ )) {
+ is NetworkResult.Success -> {
+ val updatedNotices = result.data
+ _searchNotices.postValue(updatedNotices)
+ _isError.postValue(false)
+ _isLoading.postValue(false)
+ }
+
+ is NetworkResult.Error -> {
+ handleError(result, _errorState)
+ _isError.postValue(true)
+ _isLoading.postValue(false)
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/splash/SplashActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/splash/SplashActivity.kt
index 60d1c070..f1bb17e1 100644
--- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/splash/SplashActivity.kt
+++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/splash/SplashActivity.kt
@@ -9,6 +9,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.dongyang.android.youdongknowme.databinding.ActivitySplashBinding
import com.dongyang.android.youdongknowme.ui.view.depart.DepartActivity
+import com.dongyang.android.youdongknowme.ui.view.depart.OnboardingDepartActivity
import com.dongyang.android.youdongknowme.ui.view.main.MainActivity
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
@@ -39,7 +40,7 @@ class SplashActivity : AppCompatActivity() {
delay(SPLASH_TIME_MILLIS)
if(viewModel.isFirstLaunch) {
- val intent = Intent(this@SplashActivity, DepartActivity::class.java)
+ val intent = Intent(this@SplashActivity, OnboardingDepartActivity::class.java)
startActivity(intent)
finish()
} else {
diff --git a/app/src/main/res/layout/activity_depart.xml b/app/src/main/res/layout/activity_depart.xml
index f4778077..ff64d8fd 100644
--- a/app/src/main/res/layout/activity_depart.xml
+++ b/app/src/main/res/layout/activity_depart.xml
@@ -8,125 +8,42 @@
android:layout_height="match_parent"
tools:context=".ui.view.depart.DepartActivity">
-
-
-
-
-
-
-
-
+ app:title="@{@string/department_title}" />
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@id/toolbar_depart"
+ tools:listitem="@layout/item_depart" />
+ app:layout_constraintTop_toBottomOf="@id/rv_depart" />
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_onboarding_depart.xml b/app/src/main/res/layout/activity_onboarding_depart.xml
new file mode 100644
index 00000000..8571a280
--- /dev/null
+++ b/app/src/main/res/layout/activity_onboarding_depart.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml
index 6d1d524c..e0934ebb 100644
--- a/app/src/main/res/layout/fragment_search.xml
+++ b/app/src/main/res/layout/fragment_search.xml
@@ -13,7 +13,7 @@
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginHorizontal="20dp"
- android:layout_marginTop="12dp"
+ android:layout_marginTop="16dp"
android:background="@drawable/bg_blue100_radius_6dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -39,6 +39,7 @@
android:background="@null"
android:gravity="center_vertical"
android:hint="@string/search_hint"
+ android:imeOptions="actionSearch"
android:inputType="text"
android:maxLength="10"
android:maxLines="1"
@@ -66,17 +67,12 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_depart.xml b/app/src/main/res/layout/item_depart.xml
index c7967403..c785ad3e 100644
--- a/app/src/main/res/layout/item_depart.xml
+++ b/app/src/main/res/layout/item_depart.xml
@@ -1,58 +1,32 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="56dp"
+ 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"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 76691fb7..d9e7218d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -18,6 +18,7 @@
소속 학과를 선택하면,
해당 학과의 공지만 바로 알려줘요.
다음
+ 완료
공지사항