diff --git a/buildSrc/src/main/kotlin/custom/CustomApps.kt b/buildSrc/src/main/kotlin/custom/CustomApps.kt index a93a5ee03..6f165054a 100644 --- a/buildSrc/src/main/kotlin/custom/CustomApps.kt +++ b/buildSrc/src/main/kotlin/custom/CustomApps.kt @@ -213,6 +213,9 @@ private fun NamedDomainObjectContainer.create( applicationIdSuffix = ".kiwixcustom${customApp.name}" buildConfigField("String", "ZIM_URL", "\"${customApp.url}\"") buildConfigField("String", "ENFORCED_LANG", "\"${customApp.enforcedLanguage}\"") + buildConfigField("Boolean", "DISABLE_SIDEBAR", "false") + buildConfigField("Boolean", "DISABLE_READ_ALOUD", "false") + buildConfigField("Boolean", "DISABLE_TABS", "false") configureStrings(customApp.displayName) } } 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 db0254c4e..a9cb6d35d 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 @@ -57,13 +57,17 @@ abstract class ActivityModule { menu: Menu, webViews: MutableList, urlIsValid: Boolean, - menuClickListener: MenuClickListener + menuClickListener: MenuClickListener, + disableReadAloud: Boolean, + disableTabs: Boolean ): MainMenu = MainMenu( activity, zimReaderContainer.zimFileReader, menu, webViews, urlIsValid, + disableReadAloud, + disableTabs, menuClickListener ) } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.java b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.java index 8019fef23..b9293f27b 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/CoreMainActivity.java @@ -175,7 +175,7 @@ public abstract class CoreMainActivity extends BaseActivity @BindView(R2.id.activity_main_fullscreen_button) ImageButton exitFullscreenButton; @BindView(R2.id.activity_main_drawer_layout) - DrawerLayout drawerLayout; + protected DrawerLayout drawerLayout; @BindView(R2.id.activity_main_nav_view) NavigationView tableDrawerRightContainer; @BindView(R2.id.activity_main_content_frame) @@ -285,7 +285,7 @@ public abstract class CoreMainActivity extends BaseActivity Menu menu = mode.getMenu(); // Inflate custom menu icon. getMenuInflater().inflate(R.menu.menu_webview_action, menu); - readAloudSelection(menu); + configureWebViewSelectionHandler(menu); } super.onActionModeStarted(mode); } @@ -296,7 +296,7 @@ public abstract class CoreMainActivity extends BaseActivity super.onActionModeFinished(mode); } - private void readAloudSelection(Menu menu) { + protected void configureWebViewSelectionHandler(Menu menu) { if (menu != null) { menu.findItem(R.id.menu_speak_text) .setOnMenuItemClickListener(item -> { @@ -525,7 +525,7 @@ public abstract class CoreMainActivity extends BaseActivity ContextCompat.getDrawable(this, R.drawable.ic_round_add_white_36dp)); actionBar.setDisplayShowTitleEnabled(false); - drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); + setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); bottomToolbar.setVisibility(View.GONE); contentFrame.setVisibility(View.GONE); progressBar.setVisibility(View.GONE); @@ -550,7 +550,7 @@ public abstract class CoreMainActivity extends BaseActivity actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setDisplayShowTitleEnabled(true); - drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); + setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); closeAllTabsButton.setImageDrawable( ContextCompat.getDrawable(this, R.drawable.ic_close_black_24dp)); startAnimation(tabSwitcherRoot, R.anim.slide_up); @@ -563,6 +563,10 @@ public abstract class CoreMainActivity extends BaseActivity } } + protected void setDrawerLockMode(int lockMode) { + drawerLayout.setDrawerLockMode(lockMode); + } + @OnClick(R2.id.bottom_toolbar_arrow_back) void goBack() { if (getCurrentWebView().canGoBack()) { @@ -1506,10 +1510,14 @@ public abstract class CoreMainActivity extends BaseActivity @Override public boolean onCreateOptionsMenu(Menu menu) { - mainMenu = menuFactory.create(menu, webViewList, !urlIsInvalid(), this); + mainMenu = createMainMenu(menu); return true; } + @NotNull protected MainMenu createMainMenu(Menu menu) { + return menuFactory.create(menu, webViewList, !urlIsInvalid(), this, false, false); + } + protected boolean urlIsInvalid() { return getCurrentWebView().getUrl() == null; } @@ -1675,28 +1683,32 @@ public abstract class CoreMainActivity extends BaseActivity } if (handleEvent) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - - builder.setPositiveButton(android.R.string.yes, (dialog, id) -> { - if (isOpenNewTabInBackground) { - newTabInBackground(url); - Snackbar.make(snackbarRoot, R.string.new_tab_snack_bar, Snackbar.LENGTH_LONG) - .setAction(getString(R.string.open), v -> { - if (webViewList.size() > 1) selectTab(webViewList.size() - 1); - }) - .setActionTextColor(getResources().getColor(R.color.white)) - .show(); - } else { - newTab(url); - } - }); - builder.setNegativeButton(android.R.string.no, null); - builder.setMessage(getString(R.string.open_in_new_tab)); - AlertDialog dialog = builder.create(); - dialog.show(); + showOpenInNewTabDialog(url); } } + protected void showOpenInNewTabDialog(String url) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + + builder.setPositiveButton(android.R.string.yes, (dialog, id) -> { + if (isOpenNewTabInBackground) { + newTabInBackground(url); + Snackbar.make(snackbarRoot, R.string.new_tab_snack_bar, Snackbar.LENGTH_LONG) + .setAction(getString(R.string.open), v -> { + if (webViewList.size() > 1) selectTab(webViewList.size() - 1); + }) + .setActionTextColor(getResources().getColor(R.color.white)) + .show(); + } else { + newTab(url); + } + }); + builder.setNegativeButton(android.R.string.no, null); + builder.setMessage(getString(R.string.open_in_new_tab)); + AlertDialog dialog = builder.create(); + dialog.show(); + } + @Override public void setHomePage(View view) { getCurrentWebView().deactivateNightMode(); 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 f6f256a97..1a268b34b 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 @@ -22,6 +22,7 @@ import android.content.res.Configuration import android.view.Menu import android.view.MenuItem import android.widget.TextView +import androidx.core.view.isVisible import org.kiwix.kiwixmobile.core.Intents.internal import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.intent @@ -42,6 +43,8 @@ class MainMenu( menu: Menu, webViews: MutableList, urlIsValid: Boolean, + disableReadAloud: Boolean = false, + disableTabs: Boolean = false, private val menuClickListener: MenuClickListener ) { @@ -50,7 +53,9 @@ class MainMenu( menu: Menu, webViews: MutableList, urlIsValid: Boolean, - menuClickListener: MenuClickListener + menuClickListener: MenuClickListener, + disableReadAloud: Boolean, + disableTabs: Boolean ): MainMenu } @@ -72,29 +77,39 @@ class MainMenu( } private val search = menu.findItem(R.id.menu_search) - private val tabSwitcher = menu.findItem(R.id.menu_tab_switcher) - private val tabSwitcherTextView = - tabSwitcher.actionView.findViewById(R.id.ic_tab_switcher_text) + private var tabSwitcher: MenuItem? = menu.findItem(R.id.menu_tab_switcher) + private var tabSwitcherTextView: TextView? = + tabSwitcher?.actionView?.findViewById(R.id.ic_tab_switcher_text) private val bookmarks = menu.findItem(R.id.menu_bookmarks_list) private val history = menu.findItem(R.id.menu_history) private val library = menu.findItem(R.id.menu_openfile) private val addNote = menu.findItem(R.id.menu_add_note) private val randomArticle = menu.findItem(R.id.menu_random_article) private val fullscreen = menu.findItem(R.id.menu_fullscreen) - private val readAloud = menu.findItem(R.id.menu_read_aloud) + private var readAloud: MenuItem? = menu.findItem(R.id.menu_read_aloud) private val hostBooks = menu.findItem(R.id.menu_host_books) private val help = menu.findItem(R.id.menu_help) private val settings = menu.findItem(R.id.menu_settings) private val supportKiwix = menu.findItem(R.id.menu_support_kiwix) init { + if (disableReadAloud) { + readAloud?.isVisible = false + readAloud = null + } + if (disableTabs) { + tabSwitcher?.isVisible = false + tabSwitcherTextView?.isVisible = false + tabSwitcher = null + tabSwitcherTextView = null + } randomArticle.setShowAsAction( if (activity.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) MenuItem.SHOW_AS_ACTION_IF_ROOM else MenuItem.SHOW_AS_ACTION_NEVER ) - tabSwitcher.actionView.setOnClickListener { menuClickListener.onTabMenuClicked() } + tabSwitcher?.actionView?.setOnClickListener { menuClickListener.onTabMenuClicked() } help.menuItemClickListener { activity.start() } settings.menuItemClickListener { activity.startActivityForResult( @@ -149,7 +164,7 @@ class MainMenu( } fun updateTabIcon(tabs: Int) { - tabSwitcherTextView.text = if (tabs > 99) ":D" else "$tabs" + tabSwitcherTextView?.text = if (tabs > 99) ":D" else "$tabs" } private fun navigateToSearch(zimFileReader: ZimFileReader): Boolean { @@ -164,15 +179,15 @@ class MainMenu( } fun onTextToSpeechStartedTalking() { - readAloud.setTitle(R.string.menu_read_aloud_stop) + readAloud?.setTitle(R.string.menu_read_aloud_stop) } fun onTextToSpeechStoppedTalking() { - readAloud.setTitle(R.string.menu_read_aloud) + readAloud?.setTitle(R.string.menu_read_aloud) } - private fun setVisibility(visibility: Boolean, vararg menuItems: MenuItem) { - menuItems.forEach { it.isVisible = visibility } + private fun setVisibility(visibility: Boolean, vararg menuItems: MenuItem?) { + menuItems.forEach { it?.isVisible = visibility } } fun tryExpandSearch(zimFileReader: ZimFileReader?) { @@ -182,8 +197,8 @@ class MainMenu( } } -private fun MenuItem.menuItemClickListener(function: (MenuItem) -> Unit) { - setOnMenuItemClickListener { +private fun MenuItem?.menuItemClickListener(function: (MenuItem) -> Unit) { + this?.setOnMenuItemClickListener { function.invoke(it) true } diff --git a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt index 12aa2f83f..5719b513a 100644 --- a/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt +++ b/custom/src/main/java/org/kiwix/kiwixmobile/custom/main/CustomMainActivity.kt @@ -28,11 +28,14 @@ import android.os.Bundle import android.provider.Settings import android.util.Log import android.view.Menu +import android.widget.ImageView import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat +import androidx.drawerlayout.widget.DrawerLayout import org.kiwix.kiwixmobile.core.di.components.CoreComponent import org.kiwix.kiwixmobile.core.extensions.ActivityExtensions.start import org.kiwix.kiwixmobile.core.main.CoreMainActivity +import org.kiwix.kiwixmobile.core.main.MainMenu import org.kiwix.kiwixmobile.core.main.WebViewCallback import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer import org.kiwix.kiwixmobile.core.utils.DialogShower @@ -72,6 +75,19 @@ class CustomMainActivity : CoreMainActivity() { return } openObbOrZim() + setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED) + if (BuildConfig.DISABLE_SIDEBAR) { + val toolbarToc = findViewById(R.id.bottom_toolbar_toc) + toolbarToc.isEnabled = false + toolbarToc.alpha = .25f + } + } + + override fun setDrawerLockMode(lockMode: Int) { + super.setDrawerLockMode( + if (BuildConfig.DISABLE_SIDEBAR) DrawerLayout.LOCK_MODE_LOCKED_CLOSED + else lockMode + ) } @TargetApi(VERSION_CODES.M) @@ -152,4 +168,27 @@ class CustomMainActivity : CoreMainActivity() { override fun manageZimFiles(tab: Int) { // Do nothing } + + override fun createMainMenu(menu: Menu?): MainMenu { + return menuFactory.create( + menu!!, + webViewList, + !urlIsInvalid(), + this, + BuildConfig.DISABLE_READ_ALOUD, + BuildConfig.DISABLE_TABS + ) + } + + override fun showOpenInNewTabDialog(url: String?) { + if (BuildConfig.DISABLE_TABS) return + super.showOpenInNewTabDialog(url) + } + + override fun configureWebViewSelectionHandler(menu: Menu?) { + if (BuildConfig.DISABLE_READ_ALOUD) { + menu?.findItem(org.kiwix.kiwixmobile.core.R.id.menu_speak_text)?.isVisible = false + } + super.configureWebViewSelectionHandler(menu) + } }