diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f8585bce..4b8ea885 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -123,7 +123,7 @@ android { licensee { Constants.allowedLicenses.forEach { allow(it) } - allowUrl(Constants.XZING_LICENSE_URL) + Constants.allowedLicenseUrls.forEach { allowUrl(it) } } applicationVariants.all { diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/mapper/GitHubReleaseMapper.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/mapper/GitHubReleaseMapper.kt index 2d42e74e..33674735 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/mapper/GitHubReleaseMapper.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/mapper/GitHubReleaseMapper.kt @@ -5,11 +5,11 @@ import com.zaneschepke.wireguardautotunnel.domain.model.AppUpdate import kotlin.collections.firstOrNull object GitHubReleaseMapper { - fun toAppUpdate(gitHubRelease: GitHubRelease): AppUpdate { + fun toAppUpdate(gitHubRelease: GitHubRelease, newVersion: String): AppUpdate { with(gitHubRelease) { val apkAsset = assets.firstOrNull { it.name.endsWith(".apk") } return AppUpdate( - version = tagName.removePrefix("v"), + version = newVersion, title = name ?: "Update $tagName", releaseNotes = body ?: "No release notes provided", apkUrl = apkAsset?.browserDownloadUrl, diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/repository/GitHubUpdateRepository.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/repository/GitHubUpdateRepository.kt index 14b404d2..0e3738a7 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/repository/GitHubUpdateRepository.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/data/repository/GitHubUpdateRepository.kt @@ -53,9 +53,9 @@ class GitHubUpdateRepository( Timber.i("Latest version: $newVersion, current version: $currentVersion") if (isNightly && newVersion != currentVersion) - return@map GitHubReleaseMapper.toAppUpdate(release) + return@map GitHubReleaseMapper.toAppUpdate(release, newVersion) if (NumberUtils.compareVersions(newVersion, currentVersion) > 0) { - GitHubReleaseMapper.toAppUpdate(release) + GitHubReleaseMapper.toAppUpdate(release, newVersion) } else { null } diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt index a96cef5f..6972f7f9 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/support/SupportScreen.kt @@ -12,6 +12,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.LinkAnnotation +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.TextLinkStyles +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.withLink import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -72,8 +78,41 @@ fun SupportScreen(viewModel: SupportViewModel = hiltViewModel(), appViewModel: A verticalArrangement = Arrangement.spacedBy(12.dp, Alignment.Top), modifier = Modifier.fillMaxWidth(), ) { - Text(uiState.appUpdate?.version ?: "") - Text(uiState.appUpdate?.releaseNotes ?: "") + val annotatedString = buildAnnotatedString { + append("${uiState.appUpdate?.version ?: ""}\n") + // Add clickable text for second line + withLink( + link = + LinkAnnotation.Clickable( + tag = stringResource(id = R.string.release_notes), + linkInteractionListener = { + val version = + if (BuildConfig.VERSION_NAME.contains("nightly")) { + "nightly" + } else { + uiState.appUpdate + ?.version + ?.removePrefix("v") + ?.trim() ?: "" + } + val url = "${Constants.BASE_RELEASE_URL}$version".trim() + context.openWebUrl(url) + }, + styles = + TextLinkStyles( + style = + SpanStyle( + color = MaterialTheme.colorScheme.primary, + textDecoration = TextDecoration.Underline, + ) + ), + ) + ) { + append(stringResource(R.string.release_notes)) + } + } + + Text(text = annotatedString) if (uiState.isLoading) { LinearProgressIndicator( progress = { uiState.downloadProgress }, diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/Constants.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/Constants.kt index 8fe85881..b1c204d8 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/Constants.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/util/Constants.kt @@ -38,4 +38,6 @@ object Constants { const val GOOGLE_PLAY_FLAVOR = "google" const val STANDALONE_FLAVOR = "standalone" const val RELEASE = "release" + + const val BASE_RELEASE_URL = "https://github.com/wgtunnel/wgtunnel/releases/tag/" } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1ce43ca2..67fc14bf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -279,4 +279,5 @@ Use Android\'s recommended method for getting Wi-Fi information, based on Android version + Release notes diff --git a/buildSrc/src/main/kotlin/Constants.kt b/buildSrc/src/main/kotlin/Constants.kt index 868a8ebc..c71b72e1 100644 --- a/buildSrc/src/main/kotlin/Constants.kt +++ b/buildSrc/src/main/kotlin/Constants.kt @@ -13,5 +13,5 @@ object Constants { const val PRERELEASE = "prerelease" val allowedLicenses = listOf("MIT", "Apache-2.0", "BSD-3-Clause") - const val XZING_LICENSE_URL: String = "https://github.com/journeyapps/zxing-android-embedded/blob/master/COPYING" + val allowedLicenseUrls = listOf("https://github.com/journeyapps/zxing-android-embedded/blob/master/COPYING") }