diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 465253c090f..32520942d5e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -144,10 +144,6 @@
android:name=".settings.NotificationSettingsActivity"
android:label="@string/notification_preferences_title"
android:theme="@style/AppTheme.ActionBar" />
-
+
-
-
-
-
-
-
+ android:name=".settings.LicenseActivity"/>
+
+
diff --git a/app/src/main/java/org/wikipedia/compose/components/HtmlText.kt b/app/src/main/java/org/wikipedia/compose/components/HtmlText.kt
new file mode 100644
index 00000000000..03fb6e9ca26
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/compose/components/HtmlText.kt
@@ -0,0 +1,39 @@
+package org.wikipedia.compose.components
+
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextLinkStyles
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.fromHtml
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
+import org.wikipedia.compose.theme.WikipediaTheme
+
+@Composable
+fun HtmlText(
+ html: String,
+ linkStyle: TextLinkStyles = TextLinkStyles(
+ style = SpanStyle(
+ color = WikipediaTheme.colors.progressiveColor,
+ fontSize = 14.sp
+ )
+ ),
+ normalStyle: TextStyle = TextStyle(
+ color = WikipediaTheme.colors.secondaryColor,
+ fontSize = 14.sp
+ ),
+ modifier: Modifier = Modifier
+) {
+ Text(
+ modifier = modifier,
+ text = AnnotatedString.fromHtml(
+ htmlString = html,
+ linkStyles = linkStyle
+ ),
+ style = normalStyle,
+ lineHeight = 1.6.em
+ )
+}
diff --git a/app/src/main/java/org/wikipedia/compose/components/LicenseLinkText.kt b/app/src/main/java/org/wikipedia/compose/components/LicenseLinkText.kt
new file mode 100644
index 00000000000..a01fa3c7dec
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/compose/components/LicenseLinkText.kt
@@ -0,0 +1,63 @@
+package org.wikipedia.compose.components
+
+import android.content.Intent
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalUriHandler
+import androidx.compose.ui.text.LinkAnnotation
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextLinkStyles
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.withLink
+import androidx.compose.ui.unit.em
+import org.wikipedia.compose.theme.WikipediaTheme
+import org.wikipedia.settings.LicenseActivity
+
+data class LinkTextData(
+ val text: String,
+ val url: String? = null,
+ val asset: String? = null,
+)
+
+@Composable
+fun LicenseLinkText(
+ links: List,
+ textStyle: TextStyle = WikipediaTheme.typography.small,
+ modifier: Modifier = Modifier
+) {
+ val context = LocalContext.current
+ val uriHandler = LocalUriHandler.current
+ val annotatedString = buildAnnotatedString {
+ links.forEach { linkTextData ->
+ withLink(
+ link = LinkAnnotation.Url(
+ url = linkTextData.url ?: "",
+ styles = TextLinkStyles(
+ style = SpanStyle(color = WikipediaTheme.colors.progressiveColor)
+ ),
+ linkInteractionListener = {
+ if (linkTextData.asset != null) {
+ val intent = Intent(context, LicenseActivity::class.java)
+ intent.putExtra(LicenseActivity.ASSET, linkTextData.asset)
+ context.startActivity(intent)
+ } else {
+ uriHandler.openUri(linkTextData.url ?: "")
+ }
+ }
+ )
+ ) {
+ append(linkTextData.text)
+ }
+ }
+ }
+
+ Text(
+ text = annotatedString,
+ modifier = modifier,
+ style = textStyle,
+ lineHeight = 1.6.em
+ )
+}
diff --git a/app/src/main/java/org/wikipedia/compose/components/WikiSnackbar.kt b/app/src/main/java/org/wikipedia/compose/components/WikiSnackbar.kt
index a59f9ac613a..db7770a5ae3 100644
--- a/app/src/main/java/org/wikipedia/compose/components/WikiSnackbar.kt
+++ b/app/src/main/java/org/wikipedia/compose/components/WikiSnackbar.kt
@@ -34,13 +34,15 @@ fun Snackbar(
}
}
},
- modifier = modifier.padding(16.dp)
+ modifier = modifier
+ .padding(horizontal = 16.dp, vertical = 8.dp),
+ containerColor = WikipediaTheme.colors.borderColor
) {
Text(
text = message,
style = WikipediaTheme.typography.h3.copy(
color = WikipediaTheme.colors.primaryColor,
- letterSpacing = 0.sp
+ letterSpacing = 0.sp,
),
maxLines = 10,
overflow = TextOverflow.Ellipsis,
diff --git a/app/src/main/java/org/wikipedia/compose/components/WikiTopAppBar.kt b/app/src/main/java/org/wikipedia/compose/components/WikiTopAppBar.kt
index 4e47d3f8942..c837d13450c 100644
--- a/app/src/main/java/org/wikipedia/compose/components/WikiTopAppBar.kt
+++ b/app/src/main/java/org/wikipedia/compose/components/WikiTopAppBar.kt
@@ -11,10 +11,12 @@ import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow
+import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import org.wikipedia.R
import org.wikipedia.compose.theme.WikipediaTheme
@OptIn(ExperimentalMaterial3Api::class)
@@ -41,7 +43,8 @@ fun WikiTopAppBar(
IconButton(onClick = onNavigationClick) {
Icon(
imageVector = navigationIcon,
- contentDescription = null
+ tint = WikipediaTheme.colors.primaryColor,
+ contentDescription = stringResource(R.string.back_button_content_description)
)
}
},
diff --git a/app/src/main/java/org/wikipedia/compose/theme/WikipediaTheme.kt b/app/src/main/java/org/wikipedia/compose/theme/WikipediaTheme.kt
index 5f700e87bd2..5e9fc3e7f47 100644
--- a/app/src/main/java/org/wikipedia/compose/theme/WikipediaTheme.kt
+++ b/app/src/main/java/org/wikipedia/compose/theme/WikipediaTheme.kt
@@ -1,24 +1,25 @@
package org.wikipedia.compose.theme
-import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
-
-enum class WikipediaThemeType {
- SYSTEM, LIGHT, DARK, BLACK, SEPIA
-}
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import org.wikipedia.WikipediaApp
+import org.wikipedia.theme.Theme
@Composable
fun BaseTheme(
- wikipediaThemeType: WikipediaThemeType = WikipediaThemeType.SYSTEM,
+ currentTheme: Theme = WikipediaApp.instance.currentTheme,
content: @Composable () -> Unit
) {
- val wikipediaColorSystem = when (wikipediaThemeType) {
- WikipediaThemeType.LIGHT -> LightColors
- WikipediaThemeType.DARK -> DarkColors
- WikipediaThemeType.BLACK -> BlackColors
- WikipediaThemeType.SEPIA -> SepiaColors
- WikipediaThemeType.SYSTEM -> if (isSystemInDarkTheme()) DarkColors else LightColors
+ val appTheme by remember { mutableStateOf(currentTheme) }
+
+ val wikipediaColorSystem = when (appTheme) {
+ Theme.LIGHT -> LightColors
+ Theme.DARK -> DarkColors
+ Theme.BLACK -> BlackColors
+ Theme.SEPIA -> SepiaColors
}
CompositionLocalProvider(
diff --git a/app/src/main/java/org/wikipedia/compose/theme/WikipediaTypography.kt b/app/src/main/java/org/wikipedia/compose/theme/WikipediaTypography.kt
index 9eb32d4a6a5..3b74454d517 100644
--- a/app/src/main/java/org/wikipedia/compose/theme/WikipediaTypography.kt
+++ b/app/src/main/java/org/wikipedia/compose/theme/WikipediaTypography.kt
@@ -41,7 +41,7 @@ val Typography = WikipediaTypography(
),
h3 = TextStyle(
fontFamily = FontFamily.SansSerif,
- fontWeight = FontWeight.Bold,
+ fontWeight = FontWeight.Medium,
fontSize = 16.sp,
lineHeight = 24.sp
),
diff --git a/app/src/main/java/org/wikipedia/settings/AboutActivity.kt b/app/src/main/java/org/wikipedia/settings/AboutActivity.kt
index f2334efdb3f..0ca6e74758e 100644
--- a/app/src/main/java/org/wikipedia/settings/AboutActivity.kt
+++ b/app/src/main/java/org/wikipedia/settings/AboutActivity.kt
@@ -1,54 +1,416 @@
package org.wikipedia.settings
-import android.app.Activity
+import android.content.Context
import android.os.Bundle
-import android.view.View
-import android.widget.TextView
-import androidx.core.text.method.LinkMovementMethodCompat
-import androidx.core.view.descendants
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.SnackbarDuration
+import androidx.compose.material3.SnackbarHost
+import androidx.compose.material3.SnackbarHostState
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextLinkStyles
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
import org.wikipedia.BuildConfig
import org.wikipedia.R
import org.wikipedia.activity.BaseActivity
-import org.wikipedia.databinding.ActivityAboutBinding
-import org.wikipedia.richtext.setHtml
-import org.wikipedia.util.FeedbackUtil
+import org.wikipedia.compose.components.HtmlText
+import org.wikipedia.compose.components.LicenseLinkText
+import org.wikipedia.compose.components.LinkTextData
+import org.wikipedia.compose.components.Snackbar
+import org.wikipedia.compose.components.WikiTopAppBar
+import org.wikipedia.compose.theme.BaseTheme
+import org.wikipedia.compose.theme.WikipediaTheme
class AboutActivity : BaseActivity() {
+ private val credits = listOf(
+ LinkTextData(
+ text = "Balloon ",
+ url = "https://github.com/skydoves/Balloon/blob/main/LICENSE/"
+ ),
+ LinkTextData(
+ text = "(license), ",
+ asset = "licenses/Balloon"
+ ),
+ LinkTextData(
+ text = "Commons Lang ",
+ url = "https://www.apache.org/licenses/"
+ ),
+ LinkTextData(
+ text = "(license), ",
+ asset = "licenses/CommonsLang3"
+ ),
+ LinkTextData(
+ text = "jsoup ",
+ url = "https://github.com/jhy/jsoup"
+ ),
+ LinkTextData(
+ text = "(license), ",
+ asset = "licenses/jsoup"
+ ),
+ LinkTextData(
+ text = "OkHttp ",
+ url = "https://square.github.io/okhttp/"
+ ),
+ LinkTextData(
+ text = "(license), ",
+ asset = "licenses/OkHttp"
+ ),
+ LinkTextData(
+ text = "Retrofit ",
+ url = "https://square.github.io/retrofit/"
+ ),
+ LinkTextData(
+ text = "(license)",
+ asset = "licenses/Retrofit"
+ )
+ )
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContent {
+ BaseTheme {
+ AboutWikipediaScreen(
+ modifier = Modifier
+ .fillMaxSize(),
+ versionName = BuildConfig.VERSION_NAME,
+ credits = credits,
+ onBackButtonClick = {
+ onBackPressed()
+ }
+ )
+ }
+ }
+ }
- private lateinit var binding: ActivityAboutBinding
+ companion object {
+ const val SECRET_CLICK_LIMIT = 7
+ }
+}
- public override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- binding = ActivityAboutBinding.inflate(layoutInflater)
- setContentView(binding.root)
- binding.aboutContributors.setHtml(getString(R.string.about_contributors))
- binding.aboutTranslators.setHtml(getString(R.string.about_translators_translatewiki))
- binding.aboutWmf.setHtml(getString(R.string.about_wmf))
- binding.aboutAppLicense.setHtml(getString(R.string.about_app_license))
- binding.activityAboutLibraries.setHtml(getString(R.string.libraries_list))
- binding.aboutVersionText.text = BuildConfig.VERSION_NAME
- binding.aboutLogoImage.setOnClickListener(AboutLogoClickListener())
- binding.aboutContainer.descendants.filterIsInstance().forEach {
- it.movementMethod = LinkMovementMethodCompat.getInstance()
+@Composable
+fun AboutWikipediaScreen(
+ modifier: Modifier = Modifier,
+ versionName: String,
+ credits: List,
+ onBackButtonClick: () -> Unit
+) {
+ val snackbarHostState = remember { SnackbarHostState() }
+ val scope = rememberCoroutineScope()
+ val context = LocalContext.current
+
+ Scaffold(
+ modifier = modifier,
+ snackbarHost = {
+ SnackbarHost(
+ hostState = snackbarHostState,
+ snackbar = {
+ Snackbar(
+ message = it.visuals.message
+ )
+ }
+ )
+ },
+ topBar = {
+ WikiTopAppBar(
+ title = stringResource(R.string.about_activity_title),
+ onNavigationClick = onBackButtonClick
+ )
+ },
+ containerColor = WikipediaTheme.colors.paperColor,
+ content = { paddingValues ->
+ AboutScreenContent(
+ modifier = Modifier
+ .padding(paddingValues),
+ versionName = versionName,
+ credits = credits,
+ snackbarHostState = snackbarHostState,
+ scope = scope,
+ context = context
+ )
}
+ )
+}
+
+@Composable
+fun AboutScreenContent(
+ modifier: Modifier = Modifier,
+ versionName: String,
+ credits: List,
+ snackbarHostState: SnackbarHostState,
+ scope: CoroutineScope,
+ context: Context
+) {
+ Column(
+ modifier = modifier
+ .verticalScroll(rememberScrollState()),
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ AboutWikipediaHeader(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(top = 30.dp, bottom = 16.dp),
+ versionName = versionName,
+ snackbarHostState = snackbarHostState,
+ scope = scope,
+ context = context
+ )
+ AboutScreenBody(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(top = 20.dp)
+ .padding(horizontal = 16.dp),
+ credits = credits
+ )
+ AboutScreenFooter(
+ modifier = Modifier
+ .padding(top = 24.dp, bottom = 16.dp)
+ )
}
+}
- private class AboutLogoClickListener : View.OnClickListener {
- private var secretClickCount = 0
- override fun onClick(v: View) {
- ++secretClickCount
- if (secretClickCount == SECRET_CLICK_LIMIT) {
- if (Prefs.isShowDeveloperSettingsEnabled) {
- FeedbackUtil.showMessage(v.context as Activity, R.string.show_developer_settings_already_enabled)
- } else {
- Prefs.isShowDeveloperSettingsEnabled = true
- FeedbackUtil.showMessage(v.context as Activity, R.string.show_developer_settings_enabled)
+@Composable
+fun AboutWikipediaHeader(
+ modifier: Modifier = Modifier,
+ versionName: String,
+ snackbarHostState: SnackbarHostState,
+ scope: CoroutineScope,
+ context: Context
+) {
+ Column(
+ modifier = modifier,
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ AboutWikipediaImage(
+ onSecretCountClick = { isEnabled ->
+ scope.launch {
+ when (isEnabled) {
+ true -> {
+ snackbarHostState.showSnackbar(
+ message = context.getString(R.string.show_developer_settings_already_enabled),
+ duration = SnackbarDuration.Short
+ )
+ }
+
+ false -> {
+ snackbarHostState.showSnackbar(
+ message = context.getString(R.string.show_developer_settings_enabled),
+ duration = SnackbarDuration.Short
+ )
+ }
+ }
}
}
- }
+ )
+ Text(
+ modifier = Modifier
+ .padding(vertical = 16.dp),
+ text = versionName,
+ fontSize = 14.sp,
+ color = WikipediaTheme.colors.primaryColor
+ )
+ }
+}
- companion object {
- private const val SECRET_CLICK_LIMIT = 7
- }
+@Composable
+fun AboutWikipediaImage(
+ modifier: Modifier = Modifier,
+ onSecretCountClick: (isEnabled: Boolean) -> Unit,
+) {
+ var secretClickCount by remember { mutableIntStateOf(0) }
+
+ Column(
+ modifier = modifier,
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ Image(
+ modifier = Modifier
+ .size(88.dp)
+ .clickable(
+ interactionSource = remember { MutableInteractionSource() },
+ indication = null,
+ onClick = {
+ secretClickCount++
+ if (secretClickCount == AboutActivity.SECRET_CLICK_LIMIT) {
+ if (Prefs.isShowDeveloperSettingsEnabled) {
+ onSecretCountClick(true)
+ } else {
+ Prefs.isShowDeveloperSettingsEnabled = true
+ onSecretCountClick(false)
+ }
+ }
+ },
+ ),
+ painter = painterResource(R.drawable.w_nav_mark),
+ contentDescription = stringResource(R.string.about_screen_logo_accessibility_text),
+ )
+ Image(
+ modifier = Modifier
+ .padding(top = 4.dp)
+ .size(
+ height = 22.dp,
+ width = 114.dp
+ ),
+ painter = painterResource(R.drawable.wp_wordmark),
+ colorFilter = ColorFilter.tint(color = WikipediaTheme.colors.primaryColor),
+ contentDescription = null,
+ )
+ }
+}
+
+@Composable
+fun AboutScreenBody(
+ modifier: Modifier = Modifier,
+ credits: List
+) {
+ Column(
+ modifier = modifier,
+ verticalArrangement = Arrangement.spacedBy(32.dp)
+ ) {
+ LinkTextWithHeader(
+ header = stringResource(R.string.about_contributors_heading),
+ html = stringResource(R.string.about_contributors)
+ )
+
+ LinkTextWithHeader(
+ header = stringResource(R.string.about_translators_heading),
+ html = stringResource(R.string.about_translators_translatewiki)
+ )
+
+ LicenseTextWithHeader(
+ header = stringResource(R.string.about_libraries_heading),
+ credits = credits,
+ textStyle = TextStyle(
+ fontSize = 14.sp
+ )
+ )
+
+ LinkTextWithHeader(
+ header = stringResource(R.string.about_app_license_heading),
+ html = stringResource(R.string.about_app_license)
+ )
+ }
+}
+
+@Composable
+fun AboutScreenFooter(
+ modifier: Modifier = Modifier
+) {
+ Column(
+ modifier = modifier,
+ verticalArrangement = Arrangement.spacedBy(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ Image(
+ modifier = Modifier
+ .size(24.dp),
+ painter = painterResource(R.drawable.ic_wmf_logo),
+ contentDescription = null,
+ colorFilter = ColorFilter.tint(color = WikipediaTheme.colors.placeholderColor)
+ )
+ HtmlText(
+ html = stringResource(R.string.about_wmf),
+ normalStyle = TextStyle(
+ color = WikipediaTheme.colors.secondaryColor,
+ fontSize = 12.sp
+ ),
+ linkStyle = TextLinkStyles(
+ style = SpanStyle(
+ color = WikipediaTheme.colors.progressiveColor,
+ fontSize = 12.sp,
+ )
+ )
+ )
+ }
+}
+
+@Composable
+fun LinkTextWithHeader(
+ modifier: Modifier = Modifier,
+ header: String,
+ html: String,
+ linkStyles: TextLinkStyles = TextLinkStyles(
+ style = SpanStyle(
+ color = WikipediaTheme.colors.progressiveColor
+ )
+ )
+) {
+ Column(
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ modifier = modifier
+ ) {
+ Text(
+ text = header,
+ fontSize = 16.sp,
+ color = WikipediaTheme.colors.primaryColor
+ )
+ HtmlText(
+ html = html,
+ linkStyle = linkStyles
+ )
+ }
+}
+
+@Composable
+fun LicenseTextWithHeader(
+ modifier: Modifier = Modifier,
+ header: String,
+ credits: List,
+ textStyle: TextStyle
+) {
+ Column(
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ modifier = modifier
+ ) {
+ Text(
+ text = header,
+ fontSize = 16.sp,
+ color = WikipediaTheme.colors.primaryColor
+ )
+ LicenseLinkText(
+ links = credits,
+ textStyle = textStyle
+ )
+ }
+}
+
+@Preview
+@Composable
+private fun AboutScreenPreview() {
+ BaseTheme {
+ AboutWikipediaScreen(
+ modifier = Modifier
+ .fillMaxSize(),
+ versionName = "version name",
+ credits = listOf(),
+ onBackButtonClick = {}
+ )
}
}
diff --git a/app/src/main/java/org/wikipedia/settings/LicenseActivity.kt b/app/src/main/java/org/wikipedia/settings/LicenseActivity.kt
index 59f51029478..797d017ba2a 100644
--- a/app/src/main/java/org/wikipedia/settings/LicenseActivity.kt
+++ b/app/src/main/java/org/wikipedia/settings/LicenseActivity.kt
@@ -1,35 +1,83 @@
package org.wikipedia.settings
import android.os.Bundle
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.fromHtml
+import androidx.compose.ui.unit.dp
import org.wikipedia.R
import org.wikipedia.activity.BaseActivity
-import org.wikipedia.databinding.ActivityLicenseBinding
+import org.wikipedia.compose.components.WikiTopAppBar
+import org.wikipedia.compose.theme.BaseTheme
+import org.wikipedia.compose.theme.WikipediaTheme
import org.wikipedia.util.FileUtil.readFile
-import org.wikipedia.util.ResourceUtil.getThemedColor
-import org.wikipedia.util.StringUtil
-import java.io.IOException
class LicenseActivity : BaseActivity() {
- private lateinit var binding: ActivityLicenseBinding
-
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = ActivityLicenseBinding.inflate(layoutInflater)
- setContentView(binding.root)
- setNavigationBarColor(getThemedColor(this, android.R.attr.windowBackground))
+ val asset = intent.getStringExtra(ASSET) ?: ""
+ val text = readFile(assets.open(asset))
+ val licenseText = text.replace("\n\n", "
")
+ val strings = asset.split("/")
+ val title = getString(R.string.license_title, strings[strings.size - 1].trim())
- val libraryNameStart = 24
- val path = (intent.data ?: return).path ?: return
- if (path.length > libraryNameStart) {
- // Example string: "/android_asset/licenses/Otto"
- title = getString(R.string.license_title, path.substring(libraryNameStart))
- try {
- val assetPathStart = 15
- val text = readFile(assets.open(path.substring(assetPathStart)))
- binding.licenseText.text = StringUtil.fromHtml(text.replace("\n\n", "
"))
- } catch (e: IOException) {
- e.printStackTrace()
+ setContent {
+ BaseTheme {
+ LicenseScreen(
+ modifier = Modifier
+ .fillMaxSize(),
+ title = title,
+ licenseText = licenseText,
+ onBackButtonClick = {
+ onBackPressed()
+ }
+ )
}
}
}
+
+ @Composable
+ fun LicenseScreen(
+ modifier: Modifier = Modifier,
+ title: String,
+ licenseText: String?,
+ onBackButtonClick: () -> Unit
+ ) {
+ Scaffold(
+ topBar = {
+ WikiTopAppBar(
+ title = title,
+ onNavigationClick = onBackButtonClick
+ )
+ },
+ containerColor = WikipediaTheme.colors.paperColor
+ ) { innerPadding ->
+ Column(
+ modifier = modifier
+ .verticalScroll(state = rememberScrollState())
+ .padding(innerPadding)
+ .padding(horizontal = 16.dp, vertical = 8.dp)
+ ) {
+ Text(
+ text = AnnotatedString.fromHtml(
+ htmlString = licenseText ?: ""
+ ),
+ color = WikipediaTheme.colors.primaryColor.copy(alpha = 0.6f)
+ )
+ }
+ }
+ }
+
+ companion object {
+ const val ASSET = "asset"
+ }
}
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
deleted file mode 100644
index 5dcc0e407ca..00000000000
--- a/app/src/main/res/layout/activity_about.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/activity_license.xml b/app/src/main/res/layout/activity_license.xml
deleted file mode 100644
index d50f1cce3f5..00000000000
--- a/app/src/main/res/layout/activity_license.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
\ No newline at end of file