diff --git a/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageFragment.kt index beabf99f8..99244f303 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/language/LanguageFragment.kt @@ -43,6 +43,7 @@ import org.kiwix.kiwixmobile.core.base.BaseFragment import org.kiwix.kiwixmobile.core.extensions.closeKeyboard import org.kiwix.kiwixmobile.core.extensions.getToolbarNavigationIcon import org.kiwix.kiwixmobile.core.extensions.setToolTipWithContentDescription +import org.kiwix.kiwixmobile.core.extensions.setUpSearchView import org.kiwix.kiwixmobile.core.extensions.viewModel import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.utils.SimpleTextListener @@ -125,12 +126,15 @@ class LanguageFragment : BaseFragment() { object : MenuProvider { override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { menuInflater.inflate(R.menu.menu_language, menu) - val search = menu.findItem(R.id.menu_language_search) - (search.actionView as SearchView).setOnQueryTextListener( - SimpleTextListener { query, _ -> - languageViewModel.actions.offer(Filter(query)) - } - ) + val search = menu.findItem(R.id.menu_language_search).actionView as SearchView + search.apply { + setUpSearchView(requireActivity()) + setOnQueryTextListener( + SimpleTextListener { query, _ -> + languageViewModel.actions.offer(Filter(query)) + } + ) + } } override fun onMenuItemSelected(menuItem: MenuItem): Boolean { @@ -140,6 +144,7 @@ class LanguageFragment : BaseFragment() { closeKeyboard() true } + else -> false } } @@ -160,6 +165,7 @@ class LanguageFragment : BaseFragment() { activityLanguageBinding?.languageProgressbar?.hide() languageAdapter.items = state.viewItems } + Saving -> Unit } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt index d5649e01d..682e83afc 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt @@ -67,6 +67,7 @@ import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.viewModel import org.kiwix.kiwixmobile.core.extensions.closeKeyboard import org.kiwix.kiwixmobile.core.extensions.coreMainActivity import org.kiwix.kiwixmobile.core.extensions.setBottomMarginToFragmentContainerView +import org.kiwix.kiwixmobile.core.extensions.setUpSearchView import org.kiwix.kiwixmobile.core.extensions.snack import org.kiwix.kiwixmobile.core.extensions.toast import org.kiwix.kiwixmobile.core.main.CoreMainActivity @@ -219,11 +220,14 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions { val getZimItem = menu.findItem(R.id.get_zim_nearby_device) getZimItem?.isVisible = false - (searchItem?.actionView as? SearchView)?.setOnQueryTextListener( - SimpleTextListener { query, _ -> - zimManageViewModel.requestFiltering.onNext(query) - } - ) + (searchItem?.actionView as? SearchView)?.apply { + setUpSearchView(requireActivity()) + setOnQueryTextListener( + SimpleTextListener { query, _ -> + zimManageViewModel.requestFiltering.onNext(query) + } + ) + } zimManageViewModel.requestFiltering.onNext("") } @@ -307,9 +311,11 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions { hideRecyclerviewAndShowSwipeDownForLibraryErrorText() } } + NetworkState.NOT_CONNECTED -> { showNoInternetConnectionError() } + else -> {} } } @@ -519,6 +525,7 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions { noInternetSnackbar() return } + noWifiWithWifiOnlyPreferenceSet -> { dialogShower.show(WifiOnly, { sharedPreferenceUtil.putPrefWifiOnly(false) @@ -526,6 +533,7 @@ class OnlineLibraryFragment : BaseFragment(), FragmentActivityExtensions { }) return } + else -> if (sharedPreferenceUtil.showStorageOption) { showStorageConfigureDialog() } else if (!requireActivity().isManageExternalStoragePermissionGranted( diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/SearchViewExtensions.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/SearchViewExtensions.kt new file mode 100644 index 000000000..977554034 --- /dev/null +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/SearchViewExtensions.kt @@ -0,0 +1,56 @@ +/* + * Kiwix Android + * Copyright (c) 2024 Kiwix + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package org.kiwix.kiwixmobile.core.extensions + +import android.content.Context +import android.widget.ImageView +import androidx.appcompat.widget.SearchView +import androidx.appcompat.widget.TooltipCompat +import androidx.core.view.setPadding +import org.kiwix.kiwixmobile.core.R + +const val CLOSE_ICON_PADDING = 30 + +fun SearchView.setUpSearchView(context: Context) { + val heightAndWidth = context.resources.getDimensionPixelSize( + R.dimen.material_minimum_height_and_width + ) + val closeImageButton = findViewById(R.id.search_close_btn) + // set the tooltip on close button to show the description if user long clicks on it. + TooltipCompat.setTooltipText( + closeImageButton, + context.getString(R.string.abc_searchview_description_clear) + ) + // override the default width of close image button. + // by default it is 40dp, and the default accessibility width is 48dp + setWidthWithPadding( + closeImageButton, + heightAndWidth, + CLOSE_ICON_PADDING + ) +} + +fun setWidthWithPadding(imageView: ImageView, width: Int, padding: Int) { + imageView.apply { + val params = layoutParams + params?.width = width + setPadding(padding) + requestLayout() + } +} diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/TabsAdapter.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/TabsAdapter.kt index 907a41eab..ae1abc4de 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/TabsAdapter.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/TabsAdapter.kt @@ -64,7 +64,7 @@ class TabsAdapter internal constructor( val context = parent.context val margin16 = context.resources.getDimensionPixelSize(R.dimen.activity_horizontal_margin) val closeImageWidthAndHeight = - context.resources.getDimensionPixelSize(R.dimen.material_minimum_height_and_width) + context.resources.getDimensionPixelSize(R.dimen.close_tab_button_size) val close = ImageView(context) .apply { id = R.id.tabsAdapterCloseImageView diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt index d77891fac..aca65c50e 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/PageFragment.kt @@ -46,6 +46,7 @@ import org.kiwix.kiwixmobile.core.databinding.FragmentPageBinding import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.isCustomApp import org.kiwix.kiwixmobile.core.extensions.closeKeyboard import org.kiwix.kiwixmobile.core.extensions.setToolTipWithContentDescription +import org.kiwix.kiwixmobile.core.extensions.setUpSearchView import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.page.adapter.OnItemClickListener import org.kiwix.kiwixmobile.core.page.adapter.Page @@ -106,12 +107,15 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { menuInflater.inflate(R.menu.menu_page, menu) val search = menu.findItem(R.id.menu_page_search).actionView as SearchView - search.queryHint = searchQueryHint - search.setOnQueryTextListener( - SimpleTextListener { query, _ -> - pageViewModel.actions.offer(Action.Filter(query)) - } - ) + search.apply { + setUpSearchView(requireActivity()) + queryHint = searchQueryHint + setOnQueryTextListener( + SimpleTextListener { query, _ -> + pageViewModel.actions.offer(Action.Filter(query)) + } + ) + } } @Suppress("ReturnCount") @@ -121,6 +125,7 @@ abstract class PageFragment : OnItemClickListener, BaseFragment(), FragmentActiv pageViewModel.actions.offer(Action.Exit) return true } + R.id.menu_pages_clear -> { pageViewModel.actions.offer(Action.UserClickedDeleteButton) return true diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/search/SearchFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/search/SearchFragment.kt index 143ce449d..d4247d800 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/search/SearchFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/search/SearchFragment.kt @@ -54,6 +54,7 @@ import org.kiwix.kiwixmobile.core.base.BaseFragment import org.kiwix.kiwixmobile.core.databinding.FragmentSearchBinding import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.cachedComponent import org.kiwix.kiwixmobile.core.extensions.coreMainActivity +import org.kiwix.kiwixmobile.core.extensions.setUpSearchView import org.kiwix.kiwixmobile.core.extensions.viewModel import org.kiwix.kiwixmobile.core.main.CoreMainActivity import org.kiwix.kiwixmobile.core.search.adapter.SearchAdapter @@ -220,21 +221,25 @@ class SearchFragment : BaseFragment() { val searchMenuItem = menu.findItem(R.id.menu_search) searchMenuItem.expandActionView() searchView = searchMenuItem.actionView as SearchView - searchView?.setOnQueryTextListener( - SimpleTextListener { query, isSubmit -> - if (query.isNotEmpty()) { - when { - isSubmit -> { - // if user press the search/enter button on keyboard, - // try to open the article if present - getSearchListItemForQuery(query)?.let(::onItemClick) - } + searchView?.apply { + setUpSearchView(requireActivity()) + searchView?.setOnQueryTextListener( + SimpleTextListener { query, isSubmit -> + if (query.isNotEmpty()) { + when { + isSubmit -> { + // if user press the search/enter button on keyboard, + // try to open the article if present + getSearchListItemForQuery(query)?.let(::onItemClick) + } - else -> searchViewModel.actions.trySend(Filter(query)).isSuccess + else -> searchViewModel.actions.trySend(Filter(query)).isSuccess + } } } - } - ) + ) + } + searchMenuItem.setOnActionExpandListener(object : OnActionExpandListener { override fun onMenuItemActionExpand(item: MenuItem) = false diff --git a/core/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml index f13cd5943..1b371316b 100644 --- a/core/src/main/res/values/dimens.xml +++ b/core/src/main/res/values/dimens.xml @@ -22,4 +22,5 @@ 48dp 36dp 48dp + 24dp