From 2a4c3546049e1427792c99cf6ce0a03cba99d701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=B4=E1=84=8B=E1=85=AE?= Date: Fri, 14 Mar 2025 16:16:30 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=EA=B2=80=EC=83=89=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EC=9D=B4=EB=8F=99=20-=20=EB=84=A4=EB=B9=84?= =?UTF-8?q?=EA=B2=8C=EC=9D=B4=EC=85=98=EB=B0=94=20->=20=ED=99=88=20?= =?UTF-8?q?=EC=83=81=EB=8B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 3 ++ .../ui/view/notice/NoticeFragment.kt | 8 ++++ .../{SearchFragment.kt => SearchActivity.kt} | 43 ++++++++++--------- app/src/main/res/drawable/ic_menu_search.xml | 9 ---- .../main/res/drawable/ic_search_button.xml | 9 ++++ ...ragment_search.xml => activity_search.xml} | 16 +++++-- app/src/main/res/layout/fragment_notice.xml | 12 ++++++ app/src/main/res/menu/menu_main.xml | 6 +-- .../main/res/navigation/dmu_navigation.xml | 4 +- app/src/main/res/values/strings.xml | 3 +- 10 files changed, 72 insertions(+), 41 deletions(-) rename app/src/main/java/com/dongyang/android/youdongknowme/ui/view/search/{SearchFragment.kt => SearchActivity.kt} (80%) delete mode 100644 app/src/main/res/drawable/ic_menu_search.xml create mode 100644 app/src/main/res/drawable/ic_search_button.xml rename app/src/main/res/layout/{fragment_search.xml => activity_search.xml} (90%) 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_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_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"> + + + - + android:title="@string/menu_main_bottom_cafeteria"/> + tools:layout="@layout/activity_search" /> 공지 일정 설정 - 검색 + 식단 학과선택 @@ -132,6 +132,7 @@ 오픈소스 라이센스 + 검색 검색어를 입력하세요. 검색 결과를 찾을 수 없어요 다른 키워드로 검색해보세요. From cfd5fc21eff081ac6fed769f922472e31adbdf9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=B4=E1=84=8B=E1=85=AE?= Date: Fri, 14 Mar 2025 17:29:06 +0900 Subject: [PATCH 2/4] =?UTF-8?q?build:=20=EB=84=A4=EB=B9=84=EA=B2=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EB=B0=94=20=EC=95=84=EC=9D=B4=EC=BD=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_menu_cafeteria.xml | 14 ++++++++------ app/src/main/res/drawable/ic_menu_calendar.xml | 12 ++++++++---- app/src/main/res/drawable/ic_menu_home.xml | 6 +++--- app/src/main/res/drawable/ic_menu_setting.xml | 12 ++++++++---- 4 files changed, 27 insertions(+), 17 deletions(-) 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_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 From 2a8401051aa441cb1b14d1cc10dd374a8e3067f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=B4=E1=84=8B=E1=85=AE?= Date: Fri, 14 Mar 2025 17:39:55 +0900 Subject: [PATCH 3/4] =?UTF-8?q?build:=20=ED=95=99=EC=82=AC=EC=9D=BC?= =?UTF-8?q?=EC=A0=95,=20=EC=8B=9D=EB=8B=A8=20title=20=EC=99=BC=EC=AA=BD=20?= =?UTF-8?q?=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/fragment_cafeteria.xml | 3 ++- app/src/main/res/layout/fragment_schedule.xml | 3 ++- app/src/main/res/layout/standard_toolbar.xml | 12 +++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/layout/fragment_cafeteria.xml b/app/src/main/res/layout/fragment_cafeteria.xml index 8f5d9e16..574998f1 100644 --- a/app/src/main/res/layout/fragment_cafeteria.xml +++ b/app/src/main/res/layout/fragment_cafeteria.xml @@ -13,7 +13,8 @@ layout="@layout/standard_toolbar" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" - app:title="@{@string/cafeteria_title}" /> + app:title="@{@string/cafeteria_title}" + app:titleLeft="@{true}" /> + app:title="@{@string/schedule_title}" + app:titleLeft="@{true}" /> + app:layout_constraintTop_toTopOf="@id/btn_toolbar_exit" /> + + \ No newline at end of file From 2ad9def8642176dead7681858cb3dcb2507cbc7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=B4=E1=84=8B=E1=85=AE?= Date: Fri, 14 Mar 2025 17:47:15 +0900 Subject: [PATCH 4/4] =?UTF-8?q?build:=20=EC=BD=94=EB=93=9C=20=ED=8F=AC?= =?UTF-8?q?=EB=A7=B7=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/fragment_notice.xml | 5 ++--- app/src/main/res/layout/standard_toolbar.xml | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/layout/fragment_notice.xml b/app/src/main/res/layout/fragment_notice.xml index d231790c..d40e0cd8 100644 --- a/app/src/main/res/layout/fragment_notice.xml +++ b/app/src/main/res/layout/fragment_notice.xml @@ -18,13 +18,12 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - + tools:listitem="@layout/item_notice" />