Skip to content

Commit a5d2eab

Browse files
authored
Onboarding Design Experiment: Add experiment versions of DDG Subscription dialog (#6547)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1207908166761516/task/1210965470751808 ### Description Adds experiment versions of the subscription dialog which shows after the "end" dialog if a user is eligible [Buck Designs](https://www.figma.com/design/NCyBEIuKxRHEC46R6ymVBe/Buck---Testing?node-id=2665-122725&t=ugqUmVhpvWBUE5hR-4) [BB Designs](https://www.figma.com/design/wpKz0JEWuM8FSFDRHKBEf1/B-B---Testing?node-id=22589-20478&t=vuemf27pnIn4gfmb-4) ### Steps to test this PR Buck Apply patch ``` Index: app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentToggles.kt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentToggles.kt b/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentToggles.kt --- a/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentToggles.kt (revision 3dfd941) +++ b/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentToggles.kt (date 1754577526616) @@ -49,7 +49,7 @@ * Toggle for enabling or disabling the "buckOnboarding" design experiment. * Default value: false (disabled). */ - @Toggle.DefaultValue(DefaultFeatureValue.FALSE) + @Toggle.DefaultValue(DefaultFeatureValue.TRUE) fun buckOnboarding(): Toggle /** ``` - [x] Install on a device with Google Play Store, clear data - [x] Run through onboarding happy path - [x] After the final dialog a new Buck version should appear - [x] Check dismiss and primary CTA work BB Apply patch ``` Index: app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentToggles.kt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentToggles.kt b/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentToggles.kt --- a/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentToggles.kt (revision 3dfd941) +++ b/app/src/main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentToggles.kt (date 1754577583889) @@ -56,6 +56,6 @@ * Toggle for enabling or disabling the "bbOnboarding" design experiment. * Default value: false (disabled). */ - @Toggle.DefaultValue(DefaultFeatureValue.FALSE) + @Toggle.DefaultValue(DefaultFeatureValue.TRUE) fun bbOnboarding(): Toggle } ``` - [x] Install on a device with Google Play Store, clear data - [x] Run through onboarding happy path - [x] After the final dialog a new BB version should appear - [x] Check dismiss and primary CTA work ### UI changes Buck demo https://github.com/user-attachments/assets/a64970f1-33a1-4149-afbc-def192dd7f1e BB Demo https://github.com/user-attachments/assets/c955ac3e-14dc-4e30-a65e-c6b73b30b7cb
1 parent 7ef8adc commit a5d2eab

File tree

8 files changed

+169
-25
lines changed

8 files changed

+169
-25
lines changed

app/src/androidTest/java/com/duckduckgo/app/cta/ui/CtaViewModelTest.kt

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -882,7 +882,6 @@ class CtaViewModelTest {
882882
whenever(mockSubscriptions.isEligible()).thenReturn(true)
883883
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockEnabledToggle)
884884
whenever(mockExtendedOnboardingFeatureToggles.privacyProCta()).thenReturn(mockEnabledToggle)
885-
whenever(mockOnboardingDesignExperimentManager.isAnyExperimentEnrolledAndEnabled()).thenReturn(false)
886885
whenever(mockExtendedOnboardingFeatureToggles.freeTrialCopy()).thenReturn(mockDisabledToggle)
887886
whenever(mockDismissedCtaDao.exists(CtaId.DAX_INTRO)).thenReturn(true)
888887
whenever(mockDismissedCtaDao.exists(CtaId.DAX_INTRO_VISIT_SITE)).thenReturn(true)
@@ -893,24 +892,6 @@ class CtaViewModelTest {
893892
assertTrue(value is DaxBubbleCta.DaxPrivacyProCta)
894893
}
895894

896-
@Test
897-
fun givenPrivacyProCtaExperimentWhenRefreshCtaOnHomeTabAndExperimentEnabledThenDoNotReturnPrivacyProCta() = runTest {
898-
givenDaxOnboardingActive()
899-
whenever(mockOnboardingDesignExperimentManager.isAnyExperimentEnrolledAndEnabled()).thenReturn(true)
900-
whenever(mockOnboardingHomeScreenWidgetExperiment.isOnboardingHomeScreenWidgetExperiment()).thenReturn(false)
901-
whenever(mockExtendedOnboardingFeatureToggles.freeTrialCopy()).thenReturn(mockDisabledToggle)
902-
whenever(mockSubscriptions.isEligible()).thenReturn(true)
903-
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockEnabledToggle)
904-
whenever(mockExtendedOnboardingFeatureToggles.privacyProCta()).thenReturn(mockEnabledToggle)
905-
whenever(mockDismissedCtaDao.exists(CtaId.DAX_INTRO)).thenReturn(true)
906-
whenever(mockDismissedCtaDao.exists(CtaId.DAX_INTRO_VISIT_SITE)).thenReturn(true)
907-
whenever(mockDismissedCtaDao.exists(CtaId.DAX_END)).thenReturn(true)
908-
whenever(mockWidgetCapabilities.supportsAutomaticWidgetAdd).thenReturn(true)
909-
910-
val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false, detectedRefreshPatterns = detectedRefreshPatterns)
911-
assertFalse(value is DaxBubbleCta.DaxPrivacyProCta)
912-
}
913-
914895
@Test
915896
fun givenPrivacyProCtaExperimentDisabledWhenRefreshCtaOnHomeTabThenDontReturnPrivacyProCta() = runTest {
916897
givenDaxOnboardingActive()

app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4479,7 +4479,10 @@ class BrowserTabFragment :
44794479
}
44804480

44814481
setOnPrimaryCtaClicked {
4482-
if (onboardingDesignExperimentManager.isBbEnrolledAndEnabled() && configuration is DaxBubbleCta.DaxEndCta) {
4482+
if (onboardingDesignExperimentManager.isBuckEnrolledAndEnabled() && configuration is DaxBubbleCta.DaxEndCta) {
4483+
newBrowserTab.buckEndAnimation.isGone = true
4484+
viewModel.onUserClickCtaOkButton(configuration)
4485+
} else if (onboardingDesignExperimentManager.isBbEnrolledAndEnabled() && configuration is DaxBubbleCta.DaxEndCta) {
44834486
configuration.hideBBEndCta(
44844487
onAnimationEnd = {
44854488
viewModel.onUserClickCtaOkButton(configuration)

app/src/main/java/com/duckduckgo/app/cta/ui/Cta.kt

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,10 +1264,18 @@ sealed class DaxBubbleCta(
12641264
binding.daxDialogOption3,
12651265
)
12661266

1267-
if (configuration is DaxEndCta) {
1268-
binding.headerImage.show()
1269-
binding.daxBubbleDialogTitle.gravity = Gravity.CENTER_HORIZONTAL
1270-
binding.dialogTextCta.gravity = Gravity.CENTER_HORIZONTAL
1267+
when (configuration) {
1268+
is DaxEndCta -> {
1269+
binding.headerImage.show()
1270+
binding.daxBubbleDialogTitle.gravity = Gravity.CENTER_HORIZONTAL
1271+
binding.dialogTextCta.gravity = Gravity.CENTER_HORIZONTAL
1272+
}
1273+
is DaxPrivacyProCta -> {
1274+
binding.headerImage.gone()
1275+
binding.daxBubbleDialogTitle.gravity = Gravity.CENTER_HORIZONTAL
1276+
binding.dialogTextCta.gravity = Gravity.CENTER_HORIZONTAL
1277+
}
1278+
else -> Unit
12711279
}
12721280

12731281
primaryCta?.let { primaryCtaRes ->
@@ -1286,6 +1294,13 @@ sealed class DaxBubbleCta(
12861294
}
12871295
}
12881296

1297+
placeholder?.let {
1298+
with(binding.placeholderImageView) {
1299+
show()
1300+
alpha = 0f
1301+
}
1302+
}
1303+
12891304
options?.let { options ->
12901305
// BB dialog has a max of 3 options and if successful we'll only have 3 options and can remove this
12911306
val bbOptions = options
@@ -1311,6 +1326,7 @@ sealed class DaxBubbleCta(
13111326
val afterAnimation = {
13121327
daxBubbleDialogTitle.finishAnimation()
13131328
dialogTextCta.finishAnimation()
1329+
placeholder?.let { placeholderImageView.fadeIn() }
13141330
primaryCta.fadeIn()
13151331
secondaryCta.fadeIn()
13161332
options?.let {
@@ -1387,6 +1403,13 @@ sealed class DaxBubbleCta(
13871403
}
13881404
}
13891405

1406+
placeholder?.let {
1407+
with(binding.placeholderImageView) {
1408+
show()
1409+
alpha = 0f
1410+
}
1411+
}
1412+
13901413
options?.let { options ->
13911414
// Buck dialog has a max of 3 options and if successful we'll only have 3 options and can remove this
13921415
val buckOptions = options
@@ -1432,6 +1455,7 @@ sealed class DaxBubbleCta(
14321455

14331456
val afterAnimation = {
14341457
dialogTextCta.finishAnimation()
1458+
placeholder?.let { placeholderImageView.fadeIn() }
14351459
primaryCta.fadeIn()
14361460
secondaryCta.fadeIn()
14371461
options?.let {

app/src/main/java/com/duckduckgo/app/cta/ui/CtaViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ class CtaViewModel @Inject constructor(
269269
}
270270

271271
// Privacy Pro
272-
canShowPrivacyProCta() && !onboardingDesignExperimentManager.isAnyExperimentEnrolledAndEnabled() -> {
272+
canShowPrivacyProCta() -> {
273273
val titleRes: Int = R.string.onboardingPrivacyProDaxDialogTitle
274274
val descriptionRes: Int = if (rebrandingFeatureToggle.isSubscriptionRebrandingEnabled()) {
275275
R.string.onboardingPrivacyProDaxDialogDescriptionRebranding

app/src/main/res/layout/include_onboarding_bubble_bb_dialog.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,17 @@
141141
tools:ignore="InvalidColorAttribute" />
142142
</FrameLayout>
143143

144+
<ImageView
145+
android:id="@+id/placeholderImageView"
146+
android:layout_width="wrap_content"
147+
android:layout_height="66dp"
148+
android:layout_gravity="center"
149+
android:adjustViewBounds="true"
150+
android:visibility="gone"
151+
android:layout_marginBottom="@dimen/keyline_2"
152+
app:srcCompat="@drawable/bb_shield"
153+
tools:visibility="visible" />
154+
144155
<com.google.android.material.button.MaterialButton
145156
android:id="@+id/daxDialogOption1"
146157
style="@style/Widget.DuckDuckGo.BBButton.Option"

app/src/main/res/layout/include_onboarding_bubble_buck_dialog.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,17 @@
9999
tools:ignore="InvalidColorAttribute" />
100100
</FrameLayout>
101101

102+
<ImageView
103+
android:id="@+id/placeholderImageView"
104+
android:layout_width="wrap_content"
105+
android:layout_height="44dp"
106+
android:layout_gravity="center"
107+
android:adjustViewBounds="true"
108+
android:visibility="gone"
109+
android:layout_marginTop="@dimen/keyline_4"
110+
app:srcCompat="@drawable/buck_shield"
111+
tools:visibility="gone" />
112+
102113
<com.google.android.material.button.MaterialButton
103114
android:id="@+id/daxDialogOption1"
104115
style="@style/Widget.DuckDuckGo.BuckButton.Secondary"
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<!--
2+
~ Copyright (c) 2025 DuckDuckGo
3+
~
4+
~ Licensed under the Apache License, Version 2.0 (the "License");
5+
~ you may not use this file except in compliance with the License.
6+
~ You may obtain a copy of the License at
7+
~
8+
~ http://www.apache.org/licenses/LICENSE-2.0
9+
~
10+
~ Unless required by applicable law or agreed to in writing, software
11+
~ distributed under the License is distributed on an "AS IS" BASIS,
12+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
~ See the License for the specific language governing permissions and
14+
~ limitations under the License.
15+
-->
16+
17+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
18+
android:width="112dp"
19+
android:height="112dp"
20+
android:viewportWidth="112"
21+
android:viewportHeight="112">
22+
<group>
23+
<path
24+
android:pathData="M99.89,34.54C99.65,33.46 99.37,32.4 99.06,31.33C97.63,26.4 93.27,22.82 88.1,22.59C87.82,22.58 87.53,22.58 87.23,22.59C86.41,22.6 85.61,22.71 84.84,22.88C84.15,23.16 83.43,23.38 82.7,23.56C81.51,23.85 80.31,24.02 79.04,24.05C74.47,24.17 70.28,22.47 67.18,19.63C66.68,19.18 66.25,18.68 65.82,18.15C65.54,17.79 65.25,17.46 64.95,17.13C62.63,14.74 59.34,13.29 55.74,13.39C52.13,13.48 48.92,15.09 46.71,17.59C46.4,17.94 46.11,18.3 45.84,18.68C45.44,19.24 45.02,19.77 44.54,20.26C41.55,23.26 37.46,25.15 32.9,25.27C31.32,25.31 29.79,25.13 28.32,24.76C28.11,24.7 27.89,24.64 27.67,24.59C26.61,24.33 25.5,24.2 24.36,24.22L23.92,24.23C18.6,24.55 14.18,28.43 12.9,33.59C12.62,34.68 12.39,35.8 12.19,36.92C11.5,40.63 11.19,44.49 11.26,48.41C11.8,75.56 31.32,97.78 56.96,102.87C57.25,102.93 57.55,102.92 57.84,102.84C83.25,96.42 101.84,73.2 101.29,46.05C101.21,42.1 100.73,38.24 99.89,34.54Z"
25+
android:fillColor="#010101"
26+
android:fillType="evenOdd"/>
27+
<path
28+
android:pathData="M99.89,31.24C99.65,30.16 99.37,29.11 99.06,28.04C97.63,23.1 93.27,19.52 88.1,19.29C87.82,19.29 87.53,19.28 87.23,19.29C86.41,19.31 85.61,19.41 84.84,19.58C84.15,19.86 83.43,20.08 82.7,20.27C81.51,20.55 80.31,20.72 79.04,20.75C74.47,20.87 70.28,19.18 67.18,16.34C66.68,15.89 66.25,15.38 65.82,14.85C65.54,14.5 65.25,14.16 64.95,13.83C62.63,11.45 59.34,10 55.74,10.09C52.13,10.18 48.92,11.79 46.71,14.29C46.4,14.64 46.11,15 45.84,15.38C45.44,15.95 45.02,16.48 44.54,16.96C41.55,19.96 37.46,21.85 32.9,21.97C31.32,22.01 29.79,21.84 28.32,21.47C28.11,21.4 27.89,21.34 27.67,21.29C26.61,21.03 25.5,20.9 24.36,20.93L23.92,20.94C18.6,21.25 14.18,25.13 12.9,30.29C12.62,31.39 12.39,32.5 12.19,33.62C11.5,37.34 11.19,41.19 11.26,45.12C11.8,72.26 31.32,94.48 56.96,99.57C57.25,99.63 57.55,99.62 57.84,99.55C83.25,93.12 101.84,69.9 101.29,42.76C101.21,38.8 100.73,34.95 99.89,31.24Z"
29+
android:fillColor="#14735D"
30+
android:fillType="evenOdd"/>
31+
<path
32+
android:pathData="M100.79,31.63C100.21,29.07 99.53,26.53 98.06,24.33C96.78,22.4 95.04,20.77 92.98,19.7C90.91,18.62 88.47,18.11 86.07,18.32C84.67,18.45 83.45,19 82.09,19.31C80.73,19.63 79.35,19.77 77.96,19.74C75.55,19.7 73.17,19.13 71.03,18.07C69.98,17.55 68.97,16.9 68.06,16.16C67.01,15.29 66.24,14.21 65.31,13.22C62,9.69 56.85,8.25 52.16,9.58C49.66,10.29 47.47,11.77 45.81,13.77C44.87,14.88 44.09,16.02 42.96,16.98C41.95,17.84 40.83,18.58 39.65,19.18C37.15,20.44 34.37,21.04 31.59,20.95C28.97,20.88 26.54,19.86 23.91,19.92C19.29,20.03 15.04,22.99 13.1,27.13C11.99,29.5 11.58,32.19 11.19,34.74C10.77,37.56 10.55,40.41 10.54,43.26C10.49,52.74 12.82,62.14 17.19,70.53C21.38,78.57 27.46,85.57 34.8,90.9C38.45,93.55 42.42,95.77 46.59,97.51C48.7,98.39 50.87,99.13 53.07,99.75C54.18,100.07 55.31,100.34 56.44,100.59C56.97,100.7 57.54,100.89 58.09,100.84C58.64,100.8 59.15,100.6 59.66,100.46C68.15,98.13 76.06,93.83 82.65,88C89.24,82.16 94.35,75.08 97.71,67.09C101.3,58.56 102.8,49.23 102.06,40.03C101.84,37.21 101.4,34.4 100.78,31.63C100.67,31.14 100.26,30.41 99.73,30.27C99.19,30.13 99.12,30.69 99.21,31.09C101.29,40.4 100.99,50.18 98.28,59.37C95.91,67.4 91.69,74.89 86.1,81.15C80.5,87.42 73.53,92.41 65.82,95.71C63.86,96.56 61.84,97.28 59.79,97.9C58.81,98.2 57.62,98.73 56.58,98.55C55.54,98.38 54.46,98.1 53.42,97.82C49.16,96.7 45.02,95.09 41.15,93.01C33.55,88.92 26.97,83.11 22.01,76.08C17.04,69.04 13.77,60.61 12.65,51.97C12.01,46.96 12.02,41.86 12.73,36.85C13.09,34.34 13.44,31.6 14.49,29.26C15.4,27.22 16.86,25.44 18.72,24.18C20.57,22.91 22.7,22.22 24.93,22.18C27.46,22.13 29.82,23.11 32.36,23.21C37.49,23.41 42.92,21.22 46.17,17.16C46.99,16.14 47.71,15.1 48.72,14.24C49.74,13.39 50.84,12.72 52.03,12.23C54.31,11.29 56.93,11.07 59.32,11.64C61.46,12.15 63.48,13.24 64.98,14.86C65.88,15.83 66.63,16.88 67.65,17.74C68.51,18.46 69.43,19.12 70.41,19.68C74.61,22.06 79.6,22.63 84.25,21.25C84.9,21.05 85.51,20.79 86.18,20.69C86.86,20.58 87.54,20.53 88.23,20.54C89.39,20.54 90.53,20.73 91.63,21.09C93.65,21.76 95.46,23.01 96.75,24.7C98.18,26.56 98.7,28.85 99.21,31.09C99.32,31.59 99.72,32.32 100.26,32.46C100.8,32.6 100.87,32.04 100.78,31.64L100.79,31.63Z"
33+
android:fillColor="#010101"/>
34+
<path
35+
android:pathData="M33.36,66.63C38.27,64.71 62.41,61.22 74.73,72.03"
36+
android:strokeLineJoin="round"
37+
android:strokeWidth="1.80454"
38+
android:fillColor="#00000000"
39+
android:strokeColor="#010101"
40+
android:strokeLineCap="round"/>
41+
<path
42+
android:pathData="M8.85,61.06C19.25,54.8 58.74,45.71 86,63.57"
43+
android:strokeLineJoin="round"
44+
android:strokeWidth="1.80454"
45+
android:fillColor="#00000000"
46+
android:strokeColor="#010101"
47+
android:strokeLineCap="round"/>
48+
<path
49+
android:pathData="M26.12,45.58C38.94,41.95 89.29,38.82 111.15,72.4"
50+
android:strokeLineJoin="round"
51+
android:strokeWidth="1.80454"
52+
android:fillColor="#00000000"
53+
android:strokeColor="#010101"
54+
android:strokeLineCap="round"/>
55+
</group>
56+
</vector>
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<!--
2+
~ Copyright (c) 2025 DuckDuckGo
3+
~
4+
~ Licensed under the Apache License, Version 2.0 (the "License");
5+
~ you may not use this file except in compliance with the License.
6+
~ You may obtain a copy of the License at
7+
~
8+
~ http://www.apache.org/licenses/LICENSE-2.0
9+
~
10+
~ Unless required by applicable law or agreed to in writing, software
11+
~ distributed under the License is distributed on an "AS IS" BASIS,
12+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
~ See the License for the specific language governing permissions and
14+
~ limitations under the License.
15+
-->
16+
17+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
18+
xmlns:aapt="http://schemas.android.com/aapt"
19+
android:width="44dp"
20+
android:height="44dp"
21+
android:viewportWidth="44"
22+
android:viewportHeight="44">
23+
<path android:pathData="M43.042,9.368C42.391,6.93 40.297,5.106 37.776,4.932C37.634,4.923 37.492,4.918 37.35,4.918C36.951,4.918 36.561,4.955 36.181,5.028C35.842,5.152 35.489,5.257 35.127,5.335C34.549,5.463 33.949,5.532 33.335,5.532C31.103,5.532 29.072,4.648 27.587,3.208C27.349,2.979 27.138,2.727 26.941,2.461C26.808,2.283 26.67,2.113 26.519,1.952C25.41,0.752 23.82,0 22.06,0C20.3,0 18.714,0.752 17.609,1.948C17.458,2.113 17.311,2.287 17.178,2.47C16.981,2.741 16.761,2.997 16.523,3.231C15.038,4.661 13.017,5.546 10.789,5.546C10.015,5.546 9.267,5.44 8.557,5.239C8.456,5.207 8.351,5.175 8.245,5.147C7.732,5.005 7.191,4.927 6.632,4.927C6.563,4.927 6.49,4.927 6.421,4.927C3.822,5.014 1.618,6.866 0.949,9.382C0.807,9.918 0.678,10.464 0.568,11.009C0.197,12.829 0,14.712 0,16.642C0,29.984 9.313,41.149 21.789,43.977C21.931,44.009 22.073,44.009 22.215,43.977C34.691,41.145 44,29.984 44,16.642C44,14.699 43.803,12.801 43.427,10.968L43.051,9.377L43.042,9.368Z">
24+
<aapt:attr name="android:fillColor">
25+
<gradient
26+
android:endX="43.995"
27+
android:endY="21.995"
28+
android:startX="-0.005"
29+
android:startY="21.995"
30+
android:type="linear">
31+
<item
32+
android:color="#FF00C444"
33+
android:offset="0" />
34+
<item
35+
android:color="#FF01C348"
36+
android:offset="0.14" />
37+
<item
38+
android:color="#FF07C355"
39+
android:offset="0.28" />
40+
<item
41+
android:color="#FF10C16A"
42+
android:offset="0.43" />
43+
<item
44+
android:color="#FF1CC089"
45+
android:offset="0.59" />
46+
<item
47+
android:color="#FF2DBEAF"
48+
android:offset="0.75" />
49+
<item
50+
android:color="#FF40BBDE"
51+
android:offset="0.9" />
52+
<item
53+
android:color="#FF4EBAFF"
54+
android:offset="1" />
55+
</gradient>
56+
</aapt:attr>
57+
</path>
58+
</vector>

0 commit comments

Comments
 (0)