mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Show open source library license in a custom screen (#9645)
Show open source library license in a custom screen.
This commit is contained in:
		| @@ -129,7 +129,7 @@ object AboutScreen : Screen() { | ||||
|                 item { | ||||
|                     TextPreferenceWidget( | ||||
|                         title = stringResource(R.string.licenses), | ||||
|                         onPreferenceClick = { navigator.push(LicensesScreen()) }, | ||||
|                         onPreferenceClick = { navigator.push(OpenSourceLicensesScreen()) }, | ||||
|                     ) | ||||
|                 } | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,94 @@ | ||||
| package eu.kanade.presentation.more.settings.screen | ||||
|  | ||||
| import androidx.compose.foundation.layout.Column | ||||
| import androidx.compose.foundation.layout.padding | ||||
| import androidx.compose.foundation.rememberScrollState | ||||
| import androidx.compose.foundation.verticalScroll | ||||
| import androidx.compose.material.icons.Icons | ||||
| import androidx.compose.material.icons.filled.ArrowBack | ||||
| import androidx.compose.material.icons.filled.Public | ||||
| import androidx.compose.material3.Icon | ||||
| import androidx.compose.material3.IconButton | ||||
| import androidx.compose.material3.Text | ||||
| import androidx.compose.material3.TopAppBar | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.platform.LocalUriHandler | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.unit.dp | ||||
| import androidx.compose.ui.viewinterop.AndroidView | ||||
| import androidx.core.text.HtmlCompat | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import com.google.android.material.textview.MaterialTextView | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.components.AppBarActions | ||||
| import eu.kanade.presentation.util.Screen | ||||
| import eu.kanade.tachiyomi.R | ||||
| import tachiyomi.presentation.core.components.material.Scaffold | ||||
|  | ||||
| class OpenSourceLibraryLicenseScreen( | ||||
|     private val name: String, | ||||
|     private val website: String?, | ||||
|     private val license: String, | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|         val navigator = LocalNavigator.currentOrThrow | ||||
|         val uriHandler = LocalUriHandler.current | ||||
|  | ||||
|         Scaffold( | ||||
|             topBar = { | ||||
|                 TopAppBar( | ||||
|                     title = { | ||||
|                         Text( | ||||
|                             text = name, | ||||
|                             maxLines = 1, | ||||
|                         ) | ||||
|                     }, | ||||
|                     navigationIcon = { | ||||
|                         IconButton(onClick = navigator::pop) { | ||||
|                             Icon(imageVector = Icons.Default.ArrowBack, contentDescription = null) | ||||
|                         } | ||||
|                     }, | ||||
|                     actions = { | ||||
|                         if (!website.isNullOrEmpty()) { | ||||
|                             AppBarActions( | ||||
|                                 listOf( | ||||
|                                     AppBar.Action( | ||||
|                                         title = stringResource(R.string.website), | ||||
|                                         icon = Icons.Default.Public, | ||||
|                                         onClick = { uriHandler.openUri(website) }, | ||||
|                                     ), | ||||
|                                 ), | ||||
|                             ) | ||||
|                         } | ||||
|                     }, | ||||
|                     scrollBehavior = it, | ||||
|                 ) | ||||
|             }, | ||||
|         ) { contentPadding -> | ||||
|             Column( | ||||
|                 modifier = Modifier | ||||
|                     .verticalScroll(rememberScrollState()) | ||||
|                     .padding(contentPadding) | ||||
|                     .padding(16.dp), | ||||
|             ) { | ||||
|                 HtmlLicenseText(html = license) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Composable | ||||
|     private fun HtmlLicenseText(html: String) { | ||||
|         AndroidView( | ||||
|             factory = { | ||||
|                 MaterialTextView(it) | ||||
|             }, | ||||
|             update = { | ||||
|                 it.text = HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_COMPACT) | ||||
|             }, | ||||
|         ) | ||||
|     } | ||||
| } | ||||
| @@ -9,12 +9,13 @@ import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import com.mikepenz.aboutlibraries.ui.compose.LibrariesContainer | ||||
| import com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults | ||||
| import com.mikepenz.aboutlibraries.ui.compose.util.htmlReadyLicenseContent | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.util.Screen | ||||
| import eu.kanade.tachiyomi.R | ||||
| import tachiyomi.presentation.core.components.material.Scaffold | ||||
| 
 | ||||
| class LicensesScreen : Screen() { | ||||
| class OpenSourceLicensesScreen : Screen() { | ||||
| 
 | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
| @@ -38,6 +39,14 @@ class LicensesScreen : Screen() { | ||||
|                     badgeBackgroundColor = MaterialTheme.colorScheme.primary, | ||||
|                     badgeContentColor = MaterialTheme.colorScheme.onPrimary, | ||||
|                 ), | ||||
|                 onLibraryClick = { | ||||
|                     val libraryLicenseScreen = OpenSourceLibraryLicenseScreen( | ||||
|                         name = it.name, | ||||
|                         website = it.website, | ||||
|                         license = it.licenses.firstOrNull()?.htmlReadyLicenseContent.orEmpty(), | ||||
|                     ) | ||||
|                     navigator.push(libraryLicenseScreen) | ||||
|                 }, | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
		Reference in New Issue
	
	Block a user