Skip to content

Commit 07ee778

Browse files
committed
added domain verification when sharing
1 parent 9e60f2d commit 07ee778

File tree

5 files changed

+92
-1
lines changed

5 files changed

+92
-1
lines changed

composeApp/src/androidMain/kotlin/dev/datlag/aniflow/ui/custom/share.android.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import androidx.compose.runtime.LaunchedEffect
77
import androidx.compose.runtime.remember
88
import androidx.compose.ui.platform.LocalContext
99
import androidx.core.content.ContextCompat
10+
import dev.datlag.aniflow.other.DomainVerifier
11+
import kotlinx.coroutines.flow.StateFlow
1012

1113
@Composable
1214
actual fun shareHandler(): ShareHandler {
@@ -19,6 +21,9 @@ actual fun shareHandler(): ShareHandler {
1921
actual class ShareHandler(
2022
private val context: Context
2123
) {
24+
actual val domainVerifier: StateFlow<Boolean> = DomainVerifier.verified
25+
actual val domainVerifierSupported: Boolean = DomainVerifier.supported
26+
2227
actual fun share(url: String?) {
2328
if (!url.isNullOrBlank()) {
2429
val intent = Intent(Intent.ACTION_SEND)
@@ -32,4 +37,12 @@ actual class ShareHandler(
3237
)
3338
}
3439
}
40+
41+
actual fun checkDomain() {
42+
DomainVerifier.verify(context)
43+
}
44+
45+
actual fun enableDomain() {
46+
DomainVerifier.enable(context)
47+
}
3548
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package dev.datlag.aniflow.ui.custom
22

33
import androidx.compose.runtime.Composable
4+
import kotlinx.coroutines.flow.StateFlow
45

56
@Composable
67
expect fun shareHandler(): ShareHandler
78

89
expect class ShareHandler {
10+
11+
val domainVerifier: StateFlow<Boolean>
12+
val domainVerifierSupported: Boolean
13+
914
fun share(url: String?)
15+
fun checkDomain()
16+
fun enableDomain()
1017
}

composeApp/src/commonMain/kotlin/dev/datlag/aniflow/ui/navigation/screen/medium/component/CollapsingToolbar.kt

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import androidx.compose.ui.graphics.Color
2525
import androidx.compose.ui.graphics.Shadow
2626
import androidx.compose.ui.layout.ContentScale
2727
import androidx.compose.ui.platform.LocalUriHandler
28+
import androidx.compose.ui.text.style.TextAlign
2829
import androidx.compose.ui.text.style.TextOverflow
2930
import androidx.compose.ui.unit.dp
3031
import coil3.compose.AsyncImage
@@ -33,6 +34,7 @@ import dev.chrisbanes.haze.hazeChild
3334
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
3435
import dev.chrisbanes.haze.materials.HazeMaterials
3536
import dev.datlag.aniflow.LocalHaze
37+
import dev.datlag.aniflow.SharedRes
3638
import dev.datlag.aniflow.anilist.MediumRepository
3739
import dev.datlag.aniflow.anilist.model.Medium
3840
import dev.datlag.aniflow.common.notPreferred
@@ -44,6 +46,7 @@ import dev.datlag.aniflow.ui.navigation.screen.medium.MediumComponent
4446
import dev.datlag.tooling.compose.ifFalse
4547
import dev.datlag.tooling.compose.ifTrue
4648
import dev.datlag.tooling.decompose.lifecycle.collectAsStateWithLifecycle
49+
import dev.icerock.moko.resources.compose.stringResource
4750
import kotlinx.coroutines.flow.Flow
4851
import kotlinx.coroutines.flow.StateFlow
4952
import kotlin.math.max
@@ -167,6 +170,54 @@ fun CollapsingToolbar(
167170
val siteUrl by component.siteUrl.collectAsStateWithLifecycle(component.initialMedium.siteUrl)
168171
val shareHandler = shareHandler()
169172
val instantAppHelper = rememberInstantAppHelper()
173+
var showDomainDialog by remember { mutableStateOf(false) }
174+
175+
SideEffect {
176+
shareHandler.checkDomain()
177+
}
178+
179+
if (showDomainDialog) {
180+
AlertDialog(
181+
onDismissRequest = {
182+
showDomainDialog = false
183+
},
184+
icon = {
185+
Icon(
186+
imageVector = Icons.Rounded.Share,
187+
contentDescription = null
188+
)
189+
},
190+
title = {
191+
Text(text = stringResource(SharedRes.strings.share_domain_title))
192+
},
193+
text = {
194+
Text(
195+
text = stringResource(SharedRes.strings.share_domain_text),
196+
textAlign = TextAlign.Center
197+
)
198+
},
199+
confirmButton = {
200+
TextButton(
201+
onClick = {
202+
showDomainDialog = false
203+
shareHandler.enableDomain()
204+
}
205+
) {
206+
Text(text = stringResource(SharedRes.strings.enable))
207+
}
208+
},
209+
dismissButton = {
210+
TextButton(
211+
onClick = {
212+
showDomainDialog = false
213+
shareHandler.share(siteUrl)
214+
}
215+
) {
216+
Text(text = stringResource(SharedRes.strings.ignore))
217+
}
218+
}
219+
)
220+
}
170221

171222
AnimatedVisibility(
172223
visible = mediumState is MediumRepository.State.Success && !instantAppHelper.isInstantApp,
@@ -205,9 +256,21 @@ fun CollapsingToolbar(
205256
enter = fadeIn(),
206257
exit = fadeOut()
207258
) {
259+
val domainVerified by shareHandler.domainVerifier.collectAsStateWithLifecycle()
260+
208261
IconButton(
209262
onClick = {
210-
shareHandler.share(siteUrl)
263+
shareHandler.checkDomain()
264+
265+
if (shareHandler.domainVerifierSupported) {
266+
if (domainVerified) {
267+
shareHandler.share(siteUrl)
268+
} else {
269+
showDomainDialog = true
270+
}
271+
} else {
272+
shareHandler.share(siteUrl)
273+
}
211274
}
212275
) {
213276
Icon(

composeApp/src/commonMain/moko-resources/base/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,8 @@
119119
<string name="recommendation">Recommendation</string>
120120
<string name="bs_version_requirement">This feature will be supported with Burning-Series version 6.0.0 and upwards.</string>
121121
<string name="nothing_on_list">You have nothing on your list, either change the filter or add any Anime/Manga.</string>
122+
<string name="enable">Enable</string>
123+
<string name="ignore">Ignore</string>
124+
<string name="share_domain_title">Enable In-App View</string>
125+
<string name="share_domain_text">When enabling this option you can view future shared links directly in this app.</string>
122126
</resources>

composeApp/src/commonMain/moko-resources/de-DE/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,8 @@
119119
<string name="recommendation">Empfehlung</string>
120120
<string name="bs_version_requirement">Diese Option wird mit Burning-Series Version 6.0.0 und höher unterstützt.</string>
121121
<string name="nothing_on_list">Du hast nichts auf deiner Liste, ändere den Filter oder füge einen Anime/Manga hinzu.</string>
122+
<string name="enable">Aktivieren</string>
123+
<string name="ignore">Ignorieren</string>
124+
<string name="share_domain_title">In-App Ansicht aktivieren</string>
125+
<string name="share_domain_text">Wenn du diese Option einschaltest kannst du in Zukunft Links direkt in der App öffnen.</string>
122126
</resources>

0 commit comments

Comments
 (0)