feat: do not use MDC-Android tabs any more
This commit is contained in:
parent
4ba9b59127
commit
998f433144
|
|
@ -1,73 +1,35 @@
|
||||||
package chat.stoat.composables.generic
|
package chat.stoat.composables.generic
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.PrimaryTabRow
|
import androidx.compose.material3.PrimaryTabRow
|
||||||
import androidx.compose.material3.Tab
|
import androidx.compose.material3.Tab
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.viewinterop.AndroidView
|
|
||||||
import chat.stoat.api.settings.LoadedSettings
|
|
||||||
import chat.stoat.ui.theme.Theme
|
|
||||||
import com.google.android.material.tabs.TabLayout
|
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun PrimaryTabs(tabs: List<String>, currentIndex: Int, onTabSelected: (Int) -> Unit) {
|
fun PrimaryTabs(tabs: List<String>, currentIndex: Int, onTabSelected: (Int) -> Unit) {
|
||||||
when (LoadedSettings.theme) {
|
PrimaryTabRow(selectedTabIndex = currentIndex) {
|
||||||
Theme.M3Dynamic -> AndroidView(
|
tabs.forEachIndexed { index, tab ->
|
||||||
factory = {
|
Tab(
|
||||||
TabLayout(it).apply {
|
selected = index == currentIndex,
|
||||||
tabMode = TabLayout.MODE_FIXED
|
onClick = { onTabSelected(index) },
|
||||||
tabGravity = TabLayout.GRAVITY_FILL
|
text = {
|
||||||
|
Text(
|
||||||
tabs.forEach { tab ->
|
text = tab,
|
||||||
addTab(newTab().setText(tab))
|
maxLines = 1,
|
||||||
}
|
overflow = TextOverflow.Ellipsis,
|
||||||
|
color = if (index == currentIndex) {
|
||||||
addOnTabSelectedListener(object :
|
MaterialTheme.colorScheme.primary
|
||||||
TabLayout.OnTabSelectedListener {
|
} else {
|
||||||
override fun onTabSelected(tab: TabLayout.Tab?) {
|
MaterialTheme.colorScheme.onSurface
|
||||||
onTabSelected(tab?.position ?: 0)
|
|
||||||
}
|
}
|
||||||
|
)
|
||||||
override fun onTabUnselected(tab: TabLayout.Tab?) {
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onTabReselected(tab: TabLayout.Tab?) {
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
},
|
)
|
||||||
update = {
|
|
||||||
it.getTabAt(currentIndex)?.select()
|
|
||||||
},
|
|
||||||
modifier = Modifier.fillMaxWidth()
|
|
||||||
)
|
|
||||||
|
|
||||||
else -> PrimaryTabRow(selectedTabIndex = currentIndex) {
|
|
||||||
tabs.forEachIndexed { index, tab ->
|
|
||||||
Tab(
|
|
||||||
selected = index == currentIndex,
|
|
||||||
onClick = { onTabSelected(index) },
|
|
||||||
text = {
|
|
||||||
Text(
|
|
||||||
text = tab,
|
|
||||||
maxLines = 1,
|
|
||||||
overflow = TextOverflow.Ellipsis,
|
|
||||||
color = if (index == currentIndex) {
|
|
||||||
MaterialTheme.colorScheme.primary
|
|
||||||
} else {
|
|
||||||
MaterialTheme.colorScheme.onSurface
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue