diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/legacy/SearchLayout.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/legacy/SearchLayout.kt index 19c3164ae..22b25658d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/legacy/SearchLayout.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/legacy/SearchLayout.kt @@ -19,6 +19,8 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SecondaryTabRow import androidx.compose.material3.Tab import androidx.compose.material3.Text +import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass +import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf @@ -45,6 +47,7 @@ import com.hippo.ehviewer.ui.main.ImageSearch import com.hippo.ehviewer.ui.main.NormalSearch import com.hippo.ehviewer.ui.main.SearchAdvanced import com.hippo.ehviewer.util.AppConfig +import com.hippo.ehviewer.util.findActivity import com.hippo.ehviewer.util.pickVisualMedia import kotlinx.coroutines.launch @@ -71,6 +74,7 @@ class SearchLayout @JvmOverloads constructor( @Composable override fun Content() { val coroutineScope = rememberCoroutineScope() + val windowSizeClass = calculateWindowSizeClass(activity = context.findActivity()) fun selectImage() = coroutineScope.launch { context.pickVisualMedia(ActivityResultContracts.PickVisualMedia.ImageOnly)?.let { vm.path = it.toString() @@ -93,6 +97,11 @@ class SearchLayout @JvmOverloads constructor( isAdvanced = vm.isAdvancedMode, onAdvancedChanged = { vm.isAdvancedMode = it }, showInfo = { BaseDialogBuilder(context).setMessage(R.string.search_tip).show() }, + maxItemsInEachRow = when (windowSizeClass.widthSizeClass) { + WindowWidthSizeClass.Compact -> 2 + WindowWidthSizeClass.Medium -> 3 + else -> 5 + }, ) } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/NormalSearch.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/NormalSearch.kt index e2282c4f1..5bd0d21d0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/NormalSearch.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/NormalSearch.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.Help @@ -55,8 +56,12 @@ fun NormalSearch( isAdvanced: Boolean, onAdvancedChanged: (Boolean) -> Unit, showInfo: () -> Unit, + maxItemsInEachRow: Int, ) { - FlowRow(modifier = Modifier.wrapContentHeight(align = Alignment.Top)) { + FlowRow( + modifier = Modifier.wrapContentHeight(align = Alignment.Top), + maxItemsInEachRow = maxItemsInEachRow, + ) { categoryTable.forEach { val selected = category and it.first != 0 FilterChip( @@ -64,7 +69,7 @@ fun NormalSearch( onClick = { onCategoryChanged(if (selected) category xor it.first else category or it.first) }, label = { Text(text = stringResource(id = it.second)) }, leadingIcon = { if (selected) Icon(imageVector = Icons.Default.Check, contentDescription = null) }, - modifier = Modifier.padding(horizontal = 4.dp).align(alignment = Alignment.CenterVertically), + modifier = Modifier.padding(horizontal = 4.dp).align(alignment = Alignment.CenterVertically).widthIn(min = 145.dp), ) } }