diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml
index 1d81cd7af8..591a7ab689 100644
--- a/lawnchair/res/values/strings.xml
+++ b/lawnchair/res/values/strings.xml
@@ -223,4 +223,5 @@
Open search provider’s website even if their app is installed.
Search Provider
Status Bar
+ Failed to load more icons
diff --git a/lawnchair/src/app/lawnchair/icons/CustomIconPack.kt b/lawnchair/src/app/lawnchair/icons/CustomIconPack.kt
index b5908f7efe..69796489ee 100644
--- a/lawnchair/src/app/lawnchair/icons/CustomIconPack.kt
+++ b/lawnchair/src/app/lawnchair/icons/CustomIconPack.kt
@@ -144,29 +144,25 @@ class CustomIconPack(context: Context, packPackageName: String) :
emit(ArrayList(result))
}
- try {
- val parser = getXml("drawable")
- while (parser != null && parser.next() != XmlPullParser.END_DOCUMENT) {
- if (parser.eventType != XmlPullParser.START_TAG) continue
- when (parser.name) {
- "category" -> {
- endCategory()
- currentTitle = parser["title"]!!
- }
- "item" -> {
- val drawableName = parser["drawable"]!!
- val resId = getDrawableId(drawableName)
- if (resId != 0) {
- val item = IconPickerItem(packPackageName, drawableName, drawableName, IconType.Normal)
- currentItems.add(item)
- }
+ val parser = getXml("drawable")
+ while (parser != null && parser.next() != XmlPullParser.END_DOCUMENT) {
+ if (parser.eventType != XmlPullParser.START_TAG) continue
+ when (parser.name) {
+ "category" -> {
+ endCategory()
+ currentTitle = parser["title"]!!
+ }
+ "item" -> {
+ val drawableName = parser["drawable"]!!
+ val resId = getDrawableId(drawableName)
+ if (resId != 0) {
+ val item = IconPickerItem(packPackageName, drawableName, drawableName, IconType.Normal)
+ currentItems.add(item)
}
}
}
- endCategory()
- } catch (e: Exception) {
-
}
+ endCategory()
}.flowOn(Dispatchers.IO)
private fun getDrawableId(name: String) = idCache.getOrPut(name) {
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/IconPickerPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/IconPickerPreference.kt
index 327696d648..9e9d8077ed 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/IconPickerPreference.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/IconPickerPreference.kt
@@ -39,6 +39,7 @@ import com.google.accompanist.drawablepainter.rememberDrawablePainter
import com.google.accompanist.insets.ui.LocalScaffoldPadding
import com.google.accompanist.navigation.animation.composable
import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.launch
import androidx.compose.material.MaterialTheme as Material2Theme
@@ -136,7 +137,6 @@ fun IconPickerPreference(packageName: String) {
searchQuery = searchQuery,
onClickItem = onClickItem,
modifier = Modifier
- .padding(horizontal = 8.dp)
.padding(top = topPadding)
)
}
@@ -157,7 +157,12 @@ fun IconPickerGrid(
onClickItem: (item: IconPickerItem) -> Unit,
modifier: Modifier = Modifier
) {
- val categories by iconPack.getAllIcons().collectAsState(emptyList())
+ var loadFailed by remember { mutableStateOf(false) }
+ val categoriesFlow = remember {
+ iconPack.getAllIcons()
+ .catch { loadFailed = true }
+ }
+ val categories by categoriesFlow.collectAsState(emptyList())
val filteredCategories by derivedStateOf {
categories
.map { it.filter(searchQuery) }
@@ -183,15 +188,14 @@ fun IconPickerGrid(
modifier = Modifier
.fillMaxWidth()
.background(MaterialTheme.colorScheme.background)
- .padding(
- vertical = 16.dp,
- horizontal = 8.dp,
- ),
+ .padding(16.dp),
style = MaterialTheme.typography.titleSmall,
color = MaterialTheme.colorScheme.primary
)
}
verticalGridItems(
+ modifier = Modifier
+ .padding(horizontal = 8.dp),
items = category.items,
numColumns = numColumns,
gap = 0.dp,
@@ -206,6 +210,13 @@ fun IconPickerGrid(
}
}
}
+ if (loadFailed) {
+ item {
+ PreferenceGroupDescription(
+ description = stringResource(id = R.string.icon_picker_load_failed)
+ )
+ }
+ }
}
}
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnGrid.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnGrid.kt
index ed43ec558f..a64f2c73a8 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnGrid.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/components/LazyColumnGrid.kt
@@ -7,6 +7,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
fun LazyListScope.verticalGridItems(
+ modifier: Modifier = Modifier,
count: Int,
numColumns: Int,
gap: Dp,
@@ -18,7 +19,7 @@ fun LazyListScope.verticalGridItems(
Spacer(modifier = Modifier.height(gap))
}
Row(
- modifier = Modifier.fillMaxWidth(),
+ modifier = modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween
) {
for (col in 0 until numColumns) {
@@ -39,12 +40,14 @@ fun LazyListScope.verticalGridItems(
}
fun LazyListScope.verticalGridItems(
+ modifier: Modifier = Modifier,
items: List,
numColumns: Int,
gap: Dp,
itemContent: @Composable (index: Int, item: T) -> Unit
) {
verticalGridItems(
+ modifier = modifier,
count = items.size,
numColumns = numColumns,
gap = gap
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt
index 97b7d5ef6a..9c33beb143 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/components/PreferenceGroup.kt
@@ -17,20 +17,16 @@
package app.lawnchair.ui.preferences.components
import androidx.compose.animation.*
-import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.ContentAlpha
import androidx.compose.material.MaterialTheme
-import androidx.compose.material3.LocalAbsoluteTonalElevation
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
-import app.lawnchair.theme.surfaceColorAtElevation
import androidx.compose.material3.MaterialTheme as Material3Theme
@Composable
@@ -98,7 +94,6 @@ fun PreferenceGroupHeading(
}
@Composable
-@ExperimentalAnimationApi
fun PreferenceGroupDescription(description: String? = null, showDescription: Boolean = true) {
description?.let {
AnimatedVisibility(