@momo-kits/native-kits 0.89.29 → 0.89.30-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Components.kt +2 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +8 -12
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +0 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +11 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +24 -13
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/ImageLoader.kt +26 -0
- package/package.json +1 -1
- package/android/build.gradle +0 -45
- package/android/proguard-rules.pro +0 -21
- package/android/src/main/AndroidManifest.xml +0 -4
- package/android/src/main/java/com/momoplatform/nativekits/foundations/Button.kt +0 -16
- package/android/src/main/java/com/momoplatform/nativekits/libs/Logo.kt +0 -63
- package/android/src/main/java/com/momoplatform/nativekits/libs/TrustBanner.kt +0 -246
- package/android/src/main/res/drawable/ic_launcher_background.xml +0 -170
- package/android/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -30
- package/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -6
- package/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -6
- package/android/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
- package/android/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
- package/android/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
- package/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
- package/android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- package/android/src/main/res/values/colors.xml +0 -10
- package/android/src/main/res/values/strings.xml +0 -3
- package/android/src/main/res/values/themes.xml +0 -3
- package/android/src/main/res/values-night/themes.xml +0 -3
- package/android/src/main/res/xml/backup_rules.xml +0 -13
- package/android/src/main/res/xml/data_extraction_rules.xml +0 -19
|
@@ -70,6 +70,7 @@ fun HeaderImage(
|
|
|
70
70
|
val height = statusBarHeight + 52.dp
|
|
71
71
|
Image(
|
|
72
72
|
source = headerBackground ?: "",
|
|
73
|
+
loading = false,
|
|
73
74
|
modifier = Modifier.fillMaxWidth().height(height),
|
|
74
75
|
options = Options(
|
|
75
76
|
contentScale = ContentScale.FillWidth
|
|
@@ -80,6 +81,7 @@ fun HeaderImage(
|
|
|
80
81
|
HeaderType.EXTENDED -> {
|
|
81
82
|
Image(
|
|
82
83
|
source = headerBackground ?: "",
|
|
84
|
+
loading = false,
|
|
83
85
|
modifier = Modifier.fillMaxWidth(),
|
|
84
86
|
options = Options(
|
|
85
87
|
contentScale = ContentScale.FillWidth
|
|
@@ -33,7 +33,6 @@ fun CheckBox(
|
|
|
33
33
|
var backgroundColor = AppTheme.current.colors.background.surface
|
|
34
34
|
val iconSource = if (indeterminate) "minus" else "ic_checked"
|
|
35
35
|
|
|
36
|
-
|
|
37
36
|
if (checked) {
|
|
38
37
|
borderColor = AppTheme.current.colors.primary
|
|
39
38
|
backgroundColor = AppTheme.current.colors.primary
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
package vn.momo.kits.components
|
|
2
2
|
|
|
3
|
-
import androidx.compose.foundation.layout.Box
|
|
4
|
-
import androidx.compose.foundation.layout.fillMaxSize
|
|
5
3
|
import androidx.compose.foundation.layout.size
|
|
6
4
|
import androidx.compose.runtime.Composable
|
|
7
|
-
import androidx.compose.ui.Alignment
|
|
8
5
|
import androidx.compose.ui.Modifier
|
|
9
6
|
import androidx.compose.ui.graphics.Color
|
|
10
7
|
import androidx.compose.ui.graphics.ColorFilter
|
|
11
8
|
import androidx.compose.ui.layout.ContentScale
|
|
12
9
|
import androidx.compose.ui.unit.Dp
|
|
13
10
|
import androidx.compose.ui.unit.dp
|
|
14
|
-
import coil3.compose.AsyncImage
|
|
15
11
|
import vn.momo.kits.const.AppTheme
|
|
16
12
|
import vn.momo.kits.utils.Icons
|
|
17
13
|
|
|
@@ -25,16 +21,16 @@ fun Icon(
|
|
|
25
21
|
val icon = if (source.contains("https")) {
|
|
26
22
|
source
|
|
27
23
|
} else {
|
|
28
|
-
Icons[source]
|
|
24
|
+
Icons[source] ?: ""
|
|
29
25
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
Image(
|
|
27
|
+
modifier = modifier.size(size),
|
|
28
|
+
source = icon,
|
|
29
|
+
loading = false,
|
|
30
|
+
options = Options(
|
|
35
31
|
contentScale = ContentScale.Fit,
|
|
36
32
|
colorFilter = color?.let { ColorFilter.tint(it) }
|
|
37
|
-
)
|
|
38
|
-
|
|
33
|
+
),
|
|
34
|
+
)
|
|
39
35
|
}
|
|
40
36
|
|
|
@@ -15,7 +15,6 @@ import androidx.compose.ui.layout.ContentScale
|
|
|
15
15
|
import androidx.compose.ui.semantics.contentDescription
|
|
16
16
|
import androidx.compose.ui.semantics.semantics
|
|
17
17
|
import androidx.compose.ui.semantics.testTag
|
|
18
|
-
import androidx.compose.ui.unit.dp
|
|
19
18
|
import coil3.compose.AsyncImage
|
|
20
19
|
import vn.momo.kits.const.AppTheme
|
|
21
20
|
|
|
@@ -123,7 +123,10 @@ fun TrustBanner(
|
|
|
123
123
|
modifier = Modifier
|
|
124
124
|
.width(64.dp)
|
|
125
125
|
.height(64.dp)
|
|
126
|
-
.padding(end = 8.dp)
|
|
126
|
+
.padding(end = 8.dp),
|
|
127
|
+
options = Options(
|
|
128
|
+
contentScale = ContentScale.Fit,
|
|
129
|
+
)
|
|
127
130
|
)
|
|
128
131
|
Column {
|
|
129
132
|
Text(
|
|
@@ -141,11 +144,17 @@ fun TrustBanner(
|
|
|
141
144
|
.padding(end = 4.dp)
|
|
142
145
|
.width(52.dp)
|
|
143
146
|
.height(20.dp)
|
|
147
|
+
,options = Options(
|
|
148
|
+
contentScale = ContentScale.Fit,
|
|
149
|
+
)
|
|
144
150
|
)
|
|
145
151
|
Image(
|
|
146
152
|
source = trustBanner.sslImage, modifier = Modifier
|
|
147
153
|
.width(52.dp)
|
|
148
|
-
.height(20.dp)
|
|
154
|
+
.height(20.dp),
|
|
155
|
+
options = Options(
|
|
156
|
+
contentScale = ContentScale.Fit,
|
|
157
|
+
)
|
|
149
158
|
)
|
|
150
159
|
}
|
|
151
160
|
Row(
|
|
@@ -27,10 +27,10 @@ fun scaleSize(size: Float): Float {
|
|
|
27
27
|
|
|
28
28
|
@OptIn(InternalResourceApi::class)
|
|
29
29
|
@Composable
|
|
30
|
-
fun getFont(font: String
|
|
30
|
+
fun getFont(font: String): FontFamily {
|
|
31
31
|
val fontResource = FontResource(
|
|
32
|
-
"font:${font}",
|
|
33
|
-
setOf(ResourceItem(setOf(), "font/${font}.${
|
|
32
|
+
"font:${font.substringBeforeLast(".")}",
|
|
33
|
+
setOf(ResourceItem(setOf(), "font/${font.substringBeforeLast(".")}.${font.substringAfterLast(".")}", -1, -1))
|
|
34
34
|
)
|
|
35
35
|
return FontFamily(Font(fontResource))
|
|
36
36
|
}
|
|
@@ -39,17 +39,28 @@ fun getFont(font: String, ext: String = "ttf"): FontFamily {
|
|
|
39
39
|
fun getFontFamily(fontFamily: String, fontWeight: FontWeight? = FontWeight.Normal): FontFamily {
|
|
40
40
|
val key = "$fontFamily-${fontWeight?.weight}"
|
|
41
41
|
val fontMap = mapOf(
|
|
42
|
-
"SFProText-100" to
|
|
43
|
-
"SFProText-200" to
|
|
44
|
-
"SFProText-300" to
|
|
45
|
-
"SFProText-400" to
|
|
46
|
-
"SFProText-500" to
|
|
47
|
-
"SFProText-600" to
|
|
48
|
-
"SFProText-700" to
|
|
49
|
-
"SFProText-800" to
|
|
50
|
-
"SFProText-900" to
|
|
42
|
+
"SFProText-100" to "sfprotext_thin.ttf",
|
|
43
|
+
"SFProText-200" to "sfprotext_ultralight.ttf",
|
|
44
|
+
"SFProText-300" to "sfprotext_light.ttf",
|
|
45
|
+
"SFProText-400" to "sfprotext_regular.ttf",
|
|
46
|
+
"SFProText-500" to "sfprotext_medium.ttf",
|
|
47
|
+
"SFProText-600" to "sfprotext_medium.ttf",
|
|
48
|
+
"SFProText-700" to "sfprotext_semibold.ttf",
|
|
49
|
+
"SFProText-800" to "sfprotext_bold.ttf",
|
|
50
|
+
"SFProText-900" to "sfprotext_heavy.ttf",
|
|
51
|
+
|
|
52
|
+
"MoMoSignature-100" to "momosignature.otf",
|
|
53
|
+
"MoMoSignature-200" to "momosignature.otf",
|
|
54
|
+
"MoMoSignature-300" to "momosignature.otf",
|
|
55
|
+
"MoMoSignature-400" to "momosignature.otf",
|
|
56
|
+
"MoMoSignature-500" to "momosignature.otf",
|
|
57
|
+
"MoMoSignature-600" to "momosignature.otf",
|
|
58
|
+
"MoMoSignature-700" to "momosignature.otf",
|
|
59
|
+
"MoMoSignature-800" to "momosignature.otf",
|
|
60
|
+
"MoMoSignature-900" to "momosignature.otf",
|
|
51
61
|
)
|
|
52
|
-
|
|
62
|
+
val font = fontMap[key] ?: "sfprotext_regular.ttf"
|
|
63
|
+
return getFont(font)
|
|
53
64
|
}
|
|
54
65
|
|
|
55
66
|
@Immutable
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
package vn.momo.kits.utils
|
|
2
|
+
|
|
3
|
+
import androidx.compose.runtime.Composable
|
|
4
|
+
import coil3.ImageLoader
|
|
5
|
+
import coil3.annotation.ExperimentalCoilApi
|
|
6
|
+
import coil3.compose.setSingletonImageLoaderFactory
|
|
7
|
+
import coil3.disk.DiskCache
|
|
8
|
+
import coil3.memory.MemoryCache
|
|
9
|
+
import coil3.request.CachePolicy
|
|
10
|
+
import coil3.request.crossfade
|
|
11
|
+
import okio.FileSystem
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@OptIn(ExperimentalCoilApi::class)
|
|
15
|
+
@Composable
|
|
16
|
+
fun setImageLoaderSingleton() {
|
|
17
|
+
setSingletonImageLoaderFactory { context ->
|
|
18
|
+
ImageLoader.Builder(context).memoryCachePolicy(CachePolicy.ENABLED).memoryCache {
|
|
19
|
+
MemoryCache.Builder().maxSizePercent(context, 0.3).strongReferencesEnabled(true).build()
|
|
20
|
+
}.diskCachePolicy(CachePolicy.ENABLED).networkCachePolicy(CachePolicy.ENABLED).diskCache {
|
|
21
|
+
DiskCache.Builder().directory(FileSystem.SYSTEM_TEMPORARY_DIRECTORY / "coil3_image_cache")
|
|
22
|
+
.maxSizeBytes(1024L * 1024 * 1024)
|
|
23
|
+
.build()
|
|
24
|
+
}.crossfade(false).build()
|
|
25
|
+
}
|
|
26
|
+
}
|
package/package.json
CHANGED
package/android/build.gradle
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
plugins {
|
|
2
|
-
id 'com.android.library'
|
|
3
|
-
id 'org.jetbrains.kotlin.android'
|
|
4
|
-
alias libs.plugins.kotlin.compose.compiler
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
android {
|
|
8
|
-
namespace 'com.momoplatform.nativekits'
|
|
9
|
-
compileSdk 34
|
|
10
|
-
|
|
11
|
-
defaultConfig {
|
|
12
|
-
minSdk 23
|
|
13
|
-
targetSdk 34
|
|
14
|
-
versionCode 1
|
|
15
|
-
versionName "1.0"
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
compileOptions {
|
|
19
|
-
sourceCompatibility JavaVersion.VERSION_1_8
|
|
20
|
-
targetCompatibility JavaVersion.VERSION_1_8
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
kotlinOptions {
|
|
24
|
-
jvmTarget = '1.8'
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
buildFeatures {
|
|
28
|
-
compose true
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
dependencies {
|
|
33
|
-
def composeBom = platform('androidx.compose:compose-bom:2023.10.01')
|
|
34
|
-
implementation composeBom
|
|
35
|
-
androidTestImplementation composeBom
|
|
36
|
-
implementation "androidx.compose.material3:material3"
|
|
37
|
-
implementation "androidx.compose.material:material:$rootProject.materialComposeVersion"
|
|
38
|
-
implementation "androidx.compose.foundation:foundation:$rootProject.composeVersion"
|
|
39
|
-
implementation "androidx.compose.ui:ui:$rootProject.composeVersion"
|
|
40
|
-
implementation "androidx.compose.ui:ui-tooling-preview:$rootProject.composeVersion"
|
|
41
|
-
debugImplementation "androidx.compose.ui:ui-tooling:$rootProject.composeVersion"
|
|
42
|
-
implementation("io.coil-kt:coil-compose:2.5.0")
|
|
43
|
-
implementation 'com.google.code.gson:gson:2.8.6'
|
|
44
|
-
|
|
45
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# Add project specific ProGuard rules here.
|
|
2
|
-
# You can control the set of applied configuration files using the
|
|
3
|
-
# proguardFiles setting in build.gradle.
|
|
4
|
-
#
|
|
5
|
-
# For more details, see
|
|
6
|
-
# http://developer.android.com/guide/developing/tools/proguard.html
|
|
7
|
-
|
|
8
|
-
# If your project uses WebView with JS, uncomment the following
|
|
9
|
-
# and specify the fully qualified class name to the JavaScript interface
|
|
10
|
-
# class:
|
|
11
|
-
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
|
12
|
-
# public *;
|
|
13
|
-
#}
|
|
14
|
-
|
|
15
|
-
# Uncomment this to preserve the line number information for
|
|
16
|
-
# debugging stack traces.
|
|
17
|
-
#-keepattributes SourceFile,LineNumberTable
|
|
18
|
-
|
|
19
|
-
# If you keep the line number information, uncomment this to
|
|
20
|
-
# hide the original source file name.
|
|
21
|
-
#-renamesourcefileattribute SourceFile
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
package com.momoplatform.nativekits.foundations
|
|
2
|
-
|
|
3
|
-
import androidx.compose.material3.Text
|
|
4
|
-
import androidx.compose.runtime.Composable
|
|
5
|
-
import androidx.compose.ui.tooling.preview.Preview
|
|
6
|
-
|
|
7
|
-
@Composable
|
|
8
|
-
fun Button (){
|
|
9
|
-
Text("Button")
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
@Preview
|
|
13
|
-
@Composable
|
|
14
|
-
fun ReviewButton (){
|
|
15
|
-
Button()
|
|
16
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
package com.momoplatform.nativekits.libs
|
|
2
|
-
|
|
3
|
-
import androidx.compose.foundation.background
|
|
4
|
-
import androidx.compose.foundation.border
|
|
5
|
-
import androidx.compose.foundation.layout.size
|
|
6
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
7
|
-
import androidx.compose.runtime.Composable
|
|
8
|
-
import androidx.compose.ui.Modifier
|
|
9
|
-
import androidx.compose.ui.draw.clip
|
|
10
|
-
import androidx.compose.ui.draw.shadow
|
|
11
|
-
import androidx.compose.ui.graphics.Color
|
|
12
|
-
import androidx.compose.ui.layout.ContentScale
|
|
13
|
-
import androidx.compose.ui.tooling.preview.Preview
|
|
14
|
-
import androidx.compose.ui.unit.dp
|
|
15
|
-
import coil.compose.AsyncImage
|
|
16
|
-
|
|
17
|
-
@Composable
|
|
18
|
-
fun Logo(
|
|
19
|
-
type: String = "image",
|
|
20
|
-
useShadow:Boolean = true,
|
|
21
|
-
useBorder:Boolean = true,
|
|
22
|
-
useBackground:Boolean = true,
|
|
23
|
-
backgroundColor: Color = Color(0xffd8d8d8),
|
|
24
|
-
shadowColor: Color = Color(0xffd8d8d8),
|
|
25
|
-
borderColor: Color = Color(0xffe2e2e2),
|
|
26
|
-
source: String = ""
|
|
27
|
-
) {
|
|
28
|
-
val radius = if (type == "image") 9.dp else 0.dp
|
|
29
|
-
|
|
30
|
-
var logoModifier = Modifier
|
|
31
|
-
.size(28.dp)
|
|
32
|
-
.clip(RoundedCornerShape(radius))
|
|
33
|
-
|
|
34
|
-
if (useBackground) {
|
|
35
|
-
logoModifier = logoModifier.background(color = backgroundColor)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
if (useBorder && type != "icon") {
|
|
39
|
-
logoModifier = logoModifier.border(width = 2.dp, color = borderColor, shape = RoundedCornerShape(9.dp))
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if (useShadow) {
|
|
43
|
-
logoModifier = logoModifier.shadow(2.dp, ambientColor = shadowColor)
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
AsyncImage(
|
|
47
|
-
model = source,
|
|
48
|
-
contentDescription = null,
|
|
49
|
-
modifier = logoModifier,
|
|
50
|
-
contentScale = ContentScale.Fit
|
|
51
|
-
)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
@Composable
|
|
55
|
-
@Preview
|
|
56
|
-
fun LogoPreview() {
|
|
57
|
-
Logo(
|
|
58
|
-
source = "https://static.momocdn.net/app/img/paylater/static/ic_service_vts_30kb.png",
|
|
59
|
-
useShadow = false,
|
|
60
|
-
shadowColor = Color.Green,
|
|
61
|
-
type = "icon"
|
|
62
|
-
)
|
|
63
|
-
}
|
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
package com.momoplatform.nativekits.libs
|
|
2
|
-
|
|
3
|
-
import androidx.compose.foundation.background
|
|
4
|
-
import androidx.compose.foundation.border
|
|
5
|
-
import androidx.compose.foundation.clickable
|
|
6
|
-
import androidx.compose.foundation.layout.Arrangement
|
|
7
|
-
import androidx.compose.foundation.layout.Column
|
|
8
|
-
import androidx.compose.foundation.layout.Row
|
|
9
|
-
import androidx.compose.foundation.layout.fillMaxWidth
|
|
10
|
-
import androidx.compose.foundation.layout.height
|
|
11
|
-
import androidx.compose.foundation.layout.padding
|
|
12
|
-
import androidx.compose.foundation.layout.size
|
|
13
|
-
import androidx.compose.foundation.layout.width
|
|
14
|
-
import androidx.compose.foundation.shape.CircleShape
|
|
15
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
16
|
-
import androidx.compose.material.Text
|
|
17
|
-
import androidx.compose.runtime.Composable
|
|
18
|
-
import androidx.compose.runtime.mutableStateOf
|
|
19
|
-
import androidx.compose.ui.Alignment
|
|
20
|
-
import androidx.compose.ui.Modifier
|
|
21
|
-
import androidx.compose.ui.draw.clip
|
|
22
|
-
import androidx.compose.ui.graphics.Color
|
|
23
|
-
import androidx.compose.ui.layout.ContentScale
|
|
24
|
-
import androidx.compose.ui.unit.dp
|
|
25
|
-
import androidx.compose.ui.unit.sp
|
|
26
|
-
import coil.compose.AsyncImage
|
|
27
|
-
import okhttp3.OkHttpClient
|
|
28
|
-
import okhttp3.Request
|
|
29
|
-
import kotlinx.coroutines.*
|
|
30
|
-
import androidx.compose.runtime.*
|
|
31
|
-
import com.google.gson.Gson
|
|
32
|
-
import com.google.gson.annotations.SerializedName
|
|
33
|
-
|
|
34
|
-
val defaultBanner = TrustBanner(
|
|
35
|
-
content = mapOf(
|
|
36
|
-
"vi" to "Bảo mật thông tin & An toàn tài sản của bạn là ưu tiên hàng đầu của MoMo.",
|
|
37
|
-
"en" to "Your data security and money safety are MoMo's top priorities."
|
|
38
|
-
),
|
|
39
|
-
pciImage = "https://static.momocdn.net/app/img/kits/trustBanner/pci.png",
|
|
40
|
-
sslImage = "https://static.momocdn.net/app/img/kits/trustBanner/ssl.png",
|
|
41
|
-
urlConfig = "https://momo.vn/an-toan-bao-mat",
|
|
42
|
-
featureCode = "login_and_security",
|
|
43
|
-
icons = listOf(
|
|
44
|
-
"https://static.momocdn.net/app/img/kits/trustBanner/ic_viettinbank.png",
|
|
45
|
-
"https://static.momocdn.net/app/img/kits/trustBanner/ic_agribank.png",
|
|
46
|
-
"https://static.momocdn.net/app/img/kits/trustBanner/ic_vietcombank.png",
|
|
47
|
-
"https://static.momocdn.net/app/img/kits/trustBanner/ic_bidv.png"
|
|
48
|
-
),
|
|
49
|
-
momoImage = "https://static.momocdn.net/app/img/kits/trustBanner/ic_momo_secu.png"
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
val defaultData = TrustBannerData(trustBanner = defaultBanner)
|
|
53
|
-
|
|
54
|
-
const val borderColor = 0xFFE8E8E8
|
|
55
|
-
const val tonalColor = 0xFFFDEAF4
|
|
56
|
-
const val backgroundBlue = 0xFFF2F8FF
|
|
57
|
-
const val contentColor = 0xFF484848
|
|
58
|
-
const val primaryColor = 0xFFEB2F96
|
|
59
|
-
const val jsonUrl = "https://static.momocdn.net/app/json/component-kits/design_system.json"
|
|
60
|
-
|
|
61
|
-
data class TrustBannerData(
|
|
62
|
-
val trustBanner: TrustBanner
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
data class TrustBanner (
|
|
66
|
-
val content: Map<String, String>,
|
|
67
|
-
|
|
68
|
-
val pciImage: String,
|
|
69
|
-
val sslImage: String,
|
|
70
|
-
val icons: List<String>,
|
|
71
|
-
val momoImage: String,
|
|
72
|
-
|
|
73
|
-
@SerializedName("url_config")
|
|
74
|
-
val urlConfig: String,
|
|
75
|
-
|
|
76
|
-
@SerializedName("feature_code")
|
|
77
|
-
val featureCode: String,
|
|
78
|
-
)
|
|
79
|
-
|
|
80
|
-
fun fetchJsonData(url: String, onFailure: (Exception) -> Unit) {
|
|
81
|
-
val client = OkHttpClient()
|
|
82
|
-
|
|
83
|
-
CoroutineScope(Dispatchers.IO).launch {
|
|
84
|
-
try {
|
|
85
|
-
val request = Request.Builder().url(url).build()
|
|
86
|
-
val response = client.newCall(request).execute()
|
|
87
|
-
|
|
88
|
-
if (!response.isSuccessful) {
|
|
89
|
-
onFailure(Exception("Unexpected code $response"))
|
|
90
|
-
} else {
|
|
91
|
-
response.body?.string()?.let { jsonString ->
|
|
92
|
-
withContext(Dispatchers.Main) {
|
|
93
|
-
Gson().fromJson(jsonString, TrustBannerData::class.java)
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
} catch (e: Exception) {
|
|
98
|
-
withContext(Dispatchers.Main) {
|
|
99
|
-
onFailure(e)
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
@Composable
|
|
106
|
-
fun Avatar(iconURL: String) {
|
|
107
|
-
AsyncImage(
|
|
108
|
-
model = iconURL,
|
|
109
|
-
contentDescription = null,
|
|
110
|
-
modifier = Modifier
|
|
111
|
-
.size(24.dp)
|
|
112
|
-
.background(Color.White, CircleShape)
|
|
113
|
-
.border(width = 1.dp, color = Color(borderColor), CircleShape),
|
|
114
|
-
contentScale = ContentScale.Fit
|
|
115
|
-
)
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
@Composable
|
|
119
|
-
fun TrustBannerView(serviceName: String = "", screenName: String = "",onPress: ((Map<String, String>)->Unit)?, trackEvent: ((String, Map<String, String>)->Unit)?, language: String = "vi") {
|
|
120
|
-
var trustBannerData by remember { mutableStateOf<TrustBannerData?>(defaultData) }
|
|
121
|
-
var error by remember { mutableStateOf<String?>(null) }
|
|
122
|
-
|
|
123
|
-
LaunchedEffect(Unit) {
|
|
124
|
-
if (trackEvent != null) {
|
|
125
|
-
trackEvent("service_component_displayed",mapOf(
|
|
126
|
-
"service_name" to serviceName,
|
|
127
|
-
"screen_name" to screenName,
|
|
128
|
-
"component_name" to "logo_trust"
|
|
129
|
-
))
|
|
130
|
-
}
|
|
131
|
-
fetchJsonData(
|
|
132
|
-
url = jsonUrl,
|
|
133
|
-
onFailure = { exception ->
|
|
134
|
-
error = exception.message
|
|
135
|
-
}
|
|
136
|
-
)
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
when {
|
|
140
|
-
trustBannerData != null -> {
|
|
141
|
-
if (onPress != null) {
|
|
142
|
-
TrustBannerContent(trustBannerData!!.trustBanner,serviceName, screenName,onPress,trackEvent,language)
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
@Composable
|
|
149
|
-
fun TrustBannerContent(
|
|
150
|
-
trustBanner: TrustBanner,
|
|
151
|
-
serviceName: String,
|
|
152
|
-
screenName: String,
|
|
153
|
-
onPress: ((Map<String, String>) -> Unit)?,
|
|
154
|
-
trackEvent: ((String,Map<String, String>) -> Unit)?,
|
|
155
|
-
language: String
|
|
156
|
-
) {
|
|
157
|
-
Row(
|
|
158
|
-
modifier = Modifier
|
|
159
|
-
.clip(RoundedCornerShape(12.dp))
|
|
160
|
-
.background(color = Color(backgroundBlue))
|
|
161
|
-
.padding(12.dp)
|
|
162
|
-
.clickable {
|
|
163
|
-
if (trackEvent != null) {
|
|
164
|
-
trackEvent("service_component_clicked",mapOf(
|
|
165
|
-
"service_name" to serviceName,
|
|
166
|
-
"screen_name" to screenName,
|
|
167
|
-
"component_name" to "logo_trust",
|
|
168
|
-
"url_config" to trustBanner.urlConfig
|
|
169
|
-
))
|
|
170
|
-
}
|
|
171
|
-
if (onPress != null) {
|
|
172
|
-
onPress(mapOf(
|
|
173
|
-
"service_name" to serviceName,
|
|
174
|
-
"screen_name" to screenName,
|
|
175
|
-
"url_config" to trustBanner.urlConfig,
|
|
176
|
-
"feature_code" to trustBanner.featureCode
|
|
177
|
-
))
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
) {
|
|
181
|
-
AsyncImage(
|
|
182
|
-
model = trustBanner.momoImage,
|
|
183
|
-
contentDescription = "Momo mascot",
|
|
184
|
-
modifier = Modifier
|
|
185
|
-
.width(64.dp)
|
|
186
|
-
.height(64.dp)
|
|
187
|
-
.padding(end = 8.dp)
|
|
188
|
-
)
|
|
189
|
-
Column {
|
|
190
|
-
Text(
|
|
191
|
-
text = trustBanner.content[language] ?: "",
|
|
192
|
-
modifier = Modifier.padding(bottom = 8.dp),
|
|
193
|
-
lineHeight = 16.sp,
|
|
194
|
-
fontSize = 12.sp,
|
|
195
|
-
color = Color(contentColor),
|
|
196
|
-
maxLines = 2
|
|
197
|
-
)
|
|
198
|
-
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) {
|
|
199
|
-
Row {
|
|
200
|
-
AsyncImage(
|
|
201
|
-
model = trustBanner.pciImage, contentDescription = "PCI image", modifier = Modifier
|
|
202
|
-
.padding(end = 4.dp)
|
|
203
|
-
.width(52.dp)
|
|
204
|
-
.height(20.dp)
|
|
205
|
-
)
|
|
206
|
-
AsyncImage(
|
|
207
|
-
model = trustBanner.sslImage, contentDescription = "PCI image", modifier = Modifier
|
|
208
|
-
.width(52.dp)
|
|
209
|
-
.height(20.dp)
|
|
210
|
-
)
|
|
211
|
-
}
|
|
212
|
-
Row(
|
|
213
|
-
modifier = Modifier
|
|
214
|
-
.width(96.dp)
|
|
215
|
-
.height(24.dp),
|
|
216
|
-
horizontalArrangement = Arrangement.spacedBy((-6).dp)
|
|
217
|
-
) {
|
|
218
|
-
trustBanner.icons.forEach { iconURL ->
|
|
219
|
-
Avatar(iconURL = iconURL)
|
|
220
|
-
}
|
|
221
|
-
Row(
|
|
222
|
-
modifier = Modifier
|
|
223
|
-
.size(24.dp)
|
|
224
|
-
.background(color = Color(tonalColor), CircleShape)
|
|
225
|
-
.border(width = 1.dp, color = Color(borderColor), CircleShape),
|
|
226
|
-
verticalAlignment = Alignment.CenterVertically,
|
|
227
|
-
horizontalArrangement = Arrangement.Center
|
|
228
|
-
) {
|
|
229
|
-
Text(
|
|
230
|
-
text = "36+",
|
|
231
|
-
color = Color(primaryColor),
|
|
232
|
-
lineHeight = 14.sp,
|
|
233
|
-
fontSize = 10.sp
|
|
234
|
-
)
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
//@Preview
|
|
243
|
-
//@Composable
|
|
244
|
-
//fun TrustBannerPreview() {
|
|
245
|
-
//// TrustBannerView()
|
|
246
|
-
//}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
-
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
-
android:width="108dp"
|
|
4
|
-
android:height="108dp"
|
|
5
|
-
android:viewportWidth="108"
|
|
6
|
-
android:viewportHeight="108">
|
|
7
|
-
<path
|
|
8
|
-
android:fillColor="#3DDC84"
|
|
9
|
-
android:pathData="M0,0h108v108h-108z" />
|
|
10
|
-
<path
|
|
11
|
-
android:fillColor="#00000000"
|
|
12
|
-
android:pathData="M9,0L9,108"
|
|
13
|
-
android:strokeWidth="0.8"
|
|
14
|
-
android:strokeColor="#33FFFFFF" />
|
|
15
|
-
<path
|
|
16
|
-
android:fillColor="#00000000"
|
|
17
|
-
android:pathData="M19,0L19,108"
|
|
18
|
-
android:strokeWidth="0.8"
|
|
19
|
-
android:strokeColor="#33FFFFFF" />
|
|
20
|
-
<path
|
|
21
|
-
android:fillColor="#00000000"
|
|
22
|
-
android:pathData="M29,0L29,108"
|
|
23
|
-
android:strokeWidth="0.8"
|
|
24
|
-
android:strokeColor="#33FFFFFF" />
|
|
25
|
-
<path
|
|
26
|
-
android:fillColor="#00000000"
|
|
27
|
-
android:pathData="M39,0L39,108"
|
|
28
|
-
android:strokeWidth="0.8"
|
|
29
|
-
android:strokeColor="#33FFFFFF" />
|
|
30
|
-
<path
|
|
31
|
-
android:fillColor="#00000000"
|
|
32
|
-
android:pathData="M49,0L49,108"
|
|
33
|
-
android:strokeWidth="0.8"
|
|
34
|
-
android:strokeColor="#33FFFFFF" />
|
|
35
|
-
<path
|
|
36
|
-
android:fillColor="#00000000"
|
|
37
|
-
android:pathData="M59,0L59,108"
|
|
38
|
-
android:strokeWidth="0.8"
|
|
39
|
-
android:strokeColor="#33FFFFFF" />
|
|
40
|
-
<path
|
|
41
|
-
android:fillColor="#00000000"
|
|
42
|
-
android:pathData="M69,0L69,108"
|
|
43
|
-
android:strokeWidth="0.8"
|
|
44
|
-
android:strokeColor="#33FFFFFF" />
|
|
45
|
-
<path
|
|
46
|
-
android:fillColor="#00000000"
|
|
47
|
-
android:pathData="M79,0L79,108"
|
|
48
|
-
android:strokeWidth="0.8"
|
|
49
|
-
android:strokeColor="#33FFFFFF" />
|
|
50
|
-
<path
|
|
51
|
-
android:fillColor="#00000000"
|
|
52
|
-
android:pathData="M89,0L89,108"
|
|
53
|
-
android:strokeWidth="0.8"
|
|
54
|
-
android:strokeColor="#33FFFFFF" />
|
|
55
|
-
<path
|
|
56
|
-
android:fillColor="#00000000"
|
|
57
|
-
android:pathData="M99,0L99,108"
|
|
58
|
-
android:strokeWidth="0.8"
|
|
59
|
-
android:strokeColor="#33FFFFFF" />
|
|
60
|
-
<path
|
|
61
|
-
android:fillColor="#00000000"
|
|
62
|
-
android:pathData="M0,9L108,9"
|
|
63
|
-
android:strokeWidth="0.8"
|
|
64
|
-
android:strokeColor="#33FFFFFF" />
|
|
65
|
-
<path
|
|
66
|
-
android:fillColor="#00000000"
|
|
67
|
-
android:pathData="M0,19L108,19"
|
|
68
|
-
android:strokeWidth="0.8"
|
|
69
|
-
android:strokeColor="#33FFFFFF" />
|
|
70
|
-
<path
|
|
71
|
-
android:fillColor="#00000000"
|
|
72
|
-
android:pathData="M0,29L108,29"
|
|
73
|
-
android:strokeWidth="0.8"
|
|
74
|
-
android:strokeColor="#33FFFFFF" />
|
|
75
|
-
<path
|
|
76
|
-
android:fillColor="#00000000"
|
|
77
|
-
android:pathData="M0,39L108,39"
|
|
78
|
-
android:strokeWidth="0.8"
|
|
79
|
-
android:strokeColor="#33FFFFFF" />
|
|
80
|
-
<path
|
|
81
|
-
android:fillColor="#00000000"
|
|
82
|
-
android:pathData="M0,49L108,49"
|
|
83
|
-
android:strokeWidth="0.8"
|
|
84
|
-
android:strokeColor="#33FFFFFF" />
|
|
85
|
-
<path
|
|
86
|
-
android:fillColor="#00000000"
|
|
87
|
-
android:pathData="M0,59L108,59"
|
|
88
|
-
android:strokeWidth="0.8"
|
|
89
|
-
android:strokeColor="#33FFFFFF" />
|
|
90
|
-
<path
|
|
91
|
-
android:fillColor="#00000000"
|
|
92
|
-
android:pathData="M0,69L108,69"
|
|
93
|
-
android:strokeWidth="0.8"
|
|
94
|
-
android:strokeColor="#33FFFFFF" />
|
|
95
|
-
<path
|
|
96
|
-
android:fillColor="#00000000"
|
|
97
|
-
android:pathData="M0,79L108,79"
|
|
98
|
-
android:strokeWidth="0.8"
|
|
99
|
-
android:strokeColor="#33FFFFFF" />
|
|
100
|
-
<path
|
|
101
|
-
android:fillColor="#00000000"
|
|
102
|
-
android:pathData="M0,89L108,89"
|
|
103
|
-
android:strokeWidth="0.8"
|
|
104
|
-
android:strokeColor="#33FFFFFF" />
|
|
105
|
-
<path
|
|
106
|
-
android:fillColor="#00000000"
|
|
107
|
-
android:pathData="M0,99L108,99"
|
|
108
|
-
android:strokeWidth="0.8"
|
|
109
|
-
android:strokeColor="#33FFFFFF" />
|
|
110
|
-
<path
|
|
111
|
-
android:fillColor="#00000000"
|
|
112
|
-
android:pathData="M19,29L89,29"
|
|
113
|
-
android:strokeWidth="0.8"
|
|
114
|
-
android:strokeColor="#33FFFFFF" />
|
|
115
|
-
<path
|
|
116
|
-
android:fillColor="#00000000"
|
|
117
|
-
android:pathData="M19,39L89,39"
|
|
118
|
-
android:strokeWidth="0.8"
|
|
119
|
-
android:strokeColor="#33FFFFFF" />
|
|
120
|
-
<path
|
|
121
|
-
android:fillColor="#00000000"
|
|
122
|
-
android:pathData="M19,49L89,49"
|
|
123
|
-
android:strokeWidth="0.8"
|
|
124
|
-
android:strokeColor="#33FFFFFF" />
|
|
125
|
-
<path
|
|
126
|
-
android:fillColor="#00000000"
|
|
127
|
-
android:pathData="M19,59L89,59"
|
|
128
|
-
android:strokeWidth="0.8"
|
|
129
|
-
android:strokeColor="#33FFFFFF" />
|
|
130
|
-
<path
|
|
131
|
-
android:fillColor="#00000000"
|
|
132
|
-
android:pathData="M19,69L89,69"
|
|
133
|
-
android:strokeWidth="0.8"
|
|
134
|
-
android:strokeColor="#33FFFFFF" />
|
|
135
|
-
<path
|
|
136
|
-
android:fillColor="#00000000"
|
|
137
|
-
android:pathData="M19,79L89,79"
|
|
138
|
-
android:strokeWidth="0.8"
|
|
139
|
-
android:strokeColor="#33FFFFFF" />
|
|
140
|
-
<path
|
|
141
|
-
android:fillColor="#00000000"
|
|
142
|
-
android:pathData="M29,19L29,89"
|
|
143
|
-
android:strokeWidth="0.8"
|
|
144
|
-
android:strokeColor="#33FFFFFF" />
|
|
145
|
-
<path
|
|
146
|
-
android:fillColor="#00000000"
|
|
147
|
-
android:pathData="M39,19L39,89"
|
|
148
|
-
android:strokeWidth="0.8"
|
|
149
|
-
android:strokeColor="#33FFFFFF" />
|
|
150
|
-
<path
|
|
151
|
-
android:fillColor="#00000000"
|
|
152
|
-
android:pathData="M49,19L49,89"
|
|
153
|
-
android:strokeWidth="0.8"
|
|
154
|
-
android:strokeColor="#33FFFFFF" />
|
|
155
|
-
<path
|
|
156
|
-
android:fillColor="#00000000"
|
|
157
|
-
android:pathData="M59,19L59,89"
|
|
158
|
-
android:strokeWidth="0.8"
|
|
159
|
-
android:strokeColor="#33FFFFFF" />
|
|
160
|
-
<path
|
|
161
|
-
android:fillColor="#00000000"
|
|
162
|
-
android:pathData="M69,19L69,89"
|
|
163
|
-
android:strokeWidth="0.8"
|
|
164
|
-
android:strokeColor="#33FFFFFF" />
|
|
165
|
-
<path
|
|
166
|
-
android:fillColor="#00000000"
|
|
167
|
-
android:pathData="M79,19L79,89"
|
|
168
|
-
android:strokeWidth="0.8"
|
|
169
|
-
android:strokeColor="#33FFFFFF" />
|
|
170
|
-
</vector>
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
-
xmlns:aapt="http://schemas.android.com/aapt"
|
|
3
|
-
android:width="108dp"
|
|
4
|
-
android:height="108dp"
|
|
5
|
-
android:viewportWidth="108"
|
|
6
|
-
android:viewportHeight="108">
|
|
7
|
-
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
|
|
8
|
-
<aapt:attr name="android:fillColor">
|
|
9
|
-
<gradient
|
|
10
|
-
android:endX="85.84757"
|
|
11
|
-
android:endY="92.4963"
|
|
12
|
-
android:startX="42.9492"
|
|
13
|
-
android:startY="49.59793"
|
|
14
|
-
android:type="linear">
|
|
15
|
-
<item
|
|
16
|
-
android:color="#44000000"
|
|
17
|
-
android:offset="0.0" />
|
|
18
|
-
<item
|
|
19
|
-
android:color="#00000000"
|
|
20
|
-
android:offset="1.0" />
|
|
21
|
-
</gradient>
|
|
22
|
-
</aapt:attr>
|
|
23
|
-
</path>
|
|
24
|
-
<path
|
|
25
|
-
android:fillColor="#FFFFFF"
|
|
26
|
-
android:fillType="nonZero"
|
|
27
|
-
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
|
|
28
|
-
android:strokeWidth="1"
|
|
29
|
-
android:strokeColor="#00000000" />
|
|
30
|
-
</vector>
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
-
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
3
|
-
<background android:drawable="@drawable/ic_launcher_background" />
|
|
4
|
-
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
|
5
|
-
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
|
6
|
-
</adaptive-icon>
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
-
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
3
|
-
<background android:drawable="@drawable/ic_launcher_background" />
|
|
4
|
-
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
|
5
|
-
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
|
6
|
-
</adaptive-icon>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
-
<resources>
|
|
3
|
-
<color name="purple_200">#FFBB86FC</color>
|
|
4
|
-
<color name="purple_500">#FF6200EE</color>
|
|
5
|
-
<color name="purple_700">#FF3700B3</color>
|
|
6
|
-
<color name="teal_200">#FF03DAC5</color>
|
|
7
|
-
<color name="teal_700">#FF018786</color>
|
|
8
|
-
<color name="black">#FF000000</color>
|
|
9
|
-
<color name="white">#FFFFFFFF</color>
|
|
10
|
-
</resources>
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?><!--
|
|
2
|
-
Sample backup rules file; uncomment and customize as necessary.
|
|
3
|
-
See https://developer.android.com/guide/topics/data/autobackup
|
|
4
|
-
for details.
|
|
5
|
-
Note: This file is ignored for devices older that API 31
|
|
6
|
-
See https://developer.android.com/about/versions/12/backup-restore
|
|
7
|
-
-->
|
|
8
|
-
<full-backup-content>
|
|
9
|
-
<!--
|
|
10
|
-
<include domain="sharedpref" path="."/>
|
|
11
|
-
<exclude domain="sharedpref" path="device.xml"/>
|
|
12
|
-
-->
|
|
13
|
-
</full-backup-content>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?><!--
|
|
2
|
-
Sample data extraction rules file; uncomment and customize as necessary.
|
|
3
|
-
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
|
|
4
|
-
for details.
|
|
5
|
-
-->
|
|
6
|
-
<data-extraction-rules>
|
|
7
|
-
<cloud-backup>
|
|
8
|
-
<!-- TODO: Use <include> and <exclude> to control what is backed up.
|
|
9
|
-
<include .../>
|
|
10
|
-
<exclude .../>
|
|
11
|
-
-->
|
|
12
|
-
</cloud-backup>
|
|
13
|
-
<!--
|
|
14
|
-
<device-transfer>
|
|
15
|
-
<include .../>
|
|
16
|
-
<exclude .../>
|
|
17
|
-
</device-transfer>
|
|
18
|
-
-->
|
|
19
|
-
</data-extraction-rules>
|