diff --git a/app/src/main/java/com/keylesspalace/tusky/TabPreferenceActivity.kt b/app/src/main/java/com/keylesspalace/tusky/TabPreferenceActivity.kt
index 4d91fd1a6..f830f397b 100644
--- a/app/src/main/java/com/keylesspalace/tusky/TabPreferenceActivity.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/TabPreferenceActivity.kt
@@ -164,18 +164,12 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
toggleFab(false)
}
- binding.maxTabsInfo.text = resources.getQuantityString(R.plurals.max_tab_number_reached, MAX_TAB_COUNT, MAX_TAB_COUNT)
-
updateAvailableTabs()
onBackPressedDispatcher.addCallback(onFabDismissedCallback)
}
override fun onTabAdded(tab: TabData) {
- if (currentTabs.size >= MAX_TAB_COUNT) {
- return
- }
-
toggleFab(false)
if (tab.id == HASHTAG) {
@@ -395,8 +389,6 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
addableTabs.add(createTabDataFromId(LIST))
addTabAdapter.updateData(addableTabs)
-
- binding.maxTabsInfo.visible(addableTabs.size == 0 || currentTabs.size >= MAX_TAB_COUNT)
currentTabsAdapter.setRemoveButtonVisible(currentTabs.size > MIN_TAB_COUNT)
}
@@ -429,6 +421,5 @@ class TabPreferenceActivity : BaseActivity(), Injectable, ItemInteractionListene
companion object {
private const val MIN_TAB_COUNT = 2
- private const val MAX_TAB_COUNT = 5
}
}
diff --git a/app/src/main/java/com/keylesspalace/tusky/view/AdaptiveTabLayout.kt b/app/src/main/java/com/keylesspalace/tusky/view/AdaptiveTabLayout.kt
new file mode 100644
index 000000000..800165f90
--- /dev/null
+++ b/app/src/main/java/com/keylesspalace/tusky/view/AdaptiveTabLayout.kt
@@ -0,0 +1,41 @@
+package com.keylesspalace.tusky.view
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.ViewGroup
+import com.google.android.material.tabs.TabLayout
+
+/**
+ * Workaround for "auto" mode not behaving as expected.
+ *
+ * Switches the tab display mode depending on available size: start out with "scrollable" but
+ * if there is enough room switch to "fixed" (and re-measure).
+ *
+ * Idea taken from https://stackoverflow.com/a/44894143
+ */
+class AdaptiveTabLayout @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0
+) : TabLayout(context, attrs, defStyleAttr) {
+
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+ tabMode = MODE_SCROLLABLE // make sure to only measure the "minimum width"
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+
+ if (tabCount < 2) {
+ return
+ }
+
+ val tabLayout = getChildAt(0) as ViewGroup
+ var widthOfAllTabs = 0
+ for (i in 0 until tabLayout.childCount) {
+ widthOfAllTabs += tabLayout.getChildAt(i).measuredWidth
+ }
+ if (widthOfAllTabs <= measuredWidth) {
+ // fill all space if there is enough room
+ tabMode = MODE_FIXED
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+ }
+ }
+}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 8082e0ce6..8ea5e9b3b 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -38,14 +38,14 @@
app:contentInsetStartWithNavigation="0dp"
app:navigationContentDescription="@string/action_open_drawer">
-
+ app:tabMode="scrollable" />
@@ -67,13 +67,13 @@
app:contentInsetStartWithNavigation="0dp"
app:fabAlignmentMode="end">
-
+ app:tabMode="scrollable" />
diff --git a/app/src/main/res/layout/activity_tab_preference.xml b/app/src/main/res/layout/activity_tab_preference.xml
index cd6bce8d2..c29b95bfe 100644
--- a/app/src/main/res/layout/activity_tab_preference.xml
+++ b/app/src/main/res/layout/activity_tab_preference.xml
@@ -1,7 +1,6 @@
@@ -53,14 +52,6 @@
android:layout_height="wrap_content"
android:overScrollMode="never" />
-
-
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 48a812989..51679ed88 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -559,10 +559,6 @@
%1$s
%1$s and %2$s
%1$s, %2$s and %3$d more
-
- - maximum of %1$d tab reached
- - maximum of %1$d tabs reached
-
Media: %s