|
|
@@ -9,16 +9,13 @@
|
|
|
package org.mjdev.tvapp.base.ui.components.complex
|
|
|
|
|
|
import android.annotation.SuppressLint
|
|
|
-import androidx.compose.foundation.clickable
|
|
|
import androidx.compose.foundation.layout.aspectRatio
|
|
|
import androidx.compose.foundation.layout.defaultMinSize
|
|
|
import androidx.compose.foundation.layout.padding
|
|
|
import androidx.compose.runtime.Composable
|
|
|
-import androidx.compose.runtime.MutableState
|
|
|
import androidx.compose.ui.Modifier
|
|
|
import androidx.compose.ui.focus.FocusRequester
|
|
|
import androidx.compose.ui.focus.FocusState
|
|
|
-import androidx.compose.ui.focus.focusRequester
|
|
|
import androidx.compose.ui.focus.onFocusChanged
|
|
|
import androidx.compose.ui.graphics.Color
|
|
|
import androidx.compose.ui.layout.ContentScale
|
|
|
@@ -33,9 +30,8 @@ import androidx.tv.material3.CardShape
|
|
|
import androidx.tv.material3.CompactCard
|
|
|
import androidx.tv.material3.ExperimentalTvMaterial3Api
|
|
|
import org.mjdev.tvapp.base.extensions.ComposeExt
|
|
|
-import org.mjdev.tvapp.base.extensions.ComposeExt.isFocused
|
|
|
-import org.mjdev.tvapp.base.extensions.ComposeExt.rememberFocusState
|
|
|
import org.mjdev.tvapp.base.extensions.ModifierExt.conditional
|
|
|
+import org.mjdev.tvapp.base.extensions.ModifierExt.requestFocusOnTouch
|
|
|
import org.mjdev.tvapp.base.interfaces.ItemWithDescription
|
|
|
import org.mjdev.tvapp.base.interfaces.ItemWithImage
|
|
|
import org.mjdev.tvapp.base.interfaces.ItemWithSubtitle
|
|
|
@@ -59,7 +55,6 @@ fun FocusableCard(
|
|
|
border: CardBorder = CardDefaults.colorFocusBorder(Color.Green),
|
|
|
glow: CardGlow = CardDefaults.colorFocusGlow(Color.Green),
|
|
|
placeholder: @Composable () -> Unit = {},
|
|
|
- focusState: MutableState<FocusState?> = rememberFocusState(),
|
|
|
imageRenderer: @Composable (modifier: Modifier) -> Unit = {
|
|
|
ImageAny(
|
|
|
modifier = modifier,
|
|
|
@@ -70,11 +65,11 @@ fun FocusableCard(
|
|
|
)
|
|
|
},
|
|
|
aspectRatio: Float? = 16f / 9f,
|
|
|
- onFocus: (item: Any?) -> Unit = {},
|
|
|
+ focusRequester : FocusRequester = ComposeExt.rememberFocusRequester(),
|
|
|
+ onFocusChange: (state: FocusState) -> Unit = {},
|
|
|
onClick: (item: Any?) -> Unit = {},
|
|
|
) {
|
|
|
val isEdit = ComposeExt.isEditMode()
|
|
|
- val focusRequester = FocusRequester()
|
|
|
CompactCard(
|
|
|
scale = scale,
|
|
|
shape = shape,
|
|
|
@@ -82,22 +77,13 @@ fun FocusableCard(
|
|
|
border = border,
|
|
|
glow = glow,
|
|
|
modifier = modifier
|
|
|
+ .onFocusChanged { state -> onFocusChange(state) }
|
|
|
+ .requestFocusOnTouch(focusRequester)
|
|
|
.conditional(aspectRatio != null) {
|
|
|
aspectRatio(aspectRatio!!)
|
|
|
}
|
|
|
.conditional(isEdit) {
|
|
|
aspectRatio(16f / 9f).defaultMinSize(80.dp)
|
|
|
- }
|
|
|
- .onFocusChanged { state ->
|
|
|
- focusState.value = state
|
|
|
- }
|
|
|
- .focusRequester(focusRequester)
|
|
|
- .clickable {
|
|
|
- if (focusState.isFocused) {
|
|
|
- onClick(item)
|
|
|
- } else {
|
|
|
- focusRequester.requestFocus()
|
|
|
- }
|
|
|
},
|
|
|
image = {
|
|
|
imageRenderer(modifier)
|