diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
index 657e33c06..d0011a85a 100644
--- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
+++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
@@ -35,6 +35,8 @@ import org.oxycblt.auxio.playback.system.PlaybackService
import org.oxycblt.auxio.settings.SettingsManager
import org.oxycblt.auxio.util.isNight
import org.oxycblt.auxio.util.logD
+import org.oxycblt.auxio.util.replaceInsetsCompat
+import org.oxycblt.auxio.util.systemBarsCompat
/**
* The single [AppCompatActivity] for Auxio.
@@ -126,16 +128,8 @@ class MainActivity : AppCompatActivity() {
WindowInsets.Type.systemBars(),
insets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars())
)
- .build().also {
- val bars = it.getInsets(WindowInsets.Type.systemBars())
-
- // If left/right insets are present [implying phone landscape mode],
- // make sure that we apply them.
- binding.root.updatePadding(
- left = bars.left,
- right = bars.right
- )
- }
+ .build()
+ .applyLeftRightInsets(binding)
}
} else {
// Do old edge-to-edge otherwise.
@@ -147,17 +141,23 @@ class MainActivity : AppCompatActivity() {
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
setOnApplyWindowInsetsListener { _, insets ->
- updatePadding(
- left = insets.systemWindowInsetLeft,
- right = insets.systemWindowInsetRight
- )
-
- insets
+ insets.applyLeftRightInsets(binding)
}
}
}
}
+ private fun WindowInsets.applyLeftRightInsets(binding: ActivityMainBinding): WindowInsets {
+ val bars = systemBarsCompat
+
+ binding.root.updatePadding(
+ left = bars.left,
+ right = bars.right
+ )
+
+ return replaceInsetsCompat(0, bars.top, 0, bars.bottom)
+ }
+
companion object {
private const val KEY_INTENT_USED = BuildConfig.APPLICATION_ID + ".key.FILE_INTENT_USED"
}
diff --git a/app/src/main/java/org/oxycblt/auxio/home/AdaptiveTabStrategy.kt b/app/src/main/java/org/oxycblt/auxio/home/AdaptiveTabStrategy.kt
new file mode 100644
index 000000000..f5b61204f
--- /dev/null
+++ b/app/src/main/java/org/oxycblt/auxio/home/AdaptiveTabStrategy.kt
@@ -0,0 +1,29 @@
+package org.oxycblt.auxio.home
+
+import android.content.Context
+import com.google.android.material.tabs.TabLayout
+import com.google.android.material.tabs.TabLayoutMediator
+import org.oxycblt.auxio.util.logD
+
+class AdaptiveTabStrategy(
+ context: Context,
+ private val homeModel: HomeViewModel
+) : TabLayoutMediator.TabConfigurationStrategy {
+ private val screenSize = context.resources.configuration.screenWidthDp
+
+ override fun onConfigureTab(tab: TabLayout.Tab, position: Int) {
+ val tabMode = homeModel.tabs[position]
+
+ when {
+ screenSize < 370 ->
+ tab.setIcon(tabMode.icon)
+ .setContentDescription(tabMode.string)
+
+ screenSize < 600 -> tab.setText(tabMode.string)
+
+ else ->
+ tab.setIcon(tabMode.icon)
+ .setText(tabMode.string)
+ }
+ }
+}
diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt
index 311123e11..7143169f9 100644
--- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt
@@ -154,9 +154,9 @@ class HomeFragment : Fragment() {
override fun onPageSelected(position: Int) = homeModel.updateCurrentTab(position)
})
- TabLayoutMediator(binding.homeTabs, this) { tab, pos ->
- tab.setText(homeModel.tabs[pos].string)
- }.attach()
+ TabLayoutMediator(
+ binding.homeTabs, this, AdaptiveTabStrategy(context, homeModel)
+ ).attach()
}
binding.homeFab.setOnClickListener {
diff --git a/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollRecyclerView.kt b/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollRecyclerView.kt
index 928fb16fc..94696e469 100644
--- a/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollRecyclerView.kt
+++ b/app/src/main/java/org/oxycblt/auxio/home/fastscroll/FastScrollRecyclerView.kt
@@ -35,6 +35,7 @@ import android.widget.TextView
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.math.MathUtils
import androidx.core.view.isInvisible
+import androidx.core.view.updatePadding
import androidx.core.widget.TextViewCompat
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
@@ -316,7 +317,7 @@ class FastScrollRecyclerView @JvmOverloads constructor(
override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
val bars = insets.systemBarsCompat
- setPadding(
+ updatePadding(
initialPadding.left, initialPadding.top, initialPadding.right,
initialPadding.bottom + bars.bottom
)
diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt
index db3f11c2c..64af44427 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt
@@ -43,7 +43,7 @@ import org.oxycblt.auxio.excluded.ExcludedDatabase
* blacklisting relies on a deprecated method, and the supposedly "modern" method is SLOWER and
* causes even more problems since I have to manage databases across version boundaries. Sometimes
* music will have a deformed clone that I can't filter out, sometimes Genres will just break for no
- * reason, sometimes this spaghetti parser just completely breaks down and is unable to get any
+ * reason, sometimes this spaghetti parser just completely falls apart and is unable to get any
* metadata. Everything is broken in it's own special unique way and I absolutely hate it.
*
* Is there anything we can do about it? No. Google has routinely shut down issues that begged google
diff --git a/app/src/main/java/org/oxycblt/auxio/ui/DisplayMode.kt b/app/src/main/java/org/oxycblt/auxio/ui/DisplayMode.kt
index 4ad79e1d0..502a680b2 100644
--- a/app/src/main/java/org/oxycblt/auxio/ui/DisplayMode.kt
+++ b/app/src/main/java/org/oxycblt/auxio/ui/DisplayMode.kt
@@ -18,7 +18,6 @@
package org.oxycblt.auxio.ui
-import androidx.annotation.StringRes
import org.oxycblt.auxio.R
/**
@@ -27,11 +26,25 @@ import org.oxycblt.auxio.R
* changing them would also change the meaning of tab instances.
* @author OxygenCobalt
*/
-enum class DisplayMode(@StringRes val string: Int) {
- SHOW_SONGS(R.string.lbl_songs),
- SHOW_ALBUMS(R.string.lbl_albums),
- SHOW_ARTISTS(R.string.lbl_artists),
- SHOW_GENRES(R.string.lbl_genres);
+enum class DisplayMode {
+ SHOW_SONGS,
+ SHOW_ALBUMS,
+ SHOW_ARTISTS,
+ SHOW_GENRES;
+
+ val string: Int get() = when (this) {
+ SHOW_SONGS -> R.string.lbl_songs
+ SHOW_ALBUMS -> R.string.lbl_albums
+ SHOW_ARTISTS -> R.string.lbl_artists
+ SHOW_GENRES -> R.string.lbl_genres
+ }
+
+ val icon: Int get() = when (this) {
+ SHOW_SONGS -> R.drawable.ic_song
+ SHOW_ALBUMS -> R.drawable.ic_album
+ SHOW_ARTISTS -> R.drawable.ic_artist
+ SHOW_GENRES -> R.drawable.ic_genre
+ }
companion object {
private const val CONST_NULL = 0xA107
diff --git a/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt
index 6ab92d1b2..95de3aa61 100644
--- a/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt
+++ b/app/src/main/java/org/oxycblt/auxio/util/ViewUtil.kt
@@ -21,6 +21,7 @@ package org.oxycblt.auxio.util
import android.content.Context
import android.content.res.ColorStateList
import android.content.res.Resources
+import android.graphics.Insets
import android.graphics.Rect
import android.os.Build
import android.util.TypedValue
@@ -143,3 +144,24 @@ val WindowInsets.systemBarsCompat: Rect get() {
}
}
+fun WindowInsets.replaceInsetsCompat(left: Int, top: Int, right: Int, bottom: Int): WindowInsets {
+ return when {
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> {
+ WindowInsets.Builder(this)
+ .setInsets(
+ WindowInsets.Type.systemBars(),
+ Insets.of(left, top, right, bottom)
+ )
+ .build()
+ }
+
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1 -> {
+ @Suppress("DEPRECATION")
+ replaceSystemWindowInsets(
+ left, top, right, bottom
+ )
+ }
+
+ else -> this
+ }
+}
diff --git a/app/src/main/res/drawable/ic_song.xml b/app/src/main/res/drawable/ic_song.xml
new file mode 100644
index 000000000..9a10408b2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_song.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 3ceccc74a..2a829d4a6 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -7,17 +7,13 @@
+ android:layout_height="match_parent">
+ app:tabTextAppearance="@style/TextAppearance.Auxio.LabelLarger" />
@@ -61,7 +56,6 @@
android:layout_margin="@dimen/spacing_medium"
android:contentDescription="@string/desc_shuffle_all"
android:src="@drawable/ic_shuffle"
- app:fabSize="normal"
app:tint="?attr/colorOnPrimaryContainer" />
diff --git a/build.gradle b/build.gradle
index d60ad4fa1..e2032978c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,7 +9,7 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.0.3'
+ classpath 'com.android.tools.build:gradle:7.0.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version"