Add Terms of Service and Privacy Policy

This commit is contained in:
Ash 2022-04-06 18:14:44 +08:00
parent aca2e9c41b
commit 4f7ebb7958
12 changed files with 350 additions and 62 deletions

View File

@ -0,0 +1,28 @@
# 服务条款与隐私政策
### 隐私政策
我非常重视您的隐私。**Read You** 不收集任何用户数据,所有敏感信息(密码和其他账户信息)都安全地存储在您设备上的本地应用数据库中。
**Read You** 将使用以下权限为您提供服务:
- 访问网络权限(用于访问您所指定的在线内容)
- 获取网络状态权限(用于获取当前设备是否拥有可用的网络条件)
- 后台服务权限(用于定时自动地为您同步已收藏的内容)
### 第三方服务
本政策不适用于您与 **Read You** 一起使用的第三方服务。您可以在所使用的第三方服务的网站上查阅相关的隐私政策。
### 免责声明
**Read You** 仅是一款内容收藏工具。您在使用 **Read You** 的过程中,应遵守所在国家和地区的法律法规,因您的行为所产生的一切责任将由您个人承担。
### 开源许可
**Read You** 是一个使用 GNU GPL 3.0 开源许可协议的开源项目 ①,允许您免费使用、引用、修改 **Read You** 的源代码,但不允许修改后和其衍生的代码作为闭源的商业软件进行发布和销售。具体细节请查看完整的 GNU GPL 3.0 开源许可协议 ②。
### 附录
1. [https://github.com/Ashinch/ReadYou](https://github.com/Ashinch/ReadYou)
2. [https://www.gnu.org/licenses/gpl-3.0.html](https://www.gnu.org/licenses/gpl-3.0.html)

View File

@ -0,0 +1,28 @@
# Terms of Service and Privacy Policy
### Privacy Policy
I take your privacy very seriously. **Read You** does not collect any user data, and all sensitive information (passwords and other account information) is securely stored in the local application database on your device.
**Read You** will use the following permissions to provide you with the service.
- Access Network permission (for accessing online content as you specify)
- Get network status permission (for getting whether the device currently has available network conditions)
- Background service permission (to automatically sync your favorites for you on a regular basis)
### Third Party Services
This policy does not apply to third-party services that you use with **Read You**. You can review the privacy policies of the third-party services you use on their websites.
### Disclaimers
**Read You** is a content collection tool only. Your use of **Read You** is subject to the laws and regulations of your country and region, and any liability arising from your actions will be borne by you personally.
### Open Source License
**Read You** is an open source project under the GNU GPL 3.0 Open Source License ①, which allows you to use, reference, and modify the source code of **Read You** for free, but does not allow the modified and derived code to be distributed and sold as closed-source commercial software. For details, please see the full GNU GPL 3.0 Open Source License ②.
### Appendix
1. [https://github.com/Ashinch/ReadYou](https://github.com/Ashinch/ReadYou)
2. [https://www.gnu.org/licenses/gpl-3.0.html](https://www.gnu.org/licenses/gpl-3.0.html)

View File

@ -13,8 +13,8 @@ android {
applicationId "me.ash.reader" applicationId "me.ash.reader"
minSdk 26 minSdk 26
targetSdk 32 targetSdk 32
versionCode 1 versionCode 2
versionName "0.6.1" versionName "0.6.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables { vectorDrawables {
@ -53,6 +53,7 @@ android {
} }
dependencies { dependencies {
implementation 'com.github.ireward:compose-html:1.0.2'
implementation 'be.ceau:opml-parser:2.2.0' implementation 'be.ceau:opml-parser:2.2.0'
implementation "androidx.profileinstaller:profileinstaller:1.2.0-alpha02" implementation "androidx.profileinstaller:profileinstaller:1.2.0-alpha02"
implementation("io.coil-kt:coil-compose:2.0.0-rc02") implementation("io.coil-kt:coil-compose:2.0.0-rc02")

View File

@ -11,8 +11,8 @@
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"attributes": [], "attributes": [],
"versionCode": 1, "versionCode": 2,
"versionName": "0.6.1", "versionName": "0.6.2",
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }
], ],

View File

@ -3,10 +3,7 @@ package me.ash.reader.ui.ext
import android.content.Context import android.content.Context
import android.util.Log import android.util.Log
import androidx.datastore.core.DataStore import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.*
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.emptyPreferences
import androidx.datastore.preferences.core.intPreferencesKey
import androidx.datastore.preferences.preferencesDataStore import androidx.datastore.preferences.preferencesDataStore
import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
@ -15,6 +12,8 @@ import kotlinx.coroutines.runBlocking
import java.io.IOException import java.io.IOException
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
val Context.isFirstLaunch: Boolean
get() = this.dataStore.get(DataStoreKeys.IsFirstLaunch) ?: true
val Context.currentAccountId: Int val Context.currentAccountId: Int
get() = this.dataStore.get(DataStoreKeys.CurrentAccountId)!! get() = this.dataStore.get(DataStoreKeys.CurrentAccountId)!!
val Context.currentAccountType: Int val Context.currentAccountType: Int
@ -46,6 +45,11 @@ fun <T> DataStore<Preferences>.get(dataStoreKeys: DataStoreKeys<T>): T? {
sealed class DataStoreKeys<T> { sealed class DataStoreKeys<T> {
abstract val key: Preferences.Key<T> abstract val key: Preferences.Key<T>
object IsFirstLaunch : DataStoreKeys<Boolean>() {
override val key: Preferences.Key<Boolean>
get() = booleanPreferencesKey("isFirstLaunch")
}
object CurrentAccountId : DataStoreKeys<Int>() { object CurrentAccountId : DataStoreKeys<Int>() {
override val key: Preferences.Key<Int> override val key: Preferences.Key<Int>
get() = intPreferencesKey("currentAccountId") get() = intPreferencesKey("currentAccountId")

View File

@ -11,6 +11,7 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import com.google.accompanist.insets.ProvideWindowInsets import com.google.accompanist.insets.ProvideWindowInsets
import com.google.accompanist.insets.navigationBarsHeight import com.google.accompanist.insets.navigationBarsHeight
import com.google.accompanist.insets.statusBarsPadding import com.google.accompanist.insets.statusBarsPadding
@ -18,13 +19,16 @@ import com.google.accompanist.navigation.animation.AnimatedNavHost
import com.google.accompanist.navigation.animation.rememberAnimatedNavController import com.google.accompanist.navigation.animation.rememberAnimatedNavController
import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.google.accompanist.systemuicontroller.rememberSystemUiController
import me.ash.reader.ui.ext.animatedComposable import me.ash.reader.ui.ext.animatedComposable
import me.ash.reader.ui.ext.isFirstLaunch
import me.ash.reader.ui.page.home.HomePage import me.ash.reader.ui.page.home.HomePage
import me.ash.reader.ui.page.settings.SettingsPage import me.ash.reader.ui.page.settings.SettingsPage
import me.ash.reader.ui.page.startup.StartupPage
import me.ash.reader.ui.theme.AppTheme import me.ash.reader.ui.theme.AppTheme
@OptIn(ExperimentalAnimationApi::class, androidx.compose.material.ExperimentalMaterialApi::class) @OptIn(ExperimentalAnimationApi::class, androidx.compose.material.ExperimentalMaterialApi::class)
@Composable @Composable
fun HomeEntry() { fun HomeEntry() {
val context = LocalContext.current
val navController = rememberAnimatedNavController() val navController = rememberAnimatedNavController()
AppTheme { AppTheme {
@ -42,8 +46,11 @@ fun HomeEntry() {
) { ) {
AnimatedNavHost( AnimatedNavHost(
navController = navController, navController = navController,
startDestination = RouteName.HOME, startDestination = if (context.isFirstLaunch) RouteName.STARTUP else RouteName.HOME,
) { ) {
animatedComposable(route = RouteName.STARTUP) {
StartupPage(navController)
}
animatedComposable(route = RouteName.HOME) { animatedComposable(route = RouteName.HOME) {
HomePage(navController) HomePage(navController)
} }

View File

@ -1,6 +1,7 @@
package me.ash.reader.ui.page.common package me.ash.reader.ui.page.common
object RouteName { object RouteName {
const val STARTUP = "startup"
const val HOME = "home" const val HOME = "home"
const val FEED = "feed" const val FEED = "feed"
const val ARTICLE = "article" const val ARTICLE = "article"

View File

@ -1,7 +1,8 @@
package me.ash.reader.ui.page.settings package me.ash.reader.ui.page.settings
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.* import androidx.compose.material.icons.outlined.*
@ -9,22 +10,15 @@ import androidx.compose.material.icons.rounded.ArrowBack
import androidx.compose.material.icons.rounded.Close import androidx.compose.material.icons.rounded.Close
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import me.ash.reader.R import me.ash.reader.R
import me.ash.reader.ui.component.Banner import me.ash.reader.ui.component.Banner
import me.ash.reader.ui.component.DisplayText import me.ash.reader.ui.component.DisplayText
import me.ash.reader.ui.component.FeedbackIconButton import me.ash.reader.ui.component.FeedbackIconButton
import me.ash.reader.ui.component.SelectableSettingGroupItem import me.ash.reader.ui.component.SelectableSettingGroupItem
import me.ash.reader.ui.ext.paddingFixedHorizontal
import me.ash.reader.ui.ext.roundClick
import me.ash.reader.ui.page.common.RouteName import me.ash.reader.ui.page.common.RouteName
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -108,48 +102,3 @@ fun SettingsPage(
} }
) )
} }
@Composable
fun SettingsItem(
title: String = "",
description: String = "",
imageVector: ImageVector,
) {
Row(modifier = Modifier
.fillMaxWidth()
.roundClick { }
) {
Row(
modifier = Modifier.paddingFixedHorizontal(top = 16.dp, bottom = 16.dp),
verticalAlignment = Alignment.CenterVertically
) {
Spacer(modifier = Modifier.width(4.dp))
Icon(
imageVector = imageVector,
contentDescription = title,
tint = MaterialTheme.colorScheme.onPrimaryContainer,
)
Spacer(modifier = Modifier.width(20.dp))
Column {
Text(
text = title,
fontSize = 20.sp,
color = MaterialTheme.colorScheme.onPrimaryContainer,
)
Text(
text = description,
color = MaterialTheme.colorScheme.outline,
)
}
}
}
}
@Preview
@Composable
fun SettingsPreview() {
Row(modifier = Modifier.background(MaterialTheme.colorScheme.surface)) {
SettingsPage(navController = NavHostController(LocalContext.current))
}
}

View File

@ -0,0 +1,137 @@
package me.ash.reader.ui.page.startup
import android.content.Intent
import android.net.Uri
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Info
import androidx.compose.material.icons.rounded.CheckCircleOutline
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
import com.ireward.htmlcompose.HtmlText
import kotlinx.coroutines.launch
import me.ash.reader.R
import me.ash.reader.ui.component.DisplayText
import me.ash.reader.ui.ext.DataStoreKeys
import me.ash.reader.ui.ext.dataStore
import me.ash.reader.ui.ext.put
import me.ash.reader.ui.page.common.RouteName
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun StartupPage(
navController: NavHostController,
) {
val context = LocalContext.current
val scope = rememberCoroutineScope()
Scaffold(
modifier = Modifier.background(MaterialTheme.colorScheme.surface),
topBar = {},
content = {
LazyColumn {
item {
Spacer(modifier = Modifier.height(64.dp))
DisplayText(text = stringResource(R.string.welcome), desc = "")
}
item {
Spacer(modifier = Modifier.height(16.dp))
Image(
modifier = Modifier.padding(horizontal = 16.dp),
painter = painterResource(id = R.drawable.welcome),
contentDescription = stringResource(R.string.welcome),
)
}
item {
TipsItem(
modifier = Modifier
.padding(horizontal = 24.dp)
.padding(top = 40.dp)
)
}
item {
Spacer(modifier = Modifier.height(10.dp))
TextButton(
modifier = Modifier.padding(horizontal = 12.dp),
onClick = {
context.let {
it.startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(it.getString(R.string.terms_link))
)
)
}
}
) {
HtmlText(
text = stringResource(R.string.view_terms),
style = MaterialTheme.typography.bodySmall.copy(
color = MaterialTheme.colorScheme.outline,
),
)
}
Spacer(modifier = Modifier.height(100.dp))
}
}
},
bottomBar = {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(24.dp),
horizontalArrangement = Arrangement.End,
verticalAlignment = Alignment.CenterVertically,
) {
ExtendedFloatingActionButton(
onClick = {
navController.navigate(route = RouteName.HOME)
scope.launch {
context.dataStore.put(DataStoreKeys.IsFirstLaunch, false)
}
},
icon = {
Icon(
Icons.Rounded.CheckCircleOutline,
stringResource(R.string.agree_and_continue)
)
},
text = { Text(text = stringResource(R.string.agree_and_continue)) },
)
}
}
)
}
@Composable
private fun TipsItem(
modifier: Modifier = Modifier,
) {
Column(
modifier = modifier
.fillMaxWidth()
) {
Icon(
imageVector = Icons.Outlined.Info,
contentDescription = stringResource(R.string.tips_and_support),
tint = MaterialTheme.colorScheme.onSurfaceVariant,
)
Spacer(modifier = Modifier.height(22.dp))
Text(
text = stringResource(R.string.agree_terms),
style = MaterialTheme.typography.titleSmall,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
}
}

View File

@ -0,0 +1,123 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="846.67004dp"
android:height="497.80338dp"
android:viewportWidth="846.67004"
android:viewportHeight="497.80338">
<path
android:pathData="M137.075,56.711a25.667,25.667 0,0 0,-25.638 25.638L111.437,361.073a25.667,25.667 0,0 0,25.638 25.638L714.8,386.711a25.667,25.667 0,0 0,25.638 -25.638L740.437,82.348A25.667,25.667 0,0 0,714.8 56.711Z"
android:fillColor="#fff"/>
<path
android:pathData="M714.8,387.711L137.075,387.711a26.668,26.668 0,0 1,-26.638 -26.638L110.437,82.348a26.668,26.668 0,0 1,26.638 -26.638L714.8,55.711a26.668,26.668 0,0 1,26.638 26.638L741.437,361.073A26.668,26.668 0,0 1,714.8 387.711ZM137.075,57.711a24.665,24.665 0,0 0,-24.638 24.638L112.437,361.073a24.665,24.665 0,0 0,24.638 24.638L714.8,385.711a24.665,24.665 0,0 0,24.638 -24.638L739.437,82.348A24.665,24.665 0,0 0,714.8 57.711Z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M295.953,373.817a2.028,7.745 92.272,1 0,0.161 -4.053a2.028,7.745 92.272,1 0,-0.161 4.053z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M345.256,371.206a2.028,7.745 92.272,1 0,0.161 -4.053a2.028,7.745 92.272,1 0,-0.161 4.053z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M277.01,358.605a2.028,7.745 92.272,1 0,0.161 -4.053a2.028,7.745 92.272,1 0,-0.161 4.053z"
android:fillColor="#ff6584"/>
<path
android:pathData="M257.387,352.746a1.821,3.446 96.502,1 0,0.412 -3.618a1.821,3.446 96.502,1 0,-0.412 3.618z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M246.009,341.093a1.821,3.446 96.502,1 0,0.412 -3.618a1.821,3.446 96.502,1 0,-0.412 3.618z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M310.31,360.935a1.821,3.446 96.502,1 0,0.412 -3.618a1.821,3.446 96.502,1 0,-0.412 3.618z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M287.746,365.894a1.821,3.446 96.502,1 0,0.412 -3.618a1.821,3.446 96.502,1 0,-0.412 3.618z"
android:fillColor="#ff6584"/>
<path
android:pathData="M324.243,373.881a1.821,3.446 96.502,1 0,0.412 -3.618a1.821,3.446 96.502,1 0,-0.412 3.618z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M0,331.112a1.186,1.186 0,0 0,1.19 1.19h844.29a1.19,1.19 0,0 0,0 -2.38L1.19,329.922A1.187,1.187 0,0 0,0 331.112Z"
android:fillColor="#ccc"/>
<path
android:pathData="M288.588,310.088a2.807,2.807 0,0 1,-2.035 -4.866l0.192,-0.765q-0.038,-0.092 -0.076,-0.184a7.539,7.539 0,0 0,-13.907 0.052c-2.275,5.478 -5.17,10.966 -5.883,16.758a22.303,22.303 0,0 0,0.392 7.671,89.419 89.419,0 0,1 -8.134,-37.139 86.307,86.307 0,0 1,0.535 -9.628q0.443,-3.931 1.231,-7.807A90.456,90.456 0,0 1,278.841 235.843a24.073,24.073 0,0 0,10.012 -10.387,18.362 18.362,0 0,0 1.67,-5.018c-0.487,0.064 -1.838,-7.359 -1.47,-7.815 -0.679,-1.031 -1.895,-1.543 -2.637,-2.549 -3.689,-5.002 -8.773,-4.129 -11.426,2.669 -5.669,2.861 -5.724,7.606 -2.245,12.169 2.213,2.903 2.517,6.832 4.459,9.94 -0.2,0.256 -0.408,0.503 -0.607,0.759a91.04,91.04 0,0 0,-9.502 15.054,37.846 37.846,0 0,0 -2.259,-17.579c-2.163,-5.217 -6.216,-9.611 -9.786,-14.122 -4.288,-5.418 -13.08,-3.053 -13.836,3.814q-0.011,0.1 -0.021,0.199 0.795,0.449 1.557,0.952a3.808,3.808 0,0 1,-1.535 6.93l-0.078,0.012a37.89,37.89 0,0 0,0.999 5.665c-4.579,17.71 5.307,24.16 19.424,24.45 0.312,0.16 0.615,0.32 0.927,0.471a92.925,92.925 0,0 0,-5.002 23.539,88.137 88.137,0 0,0 0.064,14.231l-0.024,-0.168a23.289,23.289 0,0 0,-7.95 -13.448c-6.118,-5.026 -14.762,-6.877 -21.363,-10.917a4.371,4.371 0,0 0,-6.694 4.252q0.013,0.088 0.027,0.176a25.581,25.581 0,0 1,2.868 1.382q0.795,0.449 1.557,0.952a3.808,3.808 0,0 1,-1.535 6.93l-0.078,0.012c-0.056,0.008 -0.104,0.016 -0.16,0.024a37.923,37.923 0,0 0,6.975 10.923c2.863,15.46 15.162,16.927 28.318,12.425h0.008a92.898,92.898 0,0 0,6.24 18.218h22.293c0.08,-0.248 0.152,-0.503 0.224,-0.751A25.329,25.329 0,0 1,282.085 328.874c1.654,-2.03 3.308,-4.075 4.962,-6.105a1.384,1.384 0,0 0,0.104 -0.12c0.839,-1.039 1.686,-2.069 2.525,-3.108l0,-0.001a37.101,37.101 0,0 0,-1.087 -9.451Z"
android:fillColor="#f2f2f2"/>
<path
android:pathData="M177.301,297.719a4.552,4.552 0,0 1,-3.299 -7.89c0.115,-0.456 0.197,-0.784 0.312,-1.24q-0.062,-0.149 -0.124,-0.298a12.224,12.224 0,0 0,-22.549 0.084c-3.688,8.882 -8.383,17.78 -9.54,27.171a36.164,36.164 0,0 0,0.635 12.437,144.987 144.987,0 0,1 -13.189,-60.218 139.941,139.941 0,0 1,0.868 -15.612q0.719,-6.374 1.995,-12.658a146.667,146.667 0,0 1,29.085 -62.161,39.032 39.032,0 0,0 16.233,-16.842 29.773,29.773 0,0 0,2.708 -8.136c-0.79,0.104 -2.98,-11.932 -2.384,-12.671 -1.101,-1.671 -3.073,-2.502 -4.275,-4.133 -5.982,-8.111 -14.224,-6.694 -18.527,4.327 -9.191,4.639 -9.28,12.332 -3.641,19.731 3.588,4.707 4.081,11.077 7.229,16.117 -0.324,0.415 -0.661,0.816 -0.985,1.231a147.615,147.615 0,0 0,-15.407 24.409,61.364 61.364,0 0,0 -3.664,-28.503c-3.507,-8.459 -10.079,-15.584 -15.867,-22.897 -6.952,-8.784 -21.209,-4.951 -22.434,6.185q-0.018,0.162 -0.035,0.323 1.29,0.727 2.525,1.544a6.174,6.174 0,0 1,-2.489 11.236l-0.126,0.019a61.435,61.435 0,0 0,1.619 9.186c-7.425,28.716 8.605,39.174 31.495,39.644 0.505,0.259 0.998,0.518 1.503,0.764a150.671,150.671 0,0 0,-8.11 38.167,142.905 142.905,0 0,0 0.104,23.074l-0.039,-0.272a37.762,37.762 0,0 0,-12.891 -21.804c-9.92,-8.149 -23.936,-11.15 -34.638,-17.7 -5.152,-3.153 -11.753,0.922 -10.854,6.894q0.022,0.143 0.044,0.286a41.475,41.475 0,0 1,4.651 2.241q1.29,0.728 2.525,1.544a6.175,6.175 0,0 1,-2.489 11.236l-0.126,0.019c-0.091,0.013 -0.168,0.026 -0.259,0.039a61.489,61.489 0,0 0,11.31 17.71c4.643,25.068 24.584,27.446 45.915,20.146h0.013A150.626,150.626 0,0 0,140.249 329.992h36.146c0.13,-0.402 0.246,-0.816 0.363,-1.218a41.069,41.069 0,0 1,-10.002 -0.596c2.682,-3.291 5.364,-6.608 8.045,-9.898a2.243,2.243 0,0 0,0.168 -0.194c1.36,-1.684 2.734,-3.355 4.094,-5.04l0.001,-0.002a60.157,60.157 0,0 0,-1.763 -15.325Z"
android:fillColor="#f2f2f2"/>
<path
android:pathData="M671.989,18.041c-2.427,-18.6 -45.329,-17.413 -49.38,0.086 -2.149,-1.344 -7.615,-0.414 -9.654,1.131s-3.345,3.816 -4.625,6.02c-1.746,3.062 -3.557,6.234 -3.943,9.744 -0.403,3.504 0.974,7.474 4.151,9.034 2.52,1.243 8.066,0.404 10.836,-0.153 1.933,-0.384 3.556,-0.721 4.933,-1.051a9.474,9.474 0,0 0,-0.902 -6.415A7.69,7.69 0,0 1,628.682 40.341c0.217,0.419 8.077,59.585 8.077,59.585a34.144,34.144 0,0 0,6.476 0.162,74.297 74.297,0 0,0 0.723,-22.077 64.334,64.334 0,0 1,5.369 13.249,78.653 78.653,0 0,1 1.822,7.82c18.706,-3.498 43.993,-15.546 48.606,-36.004q-0.038,-0.099 -0.076,-0.198a2.906,2.906 0,0 1,4.784 -3.107c0.564,0.58 1.067,1.077 1.491,1.461C704.315,48.168 694.405,36.412 671.989,18.041Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M398.857,473.567l-10.487,-5.483l16.63,-43.963l15.479,8.093l-21.622,41.353z"
android:fillColor="#a0616a"/>
<path
android:pathData="M356.54,473.037a5.298,5.298 0,0 0,2.236 7.142l20.853,10.901 7.472,-5.554 -2.479,8.159 7.865,4.119 11.649,-27.663 -2.656,-1.591L390.663,462.034l-3.494,-2.095 -3.924,7.505 -22.667,2.795A5.289,5.289 0,0 0,356.54 473.037Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M388.113,311.722l-7.628,-9.048l32.048,-34.384l11.258,13.354l-35.678,30.078z"
android:fillColor="#a0616a"/>
<path
android:pathData="M349.152,295.198a5.298,5.298 0,0 0,-0.637 7.456l15.168,17.989 9.019,-2.308 -5.386,6.611 5.718,6.792 21.262,-21.186 -1.855,-2.478 -7.542,-10.129 -2.439,-3.263 -6.475,5.459 -22.036,-6.002A5.289,5.289 0,0 0,349.152 295.198Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M724.532,277.818s32.386,69.319 -101.729,50.64c0,0 -71.454,-79.188 -69.39,-88.716 0,0 -30.412,-30.903 -28.924,-31.465s2.406,-1.785 -0.053,-1.674 -2.459,-3.549 -2.459,-3.549 -54.961,59.603 -101.24,89.18l-16,-18s6.24,-19.519 9.24,-19.519 4.034,0.721 4.517,-3.14 -1.906,-7.175 1.289,-7.518 69.402,-77.722 69.402,-77.722 7.143,-25.487 28.968,-20.554 135.23,97.134 135.23,97.134Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M669.918,330.704l-177.181,-1.47 -77,122L393.977,439.715l4.824,-2.036s-1.46,-16.956 0.329,-21.249 7.111,-3.001 7.111,-3.001l44.893,-103.529a43.435,43.435 0,0 1,44.694 -29.423c37.146,-5.417 97.446,-1.089 160.092,4.227Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M567.335,123.073a13.098,13.098 0,0 1,11.012 14.577,12.566 12.566,0 0,1 -0.46,2.026L614.294,167.292l-7.513,23.404 -45.783,-43.222a13.062,13.062 0,0 1,-8.074 -13.751,12.5 12.5,0 0,1 14.072,-10.7Q567.166,123.045 567.335,123.073Z"
android:fillColor="#a0616a"/>
<path
android:pathData="M727.948,124.797l-13.09,36.24 -51.19,72.34s-0.42,-0.18 -1.18,-0.5c-4.4,-1.9 -20.38,-8.88 -35.41,-16.81 -14.11,-7.45 -27.4,-15.74 -29.46,-21.44q-0.33,-0.9 -0.6,-1.74v-0.01a37.511,37.511 0,0 1,-1.79 -8.96c-0.17,-2.35 -0.02,-3.61 -0.34,-3.76 -0.25,-0.11 -0.77,0.43 -1.92,1.65 -0.08,0.08 -0.15,0.16 -0.23,0.23 -4.16,4.17 -9.27,3.63 -8.02,1.65 1.28,-2.03 0.61,-1.99 -1.27,-4.11 -1.4,-1.58 -5.95,-7.76 -8.19,-10.81 -0.77,-1.05 -1.26,-1.73 -1.26,-1.73l0.77,-1.21 2.13,-3.34 10.13,-15.88 0.56,-0.87s20.82,4.81 23.59,9.38c2.78,4.57 -4.19,4.42 2.78,4.57 6.97,0.15 14.08,-9.33 8.99,0.1 -5.09,9.42 -3.75,12.71 2.55,11.22 2.56,-0.61 6.61,1.32 10.51,3.82v0.01a82.532,82.532 0,0 1,7.05 5.13c2.41,1.94 4.04,3.41 4.04,3.41l39.54,-80.22 4.38,-8.88a22.668,22.668 0,0 1,13.26 -11.5l1.37,2.39A271.157,271.157 0,0 1,727.948 124.797Z"
android:fillColor="#c3e7ff"/>
<path
android:pathData="M730.138,239.817c12.12,2.82 -0.774,91.045 -15.22,91.32 -105,2 -73.03,-56.91 -78.66,-62.55 -5.63,-5.65 -10.71,-1.6 -5.63,-10.39 3.7,-6.4 9.19,-5.45 9.27,-9.04 0.04,-1.34 -0.67,-3.3 -2.51,-6.52 -6.76,-11.84 -6.76,-15.37 -6.76,-15.37a43.439,43.439 0,0 1,-3.55 -11.2,53.185 53.185,0 0,1 -0.4,-17.48 56.831,56.831 0,0 1,9.33 -23.75v-0.01c0.51,-0.76 1.04,-1.53 1.6,-2.29 1.27,-1.73 8.31,-1.4 8.31,-1.4l15,-63 -8.68,-25.12 41.11,-19.26 10.93,19.02 1.37,2.39a271.157,271.157 0,0 1,22.3 39.63c6.07,13.51 11.06,28.51 11.24,41.56 0.48,34.03 -5.39,44.15 -5.39,44.15s14.25,10.65 7.12,17.16C733.798,234.187 718.018,236.997 730.138,239.817Z"
android:fillColor="#c3e7ff"/>
<path
android:pathData="M543.898,114.785l-6.708,5.095a6.304,6.304 0,0 0,-1.192 8.819l16.155,21.234 9.539,12.527a6.293,6.293 0,0 0,8.804 1.19l6.715,-5.101a6.315,6.315 0,0 0,1.184 -8.812l-0.99,-1.309L557.837,122.715l-5.134,-6.74A6.28,6.28 0,0 0,543.898 114.785Z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M547.406,114.4l-7.226,5.041a5.387,5.387 0,0 0,-1.179 7.971l9.458,11.396 5.04,6.071 3.363,4.05 7.521,9.061a6.579,6.579 0,0 0,8.691 1.081l5.415,-3.777 1.802,-1.257a5.476,5.476 0,0 0,2.338 -5.598,5.4 5.4,0 0,0 -1.158,-2.39l-22.223,-26.779 -3.151,-3.79A6.57,6.57 0,0 0,547.406 114.4Z"
android:fillColor="#c3e7ff"/>
<path
android:pathData="M552.023,142.545A13.098,13.098 0,0 1,563.035 157.123a12.565,12.565 0,0 1,-0.46 2.026L598.982,186.764l-7.513,23.404 -45.783,-43.222a13.062,13.062 0,0 1,-8.074 -13.751,12.5 12.5,0 0,1 14.072,-10.7Q551.854,142.517 552.023,142.545Z"
android:fillColor="#a0616a"/>
<path
android:pathData="M700.508,101.59l0,0a22.618,22.618 0,0 1,16.761 29.844L699.55,180.507l-51.198,72.346S586.952,226.918 582.303,214.099s-0.451,-17.242 -4.649,-12.819 -9.521,3.899 -8.246,1.875 0.604,-1.981 -1.273,-4.102S558.687,186.512 558.687,186.512l13.588,-21.301s20.821,4.806 23.595,9.379 -4.198,4.423 2.774,4.573 14.084,-9.334 8.991,0.093 -3.75,12.714 2.551,11.22 21.595,12.374 21.595,12.374l43.929,-89.1A22.618,22.618 0,0 1,700.508 101.59Z"
android:fillColor="#c3e7ff"/>
<path
android:pathData="M651.263,49.004m-23.046,23.046a32.592,32.592 90,1 1,46.092 -46.092a32.592,32.592 90,1 1,-46.092 46.092"
android:fillColor="#a0616a"/>
<path
android:pathData="M689.375,13.498c-2.427,-18.6 -45.329,-17.413 -49.38,0.086 -2.149,-1.344 -7.615,-0.414 -9.654,1.131s-3.345,3.816 -4.625,6.02c-1.746,3.062 -13.967,13.421 -15.799,10.401 -4.121,-6.797 -12.203,8.056 -6,18 1.487,2.384 30.23,-1.443 33,-2 1.933,-0.384 -1.377,0.33 0,0 0.445,-2.157 4.935,-13.304 3.873,-15.242a7.69,7.69 0,0 1,5.277 3.903c0.217,0.419 8.077,59.585 8.077,59.585a34.144,34.144 0,0 0,6.476 0.162,74.297 74.297,0 0,0 0.723,-22.077 64.334,64.334 0,0 1,5.369 13.249,78.654 78.654,0 0,1 1.822,7.82c18.706,-3.498 43.993,-15.546 48.606,-36.004C691.918,50.137 711.791,31.87 689.375,13.498Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M395.857,111.078a5.257,7.557 98.278,1 0,1.514 -10.404a5.257,7.557 98.278,1 0,-1.514 10.404z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M445.029,106.28a5.257,7.557 98.278,1 0,1.514 -10.404a5.257,7.557 98.278,1 0,-1.514 10.404z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M382.392,71.27a5.257,7.557 98.278,1 0,1.514 -10.404a5.257,7.557 98.278,1 0,-1.514 10.404z"
android:fillColor="#ff6584"/>
<path
android:pathData="M365.903,55.601a4.776,3.322 90.433,1 0,0.072 -9.551a4.776,3.322 90.433,1 0,-0.072 9.551z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M358.657,25.229a4.776,3.322 90.433,1 0,0.072 -9.551a4.776,3.322 90.433,1 0,-0.072 9.551z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M415.002,78.681a4.776,3.322 90.433,1 0,0.072 -9.551a4.776,3.322 90.433,1 0,-0.072 9.551z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M391.24,90.545a4.776,3.322 90.433,1 0,0.072 -9.551a4.776,3.322 90.433,1 0,-0.072 9.551z"
android:fillColor="#ff6584"/>
<path
android:pathData="M424.318,112.473a4.776,3.322 90.433,1 0,0.072 -9.551a4.776,3.322 90.433,1 0,-0.072 9.551z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M538.923,134.315a2.5,1 54.441,1 0,1.627 -1.163a2.5,1 54.441,1 0,-1.627 1.163z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M535.923,130.315a2.5,1 54.441,1 0,1.627 -1.163a2.5,1 54.441,1 0,-1.627 1.163z"
android:fillColor="#3f3d56"/>
</vector>

View File

@ -77,4 +77,9 @@
<string name="languages_desc">英语、中文</string> <string name="languages_desc">英语、中文</string>
<string name="tips_and_support">提示和支持</string> <string name="tips_and_support">提示和支持</string>
<string name="tips_and_support_desc">关于、开源</string> <string name="tips_and_support_desc">关于、开源</string>
<string name="welcome">欢迎</string>
<string name="agree_terms">在此之前,您需要同意 Read You 的服务条款与隐私政策后才能继续。</string>
<string name="view_terms">查看《&lt;u&gt;服务条款与隐私政策&lt;/u&gt;</string>
<string name="terms_link">https://gitee.com/Ashinch/ReadYou/blob/main/TERMS_OF_SERVICE_AND_PRIVACY_POLICY-zh.md</string>
<string name="agree_and_continue">同意并继续</string>
</resources> </resources>

View File

@ -77,4 +77,9 @@
<string name="languages_desc">English, Chinese</string> <string name="languages_desc">English, Chinese</string>
<string name="tips_and_support">Tips &amp; support</string> <string name="tips_and_support">Tips &amp; support</string>
<string name="tips_and_support_desc">About, open source</string> <string name="tips_and_support_desc">About, open source</string>
<string name="welcome">Welcome</string>
<string name="agree_terms">Before you can continue, you need to agree to Read You\'s Terms of Service and Privacy Policy.</string>
<string name="view_terms">View the &lt;i&gt;&lt;u&gt;Terms of Service and Privacy Policy&lt;/u&gt;&lt;/i&gt;</string>
<string name="terms_link">https://github.com/Ashinch/ReadYou/blob/main/TERMS_OF_SERVICE_AND_PRIVACY_POLICY.md</string>
<string name="agree_and_continue">Agree and Continue</string>
</resources> </resources>