diff --git a/app/src/main/java/org/mozilla/fenix/components/topsheet/TopSheetBehavior.kt b/app/src/main/java/org/mozilla/fenix/components/topsheet/TopSheetBehavior.kt index 577f94435..0b107d83a 100644 --- a/app/src/main/java/org/mozilla/fenix/components/topsheet/TopSheetBehavior.kt +++ b/app/src/main/java/org/mozilla/fenix/components/topsheet/TopSheetBehavior.kt @@ -35,7 +35,7 @@ import kotlin.math.abs * limitations under the License. */ /** * An interaction behavior plugin for a child view of [CoordinatorLayout] to make it work as - * a bottom sheet. + * a top sheet. */ class TopSheetBehavior /** diff --git a/app/src/main/java/org/mozilla/fenix/settings/CustomizationFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/CustomizationFragment.kt index 283b7e02b..1aad7f999 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/CustomizationFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/CustomizationFragment.kt @@ -9,10 +9,8 @@ import android.os.Build import android.os.Build.VERSION.SDK_INT import android.os.Bundle import androidx.appcompat.app.AppCompatDelegate -import androidx.preference.EditTextPreference -import androidx.preference.PreferenceCategory -import androidx.preference.PreferenceFragmentCompat -import androidx.preference.SwitchPreference +import androidx.core.content.edit +import androidx.preference.* import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event @@ -145,20 +143,38 @@ class CustomizationFragment : PreferenceFragmentCompat() { } private fun setupTabsTrayCategory() { - requirePreference(R.string.pref_key_tabs_tray_compact_tab).apply { - isChecked = context.settings().enableCompactTabs - onPreferenceChangeListener = SharedPreferenceUpdater() - } - requirePreference(R.string.pref_key_tabs_tray_top_tray).apply { isChecked = context.settings().useTopTabsTray onPreferenceChangeListener = SharedPreferenceUpdater() } - requirePreference(R.string.pref_key_tabs_tray_reverse_tab_order).apply { - isChecked = context.settings().reverseTabOrderInTabsTray + val reverseOrderPref = requirePreference(R.string.pref_key_tabs_tray_reverse_tab_order).apply { + if (context.settings().enableCompactTabs) { + isChecked = false + isEnabled = false + } else { + isChecked = context.settings().reverseTabOrderInTabsTray + isEnabled = true + } onPreferenceChangeListener = SharedPreferenceUpdater() } + + requirePreference(R.string.pref_key_tabs_tray_compact_tab).apply { + isChecked = context.settings().enableCompactTabs + + onPreferenceChangeListener = Preference.OnPreferenceChangeListener { preference, newValue -> + val newValueBoolean = newValue as Boolean + preference.context.settings().preferences.edit { + putBoolean(preference.key, newValueBoolean) + if (newValueBoolean) { + reverseOrderPref.isChecked = false + putBoolean(getString(R.string.pref_key_tabs_tray_reverse_tab_order), false) + } + reverseOrderPref.isEnabled = !newValueBoolean + } + true + } + } } private fun setupFabCategory() { diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt index b034c4f20..fa8b0bee6 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt @@ -218,6 +218,8 @@ class TabTrayView( // Put the 'Add to collections' button after the tabs have loaded. // And, put the Synced Tabs adapter at the end. if (reverseTabOrderInTabsTray) { + // Put these at the start when reverse tab order is enabled. Also, we disallow + // reverse tab order for compact tabs in settings. concatAdapter.addAdapter(0, collectionsButtonAdapter) concatAdapter.addAdapter(0, syncedTabsController.adapter) } else { @@ -330,32 +332,15 @@ class TabTrayView( if (enableCompactTabs) { val gridLayoutManager = GridLayoutManager(container.context, gridViewNumberOfCols(container.context)) if (useTopTabsTray) { - if (!reverseTabOrderInTabsTray) { - gridLayoutManager.reverseLayout = true - } - } else { - if (reverseTabOrderInTabsTray) { - gridLayoutManager.reverseLayout = true - } + gridLayoutManager.reverseLayout = true } gridLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() { override fun getSpanSize(position: Int): Int { val numTabs = tabsAdapter.itemCount - val totalItems = numTabs + collectionsButtonAdapter.itemCount + - syncedTabsController.adapter.itemCount - - return if (reverseTabOrderInTabsTray) { - if (totalItems - 1 - position < numTabs) { - 1 - } else { - gridViewNumberOfCols(container.context) - } + return if (position < numTabs) { + 1 } else { - if (position < numTabs) { - 1 - } else { - gridViewNumberOfCols(container.context) - } + gridViewNumberOfCols(container.context) } } } @@ -664,18 +649,12 @@ class TabTrayView( val selectedBrowserTabIndex = tabs .indexOfFirst { it.id == sessionId } - val recyclerViewIndex = if (reverseTabOrderInTabsTray && !enableCompactTabs) { + val recyclerViewIndex = if (reverseTabOrderInTabsTray) { // For reverse tab order and non-compact tabs, we add the items in collections button // adapter and synced tabs adapter, and offset by 1 to show the tab above the // current tab, unless current tab is first in reverse order. min(selectedBrowserTabIndex + 1, tabsAdapter.itemCount - 1) + collectionsButtonAdapter.itemCount + syncedTabsController.adapter.itemCount - } else if (reverseTabOrderInTabsTray && enableCompactTabs) { - // For reverse tab order and compact tabs, we add the items in collections button - // adapter and synced tabs adapter, and offset by -1 to show the tab above the - // current tab, unless current tab is first in reverse order. - max(0, selectedBrowserTabIndex - 1 + collectionsButtonAdapter.itemCount + - syncedTabsController.adapter.itemCount) } else { // We offset index by -1 to show the tab above the current tab, unless current tab // is the first. diff --git a/app/src/main/res/drawable/ic_new.xml b/app/src/main/res/drawable/ic_new.xml index 52f76c04b..57a1dbcd9 100644 --- a/app/src/main/res/drawable/ic_new.xml +++ b/app/src/main/res/drawable/ic_new.xml @@ -8,6 +8,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/layout/component_tabstray_top.xml b/app/src/main/res/layout/component_tabstray_top.xml index ad7480343..09d16d7a8 100644 --- a/app/src/main/res/layout/component_tabstray_top.xml +++ b/app/src/main/res/layout/component_tabstray_top.xml @@ -108,6 +108,7 @@ app:tabGravity="fill" app:tabIconTint="@color/tab_icon" app:tabIndicatorColor="@color/accent_normal_theme" + app:tabIndicatorGravity="top" app:tabRippleColor="@android:color/transparent">