From e4a3cc5290c6a13a85d370d166a31db7437be301 Mon Sep 17 00:00:00 2001
From: ISO-B <3048685+ISO-B@users.noreply.github.com>
Date: Mon, 16 Sep 2024 23:06:49 +0300
Subject: [PATCH] Added Android Auto browsing settings
---
.../audiobookshelf/app/data/DeviceClasses.kt | 10 +++-
.../app/device/DeviceManager.kt | 10 ++++
.../app/player/PlayerNotificationService.kt | 8 +--
pages/settings.vue | 55 ++++++++++++++++++-
strings/en-us.json | 7 +++
5 files changed, 83 insertions(+), 7 deletions(-)
diff --git a/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt b/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt
index a002c141..f1831770 100644
--- a/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt
+++ b/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt
@@ -133,7 +133,10 @@ data class DeviceSettings(
var disableSleepTimerResetFeedback: Boolean,
var languageCode: String,
var downloadUsingCellular: DownloadUsingCellularSetting,
- var streamingUsingCellular: StreamingUsingCellularSetting
+ var streamingUsingCellular: StreamingUsingCellularSetting,
+ var androidAutoBrowseForceGrouping: Boolean,
+ var androidAutoBrowseTopLevelLimitForGrouping: Int,
+ var androidAutoBrowseLimitForGrouping: Int
) {
companion object {
// Static method to get default device settings
@@ -159,7 +162,10 @@ data class DeviceSettings(
disableSleepTimerResetFeedback = false,
languageCode = "en-us",
downloadUsingCellular = DownloadUsingCellularSetting.ALWAYS,
- streamingUsingCellular = StreamingUsingCellularSetting.ALWAYS
+ streamingUsingCellular = StreamingUsingCellularSetting.ALWAYS,
+ androidAutoBrowseForceGrouping = false,
+ androidAutoBrowseTopLevelLimitForGrouping = 100,
+ androidAutoBrowseLimitForGrouping = 50
)
}
}
diff --git a/android/app/src/main/java/com/audiobookshelf/app/device/DeviceManager.kt b/android/app/src/main/java/com/audiobookshelf/app/device/DeviceManager.kt
index 37e81cf0..f14654dc 100644
--- a/android/app/src/main/java/com/audiobookshelf/app/device/DeviceManager.kt
+++ b/android/app/src/main/java/com/audiobookshelf/app/device/DeviceManager.kt
@@ -61,6 +61,16 @@ object DeviceManager {
if (deviceData.deviceSettings?.streamingUsingCellular == null) {
deviceData.deviceSettings?.streamingUsingCellular = StreamingUsingCellularSetting.ALWAYS
}
+
+ if (deviceData.deviceSettings?.androidAutoBrowseForceGrouping == null) {
+ deviceData.deviceSettings?.androidAutoBrowseForceGrouping = false
+ }
+ if (deviceData.deviceSettings?.androidAutoBrowseTopLevelLimitForGrouping == null) {
+ deviceData.deviceSettings?.androidAutoBrowseTopLevelLimitForGrouping = 100
+ }
+ if (deviceData.deviceSettings?.androidAutoBrowseLimitForGrouping == null) {
+ deviceData.deviceSettings?.androidAutoBrowseLimitForGrouping = 50
+ }
}
fun getBase64Id(id:String):String {
diff --git a/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt b/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt
index 2e16954f..4a606789 100644
--- a/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt
+++ b/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt
@@ -1148,7 +1148,7 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
Log.d(tag, "Loading series from library ${mediaIdParts[2]} with paging ${mediaIdParts[4]}")
mediaManager.loadLibrarySeriesWithAudio(mediaIdParts[2], mediaIdParts[4]) { seriesItems ->
Log.d(tag, "Received ${seriesItems.size} series")
- if (seriesItems.size > 500) {
+ if (seriesItems.size > DeviceManager.deviceData.deviceSettings!!.androidAutoBrowseLimitForGrouping) {
val seriesLetters = seriesItems.groupingBy { iwb -> iwb.title.substring(0, mediaIdParts[4].length + 1).uppercase() }.eachCount()
val children = seriesLetters.map { (seriesLetter, seriesCount) ->
MediaBrowserCompat.MediaItem(
@@ -1173,7 +1173,7 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
Log.d(tag, "Loading series from library ${mediaIdParts[2]}")
mediaManager.loadLibrarySeriesWithAudio(mediaIdParts[2]) { seriesItems ->
Log.d(tag, "Received ${seriesItems.size} series")
- if (seriesItems.size > 1000) {
+ if (DeviceManager.deviceData.deviceSettings!!.androidAutoBrowseForceGrouping || seriesItems.size > DeviceManager.deviceData.deviceSettings!!.androidAutoBrowseTopLevelLimitForGrouping) {
val seriesLetters = seriesItems.groupingBy { iwb -> iwb.title.first().uppercaseChar() }.eachCount()
val children = seriesLetters.map { (seriesLetter, seriesCount) ->
MediaBrowserCompat.MediaItem(
@@ -1215,7 +1215,7 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
Log.d(tag, "Loading authors from library ${mediaIdParts[2]} with paging ${mediaIdParts[4]}")
mediaManager.loadAuthorsWithBooks(mediaIdParts[2], mediaIdParts[4]) { authorItems ->
Log.d(tag, "Received ${authorItems.size} authors")
- if (authorItems.size > 100) {
+ if (authorItems.size > DeviceManager.deviceData.deviceSettings!!.androidAutoBrowseLimitForGrouping) {
val authorLetters = authorItems.groupingBy { iwb -> iwb.name.substring(0, mediaIdParts[4].length + 1).uppercase() }.eachCount()
val children = authorLetters.map { (authorLetter, authorCount) ->
MediaBrowserCompat.MediaItem(
@@ -1240,7 +1240,7 @@ class PlayerNotificationService : MediaBrowserServiceCompat() {
Log.d(tag, "Loading authors from library ${mediaIdParts[2]}")
mediaManager.loadAuthorsWithBooks(mediaIdParts[2]) { authorItems ->
Log.d(tag, "Received ${authorItems.size} authors")
- if (authorItems.size > 1000) {
+ if (DeviceManager.deviceData.deviceSettings!!.androidAutoBrowseForceGrouping || authorItems.size > DeviceManager.deviceData.deviceSettings!!.androidAutoBrowseTopLevelLimitForGrouping) {
val authorLetters = authorItems.groupingBy { iwb -> iwb.name.first().uppercaseChar() }.eachCount()
val children = authorLetters.map { (authorLetter, authorCount) ->
MediaBrowserCompat.MediaItem(
diff --git a/pages/settings.vue b/pages/settings.vue
index c1d09b6b..724dc3b1 100644
--- a/pages/settings.vue
+++ b/pages/settings.vue
@@ -150,6 +150,28 @@
+
+
+ {{ $strings.HeaderAndroidAutoSettings }} {{ $strings.LabelAndroidAutoBrowseForceGrouping }} {{ $strings.LabelAndroidAutoBrowseTopLevelLimitForGrouping }} {{ $strings.LabelAndroidAutoBrowseLimitForGrouping }}