diff --git a/app/src/main/java/net/bible/android/control/navigation/NavigationControl.kt b/app/src/main/java/net/bible/android/control/navigation/NavigationControl.kt index 76ca327c03..a759fa5cf3 100644 --- a/app/src/main/java/net/bible/android/control/navigation/NavigationControl.kt +++ b/app/src/main/java/net/bible/android/control/navigation/NavigationControl.kt @@ -97,6 +97,9 @@ class NavigationControl @Inject constructor( return bibleBookList } + /** + * Toggle sort of Bible books by name or canonically + * */ fun changeBibleBookSortOrder() { bibleBookSortOrder = if (bibleBookSortOrder == BibleBookSortOrder.BIBLE_BOOK) { BibleBookSortOrder.ALPHABETICAL @@ -105,7 +108,7 @@ class NavigationControl @Inject constructor( } } - private var bibleBookSortOrder: BibleBookSortOrder + var bibleBookSortOrder: BibleBookSortOrder get() { val bibleBookSortOrderStr = getSharedPreference(BIBLE_BOOK_SORT_ORDER, BibleBookSortOrder.BIBLE_BOOK.toString()) return BibleBookSortOrder.valueOf(bibleBookSortOrderStr!!) diff --git a/app/src/main/java/net/bible/android/view/activity/navigation/GridChoosePassageBook.kt b/app/src/main/java/net/bible/android/view/activity/navigation/GridChoosePassageBook.kt index 266244e973..004dea9a3f 100644 --- a/app/src/main/java/net/bible/android/view/activity/navigation/GridChoosePassageBook.kt +++ b/app/src/main/java/net/bible/android/view/activity/navigation/GridChoosePassageBook.kt @@ -24,10 +24,13 @@ import android.content.Intent import android.graphics.Color import android.os.Bundle import android.util.Log +import android.view.Menu import android.view.MenuItem import android.view.View.OnClickListener +import androidx.core.view.children import net.bible.android.activity.R +import net.bible.android.control.navigation.BibleBookSortOrder import net.bible.android.control.navigation.NavigationControl import net.bible.android.control.page.window.ActiveWindowPageManagerProvider import net.bible.android.view.activity.base.CustomTitlebarActivityBase @@ -55,7 +58,7 @@ import javax.inject.Inject * * @author Martin Denham [mjdenham at gmail dot com] */ -class GridChoosePassageBook : CustomTitlebarActivityBase(), OnButtonGridActionListener { +class GridChoosePassageBook : CustomTitlebarActivityBase(R.menu.choose_passage_book_menu), OnButtonGridActionListener { private lateinit var buttonGrid: ButtonGrid @@ -118,16 +121,6 @@ class GridChoosePassageBook : CustomTitlebarActivityBase(), OnButtonGridActionLi bibleBookActionBarManager.setScriptureShown(isCurrentlyShowingScripture) } - /** - * Handle scripture/Appendix toggle - */ - private val sortOrderClickListener = OnClickListener { - navigationControl.changeBibleBookSortOrder() - - buttonGrid.clear() - buttonGrid.addButtons(bibleBookButtonInfo) - } - private var navigateToVerse: Boolean = false /** Called when the activity is first created. */ @@ -149,7 +142,6 @@ class GridChoosePassageBook : CustomTitlebarActivityBase(), OnButtonGridActionLi navigateToVerse = intent?.extras?.getBoolean("navigateToVerse", navigateToVerseDefault)?:navigateToVerseDefault bibleBookActionBarManager.registerScriptureToggleClickListener(scriptureToggleClickListener) - bibleBookActionBarManager.sortButton.registerClickListener(sortOrderClickListener) setActionBarManager(bibleBookActionBarManager) @@ -161,12 +153,38 @@ class GridChoosePassageBook : CustomTitlebarActivityBase(), OnButtonGridActionLi buttonGrid = ButtonGrid(this) buttonGrid.setOnButtonGridActionListener(this) buttonGrid.addButtons(bibleBookButtonInfo) + buttonGrid.isLeftToRightEnabled = CommonUtils.sharedPreferences.getBoolean(BOOK_GRID_FLOW_PREFS, false) setContentView(buttonGrid) } + override fun onPrepareOptionsMenu(menu: Menu): Boolean { + val sortOptionItem = menu.children.first { it.itemId == R.id.alphabetical_order_opt } + sortOptionItem.isChecked = navigationControl.bibleBookSortOrder == BibleBookSortOrder.ALPHABETICAL + val rowDistributionItem = menu.children.first { it.itemId == R.id.row_order_opt } + buttonGrid.isLeftToRightEnabled = CommonUtils.sharedPreferences.getBoolean(BOOK_GRID_FLOW_PREFS, false) + rowDistributionItem.isChecked = buttonGrid.isLeftToRightEnabled + return super.onPrepareOptionsMenu(menu) + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { + R.id.alphabetical_order_opt -> { + navigationControl.changeBibleBookSortOrder() + buttonGrid.clear() + buttonGrid.addButtons(bibleBookButtonInfo) + true + } + R.id.row_order_opt -> { + buttonGrid.toggleLeftToRight() + item.isChecked = buttonGrid.isLeftToRightEnabled + buttonGrid.clear() + buttonGrid.addButtons(bibleBookButtonInfo) + CommonUtils.sharedPreferences.edit() + .putBoolean(BOOK_GRID_FLOW_PREFS, item.isChecked) + .apply() + true + } android.R.id.home -> { onBackPressed() true @@ -295,6 +313,7 @@ class GridChoosePassageBook : CustomTitlebarActivityBase(), OnButtonGridActionLi private val REVELATION_COLOR = Color.rgb(0xFE, 0x33, 0xFF) private val OTHER_COLOR = ACTS_COLOR + private const val BOOK_GRID_FLOW_PREFS = "book_grid_ltr" private const val TAG = "GridChoosePassageBook" } } diff --git a/app/src/main/java/net/bible/android/view/activity/navigation/biblebookactionbar/BibleBookActionBarManager.kt b/app/src/main/java/net/bible/android/view/activity/navigation/biblebookactionbar/BibleBookActionBarManager.kt index f08d93c8b5..55a76c75fe 100644 --- a/app/src/main/java/net/bible/android/view/activity/navigation/biblebookactionbar/BibleBookActionBarManager.kt +++ b/app/src/main/java/net/bible/android/view/activity/navigation/biblebookactionbar/BibleBookActionBarManager.kt @@ -31,7 +31,7 @@ import javax.inject.Inject * @author Martin Denham [mjdenham at gmail dot com] */ @ApplicationScope -class BibleBookActionBarManager @Inject constructor(private val scriptureToggleActionBarButton: ScriptureToggleActionBarButton, val sortButton: SortActionBarButton) : DefaultActionBarManager(), ActionBarManager { +class BibleBookActionBarManager @Inject constructor(private val scriptureToggleActionBarButton: ScriptureToggleActionBarButton) : DefaultActionBarManager(), ActionBarManager { fun registerScriptureToggleClickListener(scriptureToggleClickListener: View.OnClickListener?) { scriptureToggleActionBarButton.registerClickListener(scriptureToggleClickListener) } @@ -46,7 +46,6 @@ class BibleBookActionBarManager @Inject constructor(private val scriptureToggleA override fun prepareOptionsMenu(activity: Activity, menu: Menu, actionBar: ActionBar) { super.prepareOptionsMenu(activity, menu, actionBar) scriptureToggleActionBarButton.addToMenu(menu) - sortButton.addToMenu(menu) } /* (non-Javadoc) @@ -58,7 +57,6 @@ class BibleBookActionBarManager @Inject constructor(private val scriptureToggleA // this can be called on end of speech in non-ui thread CurrentActivityHolder.getInstance().runOnUiThread { scriptureToggleActionBarButton.update() - sortButton.update() } } diff --git a/app/src/main/java/net/bible/android/view/activity/navigation/biblebookactionbar/SortActionBarButton.kt b/app/src/main/java/net/bible/android/view/activity/navigation/biblebookactionbar/SortActionBarButton.kt deleted file mode 100644 index 62d1458cb2..0000000000 --- a/app/src/main/java/net/bible/android/view/activity/navigation/biblebookactionbar/SortActionBarButton.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2020 Martin Denham, Tuomas Airaksinen and the And Bible contributors. - * - * This file is part of And Bible (http://github.com/AndBible/and-bible). - * - * And Bible 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. - * - * And Bible 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 And Bible. - * If not, see http://www.gnu.org/licenses/. - * - */ -package net.bible.android.view.activity.navigation.biblebookactionbar - -import android.R.drawable.ic_menu_sort_by_size -import androidx.core.view.MenuItemCompat -import net.bible.android.control.ApplicationScope -import net.bible.android.control.navigation.NavigationControl -import net.bible.android.view.activity.base.actionbar.QuickActionButton -import javax.inject.Inject - -/** - * Toggle sort of Bible books by name or canonically - * - * @author Martin Denham [mjdenham at gmail dot com] - */ -@ApplicationScope -class SortActionBarButton // SHOW_AS_ACTION_ALWAYS is overriden by setVisible which depends on canShow() below -// because when visible this button is ALWAYS on the Actionbar -@Inject constructor(private val navigationControl: NavigationControl) : - QuickActionButton(MenuItemCompat.SHOW_AS_ACTION_ALWAYS) -{ - override fun getIcon(): Int = ic_menu_sort_by_size - - override fun getTitle(): String = navigationControl.bibleBookSortOrderButtonDescription - - /** - * return true if Strongs are relevant to this doc & screen - * Don't show with speak button on narrow screen to prevent over-crowding - */ - override fun canShow(): Boolean = true -} diff --git a/app/src/main/java/net/bible/android/view/util/buttongrid/ButtonGrid.kt b/app/src/main/java/net/bible/android/view/util/buttongrid/ButtonGrid.kt index 31e7eefd34..d6d24f1354 100644 --- a/app/src/main/java/net/bible/android/view/util/buttongrid/ButtonGrid.kt +++ b/app/src/main/java/net/bible/android/view/util/buttongrid/ButtonGrid.kt @@ -73,6 +73,7 @@ class ButtonGrid constructor(context: Context, attrs: AttributeSet? = null, defS private var rowColLayout: RowColLayout? = null private var pressed: ButtonInfo? = null private var isInitialised = false + var isLeftToRightEnabled = false fun clear() { removeAllViews() @@ -144,6 +145,10 @@ class ButtonGrid constructor(context: Context, attrs: AttributeSet? = null, defS previewHeight = (PREVIEW_HEIGHT_DIP * scale).toInt() } + fun toggleLeftToRight() { + isLeftToRightEnabled = !isLeftToRightEnabled + } + /** Ensure longer runs by populating in longest direction ie columns if portrait and rows if landscape * * @param row @@ -151,7 +156,7 @@ class ButtonGrid constructor(context: Context, attrs: AttributeSet? = null, defS * @return */ private fun getButtonInfoIndex(row: Int, col: Int): Int { - return if (rowColLayout!!.columnOrder) { + return if (rowColLayout!!.columnOrder && !isLeftToRightEnabled) { col * rowColLayout!!.rows + row } else { row * rowColLayout!!.cols + col diff --git a/app/src/main/res/menu/choose_passage_book_menu.xml b/app/src/main/res/menu/choose_passage_book_menu.xml new file mode 100644 index 0000000000..30c997bc93 --- /dev/null +++ b/app/src/main/res/menu/choose_passage_book_menu.xml @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dc4fbd0d12..29ec66011c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -851,4 +851,5 @@ Active labels Recent labels Other labels + Order books horizontally