diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ActivityModule.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ActivityModule.kt
index e4216652a..9dba7ed03 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ActivityModule.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ActivityModule.kt
@@ -55,7 +55,8 @@ abstract class ActivityModule {
urlIsValid: Boolean,
menuClickListener: MenuClickListener,
disableReadAloud: Boolean,
- disableTabs: Boolean
+ disableTabs: Boolean,
+ disableSearch: Boolean
): MainMenu = MainMenu(
activity,
zimReaderContainer.zimFileReader,
@@ -64,6 +65,7 @@ abstract class ActivityModule {
urlIsValid,
disableReadAloud,
disableTabs,
+ disableSearch,
menuClickListener
)
}
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt
index ff094d136..4c4046122 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreReaderFragment.kt
@@ -48,6 +48,7 @@ import android.view.MenuInflater
import android.view.MenuItem
import android.view.MotionEvent
import android.view.View
+import android.view.View.VISIBLE
import android.view.ViewGroup
import android.view.animation.AnimationUtils
import android.webkit.WebBackForwardList
@@ -519,6 +520,9 @@ abstract class CoreReaderFragment :
viewLifecycleOwner,
Observer(::openSearchItem)
)
+ toolbarWithSearchPlaceholder?.setOnClickListener {
+ openSearch(searchString = "", isOpenedFromTabView = false, false)
+ }
}
private fun initTabCallback() {
@@ -719,7 +723,7 @@ abstract class CoreReaderFragment :
contentFrame?.visibility = View.GONE
progressBar?.visibility = View.GONE
backToTopButton?.hide()
- tabSwitcherRoot?.visibility = View.VISIBLE
+ setTabSwitcherVisibility(VISIBLE)
startAnimation(tabSwitcherRoot, R.anim.slide_down)
tabsAdapter?.let { tabsAdapter ->
tabRecyclerView?.let { recyclerView ->
@@ -737,6 +741,19 @@ abstract class CoreReaderFragment :
mainMenu?.showTabSwitcherOptions()
}
+ /**
+ * Sets the tabs switcher visibility, controlling the visibility of the tab.
+ * Subclasses, like CustomReaderFragment, override this method to provide custom
+ * behavior, such as hiding the placeholder in the toolbar when a custom app is configured
+ * not to show the title. This is necessary because the same toolbar is used for displaying tabs.
+ *
+ * WARNING: If modifying this method, ensure thorough testing with custom apps
+ * to verify proper functionality.
+ */
+ open fun setTabSwitcherVisibility(visibility: Int) {
+ tabSwitcherRoot?.visibility = visibility
+ }
+
/**
* Sets a top margin to the web views.
*
@@ -775,7 +792,7 @@ abstract class CoreReaderFragment :
)
tabSwitcherRoot?.let {
if (it.visibility == View.VISIBLE) {
- it.visibility = View.GONE
+ setTabSwitcherVisibility(View.GONE)
startAnimation(it, R.anim.slide_up)
progressBar?.visibility = View.VISIBLE
contentFrame?.visibility = View.VISIBLE
diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/MainMenu.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/MainMenu.kt
index 992df9e31..f6c510b1d 100644
--- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/MainMenu.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/MainMenu.kt
@@ -28,6 +28,7 @@ import org.kiwix.kiwixmobile.core.reader.ZimFileReader
const val REQUEST_FILE_SEARCH = 1236
+@Suppress("LongParameterList")
class MainMenu(
private val activity: Activity,
zimFileReader: ZimFileReader?,
@@ -36,6 +37,7 @@ class MainMenu(
urlIsValid: Boolean,
disableReadAloud: Boolean = false,
disableTabs: Boolean = false,
+ private val disableSearch: Boolean = false,
private val menuClickListener: MenuClickListener
) {
@@ -46,7 +48,8 @@ class MainMenu(
urlIsValid: Boolean,
menuClickListener: MenuClickListener,
disableReadAloud: Boolean,
- disableTabs: Boolean
+ disableTabs: Boolean,
+ disableSearch: Boolean = false
): MainMenu
}
@@ -85,6 +88,10 @@ class MainMenu(
tabSwitcherTextView = null
}
+ if (disableSearch) {
+ search?.isVisible = false
+ }
+
randomArticle.setShowAsAction(
if (activity.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE)
MenuItem.SHOW_AS_ACTION_IF_ROOM
@@ -155,7 +162,13 @@ class MainMenu(
}
private fun setVisibility(visibility: Boolean, vararg menuItems: MenuItem?) {
- menuItems.forEach { it?.isVisible = visibility }
+ menuItems.forEach {
+ if (it == search && disableSearch) {
+ it?.isVisible = false
+ } else {
+ it?.isVisible = visibility
+ }
+ }
}
fun tryExpandSearch(zimFileReader: ZimFileReader?) {
diff --git a/core/src/main/res/drawable/search_placeholder_background.xml b/core/src/main/res/drawable/search_placeholder_background.xml
new file mode 100644
index 000000000..b50065e49
--- /dev/null
+++ b/core/src/main/res/drawable/search_placeholder_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
diff --git a/core/src/main/res/layout/layout_toolbar.xml b/core/src/main/res/layout/layout_toolbar.xml
index 982b4cbf8..a8e4df154 100644
--- a/core/src/main/res/layout/layout_toolbar.xml
+++ b/core/src/main/res/layout/layout_toolbar.xml
@@ -1,13 +1,34 @@
-
+
+ tools:showIn="@layout/fragment_search">
+
+
+
+
+
+
diff --git a/core/src/main/res/menu/menu_main.xml b/core/src/main/res/menu/menu_main.xml
index 7d9270d5c..d1fb2cf23 100644
--- a/core/src/main/res/menu/menu_main.xml
+++ b/core/src/main/res/menu/menu_main.xml
@@ -8,7 +8,8 @@
android:title="@string/search_label"
android:visible="false"
app:showAsAction="always"
- tools:visible="true" />
+ tools:visible="true"
+ tools:ignore="AlwaysShowAction" />
+ app:showAsAction="never" />
-
- toolbar.navigationIcon = drawable
+ super.toolbar?.navigationIcon = drawable
}
- } else {
- super.setUpDrawerToggle(toolbar)
}
}
+ /**
+ * Overrides the method to hide/show the placeholder from toolbar.
+ * When the "setting title" is disabled/enabled in a custom app,
+ * this function set the visibility of placeholder in toolbar when showing the tabs.
+ */
+ override fun setTabSwitcherVisibility(visibility: Int) {
+ if (BuildConfig.DISABLE_TITLE) {
+ // If custom apps are configured to show the placeholder,
+ // and if tabs are visible, hide the placeholder.
+ // If tabs are hidden, show the placeholder.
+ updateToolbarSearchPlaceholderVisibility(if (visibility == VISIBLE) GONE else VISIBLE)
+ } else {
+ // Permanently hide the placeholder if the custom app is not configured to show it.
+ updateToolbarSearchPlaceholderVisibility(GONE)
+ }
+ super.setTabSwitcherVisibility(visibility)
+ }
+
private fun loadPageFromNavigationArguments() {
val args = CustomReaderFragmentArgs.fromBundle(requireArguments())
if (args.pageUrl.isNotEmpty()) {
@@ -277,13 +294,17 @@ class CustomReaderFragment : CoreReaderFragment() {
// even if it is empty. If we do not set up this title,
// the search screen will open if the user clicks on the toolbar from the tabs screen.
actionBar?.title = " "
- toolbarWithSearchPlaceholder?.visibility = VISIBLE
+ updateToolbarSearchPlaceholderVisibility(VISIBLE)
} else {
- toolbarWithSearchPlaceholder?.visibility = GONE
+ updateToolbarSearchPlaceholderVisibility(GONE)
super.updateTitle()
}
}
+ private fun updateToolbarSearchPlaceholderVisibility(visibility: Int) {
+ toolbarWithSearchPlaceholder?.visibility = visibility
+ }
+
override fun createNewTab() {
newMainPageTab()
}