diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt index 3599eb414..e0191ca28 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/reader/KiwixReaderFragment.kt @@ -276,6 +276,15 @@ class KiwixReaderFragment : CoreReaderFragment() { } } + override fun onDesktopModeMenuClicked(isEnable: Boolean) { + getCurrentWebView()?.settings?.apply { + useWideViewPort = isEnable + }.also { + sharedPreferenceUtil?.isDesktopModeEnable = isEnable + mainMenu?.setDesktopModeEnable(!isEnable) + } + } + override fun openFullScreen() { super.openFullScreen() hideNavBar() 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 634709692..9a3bef22b 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 @@ -827,7 +827,9 @@ abstract class CoreReaderFragment : } private fun loadUrl(url: String?, webview: KiwixWebView) { - if (url != null && !url.endsWith("null")) { + if (url?.endsWith("null") == false) { + webview.settings.useWideViewPort = sharedPreferenceUtil?.isDesktopModeEnable == true + mainMenu?.setDesktopModeEnable(sharedPreferenceUtil?.isDesktopModeEnable == false) webview.loadUrl(url) } } @@ -1472,6 +1474,7 @@ abstract class CoreReaderFragment : super.onCreateOptionsMenu(menu, inflater) menu.clear() mainMenu = createMainMenu(menu) + mainMenu?.setDesktopModeEnable(sharedPreferenceUtil?.isDesktopModeEnable == false) } protected open fun createMainMenu(menu: Menu?): MainMenu? = 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..cbb5a2846 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 @@ -57,6 +57,7 @@ class MainMenu( fun onRandomArticleMenuClicked() fun onReadAloudMenuClicked() fun onFullscreenMenuClicked() + fun onDesktopModeMenuClicked(isEnable: Boolean) } init { @@ -71,6 +72,7 @@ class MainMenu( private val randomArticle = menu.findItem(R.id.menu_random_article) private val fullscreen = menu.findItem(R.id.menu_fullscreen) private var readAloud: MenuItem? = menu.findItem(R.id.menu_read_aloud) + private var desktopMode: MenuItem? = menu.findItem(R.id.menu_desktop_mode) private var isInTabSwitcher: Boolean = false init { @@ -96,6 +98,7 @@ class MainMenu( randomArticle.menuItemClickListener { menuClickListener.onRandomArticleMenuClicked() } readAloud.menuItemClickListener { menuClickListener.onReadAloudMenuClicked() } fullscreen.menuItemClickListener { menuClickListener.onFullscreenMenuClicked() } + desktopMode.menuItemClickListener { menuClickListener.onDesktopModeMenuClicked(it.isChecked) } showWebViewOptions(urlIsValid) zimFileReader?.let { @@ -114,27 +117,27 @@ class MainMenu( } fun onFileOpened(urlIsValid: Boolean) { - setVisibility(urlIsValid, randomArticle, search, readAloud, addNote, fullscreen) + setVisibility(urlIsValid, randomArticle, search, readAloud, addNote, fullscreen, desktopMode) search.setOnMenuItemClickListener { navigateToSearch() } } fun hideBookSpecificMenuItems() { - setVisibility(false, search, tabSwitcher, randomArticle, addNote) + setVisibility(false, search, tabSwitcher, randomArticle, addNote, desktopMode) } fun showBookSpecificMenuItems() { - setVisibility(true, search, tabSwitcher, randomArticle, addNote) + setVisibility(true, search, tabSwitcher, randomArticle, addNote, desktopMode) } fun showTabSwitcherOptions() { isInTabSwitcher = true - setVisibility(false, randomArticle, readAloud, addNote, fullscreen) + setVisibility(false, randomArticle, readAloud, addNote, fullscreen, desktopMode) } fun showWebViewOptions(urlIsValid: Boolean) { isInTabSwitcher = false fullscreen.isVisible = true - setVisibility(urlIsValid, randomArticle, search, readAloud, addNote) + setVisibility(urlIsValid, randomArticle, search, readAloud, addNote, desktopMode) } fun updateTabIcon(tabs: Int) { @@ -154,6 +157,10 @@ class MainMenu( readAloud?.setTitle(R.string.menu_read_aloud) } + fun setDesktopModeEnable(isEnable: Boolean) { + desktopMode?.isChecked = isEnable + } + private fun setVisibility(visibility: Boolean, vararg menuItems: MenuItem?) { menuItems.forEach { it?.isVisible = visibility } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.kt index 029ebebc1..9b1109b39 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/utils/SharedPreferenceUtil.kt @@ -139,6 +139,12 @@ class SharedPreferenceUtil @Inject constructor(val context: Context) { fun setIntroShown() = sharedPreferences.edit { putBoolean(PREF_SHOW_INTRO, false) } + var isDesktopModeEnable: Boolean + get() = sharedPreferences.getBoolean(PREF_DESKTOP_MODE_ENABLE, true) + set(isEnable) { + sharedPreferences.edit { putBoolean(PREF_DESKTOP_MODE_ENABLE, isEnable) } + } + var showHistoryAllBooks: Boolean get() = sharedPreferences.getBoolean(PREF_SHOW_HISTORY_ALL_BOOKS, true) set(prefShowHistoryAllBooks) { @@ -213,6 +219,7 @@ class SharedPreferenceUtil @Inject constructor(val context: Context) { const val PREF_WIFI_ONLY = "pref_wifi_only" const val PREF_KIWIX_MOBILE = "kiwix-mobile" const val PREF_SHOW_INTRO = "showIntro" + const val PREF_DESKTOP_MODE_ENABLE = "desktop_mode_enable" private const val PREF_BACK_TO_TOP = "pref_backtotop" private const val PREF_FULLSCREEN = "pref_fullscreen" private const val PREF_NEW_TAB_BACKGROUND = "pref_newtab_background" diff --git a/core/src/main/res/menu/menu_main.xml b/core/src/main/res/menu/menu_main.xml index 7d9270d5c..d1b177fd9 100644 --- a/core/src/main/res/menu/menu_main.xml +++ b/core/src/main/res/menu/menu_main.xml @@ -46,4 +46,12 @@ app:showAsAction="never" tools:visible="true" /> + + diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index a4faac038..12d0045f7 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -323,4 +323,5 @@ Open Article Note: Notes are not deleted from your storage Delete Selected Notes? + Desktop Mode diff --git a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt index 88b02aa2b..ae8444bb3 100644 --- a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt +++ b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomReaderFragment.kt @@ -208,6 +208,15 @@ class CustomReaderFragment : CoreReaderFragment() { menu.findItem(R.id.menu_host_books)?.isVisible = false } + override fun onDesktopModeMenuClicked(isEnable: Boolean) { + getCurrentWebView()?.settings?.apply { + useWideViewPort = isEnable + }.also { + sharedPreferenceUtil?.isDesktopModeEnable = isEnable + mainMenu?.setDesktopModeEnable(!isEnable) + } + } + private fun enforcedLanguage(): Boolean { val currentLocaleCode = Locale.getDefault().toString() if (BuildConfig.ENFORCED_LANG.isNotEmpty() && BuildConfig.ENFORCED_LANG != currentLocaleCode) {