1
0
Форкнуть 0
This commit is contained in:
Diego Ezequiel Guillén 2022-04-16 19:47:47 -03:00
Коммит 708d9b763e
117 изменённых файлов: 2002 добавлений и 0 удалений

Двоичные данные
._.github Normal file

Двоичный файл не отображается.

Двоичные данные
._.gitignore Normal file

Двоичный файл не отображается.

Двоичные данные
._CONTRIBUTING.md Normal file

Двоичный файл не отображается.

Двоичные данные
._LICENSE Normal file

Двоичный файл не отображается.

Двоичные данные
._README.md Normal file

Двоичный файл не отображается.

Двоичные данные
._app Normal file

Двоичный файл не отображается.

Двоичные данные
._build.gradle Normal file

Двоичный файл не отображается.

Двоичные данные
._code-of-conduct.md Normal file

Двоичный файл не отображается.

Двоичные данные
._gradle Normal file

Двоичный файл не отображается.

Двоичные данные
._gradle.properties Normal file

Двоичный файл не отображается.

Двоичные данные
._gradlew Normal file

Двоичный файл не отображается.

Двоичные данные
._gradlew.bat Normal file

Двоичный файл не отображается.

Двоичные данные
._local.properties Normal file

Двоичный файл не отображается.

Двоичные данные
._settings.gradle Normal file

Двоичный файл не отображается.

2
.gitattributes поставляемый Normal file
Просмотреть файл

@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto

Двоичные данные
.github/._ISSUE_TEMPLATE поставляемый Normal file

Двоичный файл не отображается.

Двоичные данные
.github/ISSUE_TEMPLATE/._android-basics--lemonade-app.md поставляемый Normal file

Двоичный файл не отображается.

32
.github/ISSUE_TEMPLATE/android-basics--lemonade-app.md поставляемый Normal file
Просмотреть файл

@ -0,0 +1,32 @@
---
name: 'Android Basics: Lemonade app'
about: Describe this issue template's purpose here.
title: 'Android Basics: Lemonade app'
labels: ''
assignees: ''
---
**URL of codelab**
**In which task and step of the codelab can this issue be found?**
**Describe the problem**
**Steps to reproduce?**
1. Go to...
2. Click on...
3. See error...
**Versions**
_Android Studio version:_
_API version of the emulator:_
**Additional information**
_Include screenshots if they would be useful in clarifying the problem._

30
.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1,30 @@
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Log/OS Files
*.log
# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.apk
output.json
# IntelliJ
*.iml
.idea/
# Keystore files
*.jks
*.keystore
# Google Services (e.g. APIs or Firebase)
google-services.json
# Android Profiling
*.hprof

29
CONTRIBUTING.md Normal file
Просмотреть файл

@ -0,0 +1,29 @@
# How to Contribute
We'd love to accept your patches and contributions to this project. There are
just a few small guidelines you need to follow.
## Contributor License Agreement
Contributions to this project must be accompanied by a Contributor License
Agreement (CLA). You (or your employer) retain the copyright to your
contribution; this simply gives us permission to use and redistribute your
contributions as part of the project. Head over to
<https://cla.developers.google.com/> to see your current agreements on file or
to sign a new one.
You generally only need to submit a CLA once, so if you've already submitted one
(even if it was for a different project), you probably don't need to do it
again.
## Code reviews
All submissions, including submissions by project members, require review. We
use GitHub pull requests for this purpose. Consult
[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
information on using pull requests.
## Community Guidelines
This project follows
[Google's Open Source Community Guidelines](https://opensource.google/conduct/).

201
LICENSE Normal file
Просмотреть файл

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

27
README.md Normal file
Просмотреть файл

@ -0,0 +1,27 @@
Project: Lemonade App - Starter Code
==================================
Starter code for the first independent project for [Android Basics in Kotlin](https://developer.android.com/courses/android-basics-kotlin/course)
Introduction
------------
This is the starter code for the Lemonade app project in the [final pathway](https://developer.android.com/courses/pathways/android-basics-kotlin-four) of Android Basics [Unit 1](https://developer.android.com/courses/android-basics-kotlin/unit-1). This project is an opportunity for you to demonstrate the concepts you learned in the unit.
Pre-requisites
--------------
- Complete [Unit 1](https://developer.android.com/courses/android-basics-kotlin/unit-1) of Android Basics in Kotlin
Getting Started
---------------
1. Download the starter code
2. Open the project in Android Studio
3. Complete the project in accordance with the [project instructions](https://developer.android.com/codelabs/basic-android-kotlin-training-project-lemonade)
Tips
----
- Use the provided tests to ensure your app is running as expected
- DO NOT ALTER THE PROVIDED TESTS

Двоичные данные
app/._.gitignore Normal file

Двоичный файл не отображается.

Двоичные данные
app/._build.gradle Normal file

Двоичный файл не отображается.

Двоичные данные
app/._proguard-rules.pro Normal file

Двоичный файл не отображается.

Двоичные данные
app/._src Normal file

Двоичный файл не отображается.

1
app/.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1 @@
/build

61
app/build.gradle Normal file
Просмотреть файл

@ -0,0 +1,61 @@
/*
* Copyright (C) 2021 The Android Open Source Project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.lemonade"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation "androidx.test:core-ktx:1.4.0"
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

21
app/proguard-rules.pro поставляемый Normal file
Просмотреть файл

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

Двоичные данные
app/src/._androidTest Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/._main Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/androidTest/._java Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/androidTest/java/._com Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/androidTest/java/com/._example Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/androidTest/java/com/example/._lemonade Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/androidTest/java/com/example/lemonade/._BaseTest.kt Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/androidTest/java/com/example/lemonade/._LemonadeTests.kt Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,157 @@
/*
* Copyright (C) 2021 The Android Open Source Project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.lemonade
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.drawable.Drawable
import android.view.View
import android.widget.ImageView
import androidx.annotation.DrawableRes
import androidx.core.content.ContextCompat
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.NoMatchingViewException
import androidx.test.espresso.ViewInteraction
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.BoundedMatcher
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.rules.ActivityScenarioRule
import com.example.lemonade.DrawableMatcher.withDrawable
import org.hamcrest.Description
import org.hamcrest.Matcher
import org.junit.Rule
/**
* The lemonade app is effectively a state machine.
* In order to avoid stateful tests (tests that rely on previous tests),
* these utility methods move states and reduce code duplication.
* This class is meant to be inherited by the @Test methods to leverage these methods.
*/
open class BaseTest {
/**
* Test to ensure the app is in the correct state.
* @param textActionResource Integer for the expected text resource.
* @param drawableResource Integer for the expected drawable resource.
*/
fun testState(textActionResource: Int, drawableResource: Int) {
onView(withId(R.id.text_action))
.check(matches(ViewMatchers.withText(textActionResource)))
onView(withId(R.id.image_lemon_state)).check(
matches(withDrawable(drawableResource)))
}
/**
* Clicks the lemon tree image.
*/
fun pickLemon() {
onView(withDrawable(R.drawable.lemon_tree))
.perform(click())
}
/**
* Squeeze the lemon until the lemon image is gone.
* The number of clicks required is determined by a random number that the test is not
* aware of, so we loop and click until the image changes.
*/
fun juiceLemon() {
while (onView(withDrawable(R.drawable.lemon_squeeze)).isPresent()) {
onView(withId(R.id.image_lemon_state)).perform(click())
}
}
/**
* Click the lemonade image.
*/
fun drinkJuice() {
onView(withDrawable(R.drawable.lemon_drink))
.perform(click())
}
/**
* Click the empty glass image to restart.
*/
fun restart() {
onView(withDrawable(R.drawable.lemon_restart))
.perform(click())
}
/**
* Extension function to determine if element is present.
* This is used to click the lemon image until it changes because the number of clicks
* required is determined by a random number that the test doesn't know about.
*/
private fun ViewInteraction.isPresent(): Boolean {
return try {
check(matches(isDisplayed()))
true
} catch (e: NoMatchingViewException) {
false
}
}
}
/**
* Custom matcher to find drawable.
*/
object DrawableMatcher {
fun withDrawable(@DrawableRes resourceId: Int): Matcher<View> {
return object : BoundedMatcher<View, ImageView>(ImageView::class.java) {
override fun describeTo(description: Description?) {
description!!.appendText("has drawable resource $resourceId")
}
override fun matchesSafely(imageView: ImageView): Boolean {
return isSameBitmap(imageView, imageView.drawable, resourceId)
}
}
}
private fun isSameBitmap(item: View, drawable: Drawable?, expectedResId: Int): Boolean {
val image = item as ImageView
if (expectedResId < 0) {
return image.drawable == null
}
val expectedDrawable: Drawable? = ContextCompat.getDrawable(item.context, expectedResId)
if (drawable == null || expectedDrawable == null) {
return false
}
// Make tint consistent just in case they differ
val bitmap = getBitmap(drawable)
val expectedBitmap = getBitmap(expectedDrawable)
return bitmap.sameAs(expectedBitmap)
}
/**
* Convert vector drawable to bitmap
* @param drawable vector drawable
*/
private fun getBitmap(drawable: Drawable): Bitmap {
val bitmap = Bitmap.createBitmap(
drawable.intrinsicWidth,
drawable.intrinsicHeight,
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap)
drawable.setBounds(0, 0, canvas.width, canvas.height)
drawable.draw(canvas)
return bitmap
}
}

Просмотреть файл

@ -0,0 +1,114 @@
/*
* Copyright (C) 2021 The Android Open Source Project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.lemonade
import androidx.test.core.app.launchActivity
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.longClick
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
/**
* Instrumentation tests to be run on a physical device or emulator.
*/
@RunWith(AndroidJUnit4::class)
@LargeTest
class LemonadeTests : BaseTest() {
@Before
fun setup() {
launchActivity<MainActivity>()
}
/**
* Test the view components of the pick lemon state
*/
@Test
fun `test_initial_state`() {
testState(R.string.lemon_select, R.drawable.lemon_tree)
}
/**
* Test that the pick lemon functionality takes us to the "squeeze state"
*/
@Test
fun `test_picking_lemon_proceeds_to_squeeze_state`() {
// Click image to progress state
onView(withId(R.id.image_lemon_state)).perform(click())
testState(R.string.lemon_squeeze, R.drawable.lemon_squeeze)
}
/**
* Test that the squeeze functionality takes us to the "drink state"
*/
@Test
fun `test_squeezing_lemon_proceeds_to_drink_state`() {
// Click image to progress state
onView(withId(R.id.image_lemon_state)).perform(click())
juiceLemon()
testState(R.string.lemon_drink, R.drawable.lemon_drink)
}
/**
* Test squeeze count snackbar
*/
@Test
fun `test_squeeze_count_snackbar_is_displayed`() {
// Click image to progress state
onView(withId(R.id.image_lemon_state)).perform(click())
// Click image to progress state
onView(withId(R.id.image_lemon_state)).perform(click())
// Click image to progress state
onView(withId(R.id.image_lemon_state)).perform(longClick())
onView(withId(com.google.android.material.R.id.snackbar_text))
.check(matches(withText("Squeeze count: 1, keep squeezing!")))
}
/**
* Test that the drink functionality takes us to the "restart state"
*/
@Test
fun `test_drinking_juice_proceeds_to_restart_state`() {
// Click image to progress state
onView(withId(R.id.image_lemon_state)).perform(click())
juiceLemon()
onView(withId(R.id.image_lemon_state)).perform(click())
// Click image to progress state
testState(R.string.lemon_empty_glass, R.drawable.lemon_restart)
}
/**
* Test that the restart functionality takes us back to the "pick lemon state"
*/
@Test
fun `test_restarting_proceeds_to_pick_lemon_state`() {
// Click image to progress state
onView(withId(R.id.image_lemon_state)).perform(click())
juiceLemon()
// Click image to progress state
onView(withId(R.id.image_lemon_state)).perform(click())
// Click image to progress state
onView(withId(R.id.image_lemon_state)).perform(click())
testState(R.string.lemon_select, R.drawable.lemon_tree)
}
}

Двоичные данные
app/src/main/._AndroidManifest.xml Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/._ic_launcher_lemonade-playstore.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/._java Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/._res Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2021 The Android Open Source Project.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.lemonade">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher_lemonade"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_lemonade_round"
android:supportsRtl="true"
android:theme="@style/Theme.Lemonade">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

Двоичные данные
app/src/main/ic_launcher_lemonade-playstore.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 29 KiB

Двоичные данные
app/src/main/java/._com Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/java/com/._example Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/java/com/example/._lemonade Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/java/com/example/lemonade/._MainActivity.kt Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,198 @@
/*
* Copyright (C) 2021 The Android Open Source Project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.lemonade
import android.os.Bundle
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.snackbar.Snackbar
class MainActivity : AppCompatActivity() {
/**
* DO NOT ALTER ANY VARIABLE OR VALUE NAMES OR THEIR INITIAL VALUES.
*
* Anything labeled var instead of val is expected to be changed in the functions but DO NOT
* alter their initial values declared here, this could cause the app to not function properly.
*/
private val LEMONADE_STATE = "LEMONADE_STATE"
private val LEMON_SIZE = "LEMON_SIZE"
private val SQUEEZE_COUNT = "SQUEEZE_COUNT"
// SELECT represents the "pick lemon" state
private val SELECT = "select"
// SQUEEZE represents the "squeeze lemon" state
private val SQUEEZE = "squeeze"
// DRINK represents the "drink lemonade" state
private val DRINK = "drink"
// RESTART represents the state where the lemonade has been drunk and the glass is empty
private val RESTART = "restart"
// Default the state to select
private var lemonadeState = "select"
// Default lemonSize to -1
private var lemonSize = -1
// Default the squeezeCount to -1
private var squeezeCount = -1
private var lemonTree = LemonTree()
private var lemonImage: ImageView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// === DO NOT ALTER THE CODE IN THE FOLLOWING IF STATEMENT ===
if (savedInstanceState != null) {
lemonadeState = savedInstanceState.getString(LEMONADE_STATE, "select")
lemonSize = savedInstanceState.getInt(LEMON_SIZE, -1)
squeezeCount = savedInstanceState.getInt(SQUEEZE_COUNT, -1)
}
// === END IF STATEMENT ===
lemonImage = findViewById(R.id.image_lemon_state)
setViewElements()
lemonImage!!.setOnClickListener {
// TODO: call the method that handles the state when the image is clicked
clickLemonImage()
}
lemonImage!!.setOnLongClickListener {
// TODO: replace 'false' with a call to the function that shows the squeeze count
showSnackbar()//false
}
}
/**
* === DO NOT ALTER THIS METHOD ===
*
* This method saves the state of the app if it is put in the background.
*/
override fun onSaveInstanceState(outState: Bundle) {
outState.putString(LEMONADE_STATE, lemonadeState)
outState.putInt(LEMON_SIZE, lemonSize)
outState.putInt(SQUEEZE_COUNT, squeezeCount)
super.onSaveInstanceState(outState)
}
/**
* Clicking will elicit a different response depending on the state.
* This method determines the state and proceeds with the correct action.
*/
private fun clickLemonImage() {
// TODO: use a conditional statement like 'if' or 'when' to track the lemonadeState
// when the image is clicked we may need to change state to the next step in the
// lemonade making progression (or at least make some changes to the current state in the
// case of squeezing the lemon). That should be done in this conditional statement
when (lemonadeState) {
// TODO: When the image is clicked in the SELECT state, the state should become SQUEEZE
SELECT -> {
lemonadeState = SQUEEZE
// - The lemonSize variable needs to be set using the 'pick()' method in the LemonTree class
lemonSize = lemonTree.pick()
// - The squeezeCount should be 0 since we haven't squeezed any lemons just yet.
squeezeCount = 0
}
// TODO: When the image is clicked in the SQUEEZE state the squeezeCount needs to be
SQUEEZE -> {
// INCREASED by 1 and lemonSize needs to be DECREASED by 1.
squeezeCount++
lemonSize--
// - If the lemonSize has reached 0, it has been juiced and the state should become DRINK
if (lemonSize == 0) {
lemonadeState = DRINK
// - Additionally, lemonSize is no longer relevant and should be set to -1
lemonSize = -1
}
}
// TODO: When the image is clicked in the DRINK state the state should become RESTART
DRINK -> {
lemonadeState = RESTART
lemonSize = -1
}
// TODO: When the image is clicked in the RESTART state the state should become SELECT
RESTART -> lemonadeState = SELECT
}
// TODO: lastly, before the function terminates we need to set the view elements so that the
// UI can reflect the correct state
setViewElements()
}
/**
* Set up the view elements according to the state.
*/
private fun setViewElements() {
val textAction: TextView = findViewById(R.id.text_action)
// TODO: set up a conditional that tracks the lemonadeState
when (lemonadeState){
SELECT -> {
// TODO: for each state, the textAction TextView should be set to the corresponding string from
// the string resources file. The strings are named to match the state
textAction.setText(R.string.lemon_select)
// TODO: Additionally, for each state, the lemonImage should be set to the corresponding
// drawable from the drawable resources. The drawables have the same names as the strings
// but remember that they are drawables, not strings.
lemonImage?.setImageResource(R.drawable.lemon_tree)
}
SQUEEZE -> {
textAction.setText(R.string.lemon_squeeze)
lemonImage?.setImageResource(R.drawable.lemon_squeeze)
}
DRINK -> {
textAction.setText(R.string.lemon_drink)
lemonImage?.setImageResource(R.drawable.lemon_drink)
}
RESTART -> {
textAction.setText(R.string.lemon_empty_glass)
lemonImage?.setImageResource(R.drawable.lemon_restart)
}
}
}
/**
* === DO NOT ALTER THIS METHOD ===
*
* Long clicking the lemon image will show how many times the lemon has been squeezed.
*/
private fun showSnackbar(): Boolean {
if (lemonadeState != SQUEEZE) {
return false
}
val squeezeText = getString(R.string.squeeze_count, squeezeCount)
Snackbar.make(
findViewById(R.id.constraint_Layout),
squeezeText,
Snackbar.LENGTH_SHORT
).show()
return true
}
}
/**
* A Lemon tree class with a method to "pick" a lemon. The "size" of the lemon is randomized
* and determines how many times a lemon needs to be squeezed before you get lemonade.
*/
class LemonTree {
fun pick(): Int {
return (2..4).random()
}
}

Двоичные данные
app/src/main/res/._drawable Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/._layout Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/._mipmap-anydpi-v26 Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/._mipmap-hdpi Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/._mipmap-mdpi Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/._mipmap-xhdpi Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/._mipmap-xxhdpi Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/._mipmap-xxxhdpi Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/._values Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/._values-night Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/drawable/._ic_launcher_lemonade_background.xml Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/drawable/._ic_launcher_lemonade_foreground.xml Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/drawable/._lemon_drink.xml Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/drawable/._lemon_restart.xml Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/drawable/._lemon_squeeze.xml Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/drawable/._lemon_tree.xml Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,27 @@
<!--
~ Copyright (C) 2021 The Android Open Source Project.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group android:scaleX="0.6"
android:scaleY="0.6">
<path
android:pathData="M-3.628,-3.628h187.257v187.257h-187.257z"
android:fillColor="#02b5c8"/>
</group>
</vector>

Просмотреть файл

@ -0,0 +1,142 @@
<!--
~ Copyright (C) 2021 The Android Open Source Project.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group android:scaleX="0.6"
android:scaleY="0.6">
<group>
<clip-path
android:pathData="M0.394,0h179.606v179.606h-179.606z"/>
<path
android:pathData="M130.562,18.253m-38.456,0a38.456,38.456 0,1 1,76.912 0a38.456,38.456 0,1 1,-76.912 0"
android:fillColor="#fede0d"/>
<path
android:pathData="M130.562,18.253m-36.908,0a36.908,36.908 0,1 1,73.816 0a36.908,36.908 0,1 1,-73.816 0"
android:fillColor="#fff063"/>
<path
android:pathData="M130.562,18.253m-33.804,0a33.804,33.804 0,1 1,67.608 0a33.804,33.804 0,1 1,-67.608 0"
android:fillColor="#fffacb"/>
<path
android:pathData="M152.429,0.119a2.433,2.433 0,0 0,0.468 -3.605,26.658 26.658,0 0,0 -14.574,-9.407 1.588,1.588 0,0 0,-1.938 1.288l-4.276,24.38a0.768,0.768 0,0 0,1.2 0.761Z"
android:fillColor="#fff063"/>
<path
android:pathData="M161.622,19.692a27.307,27.307 0,0 0,-3.855 -17.379,1.591 1.591,0 0,0 -2.3,-0.489l-19.11,13.407a1,1 0,0 0,0.4 1.807l22.993,4.032A1.6,1.6 0,0 0,161.622 19.692Z"
android:fillColor="#fff063"/>
<path
android:pathData="M107.651,36.4a1.591,1.591 0,0 0,-0.323 2.328,27.154 27.154,0 0,0 14.932,9.477 1.6,1.6 0,0 0,1.932 -1.288l4,-22.787a1.026,1.026 0,0 0,-1.6 -1.017Z"
android:fillColor="#fff063"/>
<path
android:pathData="M160.589,26.6a1.61,1.61 0,0 0,-1.281 -1.964l-24.53,-4.3a0.984,0.984 0,0 0,-0.975 1.534l13.732,19.574a2.532,2.532 0,0 0,3.72 0.461A28.81,28.81 0,0 0,160.589 26.6Z"
android:fillColor="#fff063"/>
<path
android:pathData="M128.159,49.245a27.372,27.372 0,0 0,17.406 -3.862,1.6 1.6,0 0,0 0.493,-2.316L132.909,24.326a1.211,1.211 0,0 0,-2.184 0.487L126.77,47.362A1.61,1.61 0,0 0,128.159 49.245Z"
android:fillColor="#fff063"/>
<path
android:pathData="M101.259,15.7a1.6,1.6 0,0 0,-1.871 1.393c-0.509,4.609 2.254,12.348 3.774,16.171a1.959,1.959 0,0 0,2.946 0.878l18.264,-12.814a0.908,0.908 0,0 0,-0.364 -1.638Z"
android:fillColor="#fff063"/>
<path
android:pathData="M109.331,-4.889a27.793,27.793 0,0 0,-9.77 15.369,1.587 1.587,0 0,0 1.29,1.932l23.394,4.1a1.035,1.035 0,0 0,1.027 -1.614L111.63,-4.544A1.588,1.588 0,0 0,109.331 -4.889Z"
android:fillColor="#fff063"/>
<path
android:pathData="M133.305,-11.192a1.609,1.609 0,0 0,-1.3 -1.855c-8.158,-1.517 -14.325,2 -17.169,3.792a1.806,1.806 0,0 0,-0.515 2.568L127.8,12.526a0.776,0.776 0,0 0,1.4 -0.311Z"
android:fillColor="#fff063"/>
<path
android:pathData="M146.359,28.339c-0.636,-0.191 -2.493,-0.66 -3.334,-0.871a0.186,0.186 0,0 0,-0.206 0.273c0.422,0.738 1.349,2.3 1.64,2.782a2.917,2.917 0,0 0,0.215 0.315,1.946 1.946,0 0,0 0.2,0.233 1.622,1.622 0,0 0,2.389 -0.163,1.687 1.687,0 0,0 -0.475,-2.361l-0.03,-0.021A1.409,1.409 0,0 0,146.359 28.339Z"
android:fillColor="#fffacb"/>
<path
android:pathData="M125.289,-0.645c0.354,0.675 1.457,2.577 1.957,3.437a0.214,0.214 0,0 0,0.39 -0.049c0.267,-0.939 0.8,-2.949 0.971,-3.577a3.721,3.721 0,0 0,0.087 -0.43,2.352 2.352,0 0,0 0.031,-0.35 1.861,1.861 0,0 0,-2.049 -1.832,1.937 1.937,0 0,0 -1.559,2.283l0.007,0.041A1.618,1.618 0,0 0,125.289 -0.645Z"
android:fillColor="#fffacb"/>
<path
android:pathData="M113.958,24.478c0.474,-0.358 1.8,-1.449 2.392,-1.944a0.166,0.166 0,0 0,-0.087 -0.293c-0.756,-0.086 -2.37,-0.242 -2.875,-0.29a2.776,2.776 0,0 0,-0.341 -0.012,1.9 1.9,0 0,0 -0.274,0.021 1.451,1.451 0,0 0,-1.146 1.81,1.508 1.508,0 0,0 1.954,0.906l0.031,-0.01A1.251,1.251 0,0 0,113.958 24.478Z"
android:fillColor="#fffacb"/>
<path
android:pathData="M88.666,207.734l-89.753,-0.584V57.672s6.766,-3.164 18.119,-3.932c11.723,-0.794 22.056,-0.193 32.657,4.563 0.679,0.3 1.341,0.64 2,0.987 4.553,2.4 17.321,8.917 26.694,13.2 26.846,12.274 40.867,-2.646 40.867,-2.646Z"
android:fillColor="#fff063"/>
<path
android:pathData="M-14.591,96.155L15.677,73.108A4.916,4.916 97.714,0 1,22.566 74.042L45.612,104.31A4.916,4.916 97.714,0 1,44.679 111.199L14.411,134.245A4.916,4.916 97.714,0 1,7.522 133.312L-15.524,103.044A4.916,4.916 97.714,0 1,-14.591 96.155z"
android:strokeAlpha="0.54"
android:fillColor="#fff"
android:fillAlpha="0.54"/>
<path
android:pathData="M27.99,110.068L60.107,113.033A4.168,4.168 50.275,0 1,63.875 117.566L60.909,149.684A4.168,4.168 50.275,0 1,56.376 153.451L24.258,150.486A4.168,4.168 50.275,0 1,20.491 145.952L23.457,113.835A4.168,4.168 50.275,0 1,27.99 110.068z"
android:strokeAlpha="0.54"
android:fillColor="#fff"
android:fillAlpha="0.54"/>
<path
android:pathData="M0.353,92.724c1.735,-1.653 3.512,-3.254 5.3,-4.848a28.466,28.466 0,0 1,2.708 -2.349,16.6 16.6,0 0,1 3.153,-1.8l0.081,0.1a16.6,16.6 0,0 1,-2.425 2.7A28.473,28.473 0,0 1,6.3 88.679C4.36,90.084 2.418,91.48 0.434,92.825Z"
android:fillColor="#fff"/>
<path
android:pathData="M13.687,82.223A3.515,3.515 0,0 1,14.91 80.41a4.129,4.129 0,0 1,0.9 -0.546,2.886 2.886,0 0,1 1.129,-0.265 2.884,2.884 0,0 1,-0.5 1.048,4.159 4.159,0 0,1 -0.725,0.766A3.507,3.507 0,0 1,13.687 82.223Z"
android:fillColor="#fff"/>
<path
android:pathData="M56.208,149.122c0.093,-2.077 0.236,-4.148 0.352,-6.222L57,136.689a60.587,60.587 0,0 1,0.533 -6.2,34.875 34.875,0 0,1 1.528,-6.086l0.181,0.021a34.859,34.859 0,0 1,0.1 6.274,60.866 60.866,0 0,1 -0.894,6.159l-0.985,6.148c-0.36,2.046 -0.694,4.095 -1.076,6.138Z"
android:fillColor="#fff"/>
<path
android:pathData="M88.666,207.734H-3.1V18H127.145a2.942,2.942 0,0 1,2.873 3.58Z"
android:strokeAlpha="0.4"
android:fillColor="#eff1f3"
android:fillAlpha="0.4"/>
<path
android:pathData="M108.63,60.755l-5.3,26.358 -5.435,26.329c-1.828,8.773 -3.429,17.6 -5.566,26.3 -2.119,8.708 -4.346,17.392 -7.014,25.978l-0.263,-0.058c1.218,-8.908 2.878,-17.718 4.645,-26.5 1.75,-8.79 4.035,-17.461 6.092,-26.183l6.224,-26.153L108.367,60.7Z"
android:fillColor="#fffdea"/>
<path
android:pathData="M182.87,93.439l0,0a0,0 0,0 1,0 0l0,0a48.792,48.792 132.515,0 1,-46.631 50.862l0,0a0,0 0,0 1,0 0l0,0A48.792,48.792 132.515,0 1,182.87 93.439Z"
android:fillColor="#96ca54"/>
<path
android:pathData="M193.222,132.094l0,0a0,0 0,0 1,0 0l0,0a38.8,38.8 82.249,0 1,-54.37 7.4l0,0a0,0 0,0 1,0 0l0,0A38.8,38.8 82.249,0 1,193.222 132.094Z"
android:fillColor="#87bc4b"/>
<path
android:pathData="M87.105,132.028c-10.554,18.609 -10.194,39.67 -0.425,52.5h0l0,0q0.669,0.878 1.4,1.7a23.3,23.3 0,0 1,2.119 4.521h0a6.658,6.658 0,0 0,3.288 5.3,6.77 6.77,0 0,0 7.093,-0.386 5.351,5.351 0,0 1,2.808 -0.285q1.387,0.322 2.8,0.513h0c16.181,2.182 34.81,-8.351 45.513,-27.222 11.006,-19.406 10.144,-41.479 -0.881,-54.1h0q-0.209,-0.238 -0.422,-0.472a12.8,12.8 0,0 1,-1.545 -4.884,6.5 6.5,0 0,0 -9.543,-5.121c-0.007,0 -2.135,1.076 -7.649,0.6 -0.192,-0.02 -0.386,-0.039 -0.579,-0.055h-0.013C115.264,103.3 97.469,113.755 87.105,132.028Z"
android:fillColor="#fede0d"/>
<path
android:pathData="M132.82,173.852c0.672,-1.485 0.948,-2.16 0.582,-3.143 -0.074,-0.2 -0.446,-0.514 -0.935,-0.083 -0.82,0.721 -3.538,5.3 -2.558,5.91C130.864,177.128 132.366,174.855 132.82,173.852Z"
android:fillColor="#fff063"/>
<path
android:pathData="M149.639,160.41c0.672,-1.485 0.948,-2.161 0.582,-3.143 -0.074,-0.2 -0.446,-0.514 -0.935,-0.084 -0.82,0.722 -3.538,5.3 -2.558,5.911C147.683,163.686 149.184,161.413 149.639,160.41Z"
android:fillColor="#fff063"/>
<path
android:pathData="M134,180.729c0.523,-1.154 0.738,-1.679 0.453,-2.443 -0.057,-0.154 -0.346,-0.4 -0.727,-0.065 -0.637,0.561 -2.75,4.123 -1.988,4.595C132.478,183.276 133.645,181.509 134,180.729Z"
android:fillColor="#fff063"/>
<path
android:pathData="M138.9,172.861a12.108,12.108 0,0 0,0.337 -1.84c0.112,-0.712 -0.42,-0.868 -0.794,-0.574 -0.629,0.492 -2.595,3.75 -1.766,4.253C137.484,175.19 138.664,173.845 138.9,172.861Z"
android:fillColor="#fff063"/>
<path
android:pathData="M145.3,157.94c0.452,-1.075 0.63,-1.568 0.17,-2.376a0.63,0.63 0,0 0,-0.885 -0.176c-0.681,0.463 -2.679,3.7 -1.69,4.294C143.861,160.256 145,158.666 145.3,157.94Z"
android:fillColor="#fff063"/>
<path
android:pathData="M143.093,165.621c0.246,-0.583 0.342,-0.851 0.093,-1.29a0.344,0.344 0,0 0,-0.481 -0.1c-0.37,0.252 -1.456,2.012 -0.918,2.333S142.927,166.016 143.093,165.621Z"
android:fillColor="#fff063"/>
<path
android:pathData="M137.713,156.772c0.469,-1 0.665,-1.453 0.511,-2.069 -0.031,-0.124 -0.227,-0.308 -0.531,0 -0.511,0.514 -2.327,3.635 -1.8,3.974S137.4,157.447 137.713,156.772Z"
android:fillColor="#fff063"/>
<path
android:pathData="M144.922,170.419c0.245,-0.584 0.342,-0.852 0.092,-1.291a0.341,0.341 0,0 0,-0.48 -0.095c-0.371,0.251 -1.456,2.012 -0.918,2.332S144.756,170.813 144.922,170.419Z"
android:fillColor="#fff063"/>
<path
android:pathData="M126.7,171.746c0.246,-0.584 0.342,-0.851 0.092,-1.29a0.341,0.341 0,0 0,-0.48 -0.1c-0.37,0.252 -1.456,2.012 -0.918,2.332S126.53,172.141 126.7,171.746Z"
android:fillColor="#fff063"/>
<path
android:pathData="M132.887,165.536c0.325,-0.772 0.453,-1.127 0.122,-1.708a0.453,0.453 0,0 0,-0.636 -0.126c-0.49,0.333 -1.926,2.663 -1.215,3.086C131.852,167.2 132.667,166.058 132.887,165.536Z"
android:fillColor="#fff063"/>
<path
android:pathData="M138.719,164.968c0.847,-1.809 1.2,-2.629 0.908,-3.75 -0.059,-0.225 -0.42,-0.561 -0.974,-0.01 -0.93,0.926 -4.217,6.568 -3.244,7.19C136.356,169 138.148,166.19 138.719,164.968Z"
android:fillColor="#fff063"/>
</group>
</group>
</vector>

Просмотреть файл

@ -0,0 +1,103 @@
<!--
~ Copyright (C) 2021 The Android Open Source Project.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="160dp"
android:height="200dp"
android:viewportWidth="160"
android:viewportHeight="200">
<path
android:pathData="M93.732,189.375H33.21a3.051,3.051 0,0 1,-3.006 -2.528L5.949,47.256a3.05,3.05 0,0 1,3.006 -3.572H117.987a3.05,3.05 0,0 1,3.005 3.572L96.737,186.847A3.05,3.05 0,0 1,93.732 189.375Z"
android:fillColor="#69cdd8"/>
<path
android:pathData="M93.732,189.375H33.21a3.051,3.051 0,0 1,-3.006 -2.528L8.06,59.4l6.883,-1.652a71.493,71.493 0,0 1,21.19 -1.88A108.184,108.184 0,0 1,56.993 59.5l18.68,5.757A71.9,71.9 0,0 0,92.157 68.3a56.33,56.33 0,0 0,8.061 -0.062,42.446 42.446,0 0,0 5.945,-0.9 33.627,33.627 0,0 0,4.413 -1.326l7.653,-2.851L96.737,186.847A3.05,3.05 0,0 1,93.732 189.375Z"
android:fillColor="#fff063"/>
<path
android:pathData="M47.234,103.815L74.98,106.377A3.601,3.601 50.275,0 1,78.234 110.294L75.673,138.04A3.601,3.601 50.275,0 1,71.756 141.294L44.01,138.733A3.601,3.601 50.275,0 1,40.755 134.816L43.317,107.07A3.601,3.601 50.275,0 1,47.234 103.815z"
android:strokeAlpha="0.54"
android:fillColor="#fff"
android:fillAlpha="0.54"/>
<path
android:pathData="M22.873,85.806c1.479,-1.454 3,-2.854 4.528,-4.246a20.677,20.677 0,0 1,2.326 -2.046,12.247 12.247,0 0,1 2.784,-1.478l0.083,0.1a12.3,12.3 0,0 1,-2.034 2.407,20.861 20.861,0 0,1 -2.493,1.839c-1.685,1.2 -3.376,2.387 -5.11,3.523Z"
android:fillColor="#fff"/>
<path
android:pathData="M34.4,76.742a2.369,2.369 0,0 1,0.379 -0.968,2.862 2.862,0 0,1 1.4,-1.135 2.354,2.354 0,0 1,1.028 -0.164,2.334 2.334,0 0,1 -0.378,0.97 3.023,3.023 0,0 1,-0.611 0.68,3.078 3.078,0 0,1 -0.8,0.452A2.359,2.359 0,0 1,34.4 76.742Z"
android:fillColor="#fff"/>
<path
android:pathData="M71.611,137.554c0.171,-3.587 0.422,-7.165 0.686,-10.741a52.679,52.679 0,0 1,0.46 -5.357,30.267 30.267,0 0,1 1.321,-5.257l0.156,0.018a30.164,30.164 0,0 1,0.087 5.42,52.6 52.6,0 0,1 -0.773,5.32c-0.559,3.543 -1.129,7.083 -1.781,10.615Z"
android:fillColor="#fff"/>
<path
android:pathData="M36.886,169.824l3.377,3.507a16.521,16.521 0,0 0,1.7 1.673,2.926 2.926,0 0,0 1.909,0.815 4.793,4.793 0,0 0,1.921 -0.919c0.686,-0.433 1.393,-0.835 2.094,-1.244 1.412,-0.806 2.843,-1.58 4.316,-2.286l0.053,0.084c-1.265,1.032 -2.572,2 -3.9,2.929 -0.668,0.459 -1.33,0.927 -2.012,1.363 -0.348,0.208 -0.652,0.461 -1.071,0.669a2.92,2.92 0,0 1,-1.393 0.344,3.829 3.829,0 0,1 -2.4,-1.2 16.488,16.488 0,0 1,-1.638 -1.858l-3.033,-3.814Z"
android:fillColor="#fff"/>
<path
android:pathData="M110.889,58.131 L106.482,86.01l-4.513,27.86c-1.5,9.289 -2.87,18.6 -4.619,27.842 -0.882,4.621 -1.764,9.242 -2.737,13.847l-1.463,6.907c-0.53,2.295 -1.021,4.6 -1.586,6.886l-0.212,-0.037c0.24,-2.346 0.555,-4.678 0.83,-7.017l0.952,-7c0.637,-4.663 1.366,-9.311 2.095,-13.958 1.471,-9.293 3.318,-18.52 5.043,-27.768l5.15,-27.75 5.255,-27.732Z"
android:fillColor="#fffdea"/>
<group>
<clip-path
android:pathData="M93.732,189.375H33.21a3.051,3.051 0,0 1,-3.006 -2.528L8.06,59.4l6.883,-1.652a71.493,71.493 0,0 1,21.19 -1.88A108.184,108.184 0,0 1,56.993 59.5l18.68,5.757A71.9,71.9 0,0 0,92.157 68.3a56.33,56.33 0,0 0,8.061 -0.062,42.446 42.446,0 0,0 5.945,-0.9 33.627,33.627 0,0 0,4.413 -1.326l7.653,-2.851L96.737,186.847A3.05,3.05 0,0 1,93.732 189.375Z"/>
<path
android:pathData="M9.969,88.778L36.118,68.868A4.247,4.247 97.714,0 1,42.07 69.674L61.98,95.823A4.247,4.247 97.714,0 1,61.174 101.775L35.025,121.685A4.247,4.247 97.714,0 1,29.073 120.879L9.163,94.73A4.247,4.247 97.714,0 1,9.969 88.778z"
android:strokeAlpha="0.54"
android:fillColor="#fff"
android:fillAlpha="0.54"/>
<path
android:pathData="M22.648,148.069L49.331,129.787A4.179,4.179 100.581,0 1,55.14 130.872L73.423,157.554A4.179,4.179 100.581,0 1,72.338 163.363L45.655,181.646A4.179,4.179 100.581,0 1,39.846 180.561L21.563,153.879A4.179,4.179 100.581,0 1,22.648 148.069z"
android:strokeAlpha="0.54"
android:fillColor="#fff"
android:fillAlpha="0.54"/>
</group>
<path
android:pathData="M121.038,43.684m-33.059,0a33.059,33.059 0,1 1,66.118 0a33.059,33.059 0,1 1,-66.118 0"
android:fillColor="#fede0d"/>
<path
android:pathData="M121.038,43.684m-31.728,0a31.728,31.728 0,1 1,63.456 0a31.728,31.728 0,1 1,-63.456 0"
android:fillColor="#fff063"/>
<path
android:pathData="M121.038,43.684m-29.06,0a29.06,29.06 0,1 1,58.12 0a29.06,29.06 0,1 1,-58.12 0"
android:fillColor="#fffacb"/>
<path
android:pathData="M139.836,28.1a2.093,2.093 0,0 0,0.4 -3.1,22.925 22.925,0 0,0 -12.528,-8.087 1.367,1.367 0,0 0,-1.666 1.108l-3.676,20.958a0.66,0.66 0,0 0,1.029 0.654Z"
android:fillColor="#fff063"/>
<path
android:pathData="M147.739,44.921a23.467,23.467 0,0 0,-3.315 -14.941,1.367 1.367,0 0,0 -1.975,-0.42L126.021,41.086a0.861,0.861 0,0 0,0.345 1.553l19.766,3.466A1.373,1.373 0,0 0,147.739 44.921Z"
android:fillColor="#fff063"/>
<path
android:pathData="M101.342,59.286a1.368,1.368 0,0 0,-0.277 2A23.348,23.348 0,0 0,113.9 69.435a1.373,1.373 0,0 0,1.66 -1.108L119,48.738a0.882,0.882 0,0 0,-1.375 -0.874Z"
android:fillColor="#fff063"/>
<path
android:pathData="M146.851,50.861a1.383,1.383 0,0 0,-1.1 -1.688l-21.088,-3.7a0.846,0.846 0,0 0,-0.838 1.319l11.8,16.826a2.176,2.176 0,0 0,3.2 0.4A24.771,24.771 0,0 0,146.851 50.861Z"
android:fillColor="#fff063"/>
<path
android:pathData="M118.972,70.326a23.532,23.532 0,0 0,14.964 -3.32,1.378 1.378,0 0,0 0.423,-1.991L123.056,48.9a1.041,1.041 0,0 0,-1.878 0.418l-3.4,19.385A1.384,1.384 0,0 0,118.972 70.326Z"
android:fillColor="#fff063"/>
<path
android:pathData="M95.847,41.488a1.375,1.375 0,0 0,-1.607 1.2c-0.438,3.963 1.937,10.615 3.244,13.9a1.683,1.683 0,0 0,2.532 0.754l15.7,-11.015a0.781,0.781 0,0 0,-0.313 -1.408Z"
android:fillColor="#fff063"/>
<path
android:pathData="M102.787,23.789A23.9,23.9 0,0 0,94.388 37,1.366 1.366,0 0,0 95.5,38.663l20.111,3.527a0.89,0.89 0,0 0,0.882 -1.388L104.763,24.086A1.366,1.366 0,0 0,102.787 23.789Z"
android:fillColor="#fff063"/>
<path
android:pathData="M123.4,18.371a1.382,1.382 0,0 0,-1.117 -1.594,20.27 20.27,0 0,0 -14.759,3.259 1.554,1.554 0,0 0,-0.443 2.208L118.665,38.76a0.666,0.666 0,0 0,1.2 -0.267Z"
android:fillColor="#fff063"/>
<path
android:pathData="M134.618,52.354c-0.547,-0.164 -2.143,-0.567 -2.866,-0.749a0.16,0.16 0,0 0,-0.177 0.235c0.363,0.634 1.16,1.973 1.409,2.391a2.537,2.537 0,0 0,0.185 0.271,1.682 1.682,0 0,0 0.172,0.2 1.393,1.393 0,0 0,2.053 -0.14,1.449 1.449,0 0,0 -0.408,-2.029l-0.026,-0.018A1.191,1.191 0,0 0,134.618 52.354Z"
android:fillColor="#fffacb"/>
<path
android:pathData="M116.505,27.437c0.3,0.581 1.252,2.216 1.683,2.955a0.183,0.183 0,0 0,0.335 -0.042c0.23,-0.807 0.691,-2.535 0.835,-3.075a3.089,3.089 0,0 0,0.074 -0.369,2.174 2.174,0 0,0 0.027,-0.3A1.6,1.6 0,0 0,117.7 25.03a1.663,1.663 0,0 0,-1.339 1.962l0,0.036A1.42,1.42 0,0 0,116.505 27.437Z"
android:fillColor="#fffacb"/>
<path
android:pathData="M106.764,49.035c0.408,-0.308 1.544,-1.246 2.057,-1.672a0.143,0.143 0,0 0,-0.075 -0.252c-0.65,-0.073 -2.038,-0.207 -2.471,-0.249a2.626,2.626 0,0 0,-0.294 -0.01,1.678 1.678,0 0,0 -0.235,0.018 1.247,1.247 0,0 0,-0.985 1.556,1.3 1.3,0 0,0 1.68,0.779l0.026,-0.008A1.113,1.113 0,0 0,106.764 49.035Z"
android:fillColor="#fffacb"/>
</vector>

Просмотреть файл

@ -0,0 +1,27 @@
<!--
~ Copyright (C) 2021 The Android Open Source Project.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="160dp"
android:height="200dp"
android:viewportWidth="160"
android:viewportHeight="200">
<path
android:pathData="M114.833,183.85H45.167a3.511,3.511 0,0 1,-3.459 -2.91L13.789,20.262a3.511,3.511 0,0 1,3.459 -4.112h125.5a3.511,3.511 0,0 1,3.459 4.112L118.292,180.94A3.511,3.511 0,0 1,114.833 183.85Z"
android:fillColor="#69cdd8"/>
<path
android:pathData="M133.045,32.779l-5.109,32.083 -5.223,32.065c-1.732,10.689 -3.334,21.4 -5.336,32.044 -1.008,5.32 -2.016,10.641 -3.122,15.944l-1.662,7.954c-0.6,2.643 -1.156,5.294 -1.792,7.931l-0.226,-0.039c0.29,-2.7 0.66,-5.38 0.988,-8.071l1.119,-8.049c0.748,-5.365 1.593,-10.713 2.438,-16.062 1.706,-10.694 3.812,-21.319 5.787,-31.966l5.9,-31.947 6.013,-31.927Z"
android:fillColor="#bbeef4"/>
</vector>

Просмотреть файл

@ -0,0 +1,69 @@
<!--
~ Copyright (C) 2021 The Android Open Source Project.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="160dp"
android:height="200dp"
android:viewportWidth="160"
android:viewportHeight="200">
<path
android:pathData="M146.024,135.476l0,0q-0.227,0.27 -0.456,0.539 -2.61,3.054 -5.512,5.961c-26.3,26.3 -62.711,34.639 -90.614,23.353h0l-0.024,-0.01q-0.511,-0.207 -1.02,-0.424c-9.728,-3.955 -14.008,-3.271 -14.022,-3.269a13.123,13.123 0,0 1,-15.04 -14.407c0.1,-0.951 0.569,-6.259 -0.741,-9.469q-0.287,-0.531 -0.562,-1.068l0,0h0c-14.576,-28.437 -6.9,-67.77 21.027,-95.7a102.857,102.857 0,0 1,9.072 -8.064l0.015,-0.011c0.168,-0.133 0.338,-0.267 0.507,-0.4 12.342,-9.134 42.458,5.14 68.529,32.82C143.084,92.837 155.537,123.538 146.024,135.476Z"
android:fillColor="#fede0d"/>
<path
android:pathData="M146.024,135.476l0,0c-0.147,0.184 -0.3,0.363 -0.456,0.539q-0.332,0.369 -0.694,0.71c-11.577,10.9 -42.744,-3.385 -69.615,-31.915S35.987,44.32 47.564,33.417q0.273,-0.258 0.562,-0.5l0.015,-0.011c0.165,-0.138 0.334,-0.27 0.507,-0.4 12.342,-9.134 42.458,5.14 68.529,32.82C143.084,92.837 155.537,123.538 146.024,135.476Z"
android:fillColor="#fff063"/>
<path
android:pathData="M115.456,66.811c21.156,22.462 32.54,47.255 28.673,60.22a11.606,11.606 0,0 1,-8.9 8.38c-13.174,3.084 -37.241,-9.763 -58.4,-32.225 -24.7,-26.228 -36.082,-55.632 -25.417,-65.677S90.753,40.583 115.456,66.811Z"
android:fillColor="#fffacb"/>
<path
android:pathData="M55.081,49.75c-1.426,-1.2 -2.38,-2.923 -2.05,-3.7a11.324,11.324 0,0 1,6.818 -6.422c0.793,-0.282 2.451,0.772 3.569,2.268l23.5,31.44c1.916,2.563 0.582,3.82 -1.862,1.754Z"
android:fillColor="#fff063"/>
<path
android:pathData="M137.21,120.246c1.426,1.2 2.38,2.923 2.05,3.7a11.324,11.324 0,0 1,-6.818 6.422c-0.794,0.283 -2.451,-0.772 -3.569,-2.268l-23.5,-31.44c-1.916,-2.563 -0.582,-3.819 1.862,-1.753Z"
android:fillColor="#fff063"/>
<path
android:pathData="M66.611,41.638c-1.041,-1.5 -1,-2.695 0.089,-2.566a38.69,38.69 0,0 1,7.013 1.568A61.217,61.217 0,0 1,81.5 43.733c1.348,0.638 3.579,2.912 3.951,4.2l7.078,26.546c0.637,2.213 -2.259,1.3 -4.042,-1.273Z"
android:fillColor="#fff063"/>
<path
android:pathData="M125.68,128.358c1.041,1.5 1,2.695 -0.089,2.566a38.664,38.664 0,0 1,-7.013 -1.567,61.377 61.377,0 0,1 -7.785,-3.094c-1.348,-0.638 -4.459,-3.472 -4.831,-4.764L99.124,95.04c-0.637,-2.213 2.9,-0.828 4.682,1.746Z"
android:fillColor="#fff063"/>
<path
android:pathData="M87.418,48.4c-0.259,-1.226 2.763,0.248 4.2,1.235q4.246,2.919 8.65,6.5c2.927,2.388 5.771,4.9 8.509,7.5 1.39,1.318 3.424,4.092 2.908,4.686L99.559,79.691c-0.884,1.018 -4.242,-1.721 -4.686,-3.823Z"
android:fillColor="#fff063"/>
<path
android:pathData="M102.851,119.89c0.292,1.262 -0.743,1.455 -2.232,0.412q-4.4,-3.081 -8.977,-6.849c-3.043,-2.511 -6,-5.143 -8.857,-7.865 -1.449,-1.381 -3.92,-5.418 -3.406,-6.014L91.838,89.357c0.88,-1.023 4.37,1.857 4.871,4.018Z"
android:fillColor="#fff063"/>
<path
android:pathData="M113.394,69.956c0.632,-0.471 3.3,1.932 4.727,3.6 2.8,3.284 5.508,6.667 8.086,10.125s4.921,6.846 7.024,10.14c1.067,1.671 0.849,2.732 -0.465,2.287l-27.627,-9.339c-2.252,-0.761 -5.209,-4.727 -4.127,-5.534Z"
android:fillColor="#fff063"/>
<path
android:pathData="M77.489,98.125c-0.623,0.479 -2.23,-0.37 -3.46,-1.833 -2.424,-2.884 -4.753,-5.866 -6.956,-8.925s-4.189,-6.07 -5.957,-9.007c-0.9,-1.49 -0.624,-2.493 0.583,-2.162l25.374,6.947c2.069,0.566 4.6,4.075 3.527,4.9Z"
android:fillColor="#fff063"/>
<path
android:pathData="M133.055,98.67a6.882,6.882 0,0 1,3.405 3.418,61.318 61.318,0 0,1 2.622,7.957 38.63,38.63 0,0 1,1.145 7.094c0.064,1.1 -1.129,1.064 -2.566,-0.065L107.454,93.35c-2.463,-1.934 -3.2,-4.879 -1.029,-4.111Z"
android:fillColor="#fff063"/>
<path
android:pathData="M60.587,73.635c-1.267,-0.449 -4.2,-4.344 -4.757,-5.727a61.345,61.345 0,0 1,-2.621 -7.956,38.64 38.64,0 0,1 -1.145,-7.095c-0.064,-1.1 1.129,-1.064 2.566,0.065L84.837,76.646C87.3,78.58 88.066,82.059 85.9,81.29Z"
android:fillColor="#fff063"/>
<path
android:pathData="M123.764,113.006c-0.465,-0.245 -1.825,-0.9 -2.441,-1.191a0.112,0.112 0,0 0,-0.154 0.157c0.305,0.6 0.973,1.861 1.182,2.257 0.047,0.089 0.1,0.175 0.155,0.26a2.089,2.089 0,0 0,0.145 0.2,1.245 1.245,0 0,0 1.755,0.3c0.394,-0.4 0.274,-1.169 -0.33,-1.757l-0.021,-0.02A1.4,1.4 0,0 0,123.764 113.006Z"
android:fillColor="#fffacb"/>
<path
android:pathData="M99.26,68.308c-0.04,0.955 -0.075,3.684 -0.089,4.918 0,0.234 0.187,0.286 0.3,0.084 0.608,-1.048 1.883,-3.305 2.281,-4.011q0.135,-0.239 0.252,-0.492c0.076,-0.164 0.059,-0.118 0.178,-0.417 0.525,-1.327 0.095,-2.777 -0.685,-2.991s-1.725,0.713 -2.138,2.214l-0.014,0.052A3.327,3.327 0,0 0,99.26 68.308Z"
android:fillColor="#fffacb"/>
<path
android:pathData="M91.774,100.246c0,-0.579 -0.058,-2.249 -0.087,-3a0.162,0.162 0,0 0,-0.279 -0.106c-0.514,0.534 -1.59,1.692 -1.927,2.055a2.912,2.912 0,0 0,-0.211 0.257,1.943 1.943,0 0,0 -0.146,0.224 1.414,1.414 0,0 0,0.722 1.96,1.472 1.472,0 0,0 1.859,-0.977l0.01,-0.03A1.245,1.245 0,0 0,91.774 100.246Z"
android:fillColor="#fffacb"/>
</vector>

Просмотреть файл

@ -0,0 +1,156 @@
<!--
~ Copyright (C) 2021 The Android Open Source Project.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="160dp"
android:height="200dp"
android:viewportWidth="160"
android:viewportHeight="200">
<path
android:pathData="M117.621,69.862A40.639,40.639 0,1 0,41.114 50.753a40.925,40.925 0,0 0,0.638 7.215A30.9,30.9 0,1 0,76.8 108.594a29.806,29.806 0,1 0,40.826 -38.732Z"
android:fillColor="#87bc4b"/>
<path
android:pathData="M80,167.81L80,39.054"
android:strokeWidth="6.089"
android:fillColor="#00000000"
android:strokeColor="#68493f"
android:strokeLineCap="round"/>
<path
android:pathData="M79.918,106.668a26.017,26.017 0,0 1,26.017 -26.016"
android:strokeWidth="6.089"
android:fillColor="#00000000"
android:strokeColor="#68493f"
android:strokeLineCap="round"/>
<path
android:pathData="M60.685,63.353A19.223,19.223 0,0 1,79.918 82.587"
android:strokeWidth="6.089"
android:fillColor="#00000000"
android:strokeColor="#68493f"
android:strokeLineCap="round"/>
<path
android:pathData="M59.182,187.95 L45.43,154.305h68.977L100.655,187.95a3.11,3.11 0,0 1,-2.88 1.934H62.062A3.11,3.11 0,0 1,59.182 187.95Z"
android:fillColor="#02b5c8"/>
<path
android:pathData="M44.665,146.588L115.171,146.588A2.421,2.421 0,0 1,117.592 149.009L117.592,154.184A2.421,2.421 0,0 1,115.171 156.605L44.665,156.605A2.421,2.421 0,0 1,42.244 154.184L42.244,149.009A2.421,2.421 0,0 1,44.665 146.588z"
android:fillColor="#02a1b0"/>
<path
android:pathData="M61.007,102.268l-0,0a0,0 0,0 1,-0 0l-0,0A10.279,10.279 51.878,0 1,52.034 90.833l-0,0a0,0 0,0 1,-0 0l-0,0A10.279,10.279 51.878,0 1,61.007 102.268Z"
android:fillColor="#96ca54"/>
<path
android:pathData="M52.618,103.095l-0,0a0,0 0,0 1,-0 0l-0,0a8.174,8.174 91.611,0 1,0.325 -11.555l-0,0a0,0 0,0 1,-0 0l-0,0A8.174,8.174 91.611,0 1,52.618 103.095Z"
android:fillColor="#96ca54"/>
<path
android:pathData="M56.268,81.041c-3.506,-2.831 -7.9,-3.478 -10.9,-1.887h0q-0.206,0.11 -0.4,0.232a4.888,4.888 0,0 1,-1.012 0.286h0a1.4,1.4 0,0 0,-1.214 0.5,1.425 1.425,0 0,0 -0.163,1.487 1.132,1.132 0,0 1,-0.037 0.594c-0.077,0.184 -0.144,0.373 -0.2,0.565h0c-1.008,3.289 0.543,7.522 4.1,10.393 3.656,2.953 8.274,3.53 11.274,1.671h0l0.112,-0.072a2.7,2.7 0,0 1,1.068 -0.154,1.37 1.37,0 0,0 1.392,-1.808 3.3,3.3 0,0 1,0.137 -1.61c0.011,-0.04 0.021,-0.079 0.031,-0.119v0h0C61.275,87.879 59.711,83.821 56.268,81.041Z"
android:fillColor="#fede0d"/>
<path
android:pathData="M46.008,89.11c0.286,0.19 0.417,0.271 0.634,0.229 0.043,-0.009 0.122,-0.075 0.049,-0.192 -0.122,-0.2 -0.981,-0.917 -1.141,-0.734S45.815,88.981 46.008,89.11Z"
android:fillColor="#fff063"/>
<path
android:pathData="M48.226,93.066c0.286,0.191 0.417,0.272 0.633,0.229 0.044,-0.008 0.122,-0.075 0.05,-0.191 -0.122,-0.195 -0.981,-0.917 -1.141,-0.735S48.033,92.938 48.226,93.066Z"
android:fillColor="#fff063"/>
<path
android:pathData="M44.538,89.119c0.222,0.148 0.324,0.211 0.493,0.178 0.034,-0.007 0.095,-0.058 0.038,-0.149 -0.1,-0.152 -0.763,-0.713 -0.887,-0.571S44.388,89.019 44.538,89.119Z"
android:fillColor="#fff063"/>
<path
android:pathData="M46.006,90.408a2.613,2.613 0,0 0,0.371 0.133c0.144,0.048 0.2,-0.058 0.146,-0.146 -0.08,-0.147 -0.69,-0.667 -0.823,-0.512S45.81,90.325 46.006,90.408Z"
android:fillColor="#fff063"/>
<path
android:pathData="M48.888,92.249c0.208,0.131 0.3,0.185 0.488,0.117a0.132,0.132 0,0 0,0.067 -0.178c-0.073,-0.157 -0.678,-0.684 -0.835,-0.5S48.748,92.161 48.888,92.249Z"
android:fillColor="#fff063"/>
<path
android:pathData="M47.367,91.527c0.113,0.071 0.165,0.1 0.265,0.064a0.073,0.073 0,0 0,0.036 -0.1c-0.039,-0.085 -0.368,-0.371 -0.453,-0.271S47.291,91.479 47.367,91.527Z"
android:fillColor="#fff063"/>
<path
android:pathData="M49.391,90.712c0.192,0.132 0.279,0.188 0.412,0.177 0.027,0 0.072,-0.036 0.019,-0.11 -0.089,-0.124 -0.676,-0.608 -0.764,-0.51S49.261,90.623 49.391,90.712Z"
android:fillColor="#fff063"/>
<path
android:pathData="M46.307,91.743c0.113,0.071 0.165,0.1 0.265,0.063a0.072,0.072 0,0 0,0.037 -0.1c-0.04,-0.086 -0.369,-0.372 -0.454,-0.271S46.231,91.7 46.307,91.743Z"
android:fillColor="#fff063"/>
<path
android:pathData="M46.656,87.909c0.113,0.071 0.165,0.1 0.265,0.064a0.073,0.073 0,0 0,0.036 -0.1c-0.039,-0.086 -0.368,-0.371 -0.453,-0.271S46.58,87.861 46.656,87.909Z"
android:fillColor="#fff063"/>
<path
android:pathData="M47.734,89.409c0.15,0.094 0.219,0.133 0.351,0.084a0.1,0.1 0,0 0,0.048 -0.128c-0.052,-0.113 -0.487,-0.492 -0.6,-0.358S47.634,89.345 47.734,89.409Z"
android:fillColor="#fff063"/>
<path
android:pathData="M47.653,90.641c0.347,0.237 0.505,0.339 0.748,0.317 0.049,0 0.131,-0.068 0.035,-0.2 -0.16,-0.225 -1.22,-1.1 -1.383,-0.921S47.418,90.48 47.653,90.641Z"
android:fillColor="#fff063"/>
<path
android:pathData="M92.647,32.055l0,0a0,0 0,0 1,0 0l0,0A10.279,10.279 65.855,0 1,98.593 45.32l0,0a0,0 0,0 1,0 0l0,0A10.279,10.279 65.855,0 1,92.647 32.055Z"
android:fillColor="#96ca54"/>
<path
android:pathData="M100.988,33.278l0,0a0,0 0,0 1,0 0l0,0a8.174,8.174 105.588,0 1,-3.106 11.135l0,0a0,0 0,0 1,0 0l0,0A8.174,8.174 105.588,0 1,100.988 33.278Z"
android:fillColor="#96ca54"/>
<path
android:pathData="M94.692,53.224c2.8,3.706 6.8,5.624 9.872,5.025h0c0.14,-0.027 0.279,-0.06 0.415,-0.1a4.484,4.484 0,0 1,0.994 0.034h0a1.235,1.235 0,0 0,1.22 -0.109,1.286 1.286,0 0,0 0.4,-1.349 1.048,1.048 0,0 1,0.135 -0.546,5.429 5.429,0 0,0 0.284,-0.47h0c1.495,-2.788 0.756,-7.227 -2.086,-10.985 -2.923,-3.864 -7.144,-5.784 -10.262,-4.934h0c-0.04,0.01 -0.079,0.022 -0.117,0.033a2.6,2.6 0,0 1,-1.025 -0.174,1.218 1.218,0 0,0 -1.169,0.128 1.233,1.233 0,0 0,-0.436 1.155,3.055 3.055,0 0,1 -0.4,1.471l-0.049,0.1v0h0C91.16,45.308 91.94,49.585 94.692,53.224Z"
android:fillColor="#fede0d"/>
<path
android:pathData="M104.231,47.806c-0.231,-0.254 -0.339,-0.364 -0.559,-0.375 -0.045,0 -0.137,0.044 -0.095,0.174 0.072,0.219 0.731,1.127 0.93,0.988S104.387,47.978 104.231,47.806Z"
android:fillColor="#fff063"/>
<path
android:pathData="M102.827,44.072c-0.231,-0.254 -0.338,-0.364 -0.559,-0.375 -0.044,0 -0.137,0.043 -0.094,0.174 0.071,0.219 0.73,1.127 0.93,0.988S102.983,44.244 102.827,44.072Z"
android:fillColor="#fff063"/>
<path
android:pathData="M105.842,49.083c-0.18,-0.2 -0.264,-0.283 -0.435,-0.292 -0.035,0 -0.106,0.034 -0.073,0.135 0.055,0.171 0.568,0.877 0.723,0.769S105.963,49.216 105.842,49.083Z"
android:fillColor="#fff063"/>
<path
android:pathData="M101.988,44.705c-0.171,-0.177 -0.251,-0.253 -0.446,-0.231a0.132,0.132 0,0 0,-0.108 0.156c0.033,0.171 0.493,0.828 0.69,0.685S102.1,44.825 101.988,44.705Z"
android:fillColor="#fff063"/>
<path
android:pathData="M103.289,45.773c-0.092,-0.1 -0.136,-0.137 -0.242,-0.126a0.072,0.072 0,0 0,-0.058 0.085c0.017,0.093 0.267,0.45 0.374,0.373S103.352,45.838 103.289,45.773Z"
android:fillColor="#fff063"/>
<path
android:pathData="M104.37,45.82c-0.093,-0.1 -0.137,-0.138 -0.242,-0.126a0.072,0.072 0,0 0,-0.059 0.085c0.018,0.093 0.268,0.45 0.375,0.372S104.432,45.885 104.37,45.82Z"
android:fillColor="#fff063"/>
<path
android:pathData="M103.105,49.456c-0.092,-0.1 -0.136,-0.137 -0.242,-0.126a0.072,0.072 0,0 0,-0.058 0.085c0.018,0.093 0.267,0.45 0.374,0.372S103.168,49.521 103.105,49.456Z"
android:fillColor="#fff063"/>
<path
android:pathData="M102.421,47.74c-0.123,-0.127 -0.18,-0.182 -0.32,-0.166a0.1,0.1 0,0 0,-0.078 0.112c0.024,0.123 0.354,0.595 0.5,0.493S102.5,47.826 102.421,47.74Z"
android:fillColor="#fff063"/>
<path
android:pathData="M125.661,99.058l0,0a0,0 0,0 1,0 0l0,0a9.2,9.2 65.855,0 1,-11.872 5.322l0,0a0,0 0,0 1,0 0l0,0A9.2,9.2 65.855,0 1,125.661 99.058Z"
android:fillColor="#96ca54"/>
<path
android:pathData="M124.566,106.521l0,0a0,0 0,0 1,0 0l0,0a7.313,7.313 105.588,0 1,-9.962 -2.779l0,0a0,0 0,0 1,0 0l0,0A7.313,7.313 105.588,0 1,124.566 106.521Z"
android:fillColor="#96ca54"/>
<path
android:pathData="M107.812,99.2c-3.512,2.656 -5.4,6.35 -4.93,9.133h0c0.022,0.127 0.048,0.252 0.079,0.375a4.034,4.034 0,0 1,-0.059 0.907h0a1.093,1.093 0,0 0,0.067 1.108,1.152 1.152,0 0,0 1.239,0.329 0.945,0.945 0,0 1,0.5 0.108,4.614 4.614,0 0,0 0.428,0.246h0c2.542,1.285 6.675,0.489 10.236,-2.205 3.662,-2.769 5.559,-6.667 4.857,-9.484h0c-0.009,-0.035 -0.019,-0.07 -0.028,-0.1a2.418,2.418 0,0 1,0.19 -0.939,1.076 1.076,0 0,0 -0.087,-1.061 1.093,1.093 0,0 0,-1.057 -0.365,2.781 2.781,0 0,1 -1.353,-0.323l-0.093,-0.042h0C115.245,95.764 111.26,96.593 107.812,99.2Z"
android:fillColor="#fede0d"/>
<path
android:pathData="M115.523,107.783c0.268,-0.245 0.384,-0.359 0.4,-0.592 0,-0.047 -0.046,-0.145 -0.184,-0.1 -0.231,0.075 -1.192,0.773 -1.045,0.984S115.341,107.948 115.523,107.783Z"
android:fillColor="#fff063"/>
<path
android:pathData="M112.224,109.236a2.646,2.646 0,0 0,0.232 -0.347c0.086,-0.136 -0.009,-0.215 -0.112,-0.188 -0.172,0.045 -0.862,0.539 -0.737,0.715S112.089,109.416 112.224,109.236Z"
android:fillColor="#fff063"/>
<path
android:pathData="M113.722,108.124c0.1,-0.1 0.146,-0.144 0.133,-0.256a0.076,0.076 0,0 0,-0.09 -0.062c-0.1,0.019 -0.475,0.283 -0.394,0.4S113.654,108.19 113.722,108.124Z"
android:fillColor="#fff063"/>
<path
android:pathData="M113.4,105.837c0.184,-0.163 0.264,-0.239 0.287,-0.378 0,-0.028 -0.019,-0.083 -0.109,-0.048 -0.15,0.061 -0.8,0.539 -0.719,0.655S113.278,105.947 113.4,105.837Z"
android:fillColor="#fff063"/>
<path
android:pathData="M113.673,109.268c0.1,-0.1 0.145,-0.145 0.133,-0.256a0.076,0.076 0,0 0,-0.09 -0.062c-0.1,0.018 -0.476,0.283 -0.394,0.4S113.6,109.334 113.673,109.268Z"
android:fillColor="#fff063"/>
<path
android:pathData="M109.825,107.929c0.1,-0.1 0.145,-0.144 0.133,-0.256a0.078,0.078 0,0 0,-0.09 -0.062c-0.1,0.019 -0.476,0.284 -0.394,0.4S109.756,108 109.825,107.929Z"
android:fillColor="#fff063"/>
<path
android:pathData="M111.641,107.205c0.134,-0.129 0.192,-0.191 0.175,-0.339a0.1,0.1 0,0 0,-0.119 -0.082c-0.129,0.025 -0.629,0.375 -0.521,0.525S111.549,107.293 111.641,107.205Z"
android:fillColor="#fff063"/>
<path
android:pathData="M112.885,107.6c0.333,-0.3 0.478,-0.432 0.517,-0.688 0.008,-0.051 -0.037,-0.152 -0.2,-0.088 -0.272,0.108 -1.443,0.972 -1.3,1.186S112.66,107.8 112.885,107.6Z"
android:fillColor="#fff063"/>
</vector>

Двоичные данные
app/src/main/res/layout/._activity_main.xml Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2021 The Android Open Source Project.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/constraint_Layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lemon_select"
android:textSize="18sp"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/image_lemon_state"
app:layout_constraintBottom_toTopOf="@+id/image_lemon_state"/>
<ImageView
android:id="@+id/image_lemon_state"
android:layout_width="200dp"
android:layout_height="160dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.553"
app:layout_constraintVertical_bias="0.499" app:srcCompat="@drawable/lemon_tree"
app:layout_constrainedWidth="false"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Двоичные данные
app/src/main/res/mipmap-anydpi-v26/._ic_launcher_lemonade.xml Normal file

Двоичный файл не отображается.

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_lemonade_background"/>
<foreground android:drawable="@drawable/ic_launcher_lemonade_foreground"/>
</adaptive-icon>

Просмотреть файл

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_lemonade_background"/>
<foreground android:drawable="@drawable/ic_launcher_lemonade_foreground"/>
</adaptive-icon>

Двоичные данные
app/src/main/res/mipmap-hdpi/._ic_launcher_lemonade.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/mipmap-hdpi/._ic_launcher_lemonade_round.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/mipmap-hdpi/ic_launcher_lemonade.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 3.0 KiB

Двоичные данные
app/src/main/res/mipmap-hdpi/ic_launcher_lemonade_round.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 4.7 KiB

Двоичные данные
app/src/main/res/mipmap-mdpi/._ic_launcher_lemonade.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/mipmap-mdpi/._ic_launcher_lemonade_round.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/mipmap-mdpi/ic_launcher_lemonade.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.1 KiB

Двоичные данные
app/src/main/res/mipmap-mdpi/ic_launcher_lemonade_round.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 2.9 KiB

Двоичные данные
app/src/main/res/mipmap-xhdpi/._ic_launcher_lemonade.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/mipmap-xhdpi/._ic_launcher_lemonade_round.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/mipmap-xhdpi/ic_launcher_lemonade.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 4.3 KiB

Двоичные данные
app/src/main/res/mipmap-xhdpi/ic_launcher_lemonade_round.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.7 KiB

Двоичные данные
app/src/main/res/mipmap-xxhdpi/._ic_launcher_lemonade.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/mipmap-xxhdpi/._ic_launcher_lemonade_round.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/mipmap-xxhdpi/ic_launcher_lemonade.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.6 KiB

Двоичные данные
app/src/main/res/mipmap-xxhdpi/ic_launcher_lemonade_round.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 11 KiB

Двоичные данные
app/src/main/res/mipmap-xxxhdpi/._ic_launcher_lemonade.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/mipmap-xxxhdpi/._ic_launcher_lemonade_round.png Normal file

Двоичный файл не отображается.

Двоичные данные
app/src/main/res/mipmap-xxxhdpi/ic_launcher_lemonade.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 9.1 KiB

Двоичные данные
app/src/main/res/mipmap-xxxhdpi/ic_launcher_lemonade_round.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 15 KiB

Двоичные данные
app/src/main/res/values-night/._themes.xml Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,31 @@
<!--
~ Copyright (C) 2021 The Android Open Source Project.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Lemonade" parent="Theme.MaterialComponents.DayNight">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/yellow_primary</item>
<item name="colorPrimaryVariant">@color/yellow_dark</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_200</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше