@@ -2,13 +2,26 @@ package app.revanced.manager.ui.component.bundle
22
33import android.webkit.URLUtil
44import androidx.compose.foundation.clickable
5- import androidx.compose.foundation.layout.*
5+ import androidx.compose.foundation.layout.Arrangement
6+ import androidx.compose.foundation.layout.Column
7+ import androidx.compose.foundation.layout.ColumnScope
8+ import androidx.compose.foundation.layout.Row
9+ import androidx.compose.foundation.layout.fillMaxWidth
10+ import androidx.compose.foundation.layout.padding
11+ import androidx.compose.foundation.layout.size
612import androidx.compose.material.icons.Icons
713import androidx.compose.material.icons.automirrored.outlined.ArrowRight
8- import androidx.compose.material.icons.outlined.Extension
9- import androidx.compose.material.icons.outlined.Inventory2
14+ import androidx.compose.material.icons.automirrored.outlined.Send
15+ import androidx.compose.material.icons.outlined.Commit
16+ import androidx.compose.material.icons.outlined.Description
17+ import androidx.compose.material.icons.outlined.Gavel
18+ import androidx.compose.material.icons.outlined.Language
19+ import androidx.compose.material.icons.outlined.Person
1020import androidx.compose.material.icons.outlined.Sell
11- import androidx.compose.material3.*
21+ import androidx.compose.material3.HorizontalDivider
22+ import androidx.compose.material3.Icon
23+ import androidx.compose.material3.MaterialTheme
24+ import androidx.compose.material3.Text
1225import androidx.compose.runtime.Composable
1326import androidx.compose.runtime.getValue
1427import androidx.compose.runtime.mutableStateOf
@@ -17,10 +30,11 @@ import androidx.compose.runtime.setValue
1730import androidx.compose.ui.Alignment
1831import androidx.compose.ui.Modifier
1932import androidx.compose.ui.graphics.vector.ImageVector
33+ import androidx.compose.ui.platform.LocalUriHandler
2034import androidx.compose.ui.res.stringResource
21- import androidx.compose.ui.text.font.FontWeight
2235import androidx.compose.ui.unit.dp
2336import app.revanced.manager.R
37+ import app.revanced.manager.patcher.patch.PatchBundleManifestAttributes
2438import app.revanced.manager.ui.component.ColumnWithScrollbar
2539import app.revanced.manager.ui.component.TextInputDialog
2640import app.revanced.manager.ui.component.haptics.HapticSwitch
@@ -29,12 +43,12 @@ import app.revanced.manager.ui.component.haptics.HapticSwitch
2943fun BaseBundleDialog (
3044 modifier : Modifier = Modifier ,
3145 isDefault : Boolean ,
32- name : String? ,
3346 remoteUrl : String? ,
3447 onRemoteUrlChange : ((String ) -> Unit )? = null,
3548 patchCount : Int ,
3649 version : String? ,
3750 autoUpdate : Boolean ,
51+ bundleManifestAttributes : PatchBundleManifestAttributes ? ,
3852 onAutoUpdateChange : (Boolean ) -> Unit ,
3953 onPatchesClick : () -> Unit ,
4054 extraFields : @Composable ColumnScope .() -> Unit = {}
@@ -48,35 +62,26 @@ fun BaseBundleDialog(
4862 modifier = Modifier .padding(16 .dp),
4963 verticalArrangement = Arrangement .spacedBy(4 .dp)
5064 ) {
51- Row (
52- modifier = Modifier .fillMaxWidth(),
53- horizontalArrangement = Arrangement .spacedBy(8 .dp, Alignment .Start ),
54- verticalAlignment = Alignment .CenterVertically
55- ) {
56- Icon (
57- imageVector = Icons .Outlined .Inventory2 ,
58- contentDescription = null ,
59- tint = MaterialTheme .colorScheme.primary,
60- modifier = Modifier .size(32 .dp)
61- )
62- name?.let {
63- Text (
64- text = it,
65- style = MaterialTheme .typography.titleLarge.copy(fontWeight = FontWeight (800 )),
66- color = MaterialTheme .colorScheme.primary,
67- )
68- }
65+ version?.let {
66+ Tag (Icons .Outlined .Sell , it)
6967 }
70- Row (
71- horizontalArrangement = Arrangement .spacedBy(16 .dp),
72- modifier = Modifier
73- .fillMaxWidth()
74- .padding(start = 2 .dp)
75- ) {
76- version?.let {
77- Tag (Icons .Outlined .Sell , it)
78- }
79- Tag (Icons .Outlined .Extension , patchCount.toString())
68+ bundleManifestAttributes?.description?.let {
69+ Tag (Icons .Outlined .Description , it)
70+ }
71+ bundleManifestAttributes?.source?.let {
72+ Tag (Icons .Outlined .Commit , it)
73+ }
74+ bundleManifestAttributes?.author?.let {
75+ Tag (Icons .Outlined .Person , it)
76+ }
77+ bundleManifestAttributes?.contact?.let {
78+ Tag (Icons .AutoMirrored .Outlined .Send , it)
79+ }
80+ bundleManifestAttributes?.website?.let {
81+ Tag (Icons .Outlined .Language , it, isUrl = true )
82+ }
83+ bundleManifestAttributes?.license?.let {
84+ Tag (Icons .Outlined .Gavel , it)
8085 }
8186 }
8287
@@ -138,8 +143,8 @@ fun BaseBundleDialog(
138143
139144 val patchesClickable = patchCount > 0
140145 BundleListItem (
141- headlineText = stringResource(R .string.patches ),
142- supportingText = stringResource(R .string.bundle_view_patches ),
146+ headlineText = stringResource(R .string.bundle_view_patches ),
147+ supportingText = stringResource(R .string.bundle_view_all_patches, patchCount ),
143148 modifier = Modifier .clickable(
144149 enabled = patchesClickable,
145150 onClick = onPatchesClick
@@ -160,22 +165,34 @@ fun BaseBundleDialog(
160165@Composable
161166private fun Tag (
162167 icon : ImageVector ,
163- text : String
168+ text : String ,
169+ isUrl : Boolean = false
164170) {
171+ val uriHandler = LocalUriHandler .current
172+
165173 Row (
166174 horizontalArrangement = Arrangement .spacedBy(6 .dp),
167- verticalAlignment = Alignment .CenterVertically
175+ verticalAlignment = Alignment .CenterVertically ,
176+ modifier = if (isUrl) {
177+ Modifier
178+ .clickable {
179+ try {
180+ uriHandler.openUri(text)
181+ } catch (_: Exception ) {}
182+ }
183+ }
184+ else
185+ Modifier ,
168186 ) {
169187 Icon (
170188 imageVector = icon,
171189 contentDescription = null ,
172- modifier = Modifier .size(16 .dp),
173- tint = MaterialTheme .colorScheme.outline,
190+ modifier = Modifier .size(16 .dp)
174191 )
175192 Text (
176193 text,
177194 style = MaterialTheme .typography.bodyMedium,
178- color = MaterialTheme .colorScheme.outline,
195+ color = if (isUrl) MaterialTheme .colorScheme.primary else MaterialTheme .colorScheme.outline,
179196 )
180197 }
181198}
0 commit comments