Skip to content

Commit

Permalink
禁止中国大陆用户使用
Browse files Browse the repository at this point in the history
  • Loading branch information
aaa1115910 committed Jan 11, 2023
1 parent 1db8ef9 commit d15a825
Show file tree
Hide file tree
Showing 6 changed files with 203 additions and 51 deletions.
28 changes: 26 additions & 2 deletions app/src/main/kotlin/dev/aaa1115910/bv/activities/MainActivity.kt
Expand Up @@ -3,18 +3,42 @@ package dev.aaa1115910.bv.activities
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import dev.aaa1115910.bv.screen.HomeScreen
import dev.aaa1115910.bv.screen.RegionBlockScreen
import dev.aaa1115910.bv.ui.theme.BVTheme
import dev.aaa1115910.bv.util.NetworkUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

class MainActivity : ComponentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen()
var keepSplashScreen = true
installSplashScreen().apply {
setKeepOnScreenCondition { keepSplashScreen }
}
super.onCreate(savedInstanceState)

setContent {
val scope = rememberCoroutineScope()
var isMainlandChina by remember { mutableStateOf(false) }

LaunchedEffect(Unit) {
scope.launch(Dispatchers.Default) {
isMainlandChina = NetworkUtil.isMainlandChina()
keepSplashScreen = false
}
}

BVTheme {
HomeScreen()
if (isMainlandChina) RegionBlockScreen() else HomeScreen()
}
}
}
Expand Down
41 changes: 0 additions & 41 deletions app/src/main/kotlin/dev/aaa1115910/bv/component/Disclaimer.kt

This file was deleted.

129 changes: 129 additions & 0 deletions app/src/main/kotlin/dev/aaa1115910/bv/screen/RegionBlockScreen.kt
@@ -0,0 +1,129 @@
package dev.aaa1115910.bv.screen

import android.app.Activity
import android.graphics.BitmapFactory
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.ImageBitmapConfig
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import dev.aaa1115910.bv.R
import dev.aaa1115910.bv.ui.theme.BVTheme
import io.github.g0dkar.qrcode.QRCode
import io.github.g0dkar.qrcode.render.Colors
import okhttp3.internal.toHexString
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import kotlin.system.exitProcess

@Composable
fun RegionBlockScreen(
modifier: Modifier = Modifier
) {
val context = LocalContext.current
var qrImage by remember { mutableStateOf(ImageBitmap(1, 1, ImageBitmapConfig.Argb8888)) }
val primaryColorHex =
"#" + MaterialTheme.colorScheme.primary.toArgb().toHexString().substring(2)

LaunchedEffect(Unit) {
println(primaryColorHex)
val output = ByteArrayOutputStream()
QRCode("扫码也没有用的!")
.render(darkColor = Colors.css(primaryColorHex))
.writeImage(output)
val input = ByteArrayInputStream(output.toByteArray())
qrImage = BitmapFactory.decodeStream(input).asImageBitmap()
}

DisposableEffect(key1 = Unit) {
onDispose {
(context as Activity).finish()
exitProcess(0)
}
}

Surface(
modifier = modifier,
color = MaterialTheme.colorScheme.primary
) {
Box(
modifier = Modifier
.fillMaxSize()
.padding(84.dp),
contentAlignment = Alignment.CenterStart
) {
Column(
verticalArrangement = Arrangement.spacedBy(24.dp)
) {
Text(
text = stringResource(R.string.region_block_character_painting),
fontSize = 100.sp
)
Column {
Text(
text = stringResource(R.string.region_block_title),
style = MaterialTheme.typography.titleLarge
)
Text(
text = stringResource(R.string.region_block_subtitle),
style = MaterialTheme.typography.titleLarge
)
}
Row(
horizontalArrangement = Arrangement.spacedBy(12.dp)
) {
Box(
modifier = Modifier
.size(80.dp)
.background(Color.White),
contentAlignment = Alignment.Center
) {
Image(
modifier = Modifier.size(64.dp),
bitmap = qrImage,
contentDescription = null
)
}
Column {
Text(text = stringResource(R.string.region_block_solution_title))
Text(text = stringResource(R.string.region_block_solution_text))
}
}
}
}
}
}

@Preview(device = "id:tv_1080p")
@Composable
private fun RegionBlockScreenPreview() {
BVTheme {
RegionBlockScreen()
}
}
3 changes: 0 additions & 3 deletions app/src/main/kotlin/dev/aaa1115910/bv/ui/theme/Theme.kt
Expand Up @@ -22,7 +22,6 @@ import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
import androidx.core.view.WindowCompat
import dev.aaa1115910.bv.component.Disclaimer
import dev.aaa1115910.bv.component.FpsMonitor
import dev.aaa1115910.bv.util.Prefs

Expand Down Expand Up @@ -77,8 +76,6 @@ fun BVTheme(
} else {
content()
}

if (!view.isInEditMode) Disclaimer()
}
}
}
Expand Down
41 changes: 41 additions & 0 deletions app/src/main/kotlin/dev/aaa1115910/bv/util/NetworkUtil.kt
@@ -0,0 +1,41 @@
package dev.aaa1115910.bv.util

import io.ktor.client.HttpClient
import io.ktor.client.engine.okhttp.OkHttp
import io.ktor.client.request.get
import io.ktor.client.statement.bodyAsText
import mu.KotlinLogging

object NetworkUtil {
private lateinit var client: HttpClient
private const val LOC_CHECK_URL = "https://www.cloudflare.com/cdn-cgi/trace"
private val logger = KotlinLogging.logger { }
var networkCheckResult: Map<String, String> = emptyMap()

init {
createClient()
}

private fun createClient() {
client = HttpClient(OkHttp)
}

suspend fun isMainlandChina(): Boolean {
return runCatching {
val result = client.get(LOC_CHECK_URL).bodyAsText()
logger.info { "Network result:\n$result" }

networkCheckResult = result
.lines()
.filter { it!="" }
.associate {
val splits = it.split("=")
splits[0] to splits[1]
}

require(networkCheckResult["loc"] != "CN") { "BV doesn't support use in mainland China" }

false
}.getOrDefault(true)
}
}
12 changes: 7 additions & 5 deletions app/src/main/res/values/strings.xml
Expand Up @@ -8,9 +8,6 @@
<string name="date_format_just_now">刚刚</string>
<string name="date_format_minutes_age">%1$d 分钟前</string>

<string name="disclaimer_dialog_text">依据国家现行相关政策规定\n请确认在非互联网电视端使用</string>
<string name="disclaimer_dialog_title">注意了!</string>

<string name="exception_auth_failure">用户身份认证已失效,请重新登录</string>

<string name="load_data_count">已加载 %1$d 条数据</string>
Expand Down Expand Up @@ -38,6 +35,13 @@
<string name="player_controller_menu_item_subtitle_padding">字幕底部间距</string>
<string name="player_controller_menu_item_video_aspect_ratio">视频比例</string>
<string name="player_controller_menu_item_video_codec">视频编码</string>
<string name="player_tip_need_pay">请先购买影片再进行观看\n不支持试看</string>

<string name="region_block_character_painting">:(</string>
<string name="region_block_solution_text">不要在中国大陆地区使用该应用</string>
<string name="region_block_solution_title">该问题的解决方法就是:</string>
<string name="region_block_subtitle">您无法在中国大陆区域使用 Bug Video</string>
<string name="region_block_title">不支持的使用地区</string>

<string name="resolution_1080p">1080P 高清</string>
<string name="resolution_1080p_60">1080P60 高帧率</string>
Expand Down Expand Up @@ -88,8 +92,6 @@
<string name="settings_version_current_version">当前版本: %1$s</string>
<string name="settings_version_latest_version">最新版本: %1$s</string>

<string name="player_tip_need_pay">请先购买影片再进行观看\n不支持试看</string>

<string name="title_activity_favorite">个人收藏</string>
<string name="title_activity_history">历史记录</string>
<string name="title_activity_login">登录</string>
Expand Down

0 comments on commit d15a825

Please sign in to comment.