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 @@ 소속 학과를 선택하면, 해당 학과의 공지만 바로 알려줘요. 다음 + 완료 공지사항