diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index baa5d3db..611ae073 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,6 +20,9 @@ android:supportsRtl="true" android:theme="@style/Theme.YouDongKnowMe" android:usesCleartextTraffic="true"> + diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/notice/NoticeFragment.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/notice/NoticeFragment.kt index cfdfd6a8..59409277 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/notice/NoticeFragment.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/notice/NoticeFragment.kt @@ -1,5 +1,7 @@ package com.dongyang.android.youdongknowme.ui.view.notice +import android.content.Intent +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.dongyang.android.youdongknowme.R @@ -7,6 +9,7 @@ import com.dongyang.android.youdongknowme.databinding.FragmentNoticeBinding 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.search.SearchActivity import com.dongyang.android.youdongknowme.ui.view.util.EventObserver import com.google.android.material.tabs.TabLayout import org.koin.androidx.viewmodel.ext.android.viewModel @@ -28,6 +31,11 @@ class NoticeFragment : BaseFragment() { } setupTabLayout() setupInfinityScroll() + + binding.btnSearch.setOnClickListener { + val intent = Intent(requireContext(), SearchActivity::class.java) + startActivity(intent) + } } override fun initDataBinding() { 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/SearchActivity.kt similarity index 80% rename from app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/SearchFragment.kt rename to app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/SearchActivity.kt index 3b2333e6..e8361bba 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/SearchActivity.kt @@ -6,12 +6,11 @@ import android.text.TextWatcher import android.view.View import android.view.ViewGroup import android.view.inputmethod.EditorInfo -import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView 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.databinding.ActivitySearchBinding +import com.dongyang.android.youdongknowme.standard.base.BaseActivity import com.dongyang.android.youdongknowme.standard.util.dpToPx import com.dongyang.android.youdongknowme.ui.adapter.NoticeAdapter import com.dongyang.android.youdongknowme.ui.view.detail.DetailActivity @@ -20,9 +19,9 @@ 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 -class SearchFragment : BaseFragment() { +class SearchActivity : BaseActivity() { - override val layoutResourceId: Int = R.layout.fragment_search + override val layoutResourceId: Int = R.layout.activity_search override val viewModel: SearchViewModel by viewModel() private lateinit var adapter: NoticeAdapter @@ -40,12 +39,12 @@ class SearchFragment : BaseFragment() { } override fun initDataBinding() { - viewModel.isLoading.observe(viewLifecycleOwner) { + viewModel.isLoading.observe(this) { if (it) showLoading() else dismissLoading() } - viewModel.searchNotices.observe(viewLifecycleOwner) { searchNotices -> + viewModel.searchNotices.observe(this) { searchNotices -> if (searchNotices.isNotEmpty()) { setupRecyclerViewMargin() adapter.submitList(searchNotices) @@ -56,15 +55,15 @@ class SearchFragment : BaseFragment() { } } - viewModel.searchContent.observe(viewLifecycleOwner) { content -> + viewModel.searchContent.observe(this) { content -> searchContent = content } - viewModel.errorState.observe(viewLifecycleOwner, EventObserver { resId -> + viewModel.errorState.observe(this, EventObserver { resId -> showToast(getString(resId)) }) - viewModel.noSearchResult.observe(viewLifecycleOwner) { noSearchResult -> + viewModel.noSearchResult.observe(this) { noSearchResult -> if (noSearchResult) { binding.clSearchEmpty.visibility = View.VISIBLE } else { @@ -73,18 +72,20 @@ class SearchFragment : BaseFragment() { } } - override fun initAfterBinding() = Unit + override fun initAfterBinding() { + binding.toolbarSearch.btnToolbarExit.setOnClickListener { finish() } + } private fun setupRecyclerViewMargin() { if (::adapter.isInitialized.not()) { val marginDp = SEARCH_RESULT_RECYCLERVIEW_MARGIN_TOP_FOR_TOUCH - val marginPx = marginDp.dpToPx(requireContext()) + val marginPx = marginDp.dpToPx(this) val layoutParams = binding.rvSearchResult.layoutParams as ViewGroup.MarginLayoutParams layoutParams.topMargin = marginPx binding.rvSearchResult.layoutParams = layoutParams } else { val marginDp = SEARCH_RESULT_RECYCLERVIEW_MARGIN_TOP_DEFAULT - val marginPx = marginDp.dpToPx(requireContext()) + val marginPx = marginDp.dpToPx(this) val layoutParams = binding.rvSearchResult.layoutParams as ViewGroup.MarginLayoutParams layoutParams.topMargin = marginPx binding.rvSearchResult.layoutParams = layoutParams @@ -94,8 +95,8 @@ class SearchFragment : BaseFragment() { private fun setupRecyclerview() { adapter = NoticeAdapter(onItemClick = { url -> navigateToDetail(url) }) binding.rvSearchResult.apply { - this.adapter = this@SearchFragment.adapter - layoutManager = LinearLayoutManager(requireActivity()) + this.adapter = this@SearchActivity.adapter + layoutManager = LinearLayoutManager(this@SearchActivity) itemAnimator = null setHasFixedSize(true) } @@ -103,13 +104,13 @@ class SearchFragment : BaseFragment() { private fun showKeyboardOnEditTextFocus() { binding.etSearchBar.requestFocus() - requireContext().showKeyboard(binding.etSearchBar) + showKeyboard(binding.etSearchBar) } @SuppressLint("ClickableViewAccessibility") private fun setupHideKeyboardOnOutsideTouch() { binding.root.setOnTouchListener { _, _ -> - requireContext().hideKeyboard(binding.root) + hideKeyboard(binding.root) false } } @@ -127,7 +128,7 @@ class SearchFragment : BaseFragment() { } }) - viewModel.searchClearVisibility.observe(viewLifecycleOwner) { isValid -> + viewModel.searchClearVisibility.observe(this) { isValid -> binding.ivSearchClear.visibility = if (isValid) View.VISIBLE else View.GONE } } @@ -139,7 +140,7 @@ class SearchFragment : BaseFragment() { } private fun onSearchBtnClickListener() { - binding.etSearchBar.setOnEditorActionListener { v, actionId, event -> + binding.etSearchBar.setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_SEARCH) { if (validateSearchContentLength()) { viewModel.fetchSearchNotices() @@ -148,7 +149,7 @@ class SearchFragment : BaseFragment() { binding.etSearchBar.text.clear() showToast(getString(R.string.search_minimum)) } - requireContext().hideKeyboard(binding.root) + hideKeyboard(binding.root) true } else { false @@ -161,7 +162,7 @@ class SearchFragment : BaseFragment() { } private fun navigateToDetail(url: String) { - val intent = DetailActivity.newIntent(requireContext(), url) + val intent = DetailActivity.newIntent(this, url) startActivity(intent) } diff --git a/app/src/main/res/drawable/ic_menu_cafeteria.xml b/app/src/main/res/drawable/ic_menu_cafeteria.xml index 83a329a3..7f3e4ae5 100644 --- a/app/src/main/res/drawable/ic_menu_cafeteria.xml +++ b/app/src/main/res/drawable/ic_menu_cafeteria.xml @@ -1,7 +1,9 @@ - - - - - + + diff --git a/app/src/main/res/drawable/ic_menu_calendar.xml b/app/src/main/res/drawable/ic_menu_calendar.xml index 0d9fd27d..9b5d6590 100644 --- a/app/src/main/res/drawable/ic_menu_calendar.xml +++ b/app/src/main/res/drawable/ic_menu_calendar.xml @@ -1,5 +1,9 @@ - - + + diff --git a/app/src/main/res/drawable/ic_menu_home.xml b/app/src/main/res/drawable/ic_menu_home.xml index 30fa06ac..bd3d62ca 100644 --- a/app/src/main/res/drawable/ic_menu_home.xml +++ b/app/src/main/res/drawable/ic_menu_home.xml @@ -1,9 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_menu_search.xml b/app/src/main/res/drawable/ic_menu_search.xml deleted file mode 100644 index 654a4ac9..00000000 --- a/app/src/main/res/drawable/ic_menu_search.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_menu_setting.xml b/app/src/main/res/drawable/ic_menu_setting.xml index 28fc2db9..d87e0751 100644 --- a/app/src/main/res/drawable/ic_menu_setting.xml +++ b/app/src/main/res/drawable/ic_menu_setting.xml @@ -1,5 +1,9 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_search_button.xml b/app/src/main/res/drawable/ic_search_button.xml new file mode 100644 index 00000000..c08529e4 --- /dev/null +++ b/app/src/main/res/drawable/ic_search_button.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/activity_search.xml similarity index 90% rename from app/src/main/res/layout/fragment_search.xml rename to app/src/main/res/layout/activity_search.xml index 2b2c9cec..3f3808ac 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -6,18 +6,28 @@ + android:background="@color/white" + tools:context=".ui.view.search.SearchActivity"> + + + app:layout_constraintTop_toBottomOf="@id/toolbar_search"> + app:title="@{@string/cafeteria_title}" + app:titleLeft="@{true}" /> + + + tools:listitem="@layout/item_notice" /> + app:title="@{@string/schedule_title}" + app:titleLeft="@{true}" /> + app:layout_constraintTop_toTopOf="@id/btn_toolbar_exit" /> + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 04b018d5..925b975b 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -4,10 +4,6 @@ android:id="@+id/noticeFragment" android:icon="@drawable/ic_menu_home" android:title="@string/menu_main_bottom_home" /> - + android:title="@string/menu_main_bottom_cafeteria"/> + tools:layout="@layout/activity_search" /> 공지 일정 설정 - 검색 + 식단 학과선택 @@ -132,6 +132,7 @@ 오픈소스 라이센스 + 검색 검색어를 입력하세요. 검색 결과를 찾을 수 없어요 다른 키워드로 검색해보세요.