Showing preview only (418K chars total). Download the full file or copy to clipboard to get everything.
Repository: serbelga/Material-Motion-Samples
Branch: main
Commit: 484b191bf6b2
Files: 122
Total size: 382.5 KB
Directory structure:
gitextract_nt8w2kbz/
├── .editorconfig
├── .github/
│ └── workflows/
│ └── android.yml
├── .gitignore
├── LICENSE
├── README.md
├── app/
│ ├── .gitignore
│ ├── build.gradle.kts
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── dev/
│ │ └── sergiobelda/
│ │ └── samples/
│ │ └── materialmotion/
│ │ ├── MainActivity.kt
│ │ ├── databinding/
│ │ │ └── BindingAdapters.kt
│ │ ├── messages/
│ │ │ ├── ContactsAdapter.kt
│ │ │ ├── Messages.kt
│ │ │ ├── MessagesActivity.kt
│ │ │ └── MessagesAdapter.kt
│ │ ├── music/
│ │ │ ├── AlbumFragment.kt
│ │ │ ├── AlbumsAdapter.kt
│ │ │ ├── AlbumsFragment.kt
│ │ │ ├── ArtistsAdapter.kt
│ │ │ ├── ArtistsFragment.kt
│ │ │ ├── MusicActivity.kt
│ │ │ ├── MusicData.kt
│ │ │ └── PlaylistsFragment.kt
│ │ ├── notes/
│ │ │ ├── AddNoteActivity.kt
│ │ │ ├── Note.kt
│ │ │ ├── NoteDetailActivity.kt
│ │ │ ├── NotesActivity.kt
│ │ │ └── NotesAdapter.kt
│ │ ├── planets/
│ │ │ ├── PlanetFragment.kt
│ │ │ ├── Planets.kt
│ │ │ ├── PlanetsActivity.kt
│ │ │ └── StepAdapter.kt
│ │ ├── sample/
│ │ │ ├── SampleItem.kt
│ │ │ └── SamplesAdapter.kt
│ │ ├── signin/
│ │ │ ├── SignInActivity.kt
│ │ │ ├── SignInFragment.kt
│ │ │ └── WelcomeFragment.kt
│ │ └── walkthrough/
│ │ ├── WalkthroughActivity.kt
│ │ └── WalkthroughFragment.kt
│ └── res/
│ ├── color/
│ │ └── step_selector.xml
│ ├── drawable/
│ │ ├── circle.xml
│ │ ├── ic_baseline_all_inclusive_24.xml
│ │ ├── ic_baseline_person_outline_24.xml
│ │ ├── ic_baseline_playlist_play_24.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_outline_album_24.xml
│ │ ├── ic_outline_edit_24.xml
│ │ ├── ic_outline_play_arrow_24.xml
│ │ ├── ic_round_account_circle_24.xml
│ │ ├── ic_round_add_24.xml
│ │ ├── ic_round_clear_24.xml
│ │ ├── ic_round_person_24.xml
│ │ ├── ic_round_save_24.xml
│ │ ├── step_selector.xml
│ │ ├── tab_dot.xml
│ │ ├── tab_dot_background.xml
│ │ ├── undraw_celebration.xml
│ │ ├── undraw_drag.xml
│ │ ├── undraw_social_sharing.xml
│ │ └── undraw_winners.xml
│ ├── drawable-v24/
│ │ └── ic_launcher_foreground.xml
│ ├── font/
│ │ ├── metropolis.xml
│ │ ├── metropolis_medium.otf
│ │ ├── metropolis_regular.otf
│ │ └── metropolis_semibold.otf
│ ├── layout/
│ │ ├── add_note_activity.xml
│ │ ├── album_fragment.xml
│ │ ├── albums_fragment.xml
│ │ ├── artists_fragment.xml
│ │ ├── item_album.xml
│ │ ├── item_artist.xml
│ │ ├── item_contact.xml
│ │ ├── item_message.xml
│ │ ├── item_note.xml
│ │ ├── item_sample.xml
│ │ ├── item_step.xml
│ │ ├── main_activity.xml
│ │ ├── messages_activity.xml
│ │ ├── music_activity.xml
│ │ ├── note_detail_activity.xml
│ │ ├── notes_activity.xml
│ │ ├── planet_fragment.xml
│ │ ├── planets_activity.xml
│ │ ├── playlists_fragment.xml
│ │ ├── sign_in_activity.xml
│ │ ├── sign_in_fragment.xml
│ │ ├── walkthrough_activity.xml
│ │ ├── walkthrough_fragment.xml
│ │ └── welcome_fragment.xml
│ ├── menu/
│ │ └── navigation_menu.xml
│ ├── mipmap-anydpi-v26/
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ ├── navigation/
│ │ └── nav_graph.xml
│ └── values/
│ ├── colors.xml
│ ├── dimens.xml
│ ├── font_certs.xml
│ ├── ic_launcher_background.xml
│ ├── shape.xml
│ ├── strings.xml
│ ├── styles.xml
│ └── type.xml
├── build-logic/
│ ├── .gitignore
│ ├── convention/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── main/
│ │ └── kotlin/
│ │ └── SpotlessConventionPlugin.kt
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ └── settings.gradle.kts
├── build.gradle.kts
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── renovate.json
├── settings.gradle.kts
└── spotless/
├── copyright.kt
├── copyright.kts
└── copyright.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
[*.{kt,kts}]
ktlint_standard_backing-property-naming = disabled
================================================
FILE: .github/workflows/android.yml
================================================
name: Android CI
on:
push:
branches:
- main
- develop
pull_request:
branches:
- main
- develop
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: set up JDK 17
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
================================================
FILE: .gitignore
================================================
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
/.idea/
/.kotlin/
================================================
FILE: LICENSE
================================================
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 2021 Sergio Belda Galbis
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.
================================================
FILE: README.md
================================================
<h1 align="center">Material Motion Samples</h1></br>
<h5 align="center">
A collection of samples using Material Components Motion for Android
</h5>
<p align="center">
<img src="https://github.com/serbelga/material_motion_samples/workflows/Android%20CI/badge.svg">
<img src="https://img.shields.io/badge/API-24%2B-brightgreen.svg?style=flat">
</p>
<p align="center">
<img width="260" src="./screenshots/menu.png">
</p>
<h2>Messages</h2>
Use Material Fade transition to show the Floating Action Button and Material Container Transform to transform the FAB into a menu
<p align="center">
<img align="center" src="./screenshots/fade_fab.gif" width="260">
<img align="center" width="260" src="./screenshots/fab_to_menu.gif">
</p>
<h2>Notes</h2>
Use Material Container Transform to transform a FAB into an Activity and a Material Card View into an Activity
<p align="center">
<img align="center" src="./screenshots/fab_to_activity.gif" width="260">
</p>
<h2>Walkthrough</h2>
Use Material Shared Axis X transition to introduce the main features of an Application
<p align="center">
<img align="center" src="./screenshots/shared_axis_x.gif" width="260">
</p>
<h2>Solar System</h2>
Use Material Shared Axis Y transition in a Material Stepper
<p align="center">
<img align="center" src="./screenshots/shared_axis_y.gif" width="260">
</p>
<h2>Sign In</h2>
Use Material Shared Axis Z to represent App's hierarchy. For example, a transition between the application when the user logs in or not
<p align="center">
<img align="center" src="./screenshots/shared_axis_z.gif" width="260">
</p>
<h2>Music</h2>
Use Material Fade Through to switch between views that do not have a strong relationship to each other and Material Container Transform with Android Navigation Component
<p align="center">
<img align="center" src="./screenshots/fade_through.gif" width="260">
<img align="center" src="./screenshots/navigation_container_transform.gif" width="260">
</p>
================================================
FILE: app/.gitignore
================================================
/build
================================================
FILE: app/build.gradle.kts
================================================
@Suppress("DSL_SCOPE_VIOLATION")
plugins {
alias(libs.plugins.androidApplication)
kotlin("android")
kotlin("kapt")
alias(libs.plugins.ksp)
alias(libs.plugins.navigationSafeArgs)
id("samples.materialmotion.spotless")
}
android {
compileSdk = 36
defaultConfig {
applicationId = "dev.sergiobelda.samples.materialmotion"
minSdk = 24
targetSdk = 36
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
buildFeatures {
viewBinding = true
dataBinding = true
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlin {
jvmToolchain(17)
}
namespace = "dev.sergiobelda.samples.materialmotion"
}
dependencies {
implementation(libs.androidx.appcompat)
implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.core.coreKtx)
implementation(libs.androidx.navigation.navigationFragmentKtx)
implementation(libs.androidx.navigation.navigationUiKtx)
implementation(libs.androidx.paletteKtx)
implementation(libs.google.material)
implementation(libs.glide)
ksp(libs.glide.compiler)
androidTestImplementation(libs.androidx.test.ext.junit)
androidTestImplementation(libs.androidx.test.espresso.core)
testImplementation(libs.junit)
}
================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.kts.
#
# 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
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name="dev.sergiobelda.samples.materialmotion.signin.SignInActivity"
android:screenOrientation="portrait" />
<activity
android:name="dev.sergiobelda.samples.materialmotion.walkthrough.WalkthroughActivity"
android:screenOrientation="portrait" />
<activity
android:name="dev.sergiobelda.samples.materialmotion.notes.NoteDetailActivity"
android:screenOrientation="portrait" />
<activity
android:name="dev.sergiobelda.samples.materialmotion.notes.AddNoteActivity"
android:screenOrientation="portrait" />
<activity
android:name="dev.sergiobelda.samples.materialmotion.notes.NotesActivity"
android:screenOrientation="portrait" />
<activity
android:name="dev.sergiobelda.samples.materialmotion.messages.MessagesActivity"
android:screenOrientation="portrait" />
<activity
android:name="dev.sergiobelda.samples.materialmotion.music.MusicActivity"
android:screenOrientation="portrait" />
<activity
android:name="dev.sergiobelda.samples.materialmotion.planets.PlanetsActivity"
android:screenOrientation="portrait" />
<activity
android:name="dev.sergiobelda.samples.materialmotion.MainActivity"
android:screenOrientation="portrait"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/MainActivity.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import dev.sergiobelda.samples.materialmotion.databinding.MainActivityBinding
import dev.sergiobelda.samples.materialmotion.sample.SampleItem
import dev.sergiobelda.samples.materialmotion.sample.SamplesAdapter
import dev.sergiobelda.samples.materialmotion.sample.samples
class MainActivity : AppCompatActivity() {
private lateinit var binding: MainActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = MainActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
val samplesAdapter =
SamplesAdapter(samples).apply {
listener =
object : SamplesAdapter.OnSampleClickListener {
override fun onSampleClick(sampleItem: SampleItem) {
startActivity(Intent(this@MainActivity, sampleItem.activity))
}
}
}
binding.recyclerView.apply {
layoutManager = LinearLayoutManager(this@MainActivity)
adapter = samplesAdapter
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/databinding/BindingAdapters.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.databinding
import android.widget.ImageView
import androidx.databinding.BindingAdapter
import com.bumptech.glide.Glide
@BindingAdapter("image_url")
fun imageUrl(
imageView: ImageView,
url: String,
) = Glide
.with(imageView)
.load(url)
.into(imageView)
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/messages/ContactsAdapter.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.messages
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import dev.sergiobelda.samples.materialmotion.databinding.ItemContactBinding
class ContactsAdapter(
private val items: List<Contact>,
) : RecyclerView.Adapter<ContactsAdapter.ViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
) = ViewHolder(
ItemContactBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false,
),
)
override fun getItemCount() = items.size
override fun onBindViewHolder(
holder: ViewHolder,
position: Int,
) = holder.bind(items[position])
inner class ViewHolder(
val binding: ItemContactBinding,
) : RecyclerView.ViewHolder(binding.root) {
fun bind(contact: Contact) {
binding.contact = contact
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/messages/Messages.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.messages
data class Message(
val id: Int,
val contact: Contact,
val body: String,
)
data class Contact(
val id: Int,
val name: String,
val email: String,
val image: String,
)
val contact1 =
Contact(
id = 1,
name = "Jacob",
email = "jacob@mail.com",
image = "https://picsum.photos/id/1012/300/300.jpg",
)
val contact2 =
Contact(
id = 2,
name = "Sophie",
email = "sophie@mail.com",
image = "https://picsum.photos/id/237/300/300.jpg",
)
val contact3 =
Contact(
id = 3,
name = "Ada",
email = "ada@mail.com",
image = "https://picsum.photos/id/786/300/300.jpg",
)
val contact4 =
Contact(
id = 4,
name = "William",
email = "william@mail.com",
image = "https://picsum.photos/id/1035/300/300.jpg",
)
val message1 =
Message(
id = 1,
contact = contact1,
body = "Hello Friend",
)
val message2 =
Message(
id = 2,
contact = contact2,
body = "Hi!",
)
val message3 =
Message(
id = 3,
contact = contact3,
body = "...",
)
val message4 =
Message(
id = 4,
contact = contact4,
body = "Hey!",
)
val contacts = listOf(contact1, contact2, contact3, contact4)
val favContacts = listOf(contact1, contact2, contact3)
val messages = listOf(message1, message2, message3, message4)
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/messages/MessagesActivity.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.messages
import android.graphics.Color
import android.os.Bundle
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.transition.TransitionManager
import com.google.android.material.color.MaterialColors
import com.google.android.material.transition.MaterialContainerTransform
import com.google.android.material.transition.MaterialFade
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.MessagesActivityBinding
class MessagesActivity : AppCompatActivity() {
private lateinit var binding: MessagesActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = MessagesActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowTitleEnabled(false)
initClickListeners()
initRecyclerViews()
binding.floatingActionButton.post {
val transition =
MaterialFade().apply {
duration = 2000
}
TransitionManager.beginDelayedTransition(findViewById(android.R.id.content), transition)
binding.floatingActionButton.visibility = View.VISIBLE
}
}
private fun initClickListeners() {
binding.floatingActionButton.setOnClickListener {
val transition = buildContainerTransformation()
transition.startView = binding.floatingActionButton
transition.endView = binding.card
transition.addTarget(binding.card)
TransitionManager.beginDelayedTransition(findViewById(android.R.id.content), transition)
binding.card.visibility = View.VISIBLE
binding.fabScrim.visibility = View.VISIBLE
binding.floatingActionButton.visibility = View.INVISIBLE
}
binding.fabScrim.setOnClickListener {
val transition = buildContainerTransformation()
transition.startView = binding.card
transition.endView = binding.floatingActionButton
transition.addTarget(binding.floatingActionButton)
TransitionManager.beginDelayedTransition(binding.coordinator, transition)
binding.card.visibility = View.INVISIBLE
binding.fabScrim.visibility = View.INVISIBLE
binding.floatingActionButton.visibility = View.VISIBLE
}
}
private fun initRecyclerViews() {
binding.recyclerView.layoutManager = LinearLayoutManager(this)
binding.recyclerView.adapter = MessagesAdapter(messages)
binding.recyclerView.addOnScrollListener(
object : RecyclerView.OnScrollListener() {
/*
// When scroll down FAB disappears, when scroll up FAB appears
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (dy > 0) {
binding.floatingActionButton.hide()
} else {
binding.floatingActionButton.show()
}
}
*/
// When is dragging FAB disappears, when stops FAB appears
override fun onScrollStateChanged(
recyclerView: RecyclerView,
newState: Int,
) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
binding.floatingActionButton.show()
} else {
binding.floatingActionButton.hide()
}
}
},
)
binding.cardRecyclerView.layoutManager = LinearLayoutManager(this)
binding.cardRecyclerView.adapter = ContactsAdapter(favContacts)
}
private fun buildContainerTransformation() =
MaterialContainerTransform().apply {
containerColor = MaterialColors.getColor(binding.root, R.attr.colorSecondary)
scrimColor = Color.TRANSPARENT
duration = 300
interpolator = FastOutSlowInInterpolator()
fadeMode = MaterialContainerTransform.FADE_MODE_IN
}
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
android.R.id.home -> {
onBackPressedDispatcher.onBackPressed()
true
}
else -> {
true
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/messages/MessagesAdapter.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.messages
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import dev.sergiobelda.samples.materialmotion.databinding.ItemMessageBinding
class MessagesAdapter(
val items: List<Message>,
) : RecyclerView.Adapter<MessagesAdapter.ViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
) = ViewHolder(
ItemMessageBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false,
),
)
override fun getItemCount() = items.size
override fun onBindViewHolder(
holder: ViewHolder,
position: Int,
) = holder.bind(items[position])
inner class ViewHolder(
val binding: ItemMessageBinding,
) : RecyclerView.ViewHolder(binding.root) {
fun bind(message: Message) {
binding.message = message
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/music/AlbumFragment.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.music
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.navigation.fragment.navArgs
import androidx.palette.graphics.Palette
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.google.android.material.color.MaterialColors
import com.google.android.material.transition.MaterialContainerTransform
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.AlbumFragmentBinding
class AlbumFragment : Fragment() {
private val args: AlbumFragmentArgs by navArgs()
private lateinit var binding: AlbumFragmentBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
binding = DataBindingUtil.inflate(inflater, R.layout.album_fragment, container, false)
binding.lifecycleOwner = viewLifecycleOwner
return binding.root
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)
binding.albumFragmentRoot.transitionName = args.albumId.toString()
val album = albums.find { it.id == args.albumId }
binding.album = album
Glide
.with(requireContext())
.asBitmap()
.load(album?.image)
.into(
object : CustomTarget<Bitmap>() {
override fun onResourceReady(
resource: Bitmap,
transition: Transition<in Bitmap>?,
) {
val palette = Palette.from(resource).generate()
palette.darkVibrantSwatch?.let {
binding.collapsingToolbar.setBackgroundColor(it.rgb)
val color = requireContext().getColor(R.color.colorOnPrimary)
binding.collapsingToolbar.setCollapsedTitleTextColor(color)
binding.collapsingToolbar.setExpandedTitleColor(color)
} ?: palette.lightVibrantSwatch?.let {
binding.collapsingToolbar.setBackgroundColor(it.rgb)
}
}
override fun onLoadCleared(placeholder: Drawable?) {}
},
)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedElementEnterTransition = buildContainerTransform(true)
sharedElementReturnTransition = buildContainerTransform(false)
}
private fun buildContainerTransform(entering: Boolean) =
MaterialContainerTransform(requireContext(), entering).apply {
drawingViewId = R.id.nav_host_fragment
interpolator = FastOutSlowInInterpolator()
containerColor =
MaterialColors.getColor(
requireActivity().findViewById(android.R.id.content),
R.attr.colorSurface,
)
fadeMode = MaterialContainerTransform.FADE_MODE_OUT
duration = 300
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/music/AlbumsAdapter.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.music
import android.content.Context
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.palette.graphics.Palette
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.google.android.material.card.MaterialCardView
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.ItemAlbumBinding
class AlbumsAdapter(
private val items: List<Album>,
private val context: Context,
) : RecyclerView.Adapter<AlbumsAdapter.ViewHolder>() {
lateinit var albumClickListener: AlbumClickListener
inner class ViewHolder(
val binding: ItemAlbumBinding,
) : RecyclerView.ViewHolder(binding.root) {
fun bind(album: Album) {
binding.album = album
Glide
.with(context)
.asBitmap()
.load(album.image)
.into(
object : CustomTarget<Bitmap>() {
override fun onResourceReady(
resource: Bitmap,
transition: Transition<in Bitmap>?,
) {
val palette = Palette.from(resource).generate()
palette.darkVibrantSwatch?.let {
binding.albumCard.setCardBackgroundColor(it.rgb)
val color = context.getColor(R.color.colorOnPrimary)
binding.albumName.setTextColor(color)
} ?: palette.lightVibrantSwatch?.let {
binding.albumCard.setCardBackgroundColor(it.rgb)
}
}
override fun onLoadCleared(placeholder: Drawable?) {}
},
)
binding.albumCard.transitionName = album.id.toString()
binding.albumCard.setOnClickListener {
albumClickListener.onAlbumClick(album.id, binding.albumCard)
}
}
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
) = ViewHolder(
ItemAlbumBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false,
),
)
override fun getItemCount() = items.size
override fun onBindViewHolder(
holder: ViewHolder,
position: Int,
) = holder.bind(items[position])
interface AlbumClickListener {
fun onAlbumClick(
id: Int,
cardView: MaterialCardView,
)
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/music/AlbumsFragment.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.music
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.FragmentNavigatorExtras
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.GridLayoutManager
import com.google.android.material.card.MaterialCardView
import com.google.android.material.transition.MaterialFadeThrough
import dev.sergiobelda.samples.materialmotion.databinding.AlbumsFragmentBinding
class AlbumsFragment : Fragment() {
private var _binding: AlbumsFragmentBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enterTransition = MaterialFadeThrough()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
_binding = AlbumsFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)
postponeEnterTransition()
binding.recyclerView.post { startPostponedEnterTransition() }
val adapter = AlbumsAdapter(albums, requireContext())
adapter.albumClickListener =
object : AlbumsAdapter.AlbumClickListener {
override fun onAlbumClick(
id: Int,
cardView: MaterialCardView,
) {
val extras =
FragmentNavigatorExtras(
cardView to id.toString(),
)
val action = AlbumsFragmentDirections.navToAlbumFragment(id)
findNavController().navigate(action, extras)
}
}
binding.recyclerView.layoutManager = GridLayoutManager(requireContext(), 2)
binding.recyclerView.adapter = adapter
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/music/ArtistsAdapter.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.music
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import dev.sergiobelda.samples.materialmotion.databinding.ItemArtistBinding
class ArtistsAdapter(
var items: List<Artist>,
) : RecyclerView.Adapter<ArtistsAdapter.ViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
) = ViewHolder(
ItemArtistBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false,
),
)
override fun getItemCount() = items.size
override fun onBindViewHolder(
holder: ViewHolder,
position: Int,
) = holder.bind(items[position])
inner class ViewHolder(
var binding: ItemArtistBinding,
) : RecyclerView.ViewHolder(binding.root) {
fun bind(artist: Artist) {
binding.artist = artist
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/music/ArtistsFragment.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.music
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import com.google.android.material.transition.MaterialFadeThrough
import dev.sergiobelda.samples.materialmotion.databinding.ArtistsFragmentBinding
class ArtistsFragment : Fragment() {
private var _binding: ArtistsFragmentBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enterTransition = MaterialFadeThrough()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
_binding = ArtistsFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)
postponeEnterTransition()
binding.recyclerView.post { startPostponedEnterTransition() }
binding.recyclerView.layoutManager = GridLayoutManager(requireContext(), 2)
binding.recyclerView.adapter = ArtistsAdapter(artists)
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/music/MusicActivity.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.music
import android.os.Bundle
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController
import androidx.navigation.ui.NavigationUI
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.MusicActivityBinding
class MusicActivity : AppCompatActivity() {
private lateinit var binding: MusicActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = MusicActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.bottomNavigationView.inflateMenu(R.menu.navigation_menu)
val navController = findNavController(R.id.nav_host_fragment)
NavigationUI.setupWithNavController(
binding.bottomNavigationView,
navController,
)
navController.addOnDestinationChangedListener { _, destination, _ ->
when (destination.id) {
R.id.albumFragment -> {
binding.appbarLayout.setExpanded(false, true)
binding.bottomNavigationView.visibility = View.GONE
}
else -> {
binding.appbarLayout.setExpanded(true, true)
binding.bottomNavigationView.visibility = View.VISIBLE
}
}
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
android.R.id.home -> {
onBackPressedDispatcher.onBackPressed()
true
}
else -> {
true
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/music/MusicData.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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.
*/
@file:Suppress("ktlint:standard:max-line-length")
package dev.sergiobelda.samples.materialmotion.music
data class Artist(
val id: Int,
val name: String,
val image: String,
)
data class Album(
val id: Int,
val name: String,
val image: String,
)
val shiroi =
Album(
id = 1,
name = "Shiroi",
image = "https://img.discogs.com/EI7SfveNHws0ONsXJO9FLEpZFYc=/fit-in/600x536/filters:strip_icc():format(jpeg):mode_rgb():quality(90)/discogs-images/R-12841514-1544304275-9214.jpeg.jpg",
)
val wywh =
Album(
id = 2,
name = "Wish You Were Here",
image = "https://img.discogs.com/tQj6wwY11KUz3TUwq8DHOnZdWl0=/fit-in/600x600/filters:strip_icc():format(jpeg):mode_rgb():quality(90)/discogs-images/R-3354750-1477237778-6311.jpeg.jpg",
)
val jazzmaica =
Album(
id = 3,
name = "Jazzmaica",
image = "https://img.discogs.com/JQny678Vd6janet-PeNjrlK66z8=/fit-in/600x599/filters:strip_icc():format(jpeg):mode_rgb():quality(90)/discogs-images/R-8489874-1510971569-9261.jpeg.jpg",
)
val albums = listOf(shiroi, wywh, jazzmaica)
val snarky =
Artist(
id = 1,
name = "Snarky Puppy",
image = "https://is2-ssl.mzstatic.com/image/thumb/Features20/v4/bf/82/f8/bf82f863-1edd-626a-2d9b-8c76cbabdd83/mzl.pouxzkfo.jpg/1000x1000cc.jpg",
)
val yussef =
Artist(
id = 2,
name = "Yussef Dayes",
image = "https://is3-ssl.mzstatic.com/image/thumb/Music123/v4/ca/c7/96/cac7966f-dd10-d016-b146-6d8e8cf8fb70/pr_source.png/1000x1000cc.jpg",
)
val dubinc =
Artist(
id = 3,
name = "Dub Inc",
image = "https://is3-ssl.mzstatic.com/image/thumb/Music123/v4/34/75/9f/34759f94-c43b-1861-8fc3-12b2e40198b1/pr_source.png/1000x1000cc.jpg",
)
val cory =
Artist(
id = 4,
name = "Cory Henry",
image = "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/70/5e/fe/705efec8-c546-0534-64fa-77ee0c8fd99d/pr_source.png/1000x1000cc.jpg",
)
val artists = listOf(cory, dubinc, snarky, yussef)
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/music/PlaylistsFragment.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.music
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.google.android.material.transition.MaterialFadeThrough
import dev.sergiobelda.samples.materialmotion.R
class PlaylistsFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enterTransition = MaterialFadeThrough()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View = inflater.inflate(R.layout.playlists_fragment, container, false)
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/notes/AddNoteActivity.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.notes
import android.os.Bundle
import android.view.MenuItem
import android.view.Window
import androidx.appcompat.app.AppCompatActivity
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import com.google.android.material.color.MaterialColors
import com.google.android.material.transition.platform.MaterialArcMotion
import com.google.android.material.transition.platform.MaterialContainerTransform
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.AddNoteActivityBinding
class AddNoteActivity : AppCompatActivity() {
private lateinit var binding: AddNoteActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
binding = AddNoteActivityBinding.inflate(layoutInflater)
binding.coordinator.transitionName = "shared_element_end_root"
setEnterSharedElementCallback(MaterialContainerTransformSharedElementCallback())
window.sharedElementEnterTransition = buildContainerTransform()
window.sharedElementReturnTransition = buildContainerTransform()
setContentView(binding.coordinator)
super.onCreate(savedInstanceState)
setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_round_clear_24)
supportActionBar?.setDisplayShowTitleEnabled(false)
}
private fun buildContainerTransform() =
MaterialContainerTransform().apply {
addTarget(binding.coordinator)
setAllContainerColors(MaterialColors.getColor(binding.root, R.attr.colorSurface))
pathMotion = MaterialArcMotion()
duration = 500
interpolator = FastOutSlowInInterpolator()
fadeMode = MaterialContainerTransform.FADE_MODE_IN
}
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
android.R.id.home -> {
onBackPressedDispatcher.onBackPressed()
true
}
else -> {
true
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/notes/Note.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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.
*/
@file:Suppress("ktlint:standard:max-line-length")
package dev.sergiobelda.samples.materialmotion.notes
import androidx.annotation.ColorRes
import dev.sergiobelda.samples.materialmotion.R
data class Note(
val id: Int,
val title: String,
val body: String,
@ColorRes val colorRes: Int,
)
val note1 =
Note(
id = 1,
title = "ToDo 1",
body = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus scelerisque placerat nisl, nec semper felis ullamcorper vel. Nullam egestas ante nec tortor egestas mattis. Duis ut diam nec nibh sodales commodo at at diam. Nunc tempor eu lectus ut feugiat. Etiam eget ullamcorper est, at scelerisque lectus. Aliquam erat volutpat. Maecenas est urna, vestibulum non eros non, dignissim feugiat mi. Cras sit amet ex hendrerit, accumsan dolor in, bibendum erat. Maecenas ullamcorper ut risus eget congue. Vestibulum aliquam ipsum ut turpis efficitur, vel malesuada neque aliquam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean egestas justo id rutrum blandit. Vestibulum id orci libero. Aliquam pharetra sed mauris ac vehicula.",
colorRes = R.color.blue300,
)
val note2 =
Note(
id = 2,
title = "ToDo 2",
body = "Fusce hendrerit enim in eros congue, sed pharetra libero tempus. Integer accumsan euismod nibh non vestibulum. Curabitur finibus imperdiet nunc vel ornare. Ut maximus fringilla sapien in viverra. Aenean a nulla feugiat, hendrerit risus et, congue erat. Ut venenatis lorem sit amet volutpat sollicitudin. Donec ac lorem auctor sem mattis faucibus non ac ante. Phasellus id sem non ante bibendum porta non in tellus. Etiam pellentesque porta luctus.",
colorRes = R.color.amber300,
)
val note3 =
Note(
id = 3,
title = "ToDo 3",
body = "Praesent interdum dictum magna quis pretium. Suspendisse at cursus ante, id rutrum nunc. Nullam at lacinia nibh, nec gravida lectus. Quisque maximus vulputate leo, et sollicitudin turpis luctus pellentesque. Nullam vehicula sagittis magna, consectetur congue neque ullamcorper vel. Praesent sed vulputate nunc. Ut ligula lorem, lobortis tristique interdum at, mollis a dolor. Ut sed fringilla urna, id suscipit justo. Praesent ut tortor pharetra, laoreet metus non, iaculis mi. Duis vel lacus fermentum, porta neque id, ultricies arcu. Nunc interdum, est ac sodales tristique, elit urna feugiat dui, quis venenatis ante lorem ullamcorper mi. Nulla id condimentum lorem. Nunc ac scelerisque felis. Nam semper, mi et ultrices rutrum, neque odio molestie tortor, ac iaculis ante arcu eu elit. Phasellus imperdiet tortor quis aliquam ornare.",
colorRes = R.color.green300,
)
val notes = listOf(note1, note2, note3)
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/notes/NoteDetailActivity.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.notes
import android.os.Bundle
import android.view.MenuItem
import android.view.Window
import androidx.appcompat.app.AppCompatActivity
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import com.google.android.material.transition.platform.MaterialContainerTransform
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
import dev.sergiobelda.samples.materialmotion.databinding.NoteDetailActivityBinding
class NoteDetailActivity : AppCompatActivity() {
private lateinit var binding: NoteDetailActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
binding = NoteDetailActivityBinding.inflate(layoutInflater)
val noteId = intent.getIntExtra("noteId", 0)
binding.coordinator.transitionName = noteId.toString()
setEnterSharedElementCallback(MaterialContainerTransformSharedElementCallback())
window.sharedElementEnterTransition = buildContainerTransform()
window.sharedElementReturnTransition = buildContainerTransform()
setContentView(binding.root)
super.onCreate(savedInstanceState)
setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowTitleEnabled(false)
val note = notes.find { it.id == noteId }
binding.note = note
}
private fun buildContainerTransform() =
MaterialContainerTransform().apply {
addTarget(binding.coordinator)
duration = 300
interpolator = FastOutSlowInInterpolator()
fadeMode = MaterialContainerTransform.FADE_MODE_IN
}
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
android.R.id.home -> {
onBackPressedDispatcher.onBackPressed()
true
}
else -> {
true
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/notes/NotesActivity.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.notes
import android.content.Intent
import android.os.Bundle
import android.view.MenuItem
import android.view.Window
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityOptionsCompat
import androidx.recyclerview.widget.GridLayoutManager
import com.google.android.material.card.MaterialCardView
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
import dev.sergiobelda.samples.materialmotion.databinding.NotesActivityBinding
class NotesActivity : AppCompatActivity() {
private lateinit var binding: NotesActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
binding = NotesActivityBinding.inflate(layoutInflater)
setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback())
window.sharedElementsUseOverlay = false
setContentView(binding.root)
super.onCreate(savedInstanceState)
setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowTitleEnabled(false)
setClickListeners()
setRecyclerView()
}
private fun setRecyclerView() {
val adapter = NotesAdapter(notes)
adapter.noteClickListener =
object : NotesAdapter.NoteClickListener {
override fun onNoteClick(
id: Int,
noteCard: MaterialCardView,
) {
val intent = Intent(this@NotesActivity, NoteDetailActivity::class.java)
val options =
ActivityOptionsCompat.makeSceneTransitionAnimation(
this@NotesActivity,
noteCard,
id.toString(),
)
intent.putExtra("noteId", id)
startActivity(intent, options.toBundle())
}
}
binding.recyclerView.layoutManager = GridLayoutManager(this, 2)
binding.recyclerView.adapter = adapter
}
private fun setClickListeners() {
binding.addNoteFab.setOnClickListener {
val intent = Intent(this, AddNoteActivity::class.java)
val options =
ActivityOptionsCompat.makeSceneTransitionAnimation(
this,
binding.addNoteFab,
"shared_element_end_root",
)
startActivity(intent, options.toBundle())
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
android.R.id.home -> {
onBackPressedDispatcher.onBackPressed()
true
}
else -> {
true
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/notes/NotesAdapter.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.notes
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.card.MaterialCardView
import dev.sergiobelda.samples.materialmotion.databinding.ItemNoteBinding
class NotesAdapter(
private val items: List<Note>,
) : RecyclerView.Adapter<NotesAdapter.ViewHolder>() {
lateinit var noteClickListener: NoteClickListener
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
) = ViewHolder(
ItemNoteBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false,
),
)
override fun getItemCount() = items.size
override fun onBindViewHolder(
holder: ViewHolder,
position: Int,
) = holder.bind(items[position])
inner class ViewHolder(
val binding: ItemNoteBinding,
) : RecyclerView.ViewHolder(binding.root) {
fun bind(note: Note) {
binding.note = note
binding.noteCard.transitionName = note.id.toString()
binding.noteCard.setOnClickListener {
noteClickListener.onNoteClick(note.id, binding.noteCard)
}
}
}
interface NoteClickListener {
fun onNoteClick(
id: Int,
noteCard: MaterialCardView,
)
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/planets/PlanetFragment.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.planets
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.PlanetFragmentBinding
private const val ARG_PLANET_ID = "planet_id"
/**
* A simple [Fragment] subclass.
* Use the [PlanetFragment.newInstance] factory method to
* create an instance of this fragment.
*/
class PlanetFragment : Fragment() {
private lateinit var binding: PlanetFragmentBinding
private var planetId: Int? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
planetId = it.getInt(ARG_PLANET_ID)
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
binding = DataBindingUtil.inflate(inflater, R.layout.planet_fragment, container, false)
binding.lifecycleOwner = viewLifecycleOwner
return binding.root
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)
val planet = planets.singleOrNull { it.id == planetId }
planet?.let {
binding.planet = it
}
}
companion object {
/**
* @param planetId
* @return A new instance of fragment StepFragment.
*/
@JvmStatic
fun newInstance(planetId: Int) =
PlanetFragment().apply {
arguments =
Bundle().apply {
putInt(ARG_PLANET_ID, planetId)
}
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/planets/Planets.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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.
*/
@file:Suppress("ktlint:standard:max-line-length")
package dev.sergiobelda.samples.materialmotion.planets
data class Planet(
val id: Int,
val name: String,
val mainImage: String,
val description: String,
)
val mercury =
Planet(
id = 1,
name = "Mercury",
mainImage = "https://solarsystem.nasa.gov/system/resources/detail_files/771_PIA16853.jpg",
description =
"The smallest planet in our solar system and nearest to the Sun, Mercury is only slightly larger than Earth's Moon." +
"\n" +
"From the surface of Mercury, the Sun would appear more than three times as large as it does when viewed from Earth, and the sunlight would be as much as seven times brighter. Despite its proximity to the Sun, Mercury is not the hottest planet in our solar system – that title belongs to nearby Venus, thanks to its dense atmosphere.",
)
val venus =
Planet(
id = 2,
name = "Venus",
mainImage = "https://solarsystem.nasa.gov/system/resources/detail_files/775_PIA00271_detail.jpg",
description = "Second planet from the Sun and our closest planetary neighbor, Venus is similar in structure and size to Earth, but it is now a very different world. Venus spins slowly in the opposite direction most planets do. Its thick atmosphere traps heat in a runaway greenhouse effect, making it the hottest planet in our solar system—with surface temperatures hot enough to melt lead. Glimpses below the clouds reveal volcanoes and deformed mountains.",
)
val earth =
Planet(
id = 3,
name = "Earth",
mainImage = "https://solarsystem.nasa.gov/system/resources/detail_files/2292_as08-14-2383.jpg",
description =
"Our home planet is the third planet from the Sun, and the only place we know of so far that’s inhabited by living things." +
"\n" +
"While Earth is only the fifth largest planet in the solar system, it is the only world in our solar system with liquid water on the surface. Just slightly larger than nearby Venus, Earth is the biggest of the four planets closest to the Sun, all of which are made of rock and metal.\n" +
"\n" +
"The name Earth is at least 1,000 years old. All of the planets, except for Earth, were named after Greek and Roman gods and goddesses. However, the name Earth is a Germanic word, which simply means “the ground.”",
)
val mars =
Planet(
id = 4,
name = "Mars",
mainImage = "https://solarsystem.nasa.gov/system/resources/detail_files/948_mars_july18.jpg",
description =
"The fourth planet from the Sun, Mars is a dusty, cold, desert world with a very thin atmosphere." +
"\n" +
"This dynamic planet has seasons, polar ice caps and weather and canyons and extinct volcanoes, evidence of an even more active past.\n" +
"\n" +
"Mars is one of the most explored bodies in our solar system, and it's the only planet where we've sent rovers to roam the alien landscape. NASA currently has three spacecraft in orbit, one rover and one lander on the surface and another rover under construction here on Earth. India and ESA also have spacecraft in orbit above Mars.\n" +
"\n" +
"These robotic explorers have found lots of evidence that Mars was much wetter and warmer, with a thicker atmosphere, billions of years ago.",
)
val jupiter =
Planet(
id = 5,
name = "Jupiter",
mainImage = "https://solarsystem.nasa.gov/system/resources/detail_files/2486_stsci-h-p1936a_1800.jpg",
description =
"Jupiter has a long history surprising scientists—all the way back to 1610 when Galileo Galilei found the first moons beyond Earth. That discovery changed the way we see the universe." +
"Fifth in line from the Sun, Jupiter is, by far, the largest planet in the solar system – more than twice as massive as all the other planets combined.\n" +
"\n" +
"Jupiter's familiar stripes and swirls are actually cold, windy clouds of ammonia and water, floating in an atmosphere of hydrogen and helium. Jupiter’s iconic Great Red Spot is a giant storm bigger than Earth that has raged for hundreds of years.\n" +
"\n" +
"One spacecraft — NASA's Juno orbiter — is currently exploring this giant world.",
)
val saturn =
Planet(
id = 6,
name = "Saturn",
mainImage = "https://solarsystem.nasa.gov/system/resources/detail_files/2490_stsci-h-p1943a-f_1200.jpg",
description =
"Saturn is the sixth planet from the Sun and the second largest planet in our solar system." +
"\n" +
"Adorned with thousands of beautiful ringlets, Saturn is unique among the planets. It is not the only planet to have rings—made of chunks of ice and rock—but none are as spectacular or as complicated as Saturn's.\n" +
"\n" +
"Like fellow gas giant Jupiter, Saturn is a massive ball made mostly of hydrogen and helium.",
)
val uranus =
Planet(
id = 7,
name = "Uranus",
mainImage = "https://solarsystem.nasa.gov/system/resources/detail_files/599_PIA18182.jpg",
description =
"The first planet found with the aid of a telescope, Uranus was discovered in 1781 by astronomer William Herschel, although he originally thought it was either a comet or a star." +
"\n" +
"It was two years later that the object was universally accepted as a new planet, in part because of observations by astronomer Johann Elert Bode. Herschel tried unsuccessfully to name his discovery Georgium Sidus after King George III. Instead the scientific community accepted Bode's suggestion to name it Uranus, the Greek god of the sky, as suggested by Bode.",
)
val neptune =
Planet(
id = 8,
name = "Neptune",
mainImage = "https://solarsystem.nasa.gov/system/resources/detail_files/611_PIA01492.jpg",
description =
"Dark, cold and whipped by supersonic winds, ice giant Neptune is the eighth and most distant planet in our solar system." +
"\n" +
"More than 30 times as far from the Sun as Earth, Neptune is the only planet in our solar system not visible to the naked eye and the first predicted by mathematics before its discovery. In 2011 Neptune completed its first 165-year orbit since its discovery in 1846.\n" +
"\n" +
"NASA's Voyager 2 is the only spacecraft to have visited Neptune up close. It flew past in 1989 on its way out of the solar system.",
)
val planets = arrayListOf(mercury, venus, earth, mars, jupiter, saturn, uranus, neptune)
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/planets/PlanetsActivity.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.planets
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.commit
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.transition.MaterialSharedAxis
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.PlanetsActivityBinding
class PlanetsActivity : AppCompatActivity() {
private lateinit var binding: PlanetsActivityBinding
private var selected = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = PlanetsActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowTitleEnabled(false)
val fragment = PlanetFragment.newInstance(planets[selected].id)
supportFragmentManager.commit {
add(R.id.fragment_container, fragment, FRAGMENT_TAG)
}
setRecyclerView()
}
private fun setRecyclerView() {
val adapter = StepAdapter(planets)
adapter.stepClickListener =
object : StepAdapter.StepClickListener {
override fun onStepClick(position: Int) {
val forward = position >= selected
selected = position
val previousFragment = supportFragmentManager.findFragmentByTag(FRAGMENT_TAG)
previousFragment?.exitTransition = buildTransition(forward)
val fragment = PlanetFragment.newInstance(planets[selected].id)
fragment.enterTransition = buildTransition(forward)
supportFragmentManager.commit {
replace(R.id.fragment_container, fragment, FRAGMENT_TAG)
}
}
}
binding.recyclerView.layoutManager = LinearLayoutManager(this)
binding.recyclerView.adapter = adapter
}
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
android.R.id.home -> {
onBackPressedDispatcher.onBackPressed()
true
}
else -> {
true
}
}
private fun buildTransition(forward: Boolean) =
MaterialSharedAxis(MaterialSharedAxis.Y, forward).apply {
duration = 500
}
companion object {
private const val FRAGMENT_TAG = "PLANET_FRAGMENT"
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/planets/StepAdapter.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.planets
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import dev.sergiobelda.samples.materialmotion.databinding.ItemStepBinding
class StepAdapter(
val items: List<Any>,
) : RecyclerView.Adapter<StepAdapter.ViewHolder>() {
lateinit var stepClickListener: StepClickListener
private var selected = 0
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
) = ViewHolder(
ItemStepBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false,
),
)
override fun getItemCount() = items.size
override fun onBindViewHolder(
holder: ViewHolder,
position: Int,
) = holder.bind(position)
inner class ViewHolder(
val binding: ItemStepBinding,
) : RecyclerView.ViewHolder(binding.root) {
fun bind(position: Int) {
if (position == items.size - 1) {
binding.separator.visibility = View.GONE
} else {
binding.separator.visibility = View.VISIBLE
}
binding.stepName.isSelected = position == selected
binding.stepButton.isSelected = position == selected
binding.stepName.text = position.toString()
binding.stepButton.setOnClickListener {
val aux = selected
selected = position
stepClickListener.onStepClick(position)
notifyItemChanged(aux)
notifyItemChanged(selected)
}
}
}
interface StepClickListener {
fun onStepClick(position: Int)
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/sample/SampleItem.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.sample
import androidx.annotation.StringRes
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.messages.MessagesActivity
import dev.sergiobelda.samples.materialmotion.music.MusicActivity
import dev.sergiobelda.samples.materialmotion.notes.NotesActivity
import dev.sergiobelda.samples.materialmotion.planets.PlanetsActivity
import dev.sergiobelda.samples.materialmotion.signin.SignInActivity
import dev.sergiobelda.samples.materialmotion.walkthrough.WalkthroughActivity
data class SampleItem(
@StringRes val nameRes: Int,
@StringRes val descriptionRes: Int,
val activity: Class<*>,
)
val messagesSample =
SampleItem(
nameRes = R.string.messages,
descriptionRes = R.string.messages_card_body,
activity = MessagesActivity::class.java,
)
val notesSample =
SampleItem(
nameRes = R.string.notes,
descriptionRes = R.string.notes_card_body,
activity = NotesActivity::class.java,
)
val walkthroughSample =
SampleItem(
nameRes = R.string.walkthrough,
descriptionRes = R.string.walkthrough_card_body,
activity = WalkthroughActivity::class.java,
)
val solarSystemSample =
SampleItem(
nameRes = R.string.solar_system,
descriptionRes = R.string.solar_system_card_body,
activity = PlanetsActivity::class.java,
)
val signInSample =
SampleItem(
nameRes = R.string.sign_in,
descriptionRes = R.string.sign_in_card_body,
activity = SignInActivity::class.java,
)
val musicSample =
SampleItem(
nameRes = R.string.music,
descriptionRes = R.string.music_card_body,
activity = MusicActivity::class.java,
)
val samples =
arrayListOf(
messagesSample,
notesSample,
walkthroughSample,
solarSystemSample,
signInSample,
musicSample,
)
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/sample/SamplesAdapter.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.sample
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import dev.sergiobelda.samples.materialmotion.databinding.ItemSampleBinding
class SamplesAdapter(
private val items: List<SampleItem>,
) : RecyclerView.Adapter<SamplesAdapter.ViewHolder>() {
var listener: OnSampleClickListener? = null
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int,
) = ViewHolder(
ItemSampleBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false,
),
)
override fun getItemCount() = items.size
override fun onBindViewHolder(
holder: ViewHolder,
position: Int,
) = holder.bind(items[position])
inner class ViewHolder(
val binding: ItemSampleBinding,
) : RecyclerView.ViewHolder(binding.root) {
fun bind(sampleItem: SampleItem) {
binding.sample = sampleItem
binding.button.setOnClickListener {
listener?.onSampleClick(sampleItem)
}
}
}
interface OnSampleClickListener {
fun onSampleClick(sampleItem: SampleItem)
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/signin/SignInActivity.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.signin
import android.os.Bundle
import android.view.Window
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.commit
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.SignInActivityBinding
class SignInActivity : AppCompatActivity() {
private lateinit var binding: SignInActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
super.onCreate(savedInstanceState)
binding = SignInActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
val signInFragment = SignInFragment()
supportFragmentManager.commit {
add(R.id.fragment_container, signInFragment)
}
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/signin/SignInFragment.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.signin
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.commit
import com.google.android.material.transition.MaterialSharedAxis
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.SignInFragmentBinding
class SignInFragment : Fragment() {
private var _binding: SignInFragmentBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
exitTransition = buildTransition()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
_binding = SignInFragmentBinding.inflate(layoutInflater, container, false)
return binding.root
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)
binding.signIn.setOnClickListener {
val welcomeFragment = WelcomeFragment()
welcomeFragment.enterTransition = buildTransition()
parentFragmentManager.commit {
replace(R.id.fragment_container, welcomeFragment)
}
}
}
private fun buildTransition() =
MaterialSharedAxis(MaterialSharedAxis.Z, true).apply {
duration = 500
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/signin/WelcomeFragment.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.signin
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.commit
import com.google.android.material.transition.MaterialSharedAxis
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.WelcomeFragmentBinding
class WelcomeFragment : Fragment() {
private var _binding: WelcomeFragmentBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
exitTransition = buildTransition()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
_binding = WelcomeFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)
binding.returnButton.setOnClickListener {
val signInFragment = SignInFragment()
signInFragment.enterTransition = buildTransition()
parentFragmentManager.commit {
replace(R.id.fragment_container, signInFragment)
}
}
}
private fun buildTransition() =
MaterialSharedAxis(MaterialSharedAxis.Z, false).apply {
duration = 500
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
companion object {
const val TAG = "WelcomeFragment"
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/walkthrough/WalkthroughActivity.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.walkthrough
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.commit
import androidx.lifecycle.MutableLiveData
import com.google.android.material.transition.MaterialSharedAxis
import dev.sergiobelda.samples.materialmotion.R
import dev.sergiobelda.samples.materialmotion.databinding.WalkthroughActivityBinding
private const val COUNT = 3
class WalkthroughActivity : AppCompatActivity() {
private lateinit var binding: WalkthroughActivityBinding
private var selected =
MutableLiveData<Int>().apply {
value = 0
}
private val titles by lazy {
arrayListOf(
getString(R.string.upload_your_photos),
getString(R.string.share),
getString(R.string.invite_friends),
)
}
private val bodies by lazy {
arrayListOf(
getString(R.string.upload_artistic_photos),
getString(R.string.share_work_social_networks),
getString(R.string.enjoy_rewards),
)
}
private val images =
arrayListOf(
R.drawable.undraw_drag,
R.drawable.undraw_social_sharing,
R.drawable.undraw_winners,
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = WalkthroughActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
selected.value?.let {
val fragment =
WalkthroughFragment.newInstance(
titles[it],
bodies[it],
images[it],
)
supportFragmentManager.commit {
add(R.id.fragment_container, fragment, FRAGMENT_TAG)
}
}
setDotsTabLayout()
setClickListeners()
setSelectedObserver()
}
private fun setDotsTabLayout() {
repeat(COUNT) {
binding.tabLayout.addTab(binding.tabLayout.newTab())
}
binding.tabLayout.touchables.forEach { it.isEnabled = false }
}
private fun setClickListeners() {
binding.backButton.setOnClickListener {
selected.value?.let {
selected.value = it - 1
}
selectFragment(forward = false)
}
binding.nextButton.setOnClickListener {
selected.value?.let {
selected.value = it + 1
}
selectFragment(forward = true)
}
}
private fun setSelectedObserver() {
selected.observe(
this,
{
binding.nextButton.isEnabled = it < COUNT - 1
binding.backButton.isEnabled = it > 0
binding.tabLayout.apply {
selectTab(getTabAt(it))
}
},
)
}
private fun selectFragment(forward: Boolean) {
selected.value?.let {
val previousFragment = supportFragmentManager.findFragmentByTag(FRAGMENT_TAG)
previousFragment?.exitTransition = buildTransition(forward)
val fragment =
WalkthroughFragment.newInstance(
titles[it],
bodies[it],
images[it],
)
fragment.enterTransition = buildTransition(forward)
supportFragmentManager.commit {
replace(R.id.fragment_container, fragment, FRAGMENT_TAG)
}
}
}
private fun buildTransition(forward: Boolean) =
MaterialSharedAxis(MaterialSharedAxis.X, forward).apply {
duration = 500
}
companion object {
private const val FRAGMENT_TAG = "WALKTHROUGH_FRAGMENT"
}
}
================================================
FILE: app/src/main/java/dev/sergiobelda/samples/materialmotion/walkthrough/WalkthroughFragment.kt
================================================
/*
* Copyright 2021 Sergio Belda
*
* 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 dev.sergiobelda.samples.materialmotion.walkthrough
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.DrawableRes
import androidx.fragment.app.Fragment
import dev.sergiobelda.samples.materialmotion.databinding.WalkthroughFragmentBinding
private const val ARG_TITLE = "title"
private const val ARG_BODY = "body"
private const val ARG_DRAWABLE_RES = "drawableRes"
/**
* A simple [Fragment] subclass.
* Use the [WalkthroughFragment.newInstance] factory method to
* create an instance of this fragment.
*/
class WalkthroughFragment : Fragment() {
private var title: String? = null
private var body: String? = null
private var drawableRes: Int? = null
private var _binding: WalkthroughFragmentBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
title = it.getString(ARG_TITLE)
body = it.getString(ARG_BODY)
drawableRes = it.getInt(ARG_DRAWABLE_RES)
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
_binding = WalkthroughFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)
binding.titleTextView.text = title
binding.bodyTextView.text = body
drawableRes?.let { binding.imageView.setImageResource(it) }
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
companion object {
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param body Parameter 1.
* @param imageRes Parameter 2.
* @return A new instance of fragment WalkthroughFragment.
*/
@JvmStatic
fun newInstance(
title: String,
body: String,
@DrawableRes imageRes: Int,
) = WalkthroughFragment().apply {
arguments =
Bundle().apply {
putString(ARG_TITLE, title)
putString(ARG_BODY, body)
putInt(ARG_DRAWABLE_RES, imageRes)
}
}
}
}
================================================
FILE: app/src/main/res/color/step_selector.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?attr/colorOnPrimary" android:state_selected="true" />
<item android:color="?attr/colorControlNormal" />
</selector>
================================================
FILE: app/src/main/res/drawable/circle.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="?attr/colorPrimary" />
<size
android:width="36dp"
android:height="36dp" />
</shape>
================================================
FILE: app/src/main/res/drawable/ic_baseline_all_inclusive_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M18.6,6.62c-1.44,0 -2.8,0.56 -3.77,1.53L12,10.66 10.48,12h0.01L7.8,14.39c-0.64,0.64 -1.49,0.99 -2.4,0.99 -1.87,0 -3.39,-1.51 -3.39,-3.38S3.53,8.62 5.4,8.62c0.91,0 1.76,0.35 2.44,1.03l1.13,1 1.51,-1.34L9.22,8.2C8.2,7.18 6.84,6.62 5.4,6.62 2.42,6.62 0,9.04 0,12s2.42,5.38 5.4,5.38c1.44,0 2.8,-0.56 3.77,-1.53l2.83,-2.5 0.01,0.01L13.52,12h-0.01l2.69,-2.39c0.64,-0.64 1.49,-0.99 2.4,-0.99 1.87,0 3.39,1.51 3.39,3.38s-1.52,3.38 -3.39,3.38c-0.9,0 -1.76,-0.35 -2.44,-1.03l-1.14,-1.01 -1.51,1.34 1.27,1.12c1.02,1.01 2.37,1.57 3.82,1.57 2.98,0 5.4,-2.41 5.4,-5.38s-2.42,-5.37 -5.4,-5.37z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_baseline_person_outline_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M12,5.9c1.16,0 2.1,0.94 2.1,2.1s-0.94,2.1 -2.1,2.1S9.9,9.16 9.9,8s0.94,-2.1 2.1,-2.1m0,9c2.97,0 6.1,1.46 6.1,2.1v1.1L5.9,18.1L5.9,17c0,-0.64 3.13,-2.1 6.1,-2.1M12,4C9.79,4 8,5.79 8,8s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM12,13c-2.67,0 -8,1.34 -8,4v3h16v-3c0,-2.66 -5.33,-4 -8,-4z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_baseline_playlist_play_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M4,10h12v2L4,12zM4,6h12v2L4,8zM4,14h8v2L4,16zM14,14v6l5,-3z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_launcher_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_outline_album_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,7.5c-2.49,0 -4.5,2.01 -4.5,4.5s2.01,4.5 4.5,4.5 4.5,-2.01 4.5,-4.5 -2.01,-4.5 -4.5,-4.5zM12,13c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1 1,0.45 1,1 -0.45,1 -1,1z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_outline_edit_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M14.06,9.02l0.92,0.92L5.92,19L5,19v-0.92l9.06,-9.06M17.66,3c-0.25,0 -0.51,0.1 -0.7,0.29l-1.83,1.83 3.75,3.75 1.83,-1.83c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.2,-0.2 -0.45,-0.29 -0.71,-0.29zM14.06,6.19L3,17.25L3,21h3.75L17.81,9.94l-3.75,-3.75z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_outline_play_arrow_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M10,8.64L15.27,12 10,15.36V8.64M8,5v14l11,-7L8,5z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_account_circle_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_add_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M18,13h-5v5c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1v-5H6c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1h5V6c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v5h5c0.55,0 1,0.45 1,1s-0.45,1 -1,1z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_clear_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M18.3,5.71c-0.39,-0.39 -1.02,-0.39 -1.41,0L12,10.59 7.11,5.7c-0.39,-0.39 -1.02,-0.39 -1.41,0 -0.39,0.39 -0.39,1.02 0,1.41L10.59,12 5.7,16.89c-0.39,0.39 -0.39,1.02 0,1.41 0.39,0.39 1.02,0.39 1.41,0L12,13.41l4.89,4.89c0.39,0.39 1.02,0.39 1.41,0 0.39,-0.39 0.39,-1.02 0,-1.41L13.41,12l4.89,-4.89c0.38,-0.38 0.38,-1.02 0,-1.4z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_person_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v1c0,0.55 0.45,1 1,1h14c0.55,0 1,-0.45 1,-1v-1c0,-2.66 -5.33,-4 -8,-4z" />
</vector>
================================================
FILE: app/src/main/res/drawable/ic_round_save_24.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M17.59,3.59c-0.38,-0.38 -0.89,-0.59 -1.42,-0.59L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7.83c0,-0.53 -0.21,-1.04 -0.59,-1.41l-2.82,-2.83zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM13,9L7,9c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2h6c1.1,0 2,0.9 2,2s-0.9,2 -2,2z" />
</vector>
================================================
FILE: app/src/main/res/drawable/step_selector.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/circle" android:state_selected="true" />
</selector>
================================================
FILE: app/src/main/res/drawable/tab_dot.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:innerRadius="0dp"
android:thickness="4dp"
android:useLevel="false">
<size android:height="8dp" />
</shape>
================================================
FILE: app/src/main/res/drawable/tab_dot_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadius="0dp"
android:shape="ring"
android:thickness="3dp"
android:useLevel="false">
<solid android:color="?attr/colorControlHighlight" />
</shape>
================================================
FILE: app/src/main/res/drawable/undraw_celebration.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="949.8dp"
android:height="661.52dp"
android:viewportWidth="949.8"
android:viewportHeight="661.52">
<path
android:pathData="M95.13,66.03m-46.49,0a46.49,46.49 0,1 1,92.98 0a46.49,46.49 0,1 1,-92.98 0"
android:fillColor="#0099bf" />
<path
android:pathData="M89.45,160.67C108.97,204.76 84.07,255.53 54.76,293.76c-9.81,12.82 -20.64,26.26 -22,42.34 -1.64,19.67 11.68,37.75 27.48,49.57 28.82,21.54 68.18,28.2 102.48,17.33 29.64,-9.39 54.56,-30.6 84.46,-39.15 50,-14.32 103,9.42 145.82,39C423.31,423.76 455.77,449.24 492.31,444.76c25.71,-3.15 47.53,-21.2 62.34,-42.45 7.15,-10.26 13.37,-21.76 23.78,-28.68 6.19,-4.12 13.46,-6.3 20.73,-7.86 66.39,-14.19 136.85,20.44 202.36,2.63 44.25,-12 79.53,-47 101.47,-87.27s32.18,-85.74 40.71,-130.79c6.06,-32 11.09,-66.57 -2.84,-96 -14.74,-31.16 -48.86,-50.05 -83.15,-53.59S789.03,6.98 757.44,20.76c-39.47,17.26 -78.16,41.42 -121.24,41.5 -29.34,0.06 -57.32,-11.2 -85.37,-19.79 -46.9,-14.35 -95.67,-21.48 -144.27,-28.06 -46.53,-6.3 -93.52,-12.16 -140.33,-8.44 -33.12,2.63 -62.37,15.29 -94.51,21.15 -20.95,3.82 -42,1 -62.56,7.4 -25.32,7.92 -51.36,26.27 -52.76,55.17C55.08,117.2 79.1,137.28 89.45,160.67Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path android:pathData="M601.9,199.93c-4.27,-11.13 -15.28,-37.29 -22.53,-32.1 -9.16,6.56 9.16,35.54 9.16,35.54 0.52,5.32 -9.78,16.39 -15.3,21.91 0,-0.44 0,-0.69 0,-0.69a2.4,2.4 0,0 1,-0.24 0.6l-0.46,-0.25a3,3 0,0 1,-0.65 1.19c0,-0.75 -0.05,-1.19 -0.05,-1.19 -1.06,4.49 -19.56,10.18 -19.56,10.18s-0.5,0 -1.36,0c-5.14,0 -18.52,-1.16 -24.72,-11.08a54.86,54.86 0,0 0,-12.13 -14.15,10.33 10.33,0 0,0 -5.75,-2.18c-17.13,-1.1 -31,-9.77 -33.77,-11.62l-0.51,-0.35 -0.11,0.32c-0.65,-0.93 -1.28,-1.92 -1.87,-2.94l0,0 -0.3,-0.55a25.12,25.12 0,0 0,13.85 -22.34c0,-0.17 0,-0.35 0,-0.52a17.11,17.11 0,0 0,2.3 -8.57v-3l3.91,-3.48c1.79,-1.59 3.64,-3.27 4.55,-5.46a6.47,6.47 0,0 0,0.48 -2.8,4.85 4.85,0 0,0 -1.84,-4.34c-3,-2.07 -8,0 -10.17,-2.88 -1,-1.3 -0.82,-3.07 -1.31,-4.6 -1,-3.11 -4.6,-4.79 -7.93,-4.84s-6.52,1.16 -9.72,2.07a57.07,57.07 0,0 1,-20.7 1.94,13.52 13.52,0 0,0 -5.67,0.2 7.81,7.81 0,0 0,-4.6 5.35,12.57 12.57,0 0,0 -0.44,2.74 17.24,17.24 0,0 0,-4.34 11.41v7.69a17.23,17.23 0,0 0,4.15 11.19,25 25,0 0,0 10.47,18.24q0,0.3 0,0.61l0.13,0.08a41.35,41.35 0,0 1,-1.1 7.07l0,-0.51s-14,7.45 -29,7.63h-1.65a11.17,11.17 0,0 0,-8 3c-4.44,4.18 -12.22,10.79 -17,10.79 -1,0 -26.24,4.93 -30.42,5.75l-7.81,-7.65 -0.24,0.45 -0.46,-0.45a19,19 0,0 0,-2.54 0.37c-4,-4.74 -12,-15.76 -13.85,-30.55 0,0 17.27,-19.67 10.92,-38 -5.42,-15.62 -20.35,17.86 -24.59,27.95a8.06,8.06 0,0 0,-0.26 5.55L332.9,227.88a21.21,21.21 0,0 0,-1.11 11l-0.16,0 10.22,13.11s7.69,3.28 19.72,3.22a68.94,68.94 0,0 0,25.74 -4.94h2.37l-0.45,0.17L401.4,250.44l7.74,23.41c-0.26,2.13 -4,31.86 -7,38.51a16.71,16.71 0,0 0,-1.18 7,53.44 53.44,0 0,0 2.23,13.55l6.78,-0.25 -0.26,0.53c-5.74,11.77 -15.33,32.74 -21,52.34l-9.87,20 7.4,89.7h0l0.3,0h0l0.57,0.09h0c0.8,0.12 2,0.3 3.58,0.5l-0.58,1 -16.31,27s-11.63,23.81 14.1,19.32c0,0 9.51,-2.76 13.39,-19l16.92,-15.87s0.79,-10.54 -4,-14.75c-0.3,-4.87 -1.06,-19.09 0.11,-22.51 1.41,-4.14 -6,-51.75 -6,-51.75s26.78,-55.55 43,-56.93a8.89,8.89 0,0 1,3.51 0.46c13.33,4.34 29.48,36.57 34.23,46.6l0,0 0.22,0.46 0,0.09 0.18,0.39 0,0.11 0.16,0.34 0,0.09 0.14,0.31 0,0.07 0.12,0.25 0,0.1 0.09,0.19 0,0.08 0.06,0.14 0,0.08 0,0.09h0l0.05,0.12 2.11,62.45h0l0,0h0l0.21,0.11h0l0.1,0 -0.18,1.29 -0.92,6.45s11.63,24.5 10.92,27.6 7.75,15.53 19.73,12.08S526.9,499.38 526.9,499.38l-11.54,-23.78 -0.51,-1.06a22.68,22.68 0,0 0,3.24 -2.41s-3.52,-25.53 0,-31.05 4.58,-30.71 4.58,-30.71 -2.47,-17.25 -6.7,-24.84l-17.72,-63.25c5.31,4.94 9.44,6.87 12.89,6.74h0.57a8.61,8.61 0,0 0,4.34 -1.08,12.23 12.23,0 0,0 2,-1.41 3.16,3.16 0,0 0,0.33 -0.33l0,0c4.93,-4.14 -5.64,-20.36 -11.63,-30 -5.77,-9.3 2.18,-34.57 2.78,-36.45a9.54,9.54 0,0 1,1.71 -1,10.55 10.55,0 0,1 3.92,-0.85c5.74,0.2 12.8,3.5 21.54,5.16a101.62,101.62 0,0 0,18.39 1.43h0.36c2.45,0 4.67,-0.05 6.47,-0.12a10.93,10.93 0,0 0,4.7 -1.27h0a14.19,14.19 0,0 0,3.34 -2.7l15.34,-17.33 -0.4,0.19a8.62,8.62 0,0 0,0 -6.1l16.21,-28A10.65,10.65 0,0 0,601.9 199.93Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="543.76"
android:startX="460.5"
android:endY="129.76001"
android:endX="460.5"
android:type="linear">
<item
android:offset="0"
android:color="#3F808080" />
<item
android:offset="0.54"
android:color="#1E808080" />
<item
android:offset="1"
android:color="#19808080" />
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M419.78,505.9l-16.33,15.65c-3.74,16 -12.93,18.71 -12.93,18.71 -24.83,4.42 -13.61,-19 -13.61,-19l15.75,-26.65 1.94,-3.29s11.23,-3.4 18.71,-1.36a6.4,6.4 0,0 1,2.55 1.38C420.55,495.41 419.78,505.9 419.78,505.9Z"
android:fillColor="#444176" />
<path
android:pathData="M520.47,519.85c-11.57,3.4 -19.73,-8.84 -19,-11.91S490.9,480.76 490.9,480.76l0.88,-6.36 0.82,-5.89 19,1.36 1.79,3.76 11.14,23.45S532.04,516.45 520.47,519.85Z"
android:fillColor="#444176" />
<path
android:fillColor="#FF000000"
android:pathData="M416.04,494c-1.79,3.07 -16.3,1.52 -23.37,0.56l1.94,-3.29s11.23,-3.4 18.71,-1.36a6.4,6.4 0,0 1,2.55 1.38C415.97,492.95 416.04,494 416.04,494Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M513.41,473.61c-9.73,6.48 -20.09,1.58 -21.65,0.77l0.82,-5.89 19,1.36Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M516.05,439.57c-3.4,5.44 0,30.62 0,30.62 -11.23,10.21 -24.49,2.72 -24.49,2.72l-2,-61.57s-22.11,-50.69 -37.76,-49.33 -41.5,56.13 -41.5,56.13 7.14,46.94 5.78,51 0,23.81 0,23.81c-2.38,4.08 -27.21,0 -27.21,0l-7.14,-88.45L391.21,384.76c5.45,-19.32 14.71,-40 20.25,-51.6 2.75,-5.77 4.59,-9.29 4.59,-9.29l18.1,-3.77L492.9,307.92 514.01,384.76c4.08,7.48 6.46,24.49 6.46,24.49S519.45,434.13 516.05,439.57Z"
android:fillColor="#565387" />
<path
android:fillColor="#FF000000"
android:pathData="M497,472.91l-2,-61.57s-22.11,-50.69 -37.76,-49.33a8.52,8.52 0,0 0,-2.05 0.46c15.26,5.07 34.37,48.87 34.37,48.87l2,61.57a24,24 0,0 0,13.53 2.47A24.07,24.07 0,0 1,497 472.91Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M394.27,492.98l-7.14,-88.45L396.65,384.76c5.45,-19.32 14.71,-40 20.25,-51.6 2.75,-5.77 4.59,-9.29 4.59,-9.29l18.1,-3.77 53.63,-11.15 -0.29,-1.07 -58.78,12.22 -18.1,3.77s-1.84,3.52 -4.59,9.29C405.9,344.76 396.66,365.48 391.21,384.76l-9.52,19.73 7.14,88.45s13.56,2.23 21.6,1.74A160.66,160.66 0,0 1,394.27 492.98Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M352.9,218.97s-19.39,1 -16.67,21.43l5.44,0.68 8.16,-8.84 4.08,-7.48v-1.7Z"
android:fillColor="#ced2df" />
<path
android:fillColor="#FF000000"
android:pathData="M352.9,218.97s-19.39,1 -16.67,21.43l5.44,0.68 8.16,-8.84 4.08,-7.48v-1.7Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M568.61,226.45s16,8.5 11.91,18.37l-5.1,2 -6.8,-3.74 -1,-8.84 0.68,-6.12Z"
android:fillColor="#ced2df" />
<path
android:fillColor="#FF000000"
android:pathData="M568.61,226.45s16,8.5 11.91,18.37l-5.1,2 -6.8,-3.74 -1,-8.84 0.68,-6.12Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M452.27,138.68L465.88,138.68A21.09,21.09 0,0 1,486.97 159.77L486.97,159.77A21.09,21.09 0,0 1,465.88 180.86L452.27,180.86A21.09,21.09 0,0 1,431.18 159.77L431.18,159.77A21.09,21.09 0,0 1,452.27 138.68z"
android:fillColor="#88455e" />
<path
android:pathData="M352.77,221.86l-11.91,19 -1,-3.38L323.68,184.76a8.11,8.11 0,0 1,0.25 -5.47c4.09,-9.94 18.51,-43 23.74,-27.55 6.12,18 -10.55,37.42 -10.55,37.42 1.9,15.76 10.75,27.18 14.23,31.14C352.23,221.33 352.77,221.86 352.77,221.86Z"
android:fillColor="#ec8c9c" />
<path
android:pathData="M566.06,230.02s18.71,-17.69 18,-24.83c0,0 -17.69,-28.57 -8.84,-35 7,-5.12 17.63,20.68 21.75,31.65a10.7,10.7 0,0 1,-0.71 9L573.9,250.43Z"
android:fillColor="#ec8c9c" />
<path
android:pathData="M444.95,180.7s3.4,21.77 -6.46,29.94S466.73,218.76 466.73,218.76l13.61,-12.59s-15.65,-14.63 -10.89,-25.51Z"
android:fillColor="#ec8c9c" />
<path
android:fillColor="#FF000000"
android:pathData="M444.27,205.53s14.63,10.89 29.25,-1.36l23.81,49.33 -1.36,60.21s-49.33,25.51 -69.74,9.87 -3.4,-23.81 -3.4,-23.81l-4.76,-46.26 5.1,-29.94s9.18,-14.29 9.87,-14.29S444.27,205.53 444.27,205.53Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M444.27,204.85S458.9,215.76 473.53,203.49l23.81,49.33 -1.36,60.21s-49.33,25.51 -69.74,9.87 -3.4,-23.81 -3.4,-23.81l-4.76,-46.26 5.1,-29.94s9.18,-14.29 9.87,-14.29S444.27,204.85 444.27,204.85Z"
android:fillColor="#ebf1f6" />
<path
android:fillColor="#FF000000"
android:pathData="M444.27,199.76s-13.87,7.9 -28.93,7.51a10.66,10.66 0,0 0,-7.69 2.94c-4.29,4.12 -11.8,10.64 -16.45,10.64 -1,0 -29.94,5.78 -29.94,5.78l-7.65,-7.65s-11.4,22.28 -16.84,21.26l9.87,12.93s18.71,8.16 43.2,-1.7h14.29l7.48,23.13s-3.74,31.3 -6.8,38.1 1,20.07 1,20.07l26.87,-1s1.36,-13.27 3.4,-15 -7.14,-60.21 -7.14,-60.21 -6.12,-33 16.33,-44.9Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M434.14,320.14a88.81,88.81 0,0 0,-2.11 12.27l-20.57,0.78c2.75,-5.77 4.59,-9.29 4.59,-9.29Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M352.77,221.86l-11.91,19 -1,-3.38c4.37,-4.34 9.49,-13.41 11.53,-17.19C352.23,221.33 352.77,221.86 352.77,221.86Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M444.27,199.76s-14.56,7.9 -29.61,7.51a10.66,10.66 0,0 0,-7.69 2.94c-4.29,4.12 -11.8,10.64 -16.45,10.64 -1,0 -29.94,5.78 -29.94,5.78L352.9,218.97s-11.4,22.28 -16.84,21.26l9.87,12.93s18.71,8.16 43.2,-1.7h14.29L410.9,274.58s-3.74,31.3 -6.8,38.1 1,20.07 1,20.07l26.87,-1s1.36,-13.27 3.4,-15 -7.14,-60.21 -7.14,-60.21 -6.12,-33 16.33,-44.9Z"
android:fillColor="#ced2df" />
<path
android:fillColor="#FF000000"
android:pathData="M473.53,197.7s13.88,10.58 32.41,11.8a9.85,9.85 0,0 1,5.55 2.15,53.72 53.72,0 0,1 11.71,14c7.48,12.25 25.85,10.89 25.85,10.89s17.86,-5.61 18.88,-10c0,0 0.51,24 11.74,18.2L564.9,261.76a10.42,10.42 0,0 1,-7.45 3.59c-5.55,0.22 -15.19,0.29 -23.33,-1.29 -12.25,-2.38 -21.09,-8.16 -27.55,-3.06 0,0 -8.5,26.53 -2.72,36.06s16,25.51 11.23,29.6 -10.55,3.74 -20.07,-6.12 -10.55,-26.53 -10.55,-26.53l2.38,-42.86s-9.18,-32.32 -18,-38.78Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M581.02,244.31l-14.81,17.09a10.41,10.41 0,0 1,-3.57 2.66h0a10.37,10.37 0,0 1,-3.86 0.91c-5.55,0.23 -15.19,0.3 -23.33,-1.29 -11.46,-2.23 -19.94,-7.43 -26.28,-3.92a9.3,9.3 0,0 0,-1.28 0.85s-8.5,26.53 -2.72,36.06 16,25.51 11.23,29.6a11,11 0,0 1,-2.66 1.73c-4.28,1.93 -9.59,0.26 -17.41,-7.85 -9.52,-9.87 -10.55,-26.53 -10.55,-26.53L488.16,250.76s-9.18,-32.32 -18,-38.78l3.89,-13.95c2.68,1.82 16.06,10.37 32.6,11.46a9.85,9.85 0,0 1,5.55 2.15,53.76 53.76,0 0,1 11.71,14c7.48,12.25 25.85,10.89 25.85,10.89a99.27,99.27 0,0 0,12.87 -5.12l0,0c2.61,-1.28 4.91,-2.68 6,-4a3,3 0,0 0,0.65 -1.2S569.8,250.09 581.02,244.31Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M580.34,244.65 L565.54,261.76a10.41,10.41 0,0 1,-2.88 2.32h0a10.38,10.38 0,0 1,-4.54 1.25c-5.55,0.23 -15.19,0.3 -23.33,-1.29 -11.05,-2.15 -19.34,-7.07 -25.59,-4.26a9.25,9.25 0,0 0,-2 1.19s-8.5,26.53 -2.72,36.06 16,25.51 11.23,29.6a11.8,11.8 0,0 1,-2 1.39c-4.4,2.43 -9.84,1 -18.09,-7.51 -9.52,-9.87 -10.55,-26.53 -10.55,-26.53l2.38,-42.86s-9.18,-32.32 -18,-38.78l4.08,-14.63 0.49,0.34c2.68,1.82 16.06,10.37 32.6,11.46a9.85,9.85 0,0 1,5.55 2.15,53.76 53.76,0 0,1 11.71,14c7.48,12.25 25.85,10.89 25.85,10.89a99.27,99.27 0,0 0,12.87 -5.12l0,0c3.09,-1.58 5.61,-3.31 6,-4.89 0,0 0,0.31 0,0.86C568.9,231.53 570.4,249.76 580.34,244.65Z"
android:fillColor="#ced2df" />
<path
android:fillColor="#FF000000"
android:pathData="M469.75,181.21h-25a61.18,61.18 0,0 1,0.47 12,25.7 25.7,0 0,0 26.42,1.9C469.24,190.67 467.78,185.63 469.75,181.21Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M459.92,172.53m-24.83,0a24.83,24.83 0,1 1,49.66 0a24.83,24.83 0,1 1,-49.66 0"
android:fillColor="#ec8c9c" />
<path
android:fillColor="#FF000000"
android:pathData="M454.76,168.11c2.77,-0.33 5.54,-1.31 8.27,-0.76 2.48,0.5 4.59,2.21 7.07,2.73 4.78,1 9.22,-2.52 12.83,-5.8l7.8,-7.1c1.73,-1.57 3.51,-3.22 4.4,-5.38s0.58,-5 -1.32,-6.36c-2.85,-2 -7.76,0 -9.82,-2.84 -0.93,-1.28 -0.79,-3 -1.27,-4.53 -1,-3.06 -4.44,-4.73 -7.66,-4.77s-6.3,1.14 -9.38,2a54,54 0,0 1,-20 1.91,12.78 12.78,0 0,0 -5.47,0.19 7.65,7.65 0,0 0,-4.44 5.27c-1.54,5.44 1.09,14.21 3.73,19.08S449.49,168.76 454.76,168.11Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M454.76,167.43c2.77,-0.33 5.54,-1.31 8.27,-0.76 2.48,0.5 4.59,2.21 7.07,2.73 4.78,1 9.22,-2.52 12.83,-5.8l7.8,-7.1c1.73,-1.57 3.51,-3.22 4.4,-5.38s0.58,-5 -1.32,-6.36c-2.85,-2 -7.76,0 -9.82,-2.84 -0.93,-1.28 -0.79,-3 -1.27,-4.53 -1,-3.06 -4.44,-4.73 -7.66,-4.77s-6.3,1.14 -9.38,2a54,54 0,0 1,-20 1.91,12.78 12.78,0 0,0 -5.47,0.19 7.65,7.65 0,0 0,-4.44 5.27c-1.54,5.44 1.09,14.21 3.73,19.08S449.49,168.03 454.76,167.43Z"
android:fillColor="#88455e" />
<path
android:fillColor="#FF000000"
android:pathData="M411.45,274.76s5.44,0.68 8.16,4.08 7.48,4.42 7.48,4.42"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M362.46,229.85S366.9,239.76 364.16,240.76s-1.7,8.16 -1.7,8.16"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M363.99,226.45S392.9,220.67 393.9,220.67c4.66,0 12.16,-6.52 16.45,-10.64a10.5,10.5 0,0 1,4.66 -2.59h-0.37a10.66,10.66 0,0 0,-7.69 2.94c-4.29,4.12 -11.8,10.64 -16.45,10.64 -0.81,0 -19.31,3.67 -26.82,5.16Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M444.31,201.19l0,-1.27a72.18,72.18 0,0 1,-22.16 7.09A68.48,68.48 0,0 0,444.31 201.19Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M408.56,332.58s-4.08,-13.27 -1,-20.07 6.8,-38.1 6.8,-38.1L406.9,251.28L392.57,251.28l-0.87,0.34h11.75L410.9,274.76s-3.74,31.3 -6.8,38.1 1,20.07 1,20.07l26.87,-1 0,-0.21Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M516.05,321.19a11.8,11.8 0,0 1,-2 1.39c-4.4,2.43 -9.84,1 -18.09,-7.51 -7.56,-7.83 -9.76,-20 -10.35,-24.61l-0.2,3.52s1,16.67 10.55,26.53c8.25,8.54 13.69,9.94 18.09,7.51a11.8,11.8 0,0 0,2 -1.39c1.43,-1.23 1.51,-3.54 0.76,-6.42A3.15,3.15 0,0 1,516.05 321.19Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M575.53,245.16 L565.9,256.29a10.41,10.41 0,0 1,-2.88 2.32h0a10.38,10.38 0,0 1,-4.54 1.25c-5.55,0.23 -15.19,0.3 -23.33,-1.29 -11.05,-2.15 -19.34,-7.07 -25.59,-4.26a9.25,9.25 0,0 0,-2 1.19s-5.49,17.14 -4.65,28.81c0.65,-10.91 4.65,-23.37 4.65,-23.37a9.25,9.25 0,0 1,2 -1.19c6.26,-2.81 14.54,2.11 25.59,4.26 8.14,1.58 17.77,1.51 23.33,1.29a10.38,10.38 0,0 0,4.54 -1.25h0A10.41,10.41 0,0 0,565.9 261.76l14.81,-17.09A5.83,5.83 0,0 1,575.53 245.16Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path android:pathData="M140.64,367.65a0.77,0.77 0,0 0,0.91 0.12A3.1,3.1 0,0 1,140.64 367.65Z"></path>
<path android:pathData="M242.55,202c-1.8,-0.52 -4.37,-1.37 -7.46,-2.45a39.12,39.12 0,0 0,6.91 -13.92l-0.26,0.1c0.09,-0.31 0.18,-0.61 0.26,-0.93 -5.93,2.41 -12.49,-1.67 -16.67,-6.91s-7,-11.74 -11.58,-16.56a53,53 0,0 0,-6.14 -5.29c-1.35,-1 -2.8,-2.13 -4.45,-2.18 -2.67,-0.08 -4.76,2.54 -7.33,3.31a10,10 0,0 1,-5.11 -0.19c-6.63,-1.52 -13,-4.33 -19.77,-5.07a23.17,23.17 0,0 0,-10.73 1.21c-3.4,1.29 -4.95,3.86 -7.7,5.92 -3,2.21 -8.86,2.16 -12.35,2.55a88.5,88.5 0,0 1,-12.76 0.53,29.87 29.87,0 0,0 -7.34,0.27c-5.07,1.11 -9.14,5.14 -12.94,9a6.67,6.67 0,0 0,-2.14 3.35,4.23 4.23,0 0,0 0,1.11 7.21,7.21 0,0 0,0.51 2.95,39 39,0 0,0 4.91,9.77c1.55,2.22 3.36,4.31 4.24,6.94a13.47,13.47 0,0 1,0.65 4,29.09 29.09,0 0,1 -0.45,4.3 54,54 0,0 1,-3.29 11.45,20.8 20.8,0 0,0 -1.92,6 9.56,9.56 0,0 0,0 1.28c-0.25,6.6 6.41,11.35 7.7,17.91a10.7,10.7 0,0 1,0.19 1.65c-0.14,4.09 -2.47,8.09 -5.91,9.68 0.3,0.12 0.61,0.22 0.92,0.32a8.34,8.34 0,0 1,-0.92 0.5c0.63,0.24 1.27,0.45 1.92,0.62a44.6,44.6 0,0 0,-9.71 12C92.26,286.76 13.9,328.95 13.9,328.95l1.16,0.66 -0.94,0.61c-6.78,4.51 -22.69,17.66 -8.31,34.29 0,0 11.23,-17.72 19.1,-25.27 0.35,-0.34 0.7,-0.65 1,-0.94a2.3,2.3 0,0 1,0.3 1.82l51.52,-28.95s18.31,-12.82 23.42,-15.71a42.15,42.15 0,0 1,11.61 -5l-0.6,0.25a23.52,23.52 0,0 1,5.91 -0.84c9.12,0.14 19,6.82 22.25,33.27 4.36,35.42 2.34,41.81 0.94,42.68a2.57,2.57 0,0 1,-0.51 -0.09,0.87 0.87,0 0,0 0.14,0.1 2.68,2.68 0,0 1,-0.56 -0.1,0.8 0.8,0 0,0 0.76,0.18 0.71,0.71 0,0 0,0.57 -0.07h0a5.92,5.92 0,0 0,0.69 0q0,0.49 -0.07,1c-0.07,0 -0.41,0.19 0,0.21h0c-0.11,2 -0.1,4.17 0,6.44 -4.53,0.25 -9.06,0.52 -13,0.76l0.35,-1.87 0.16,-0.84c3.48,-0.28 6.78,-1.3 7.17,-4.12 0.85,-6.2 -7.66,-9.51 -14.9,-9.92s-50.66,2.48 -50.66,2.48 -6.51,8.43 14.14,11q0.92,0.48 1.91,1c8.09,4.61 19.06,13.1 24.32,17.28l0.73,0.58L110.14,391.76c12.77,2.89 25.12,51.69 31.93,74s21.71,21.5 34.06,18.19c11.57,-3.1 13,-36.7 13.19,-40.92v-0.43L209.9,468.02l1.56,1.93q0.9,0.47 1.78,0.88c15.58,7.41 32.79,-6.8 27.9,-23 -4.95,-16.33 -12.63,-40.48 -17.75,-50.69 -4.29,-8.55 -9.83,-22.75 -13.19,-31.64a10.68,10.68 0,0 0,1.27 -0.61s-0.08,-0.4 -0.21,-1.13l0.21,-0.11s-5,-25.72 -5.22,-44q0,-0.48 0,-1c0,-0.2 0,-0.4 0,-0.59 3.72,-0.85 6.08,-1.18 6.08,-1.18l0.07,-0.8 -0.43,0.09 2.07,-23.69s7.6,-16.17 1.78,-22.9a14.14,14.14 0,0 1,-3.41 -7c-1,-6.19 0,-16.52 13.55,-25.1 20.86,-13.23 29,-24 29,-24S255.32,205.76 242.55,202ZM201.12,218.44L201.12,207.49c3.87,-0.19 7.82,0.26 11.71,0a29.63,29.63 0,0 0,5.65 -0.95l0.94,0.65A103,103 0,0 1,201.12 218.44ZM141.97,390.08c1.53,1.06 3.07,2.16 4.58,3.27 0.94,5.4 1.77,9.21 1.83,9.48A74.86,74.86 0,0 0,141.97 390.08Z"></path>
<path
android:pathData="M175.03,381.08l-0.9,4.89 -0.69,3.74 -1.26,6.84 -12.22,8.55s-1.1,-0.94 -2.92,-2.43c-5,-4.12 -15.53,-12.48 -23.26,-17a26,26 0,0 0,-6.39 -2.95Z"
android:fillColor="#ffbdc6" />
<path
android:fillColor="#FF000000"
android:pathData="M175.03,381.08l-0.9,4.89a38,38 0,0 1,-8.06 -0.41l-28.51,0.41c-1.35,-0.08 -2.61,-0.19 -3.79,-0.31a26,26 0,0 0,-6.39 -2.95Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M166.07,384.76s14.26,2.44 15.07,-3.67S173.81,371.76 166.9,371.3 118.42,373.76 118.42,373.76s-7.33,9.77 19.14,11.4Z"
android:fillColor="#7679b4" />
<path
android:fillColor="#FF000000"
android:pathData="M175.03,381.08l-0.9,4.89 -0.69,3.74 -1.26,6.84 -12.22,8.55s-1.1,-0.94 -2.92,-2.43c-5,-4.12 -15.53,-12.48 -23.26,-17a26,26 0,0 0,-6.39 -2.95Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M175.03,381.08l-0.9,4.89a38,38 0,0 1,-8.06 -0.41l-28.51,0.41c-1.35,-0.08 -2.61,-0.19 -3.79,-0.31a26,26 0,0 0,-6.39 -2.95Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M166.07,384.76s14.26,2.44 15.07,-3.67S173.81,371.76 166.9,371.3 118.42,373.76 118.42,373.76s-7.33,9.77 19.14,11.4Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M122.69,183.95h74.53v88.38h-74.53z"
android:fillColor="#a66477" />
<path
android:fillColor="#FF000000"
android:pathData="M122.69,183.95h74.53v88.38h-74.53z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M35.33,335.26c-1.23,0.31 -2.79,1.49 -4.54,3.21 -7.53,7.44 -18.27,24.89 -18.27,24.89 -13.76,-16.38 1.47,-29.33 8,-33.78 1.58,-1.08 2.64,-1.66 2.64,-1.66Z"
android:fillColor="#ffbdc6" />
<path
android:pathData="M174.22,211.85s3.67,25.66 16.29,31.77 -16.29,17.51 -16.29,17.51l-39.51,-14.66s22.4,-7.33 17.92,-28.92Z"
android:fillColor="#ffbdc6" />
<path
android:pathData="M131.9,366.21l-0.9,4.89 -0.69,3.74 -1.26,6.84 -12.22,8.55s-1.1,-0.94 -2.92,-2.43c-5,-4.12 -15.53,-12.48 -23.26,-17a26,26 0,0 0,-6.39 -2.95Z"
android:fillColor="#ffbdc6" />
<path
android:fillColor="#FF000000"
android:pathData="M131.9,366.21l-0.9,4.89a38,38 0,0 1,-8.06 -0.41l-28.51,0.41c-1.35,-0.08 -2.61,-0.19 -3.79,-0.31a26,26 0,0 0,-6.39 -2.95Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M122.9,369.88s14.26,2.44 15.07,-3.67 -7.33,-9.37 -14.26,-9.77 -48.47,2.44 -48.47,2.44 -7.33,9.77 19.14,11.4Z"
android:fillColor="#7679b4" />
<path
android:fillColor="#FF000000"
android:pathData="M130.27,374.85l-1.26,6.84 -12.22,8.55s-1.1,-0.94 -2.92,-2.43l16.16,-13.25Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M210.9,468.09q-0.84,-0.41 -1.7,-0.87l-1.49,-1.9 -19.68,-25L188.03,440.76c-0.13,4.15 -1.55,37.25 -12.61,40.3 -11.81,3.26 -26.07,4.07 -32.58,-17.92s-18.33,-70.05 -30.55,-72.9l18.12,-14.87s12,14 16.9,27.48c-0.18,-0.86 -8.47,-39.57 -1.63,-46.41h59.46s9.16,26.14 15.48,39.1c4.9,10.06 12.25,33.84 17,49.93C242.32,461.39 225.9,475.39 210.9,468.09Z"
android:fillColor="#7679b4" />
<path
android:fillColor="#FF000000"
android:pathData="M209.24,363.76c-9.17,5.43 -49.49,3.22 -62.63,2.34l-3.57,-0.26c-0.39,0 0.06,-0.22 0.06,-0.22l0.37,-3.7 9.77,-24.84L205.58,306.76c-1.06,3.19 -1.42,8.08 -1.33,13.69C204.51,338.43 209.24,363.76 209.24,363.76Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M209.24,362.55c-9.17,5.43 -49.49,3.22 -62.63,2.34l-3.57,-0.26 -0.59,0 0.65,-0.17 3.22,-0.85 6.92,-27.7 52.34,-30.34c-1.06,3.19 -1.42,8.08 -1.33,13.69C204.51,337.21 209.24,362.55 209.24,362.55Z"
android:fillColor="#f2f1f2" />
<path
android:fillColor="#FF000000"
android:pathData="M204.25,319.22c-10.64,2.45 -34.06,9.66 -43.06,27 -6,11.58 -11,16.55 -14.57,18.63l-3.57,-0.26 0.06,-0.22 3.22,-0.85 6.92,-27.7 52.34,-30.34C204.51,308.76 204.16,313.61 204.25,319.22Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M23.11,327.93l12.22,7.33c-1.23,0.31 -2.79,1.49 -4.54,3.21 -1,-3 -7.42,-7.12 -10.32,-8.88C22.05,328.51 23.11,327.93 23.11,327.93Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M140.9,365.1a0.73,0.73 0,0 1,-0.86 -0.11A2.94,2.94 0,0 0,140.9 365.1Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M168.51,241.99s-11,1.22 -18.74,-6.92c0,0 -32.58,9.37 -43.58,30.55s-85.94,62.72 -85.94,62.72 13,7.33 11.81,11l49.28,-28.51s17.51,-12.63 22.4,-15.48 31.77,-20.36 37.47,27.29 0,42 0,42 8.15,2.85 20,-20 48.47,-28.1 48.47,-28.1l2,-24s7.27,-15.92 1.7,-22.56a14.1,14.1 0,0 1,-3.26 -6.89c-0.93,-6.1 0,-16.27 13,-24.72 20,-13 27.7,-23.62 27.7,-23.62s0.41,-7.74 -11.81,-11.4 -61.91,-23.62 -61.91,-23.62l-1.63,6.92 39.1,27.7s-19.55,15.88 -35,15.48C179.51,229.76 182.36,241.58 168.51,241.99Z"
android:fillColor="#565388" />
<path
android:fillColor="#FF000000"
android:pathData="M176.06,223.02a80,80 0,0 1,-2.25 -10L152.22,218.76a23.8,23.8 0,0 1,-0.49 12.45,23.22 23.22,0 0,0 24.33,-8.2Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M158.13,207.57m-23.22,0a23.22,23.22 0,1 1,46.44 0a23.22,23.22 0,1 1,-46.44 0"
android:fillColor="#ffbdc6" />
<path
android:fillColor="#FF000000"
android:pathData="M170.47,154.76c6.44,0.73 12.57,3.5 18.91,5a9.34,9.34 0,0 0,4.89 0.19c2.46,-0.76 4.46,-3.34 7,-3.26 1.57,0 3,1.12 4.26,2.15a51.11,51.11 0,0 1,5.87 5.21c4.37,4.75 7.09,11.15 11.08,16.31s10.28,9.18 15.95,6.81c-3.85,15 -16.49,26.47 -30.15,27.4 -5.45,0.37 -11,-0.76 -16.31,0.84a14.28,14.28 0,0 1,-4.12 1c-3,0 -5.48,-2.79 -7.38,-5.5 -4.44,-6.38 -8,-13.62 -13,-19.43 -1.65,-1.92 -3.6,-3.75 -5.93,-4.1s-4.48,0.76 -6.56,1.84c-3.43,1.78 -6.94,3.62 -9.6,6.66s-4.34,7.59 -3.24,11.71c0.59,2.22 1.95,4.22 2,6.55 0,3.7 -3.22,6.41 -3.87,10a38.6,38.6 0,0 0,-0.16 4.56c-0.29,4.94 -3.51,9 -6.89,12.09 -1.31,1.21 -2.77,2.5 -3.15,4.37 -0.26,1.27 0,2.62 -0.17,3.91 -0.49,3.21 -3.69,4.83 -6.52,5.25a18.9,18.9 0,0 1,-9.78 -1.16c4,-1.87 6.39,-7.2 5.47,-12 -1.26,-6.61 -7.9,-11.35 -7.34,-18.09a20.93,20.93 0,0 1,1.84 -5.95,54.45 54.45,0 0,0 3.14,-11.28 19.11,19.11 0,0 0,-0.19 -9c-0.85,-2.59 -2.58,-4.65 -4.06,-6.84a38.82,38.82 0,0 1,-4.7 -9.63,6.75 6.75,0 0,1 -0.45,-3.18 6.59,6.59 0,0 1,2 -3.3c3.64,-3.81 7.54,-7.78 12.38,-8.88a27.76,27.76 0,0 1,7 -0.27,82.24 82.24,0 0,0 12.21,-0.52c3.34,-0.39 9,-0.34 11.82,-2.52 2.63,-2 4.12,-4.55 7.37,-5.83A21.57,21.57 0,0 1,170.47 154.76Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M183.38,394.52s13.44,26.47 9.37,34.62"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M207.75,465.32l-19.68,-25L188.07,440.76s-1.14,-8.08 2.61,-5.36c8.21,5.94 21.35,15.68 21.63,17.36S209.65,461.18 207.75,465.32Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M179.9,229.76s1.66,6.88 -3.71,10.32c8.27,-1.42 8.63,-7.85 8.38,-10.65A26.06,26.06 0,0 1,179.9 229.76Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M25.15,326.71s74.94,-41.54 85.94,-62.72c7.89,-15.2 26.9,-24.31 37,-28.25 -7.37,2.47 -32.17,11.94 -41.49,29.88 -11,21.18 -85.94,62.72 -85.94,62.72Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M194.48,226.53c12.75,-4 24.94,-13.87 24.94,-13.87l-39.1,-27.7 0.89,-3.8 -3.74,-1.5 -1.63,6.92 39.1,27.7A94.35,94.35 0,0 1,194.48 226.53Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M194.73,320.39a96.88,96.88 0,0 1,15.33 -3.87l0.07,-0.79A103.76,103.76 0,0 0,194.73 320.39Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M147.34,363.06h-0.36a0.73,0.73 0,0 1,-0.86 -0.11,3 3,0 0,0 0.86,0.11c1.34,-0.78 3.35,-6.86 -0.86,-42.06 -4.5,-37.58 -22.16,-34.63 -31.83,-30.31 9.88,-2.72 23.48,-0.37 27.35,31.94 4.21,35.2 2.2,41.29 0.86,42.06A9,9 0,0 0,147.34 363.06Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M142.5,364.7a3,3 0,0 1,-0.86 -0.11A0.73,0.73 0,0 0,142.5 364.7Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M170.47,153.97c6.44,0.73 12.57,3.5 18.91,5a9.34,9.34 0,0 0,4.89 0.19c2.46,-0.76 4.46,-3.34 7,-3.26 1.57,0 3,1.12 4.26,2.15a51.11,51.11 0,0 1,5.87 5.21c4.37,4.75 7.09,11.15 11.08,16.31s10.28,9.18 15.95,6.81c-3.85,15 -16.49,26.47 -30.15,27.4 -5.45,0.37 -11,-0.76 -16.31,0.84a14.28,14.28 0,0 1,-4.12 1c-3,0 -5.48,-2.79 -7.38,-5.5 -4.44,-6.38 -8,-13.62 -13,-19.43 -1.65,-1.92 -3.6,-3.75 -5.93,-4.1s-4.48,0.76 -6.56,1.84c-3.43,1.78 -6.94,3.62 -9.6,6.66s-4.34,7.59 -3.24,11.71c0.59,2.22 1.95,4.22 2,6.55 0,3.7 -3.22,6.41 -3.87,10a38.6,38.6 0,0 0,-0.16 4.56c-0.29,4.94 -3.51,9 -6.89,12.09 -1.31,1.21 -2.77,2.5 -3.15,4.37 -0.26,1.27 0,2.62 -0.17,3.91 -0.49,3.21 -3.69,4.83 -6.52,5.25a18.9,18.9 0,0 1,-9.78 -1.16c4,-1.87 6.39,-7.2 5.47,-12 -1.26,-6.61 -7.9,-11.35 -7.34,-18.09a20.93,20.93 0,0 1,1.84 -5.95,54.45 54.45,0 0,0 3.14,-11.28 19.11,19.11 0,0 0,-0.19 -9c-0.85,-2.59 -2.58,-4.65 -4.06,-6.84a38.82,38.82 0,0 1,-4.7 -9.63,6.75 6.75,0 0,1 -0.45,-3.18 6.59,6.59 0,0 1,2 -3.3c3.64,-3.81 7.54,-7.78 12.38,-8.88a27.76,27.76 0,0 1,7 -0.27,82.24 82.24,0 0,0 12.21,-0.52c3.34,-0.39 9,-0.34 11.82,-2.52 2.63,-2 4.12,-4.55 7.37,-5.83A21.57,21.57 0,0 1,170.47 153.97Z"
android:fillColor="#a66477" />
<path android:pathData="M833.5,101.85h0c0,-0.13 0,-0.25 0,-0.37s0,-0.26 -0.06,-0.38h-0.16c0,-0.27 0,-0.54 0,-0.83 -0.4,-9.27 -13.22,-29 -18.36,-23.24 -4.5,5.06 2.29,17.86 5.75,23.62l0.31,0.52 -0.17,-0.11s-14.31,42.68 -16,44.34 -13.47,35.22 -29,39c-3.07,0.73 -5.62,1.39 -7.76,2l0.17,-0.57c1,-3.27 2.23,-6.36 2.73,-10s0,-8.05 -1.84,-9.82c-0.9,-0.88 -2,-1 -2.74,-2.4a11.08,11.08 0,0 1,-0.76 -3.85l-1.32,-16.18 0.92,-0.28c5.56,-1.78 10.95,-6 11.58,-11.68a6,6 0,0 1,-0.59 0.19,10.13 10.13,0 0,0 0.17,-1c-4.67,1.84 -9,-3 -13.5,-5.17 -7.41,-3.63 -15.88,-0.21 -23.53,0.62 -8.67,0.95 -16.9,-2.65 -25.76,-2 -4.82,0.37 -10.18,3.64 -9.92,8.39 0.15,2.61 2,4.82 2.76,7.32 1.92,6.05 -2.35,12.12 -6.09,17.28 -2.46,3.39 -4.82,7.52 -5.24,11.5 -8.61,-9 -17.92,-19.4 -19,-23.31L651.18,102.76s-0.59,0.63 -1.54,1.56c-0.15,-0.46 -0.33,-1 -0.53,-1.54 -3.18,-8.91 -12.18,-30.5 -23.59,-26.54s4.73,26.09 11.75,34.91l1,1.22a3.16,3.16 0,0 1,-1.78 -0.08l27.78,47.65s5.05,9.12 9.68,11.6c0,0 34.51,43.51 34.93,52.21S724.4,255.66 724.4,255.66s5.05,37.71 -3.79,44.34h0.11l0.07,0L720.9,300l0.1,0 0.2,0 0.13,0 0.13,0 0.17,0 0.14,0 0.2,0 0.1,0c-0.42,0.41 -0.85,0.86 -1.29,1.35 -6.55,7.26 -14.92,22.82 -3.48,49.28 16.83,39 19.36,54.28 19.36,54.28s-32,1.66 -38.3,2.9c-5.58,1.1 -27.27,1.87 -32.23,2 -1.77,-2.06 -7,-6.62 -14.06,0 -8.84,8.29 -15.15,36 -15.15,36s-3.37,22.38 8,16.57c0,0 13.47,-18.65 17.25,-19.48 1.88,-0.41 3.87,-3.18 5.39,-5.85l0.08,0.05h0c0.09,0 0.46,-0.2 1.06,-0.44h0c2.8,-1.11 10.51,-3.78 16.59,-2.45 3.33,0.73 17.61,0.9 32.58,0.86 -3.38,8.1 -9.44,29 -9.44,29S705.9,483.56 714.3,482.76c6,-0.59 15.2,-15.92 20,-24.67 3.48,-2.55 13.45,-11.69 20.82,-11l49.66,-19.06s11.78,-6.63 5.47,-28.59c-5,-17.46 -19.23,-53.2 -24.85,-67.13h0l-0.17,-0.36c-1.36,-3.37 -2.18,-5.37 -2.18,-5.37h0a82.19,82.19 0,0 1,-4.51 -19.71c-0.05,-0.53 -0.09,-1.07 -0.13,-1.6a8.84,8.84 0,0 0,1.95 -1.13s-4.63,-46.82 0,-51.8l0,0h0l0.08,-0.09v0l0,-0.06h0l0.08,-0.1h0l0.18,-0.23h0l0.22,-0.28 0,0c0.25,-0.33 0.55,-0.74 0.89,-1.24h0c2.65,-3.88 7.59,-12.74 6.17,-23.2v0q-0.09,-0.68 -0.22,-1.37h0a28.57,28.57 0,0 0,-2.88 -8.12,22.52 22.52,0 0,1 -0.37,-3.21c0,-0.61 0,-1.28 0,-2v-0.12q0,-0.29 0,-0.58v-0.14c0,-0.47 0.08,-1 0.15,-1.44l0,-0.18q0,-0.27 0.09,-0.55l0,-0.23c0,-0.18 0.08,-0.36 0.12,-0.54l0,-0.19c0.06,-0.24 0.12,-0.48 0.2,-0.72l0,-0.12q0.09,-0.3 0.2,-0.59l0.09,-0.23 0.2,-0.48 0.1,-0.24c0.08,-0.18 0.17,-0.36 0.26,-0.54l0.07,-0.15q0.18,-0.33 0.38,-0.65l0.11,-0.17 0.33,-0.47 0.16,-0.21 0.35,-0.42 0.16,-0.18c0.18,-0.19 0.36,-0.38 0.56,-0.56 5.47,-5 29.88,-41.85 29.88,-41.85s5.89,-8.29 5.89,-13.67C824.14,147.1 834.55,112.4 833.5,101.85ZM767.97,411.6c-0.6,-5.68 -1.2,-12.72 -1.75,-20l9.52,14.84S774.84,410.96 767.97,411.6Z"></path>
<path
android:pathData="M668.71,408.46s-5.7,-9 -14.26,-0.81 -14.66,35.43 -14.66,35.43 -3.26,22 7.74,16.29c0,0 13,-18.33 16.7,-19.14s7.74,-11 7.74,-11Z"
android:fillColor="#493545" />
<path
android:pathData="M729.8,430.45s-7.74,-3.67 -10.18,-0.81 -10.59,31.36 -10.59,31.36 -2.44,18.74 5.7,17.92S737.13,448.76 737.13,448.76Z"
android:fillColor="#493545" />
<path
android:fillColor="#FF000000"
android:pathData="M729.8,430.45s-7.74,-3.67 -10.18,-0.81 -10.59,31.36 -10.59,31.36 -2.44,18.74 5.7,17.92S737.13,448.76 737.13,448.76Z"
android:strokeAlpha="0.05"
android:fillAlpha="0.05" />
<path
android:pathData="M756.68,375.06l17.51,27.29s-1.22,6.11 -11.81,4.89l-36.25,22.81s-3.15,27.77 6.92,25.25c1.63,-0.41 13,-12.22 21.18,-11.4L802.3,425.16s11.4,-6.52 5.29,-28.1 -26.31,-71.62 -26.31,-71.62l-31.93,17.86Z"
android:fillColor="#3e3d77" />
<path
android:fillColor="#FF000000"
android:pathData="M756.68,375.06l17.51,27.29s-1.22,6.11 -11.81,4.89l-36.25,22.81s-3.15,27.77 6.92,25.25c1.63,-0.41 13,-12.22 21.18,-11.4L802.3,425.16s11.4,-6.52 5.29,-28.1 -26.31,-71.62 -26.31,-71.62l-31.93,17.86Z"
android:strokeAlpha="0.05"
android:fillAlpha="0.05" />
<path
android:pathData="M767.68,415.38c2.44,15.48 -11.4,16.7 -11.4,16.7s-62.32,1.22 -69.65,-0.41 -17.11,2.85 -17.11,2.85c-12.63,-7.74 -2.44,-26.88 -2.44,-26.88s26.07,-0.81 32.18,-2S736.32,402.76 736.32,402.76s-2.44,-15.07 -18.74,-53.35c-11.07,-26 -3,-41.3 3.37,-48.43a26.82,26.82 0,0 1,5.59 -4.92l50.1,2.44a65,65 0,0 0,0.28 7.57,80.62 80.62,0 0,0 6.65,25c-2.85,0 -21.18,17.11 -21.18,17.11S765.23,399.91 767.68,415.38Z"
android:fillColor="#3e3d77" />
<path
android:fillColor="#FF000000"
android:pathData="M670.74,409.27s26.07,-0.81 32.18,-2 37.06,-2.85 37.06,-2.85 -2.44,-15.07 -18.74,-53.35c-11.07,-26 -3,-41.3 3.37,-48.43a26.82,26.82 0,0 1,5.59 -4.92l46.42,2.26c0,-0.48 0,-1 0,-1.45l-50.1,-2.44a26.82,26.82 0,0 0,-5.59 4.92c-6.34,7.14 -14.44,22.43 -3.37,48.43C733.9,387.69 736.32,402.76 736.32,402.76s-31,1.63 -37.06,2.85 -32.18,2 -32.18,2S656.9,426.76 669.52,434.53c0,0 0.38,-0.18 1,-0.44C662.13,425.46 670.74,409.27 670.74,409.27Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M720.02,146.57h25.25v63.94h-25.25z"
android:fillColor="#493545" />
<path
android:fillColor="#FF000000"
android:pathData="M720.02,146.57h25.25v63.94h-25.25z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M759.71,137.19c0.87,0.24 1.85,0.27 2.44,1.47a9,9 0,0 1,0.59 3l1.59,19.76a11,11 0,0 0,0.74 3.78c0.67,1.34 1.78,1.5 2.65,2.36 1.75,1.74 2.26,6.1 1.78,9.65s-1.69,6.59 -2.64,9.8c-1.36,4.6 -2.26,9.77 -4.17,13.65s-5.38,6 -7.62,2.74 -1.94,-9.84 -2.36,-15.23c-0.7,-9 -4.21,-16.76 -4.45,-25.82 -0.2,-7.33 1.77,-14.17 3,-21.12 0.88,-4.77 0.93,-10.56 2.21,-14.85C754.54,131.48 756.58,136.33 759.71,137.19Z"
android:fillColor="#493545" />
<path
android:fillColor="#FF000000"
android:pathData="M759.71,137.19c0.87,0.24 1.85,0.27 2.44,1.47a9,9 0,0 1,0.59 3l1.59,19.76a11,11 0,0 0,0.74 3.78c0.67,1.34 1.78,1.5 2.65,2.36 1.75,1.74 2.26,6.1 1.78,9.65s-1.69,6.59 -2.64,9.8c-1.36,4.6 -2.26,9.77 -4.17,13.65s-5.38,6 -7.62,2.74 -1.94,-9.84 -2.36,-15.23c-0.7,-9 -4.21,-16.76 -4.45,-25.82 -0.2,-7.33 1.77,-14.17 3,-21.12 0.88,-4.77 0.93,-10.56 2.21,-14.85C754.54,131.48 756.58,136.33 759.71,137.19Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M652.82,109.1l-9.77,8.15s-1.16,-1.36 -2.89,-3.56c-6.79,-8.67 -22.4,-30.42 -11.37,-34.31s19.75,17.32 22.83,26.08C652.4,107.68 652.82,109.1 652.82,109.1Z"
android:fillColor="#c77485" />
<path
android:pathData="M829.18,106.25c-4.07,6.11 -9.77,0 -9.77,0s-0.73,-1.09 -1.76,-2.85c-3.35,-5.67 -9.92,-18.24 -5.57,-23.22 5,-5.69 17.39,13.73 17.77,22.84A5.42,5.42 0,0 1,829.18 106.25Z"
android:fillColor="#c77485" />
<path
android:pathData="M728.98,172.23s8.15,26.07 5.7,33.8S752.2,222.76 752.2,222.76h22.81s8.15,-16.7 6.11,-21.59 -19.55,-8.55 -19.55,-8.55 -10.18,0 -9.77,-27.29Z"
android:fillColor="#c77485" />
<path
android:fillColor="#FF000000"
android:pathData="M652.82,109.1l-9.77,8.15s-1.16,-1.36 -2.89,-3.56c3.55,-0.63 9.06,-5.81 11.47,-8.23C652.4,107.68 652.82,109.1 652.82,109.1Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M829.18,106.25c-4.07,6.11 -9.77,0 -9.77,0s-0.73,-1.09 -1.76,-2.85l0.13,-0.41c2.64,1.89 10.85,0.28 12.07,0A5.42,5.42 0,0 1,829.18 106.25Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M776.9,306.06c-12.6,5.75 -53.54,-4.49 -56,-5.1a26.82,26.82 0,0 1,5.59 -4.92l50.1,2.44A65,65 0,0 0,776.9 306.06Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M734.28,194.63s-9.77,3.26 -23.62,-9.37c0,0 -31,-30.55 -33,-37.88l-24,-42s-10.18,11 -14.26,9.37l26.88,46.84s4.89,9 9.37,11.4c0,0 33.4,42.77 33.8,51.32S724.5,255.76 724.5,255.76s4.89,37.06 -3.67,43.58c0,0 47.65,12.22 57.83,4.07 0,0 -4.48,-46 0,-50.91 0,0 13.85,-16.29 4.48,-34.21 0,0 -2,-9.77 3.26,-14.66s28.92,-41.14 28.92,-41.14 5.7,-8.15 5.7,-13.44c0,0 10.59,-35.84 9,-45.21 0,0 -9.37,2 -12.22,0 0,0 -13.85,42 -15.48,43.58s-13,34.62 -28.1,38.29 -17.51,5.29 -17.51,5.29 29.32,18.33 15.07,26.47S734.28,194.63 734.28,194.63Z"
android:fillColor="#ffaac4" />
<path
android:fillColor="#FF000000"
android:pathData="M752.79,178.5a77.83,77.83 0,0 1,-0.59 -11.57l-22.81,6.92a30.76,30.76 0,0 1,1.43 4.68c2.61,1.15 6.13,3.87 9.16,3.87A20.77,20.77 0,0 0,752.79 178.5Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M739.57,160.01m-21.18,0a21.18,21.18 0,1 1,42.36 0a21.18,21.18 0,1 1,-42.36 0"
android:fillColor="#c77485" />
<path
android:fillColor="#FF000000"
android:pathData="M714.37,127.38c-4.66,0.36 -9.86,3.58 -9.6,8.25 0.14,2.57 1.9,4.74 2.67,7.2 1.85,5.95 -2.27,11.92 -5.89,17s-7,11.81 -3.9,17.19a42.39,42.39 0,0 0,2.86 3.73c3.83,5.17 3.78,12.15 5.48,18.36a32.21,32.21 0,0 0,37.84 23,20.14 20.14,0 0,1 -4.25,-13.62c0.23,-3.56 1.38,-7.28 0,-10.57 -1.78,-4.23 -7,-5.9 -9.69,-9.6s-2.51,-8.83 -1.21,-13.24 3.55,-8.5 4.63,-13a39.16,39.16 0,0 1,1 -3.89c1.88,-5.34 7.5,-8.44 13,-9.77s11.28,-1.41 16.65,-3.16 10.59,-5.85 11.21,-11.48c-4.52,1.81 -8.71,-2.91 -13.07,-5.08 -7.18,-3.56 -15.37,-0.21 -22.77,0.61C730.9,130.25 722.9,126.76 714.37,127.38Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M713.96,126.57c-4.66,0.36 -9.86,3.58 -9.6,8.25 0.14,2.57 1.9,4.74 2.67,7.2 1.85,5.95 -2.27,11.92 -5.89,17s-7,11.81 -3.9,17.19a42.39,42.39 0,0 0,2.86 3.73c3.83,5.17 3.78,12.15 5.48,18.36a32.21,32.21 0,0 0,37.84 23,20.14 20.14,0 0,1 -4.25,-13.62c0.23,-3.56 1.38,-7.28 0,-10.57 -1.78,-4.23 -7,-5.9 -9.69,-9.6s-2.51,-8.83 -1.21,-13.24 3.55,-8.5 4.63,-13a39.16,39.16 0,0 1,1 -3.89c1.88,-5.34 7.5,-8.44 13,-9.77s11.28,-1.41 16.65,-3.16 10.59,-5.85 11.21,-11.48c-4.52,1.81 -8.71,-2.91 -13.07,-5.08 -7.18,-3.56 -15.37,-0.21 -22.77,0.61C730.51,129.43 722.54,125.9 713.96,126.57Z"
android:fillColor="#493545" />
<path
android:fillColor="#FF000000"
android:pathData="M760.55,207.06s8.48,7.57 10.15,10.91"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M778.9,252.27s-10.59,0 -15.48,1.22 -16.7,0 -16.7,0"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M771.75,217.44a10.18,10.18 0,0 1,-2.93 1.12,11.2 11.2,0 0,0 7.82,-1.12c14.26,-8.15 -15.07,-26.47 -15.07,-26.47h-4.89S786.01,209.3 771.75,217.44Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M830.09,104.55c0,-0.26 -0.06,-0.51 -0.1,-0.74a47.84,47.84 0,0 1,-5.07 0.77A22.46,22.46 0,0 0,830.09 104.55Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M725.73,299.31c8.55,-6.52 3.67,-43.58 3.67,-43.58s-14.66,-22.81 -15.07,-31.36 -33.8,-51.32 -33.8,-51.32c-4.48,-2.44 -9.37,-11.4 -9.37,-11.4s-27.7,-45.21 -31.77,-46.84l26.88,46.84s4.89,9 9.37,11.4c0,0 33.4,42.77 33.8,51.32S724.5,255.76 724.5,255.76s4.89,37.06 -3.67,43.58c0,0 29.29,7.51 46.85,6.83C750.08,305.55 725.73,299.31 725.73,299.31Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M734.52,194.95l-0.24,-0.31a6.44,6.44 0,0 1,-0.85 0.19C733.81,194.88 734.17,194.92 734.52,194.95Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M829.99,103.76l-0.25,0.05c-0.43,12.51 -9.11,41.9 -9.11,41.9 0,5.29 -5.7,13.44 -5.7,13.44s-23.62,36.25 -28.92,41.14 -3.26,14.66 -3.26,14.66l0.05,0.1c-0.16,-3.29 0.24,-8.39 3.61,-11.51 5.29,-4.89 28.92,-41.14 28.92,-41.14s5.7,-8.15 5.7,-13.44C821.03,149.02 831.62,113.18 829.99,103.76Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:fillColor="#FF000000"
android:pathData="M778.27,249.21c0.61,3.46 0.2,-0.2 0.41,3.26 0,0 10,-11.73 7.27,-26.23C786.77,239.2 778.27,249.21 778.27,249.21Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M42.12,620.44a427.67,41.08 0,1 0,855.34 0a427.67,41.08 0,1 0,-855.34 0z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M304.01,578.76s-14.56,-49.45 2.73,-85.84a78.1,78.1 0,0 0,6.32 -49,131.35 131.35,0 0,0 -6.94,-23"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#535461" />
<path
android:pathData="M316.9,397.94c0,6.06 -11,23.63 -11,23.63s-11,-17.57 -11,-23.63a11,11 0,1 1,21.94 0Z"
android:fillColor="#0099bf" />
<path
android:pathData="M335.01,431.5c-3.29,5.09 -22.05,13.87 -22.05,13.87s0.34,-20.71 3.63,-25.8a11,11 0,1 1,18.42 11.93Z"
android:fillColor="#0099bf" />
<path
android:pathData="M334.22,488.87c-5.41,2.73 -26,0.84 -26,0.84s10.75,-17.71 16.16,-20.44a11,11 0,1 1,9.88 19.59Z"
android:fillColor="#0099bf" />
<path
android:pathData="M323.85,532.13c-4.87,3.6 -25.53,5.23 -25.53,5.23s7.6,-19.27 12.48,-22.88a11,11 0,0 1,13 17.64Z"
android:fillColor="#0099bf" />
<path
android:pathData="M289.9,446.55c4.35,4.22 24.6,8.6 24.6,8.6s-5,-20.11 -9.31,-24.34A11,11 0,1 0,289.9 446.55Z"
android:fillColor="#0099bf" />
<path
android:pathData="M278.43,497.31c5.41,2.73 26,0.84 26,0.84S293.72,480.44 288.31,477.76a11,11 0,0 0,-9.88 19.59Z"
android:fillColor="#0099bf" />
<path
android:pathData="M274.03,548.17c4.87,3.6 25.53,5.23 25.53,5.23s-7.6,-19.27 -12.48,-22.88a11,11 0,1 0,-13 17.64Z"
android:fillColor="#0099bf" />
<path
android:pathData="M316.9,397.94c0,6.06 -11,23.63 -11,23.63s-11,-17.57 -11,-23.63a11,11 0,1 1,21.94 0Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M335.01,431.5c-3.29,5.09 -22.05,13.87 -22.05,13.87s0.34,-20.71 3.63,-25.8a11,11 0,1 1,18.42 11.93Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M334.22,488.87c-5.41,2.73 -26,0.84 -26,0.84s10.75,-17.71 16.16,-20.44a11,11 0,1 1,9.88 19.59Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M323.85,532.13c-4.87,3.6 -25.53,5.23 -25.53,5.23s7.6,-19.27 12.48,-22.88a11,11 0,0 1,13 17.64Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M289.9,446.55c4.35,4.22 24.6,8.6 24.6,8.6s-5,-20.11 -9.31,-24.34A11,11 0,1 0,289.9 446.55Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M278.43,497.31c5.41,2.73 26,0.84 26,0.84S293.72,480.44 288.31,477.76a11,11 0,0 0,-9.88 19.59Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M274.03,548.17c4.87,3.6 25.53,5.23 25.53,5.23s-7.6,-19.27 -12.48,-22.88a11,11 0,1 0,-13 17.64Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M598.65,579.47s-14.56,-49.45 2.73,-85.84a78.1,78.1 0,0 0,6.32 -49,131.35 131.35,0 0,0 -6.94,-23"
android:strokeWidth="2"
android:fillColor="#00000000"
android:strokeColor="#535461" />
<path
android:pathData="M611.52,398.64c0,6.06 -11,23.63 -11,23.63s-11,-17.57 -11,-23.63a11,11 0,0 1,21.94 0Z"
android:fillColor="#0099bf" />
<path
android:pathData="M629.66,432.2c-3.29,5.09 -22.05,13.87 -22.05,13.87s0.34,-20.71 3.63,-25.8a11,11 0,1 1,18.42 11.93Z"
android:fillColor="#0099bf" />
<path
android:pathData="M628.9,489.57c-5.41,2.73 -26,0.84 -26,0.84s10.75,-17.71 16.16,-20.44A11,11 0,1 1,628.9 489.57Z"
android:fillColor="#0099bf" />
<path
android:pathData="M618.49,532.83c-4.87,3.6 -25.53,5.23 -25.53,5.23s7.6,-19.27 12.48,-22.88a11,11 0,0 1,13 17.64Z"
android:fillColor="#0099bf" />
<path
android:pathData="M584.56,447.25c4.35,4.22 24.6,8.6 24.6,8.6s-5,-20.11 -9.31,-24.34a11,11 0,1 0,-15.29 15.74Z"
android:fillColor="#0099bf" />
<path
android:pathData="M573.07,498.01c5.41,2.73 26,0.84 26,0.84s-10.75,-17.71 -16.16,-20.44a11,11 0,0 0,-9.88 19.59Z"
android:fillColor="#0099bf" />
<path
android:pathData="M568.68,548.87c4.87,3.6 25.53,5.23 25.53,5.23s-7.6,-19.27 -12.48,-22.88a11,11 0,0 0,-13 17.64Z"
android:fillColor="#0099bf" />
<path
android:pathData="M611.52,398.64c0,6.06 -11,23.63 -11,23.63s-11,-17.57 -11,-23.63a11,11 0,0 1,21.94 0Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M629.66,432.2c-3.29,5.09 -22.05,13.87 -22.05,13.87s0.34,-20.71 3.63,-25.8a11,11 0,1 1,18.42 11.93Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M628.9,489.57c-5.41,2.73 -26,0.84 -26,0.84s10.75,-17.71 16.16,-20.44A11,11 0,1 1,628.9 489.57Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M618.49,532.83c-4.87,3.6 -25.53,5.23 -25.53,5.23s7.6,-19.27 12.48,-22.88a11,11 0,0 1,13 17.64Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M584.56,447.25c4.35,4.22 24.6,8.6 24.6,8.6s-5,-20.11 -9.31,-24.34a11,11 0,1 0,-15.29 15.74Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M573.07,498.01c5.41,2.73 26,0.84 26,0.84s-10.75,-17.71 -16.16,-20.44a11,11 0,0 0,-9.88 19.59Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M568.68,548.87c4.87,3.6 25.53,5.23 25.53,5.23s-7.6,-19.27 -12.48,-22.88a11,11 0,0 0,-13 17.64Z"
android:strokeAlpha="0.1"
android:fillColor="#0099bf"
android:fillAlpha="0.1" />
<path
android:pathData="M669.9,15.31h-6.28a4.4,4.4 0,1 0,0 -8.79L612.7,6.52a4.4,4.4 0,0 0,0 8.79h6.28a4.4,4.4 0,0 0,0 8.79h-8.79a4.4,4.4 0,1 0,0 8.79h50.88a4.4,4.4 0,1 0,0 -8.79L669.9,24.1a4.4,4.4 0,0 0,0 -8.79Z"
android:strokeAlpha="0.5"
android:fillColor="#dee3f3"
android:fillAlpha="0.5" />
<path
android:pathData="M375.68,40.95L370.9,40.95a3.35,3.35 0,1 0,0 -6.69L332.18,34.26a3.35,3.35 0,0 0,0 6.69h4.78a3.35,3.35 0,1 0,0 6.69h-6.69a3.35,3.35 0,1 0,0 6.69h38.72a3.35,3.35 0,1 0,0 -6.69h6.69a3.35,3.35 0,0 0,0 -6.69Z"
android:strokeAlpha="0.5"
android:fillColor="#dee3f3"
android:fillAlpha="0.5" />
<path
android:strokeWidth="1"
android:pathData="M50.68,514.76s17.5,34.35 3.24,53.14 1.3,70 1.3,70"
android:fillColor="#00000000"
android:strokeColor="#0099bf" />
<path
android:pathData="M55.9,504.02c0,6.62 -4.86,12 -4.86,12s-4.86,-5.37 -4.86,-12 4.86,-12 4.86,-12S55.9,497.4 55.9,504.02Z"
android:fillColor="#0099bf" />
<path
android:strokeWidth="1"
android:pathData="M59.75,514.76s-17.5,34.35 -3.24,53.14 -1.3,70 -1.3,70"
android:fillColor="#00000000"
android:strokeColor="#0099bf" />
<path
android:pathData="M54.57,504.02c0,6.62 4.86,12 4.86,12s4.86,-5.37 4.86,-12 -4.86,-12 -4.86,-12S54.57,497.4 54.57,504.02Z"
android:fillColor="#0099bf" />
<path
android:fillColor="#FF000000"
android:pathData="M54.57,504.02c0,6.62 4.86,12 4.86,12s4.86,-5.37 4.86,-12 -4.86,-12 -4.86,-12S54.57,497.4 54.57,504.02Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:strokeWidth="1"
android:pathData="M66.9,514.76s17.5,34.35 3.24,53.14 1.3,70 1.3,70"
android:fillColor="#00000000"
android:strokeColor="#0099bf" />
<path
android:pathData="M72.07,504.02c0,6.62 -4.86,12 -4.86,12s-4.86,-5.37 -4.86,-12 4.86,-12 4.86,-12S72.07,497.4 72.07,504.02Z"
android:fillColor="#0099bf" />
<path
android:pathData="M69.34,531.54c-4.59,4.77 -11.82,5.27 -11.82,5.27s0.22,-7.24 4.81,-12 11.82,-5.27 11.82,-5.27S73.9,526.76 69.34,531.54Z"
android:fillColor="#0099bf" />
<path
android:pathData="M69.8,555.24c-4.59,4.77 -11.82,5.27 -11.82,5.27s0.22,-7.24 4.81,-12 11.82,-5.27 11.82,-5.27S74.39,550.46 69.8,555.24Z"
android:fillColor="#0099bf" />
<path
android:pathData="M44.9,568.27c4.34,5 4.19,12.24 4.19,12.24s-7.19,-0.87 -11.53,-5.87 -4.19,-12.24 -4.19,-12.24S40.56,563.27 44.9,568.27Z"
android:fillColor="#0099bf" />
<path
android:pathData="M48.9,517.76c5.52,3.66 7.31,10.68 7.31,10.68s-7.16,1.09 -12.68,-2.57 -7.31,-10.68 -7.31,-10.68S43.41,514.08 48.9,517.76Z"
android:fillColor="#0099bf" />
<path
android:fillColor="#FF000000"
android:pathData="M48.9,517.76c5.52,3.66 7.31,10.68 7.31,10.68s-7.16,1.09 -12.68,-2.57 -7.31,-10.68 -7.31,-10.68S43.41,514.08 48.9,517.76Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:strokeWidth="1"
android:pathData="M75.95,514.76s-17.5,34.35 -3.24,53.14 -1.3,70 -1.3,70"
android:fillColor="#00000000"
android:strokeColor="#0099bf" />
<path
android:pathData="M70.77,504.02c0,6.62 4.86,12 4.86,12s4.86,-5.37 4.86,-12 -4.86,-12 -4.86,-12S70.77,497.4 70.77,504.02Z"
android:fillColor="#0099bf" />
<path
android:fillColor="#FF000000"
android:pathData="M70.77,504.02c0,6.62 4.86,12 4.86,12s4.86,-5.37 4.86,-12 -4.86,-12 -4.86,-12S70.77,497.4 70.77,504.02Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M72.17,532.05c-4.65,4.72 -5,12 -5,12s7.23,-0.41 11.88,-5.13 5,-12 5,-12S76.82,527.33 72.17,532.05Z"
android:fillColor="#0099bf" />
<path
android:fillColor="#FF000000"
android:pathData="M72.17,532.05c-4.65,4.72 -5,12 -5,12s7.23,-0.41 11.88,-5.13 5,-12 5,-12S76.82,527.33 72.17,532.05Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M81.28,564.86c-4.65,4.72 -5,12 -5,12s7.23,-0.41 11.88,-5.13 5,-12 5,-12S85.9,560.14 81.28,564.86Z"
android:fillColor="#0099bf" />
<path
android:strokeWidth="1"
android:pathData="M67.9,557.65s10.53,-16.6 25.32,-17"
android:fillColor="#00000000"
android:strokeColor="#0099bf" />
<path
android:strokeWidth="1"
android:pathData="M59.67,547.62s-10.53,-16.6 -25.32,-17"
android:fillColor="#00000000"
android:strokeColor="#0099bf" />
<path
android:strokeWidth="1"
android:pathData="M58.3,571.32s10.53,-16.6 25.32,-17"
android:fillColor="#00000000"
android:strokeColor="#0099bf" />
<path
android:pathData="M92.71,540.56m-2.73,0a2.73,2.73 0,1 1,5.46 0a2.73,2.73 0,1 1,-5.46 0"
android:fillColor="#0099bf" />
<path
android:pathData="M34.61,530.76m-2.73,0a2.73,2.73 0,1 1,5.46 0a2.73,2.73 0,1 1,-5.46 0"
android:fillColor="#0099bf" />
<path
android:strokeWidth="1"
android:pathData="M66.05,576.76s-10.53,-16.6 -25.32,-17"
android:fillColor="#00000000"
android:strokeColor="#0099bf" />
<path
android:pathData="M40.99,559.92m-2.73,0a2.73,2.73 0,1 1,5.46 0a2.73,2.73 0,1 1,-5.46 0"
android:fillColor="#0099bf" />
<path
android:pathData="M83.82,554.46m-2.73,0a2.73,2.73 0,1 1,5.46 0a2.73,2.73 0,1 1,-5.46 0"
android:fillColor="#0099bf" />
<path
android:pathData="M124.28,617.91S98.9,612.83 92.12,606.06 54.9,587.45 51.51,595.91s-45.69,37.23 -16.92,42.31 67.69,6.77 76.15,3.38S124.28,617.91 124.28,617.91Z"
android:fillColor="#a8a8a8" />
<path
android:fillColor="#FF000000"
android:pathData="M34.59,635.07c28.77,5.08 67.69,6.77 76.15,3.38 6.44,-2.58 10.92,-15 12.69,-20.72l0.85,0.18s-5.08,20.31 -13.54,23.69 -47.38,1.69 -76.15,-3.38c-8.3,-1.47 -10.68,-4.91 -9.78,-9.26C25.51,631.76 28.41,633.98 34.59,635.07Z"
android:strokeAlpha="0.2"
android:fillAlpha="0.2" />
<path
android:pathData="M894.83,522.54s8.38,11 -3.87,27.5 -22.35,30.51 -18.26,40.83c0,0 18.48,-30.73 33.52,-31.16S911.38,541.01 894.83,522.54Z"
android:fillColor="#0099bf" />
<path
android:fillColor="#FF000000"
android:pathData="M894.83,522.54a13.57,13.57 0,0 1,1.71 3.44c14.68,17.24 22.49,33.33 8.39,33.74 -13.14,0.38 -28.9,23.87 -32.68,29.81a12.74,12.74 0,0 0,0.45 1.35s18.48,-30.73 33.52,-31.16S911.38,541.01 894.83,522.54Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M910.41,536.5c0,3.86 -0.43,7 -1,7s-1,-3.13 -1,-7 0.54,-2 1.07,-2S910.41,532.65 910.41,536.5Z"
android:fillColor="#ffd037" />
<path
android:pathData="M915.76,541.11c-3.39,1.85 -6.34,3 -6.59,2.49s2.28,-2.35 5.67,-4.19 2.05,-0.5 2.31,0S919.14,539.26 915.76,541.11Z"
android:fillColor="#ffd037" />
<path
android:pathData="M850.57,522.54s-8.38,11 3.87,27.5 22.35,30.51 18.26,40.83c0,0 -18.48,-30.73 -33.52,-31.16S834.02,541.01 850.57,522.54Z"
android:fillColor="#0099bf" />
<path
android:fillColor="#FF000000"
android:pathData="M850.57,522.54a13.57,13.57 0,0 0,-1.71 3.44c-14.68,17.24 -22.49,33.33 -8.39,33.74 13.14,0.38 28.9,23.87 32.68,29.81a12.74,12.74 0,0 1,-0.45 1.35s-18.48,-30.73 -33.52,-31.16S834.02,541.01 850.57,522.54Z"
android:strokeAlpha="0.1"
android:fillAlpha="0.1" />
<path
android:pathData="M834.99,536.5c0,3.86 0.43,7 1,7s1,-3.13 1,-7 -0.54,-2 -1.07,-2S834.99,532.65 834.99,536.5Z"
android:fillColor="#ffd037" />
<path
android:pathData="M829.64,541.11c3.39,1.85 6.34,3 6.59,2.49s-2.28,-2.35 -5.67,-4.19 -2.05,-0.5 -2.31,0S826.25,539.26 829.64,541.11Z"
android:fillColor="#ffd037" />
<path
android:pathData="M837.66,589.43s23.43,-0.72 30.49,-5.75 36,-11 37.79,-3 35.21,40.11 8.76,40.32 -61.46,-4.12 -68.51,-8.41S837.66,589.43 837.66,589.43Z"
android:fillColor="#a8a8a8" />
<path
android:fillColor="#FF000000"
android:pathData="M915.17,618.23c-26.45,0.21 -61.46,-4.12 -68.51,-8.41 -5.37,-3.27 -7.51,-15 -8.22,-20.41l-0.78,0s1.48,18.9 8.53,23.19 42.06,8.63 68.51,8.41c7.64,-0.06 10.27,-2.78 10.13,-6.8C923.77,616.66 920.9,618.18 915.17,618.23Z"
android:strokeAlpha="0.2"
android:fillAlpha="0.2" />
<path
android:pathData="M177.84,74.64h-6.28a4.4,4.4 0,1 0,0 -8.79L120.68,65.85a4.4,4.4 0,0 0,0 8.79h6.28a4.4,4.4 0,0 0,0 8.79h-8.79a4.4,4.4 0,0 0,0 8.79h50.88a4.4,4.4 0,1 0,0 -8.79h8.79a4.4,4.4 0,0 0,0 -8.79Z"
android:strokeAlpha="0.5"
android:fillColor="#dee3f3"
android:fillAlpha="0.5" />
</vector>
================================================
FILE: app/src/main/res/drawable/undraw_drag.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2021 Sergio Belda
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="1070.0669dp"
android:height="619.3506dp"
android:viewportWidth="1070.0669"
android:viewportHeight="619.3506">
<path
android:pathData="M549.82,526c-2.77,0 -5.58,-0.04 -8.33,-0.13l0.06,-2c3.95,0.12 7.98,0.16 11.95,0.1l0.03,2Q551.68,526 549.82,526ZM565.56,525.54 L565.45,523.54c3.96,-0.23 7.96,-0.56 11.91,-0.97l0.21,1.99C573.59,524.97 569.55,525.3 565.56,525.54ZM529.47,525.22c-3.99,-0.31 -8.02,-0.71 -11.98,-1.19l0.24,-1.98c3.93,0.48 7.93,0.88 11.89,1.18ZM589.51,523.03 L589.21,521.05c3.93,-0.6 7.89,-1.29 11.77,-2.06l0.39,1.96C597.46,521.73 593.47,522.42 589.51,523.03ZM505.57,522.29c-3.94,-0.67 -7.92,-1.44 -11.82,-2.28l0.42,-1.96c3.87,0.84 7.82,1.6 11.73,2.27ZM613.12,518.33 L612.64,516.39c3.86,-0.95 7.74,-2.01 11.53,-3.13l0.57,1.92C620.92,516.31 617.01,517.37 613.12,518.33ZM482.05,517.19c-3.87,-1.03 -7.76,-2.16 -11.56,-3.36l0.6,-1.91c3.78,1.19 7.64,2.32 11.47,3.34ZM636.2,511.48l-0.66,-1.89c3.74,-1.3 7.51,-2.71 11.19,-4.18l0.74,1.86C643.77,508.75 639.98,510.17 636.2,511.48ZM459.06,509.92c-3.75,-1.38 -7.53,-2.87 -11.23,-4.43l0.78,-1.84c3.67,1.54 7.42,3.02 11.14,4.39ZM658.53,502.55 L657.7,500.73c3.6,-1.63 7.21,-3.38 10.74,-5.18l0.91,1.78C665.8,499.15 662.16,500.9 658.53,502.55ZM436.82,500.56c-3.61,-1.72 -7.23,-3.55 -10.77,-5.44l0.94,-1.76c3.51,1.87 7.1,3.69 10.68,5.4ZM679.93,491.61 L678.94,489.88c3.45,-1.97 6.89,-4.04 10.23,-6.15l1.07,1.69C686.87,487.54 683.41,489.63 679.93,491.61ZM415.55,489.19c-3.43,-2.04 -6.87,-4.2 -10.22,-6.4l1.1,-1.67c3.32,2.19 6.73,4.32 10.14,6.35ZM700.25,478.75L699.11,477.12c3.25,-2.27 6.49,-4.64 9.63,-7.06l1.22,1.59C706.79,474.08 703.53,476.47 700.25,478.75ZM395.43,475.94c-3.23,-2.34 -6.45,-4.8 -9.59,-7.3l1.25,-1.56c3.11,2.48 6.31,4.92 9.51,7.25ZM719.33,464.09 L718.04,462.56c3.03,-2.55 6.04,-5.21 8.95,-7.91l1.36,1.47C725.42,458.84 722.38,461.52 719.33,464.09ZM376.6,460.91c-3.01,-2.63 -5.99,-5.37 -8.88,-8.14l1.38,-1.44c2.86,2.75 5.83,5.47 8.81,8.08ZM737,447.75 L735.58,446.34c2.79,-2.83 5.55,-5.75 8.2,-8.7l1.49,1.34C742.6,441.95 739.82,444.9 737,447.75ZM359.23,444.23c-2.76,-2.9 -5.48,-5.9 -8.1,-8.91l1.51,-1.31c2.59,2.99 5.3,5.96 8.04,8.84ZM753.12,429.85 L751.58,428.58c2.52,-3.07 5,-6.23 7.38,-9.41l1.6,1.2C758.17,423.57 755.66,426.76 753.12,429.85ZM343.45,426.06c-2.48,-3.13 -4.92,-6.36 -7.25,-9.6l1.62,-1.17c2.32,3.22 4.74,6.42 7.19,9.53ZM767.55,410.56 L765.9,409.44c2.23,-3.28 4.41,-6.66 6.49,-10.05l1.71,1.05C772,403.84 769.8,407.25 767.55,410.56ZM329.4,406.53c-2.18,-3.34 -4.31,-6.78 -6.34,-10.22l1.72,-1.02c2.01,3.41 4.13,6.83 6.29,10.14ZM780.17,390.02 L778.42,389.05c1.92,-3.47 3.79,-7.04 5.55,-10.61l1.79,0.89C783.98,382.92 782.1,386.52 780.17,390.02ZM317.2,385.81c-1.87,-3.53 -3.67,-7.14 -5.38,-10.75l1.81,-0.85c1.69,3.58 3.48,7.17 5.33,10.67ZM790.85,368.4 L789.02,367.6c1.59,-3.64 3.12,-7.37 4.55,-11.08l1.87,0.72C794,360.97 792.45,364.73 790.85,368.4ZM306.95,364.08c-1.53,-3.68 -3,-7.44 -4.36,-11.19l1.88,-0.68c1.35,3.72 2.81,7.45 4.33,11.1ZM799.5,345.87 L797.6,345.24c1.25,-3.76 2.43,-7.6 3.5,-11.43l1.93,0.54C801.94,338.2 800.75,342.08 799.5,345.87ZM298.73,341.48c-1.19,-3.81 -2.31,-7.71 -3.32,-11.57l1.93,-0.51c1.01,3.84 2.12,7.7 3.3,11.49ZM806.02,322.69 L804.07,322.24c0.9,-3.85 1.71,-7.79 2.43,-11.7l1.97,0.36C807.74,314.84 806.92,318.8 806.02,322.69ZM292.62,318.2c-0.83,-3.91 -1.59,-7.89 -2.24,-11.83l1.97,-0.33c0.65,3.91 1.4,7.86 2.23,11.74ZM810.37,299.01 L808.39,298.74c0.54,-3.92 0.99,-7.91 1.35,-11.87l1.99,0.18C811.37,291.04 810.92,295.06 810.37,299.01ZM288.68,294.45c-0.47,-3.96 -0.86,-7.99 -1.15,-11.98l2,-0.15c0.29,3.96 0.67,7.96 1.14,11.89ZM812.55,275.04 L810.55,274.95c0.18,-3.96 0.27,-7.98 0.27,-11.95h2C812.82,266.99 812.73,271.04 812.55,275.04ZM286.92,270.43c-0.07,-2.45 -0.1,-4.95 -0.1,-7.43q0,-2.31 0.04,-4.61l2,0.04q-0.04,2.28 -0.04,4.57c0,2.46 0.04,4.95 0.1,7.38ZM810.8,260.21c-0.04,-3.97 -0.17,-7.98 -0.39,-11.95l2,-0.11c0.22,3.99 0.36,8.04 0.4,12.04ZM289.33,246.49l-2,-0.13c0.25,-4 0.59,-8.03 1.02,-12l1.99,0.22C289.92,238.52 289.58,242.52 289.33,246.49ZM809.48,236.35c-0.4,-3.94 -0.9,-7.93 -1.48,-11.86l1.98,-0.29c0.58,3.96 1.09,7.98 1.49,11.95ZM291.91,222.73l-1.98,-0.31c0.61,-3.96 1.32,-7.94 2.12,-11.85l1.96,0.4C293.22,214.85 292.51,218.81 291.91,222.73ZM805.98,212.72c-0.76,-3.9 -1.62,-7.83 -2.56,-11.67l1.94,-0.47c0.94,3.87 1.81,7.83 2.58,11.76ZM296.64,199.32l-1.94,-0.49c0.97,-3.87 2.05,-7.78 3.2,-11.61l1.91,0.58C298.68,191.6 297.61,195.47 296.64,199.32ZM800.33,189.5c-1.12,-3.81 -2.33,-7.64 -3.62,-11.39l1.89,-0.65c1.3,3.78 2.53,7.64 3.65,11.47ZM303.53,176.4l-1.89,-0.66c1.33,-3.78 2.76,-7.58 4.27,-11.29l1.85,0.75C306.27,168.88 304.85,172.65 303.53,176.4ZM792.56,166.91c-1.46,-3.68 -3.02,-7.37 -4.64,-10.98l1.82,-0.82c1.64,3.63 3.21,7.36 4.68,11.06ZM312.51,154.21l-1.82,-0.83c1.67,-3.64 3.45,-7.29 5.28,-10.84l1.78,0.92C315.93,146.98 314.16,150.6 312.51,154.21ZM782.77,145.17c-1.79,-3.53 -3.69,-7.07 -5.64,-10.51l1.74,-0.99c1.97,3.47 3.88,7.04 5.68,10.6ZM323.48,132.94l-1.73,-1c2,-3.46 4.1,-6.93 6.25,-10.31l1.69,1.08C327.55,126.06 325.46,129.5 323.48,132.94ZM771.02,124.41c-2.11,-3.36 -4.33,-6.72 -6.58,-9.96l1.64,-1.14c2.27,3.27 4.5,6.65 6.63,10.04ZM336.36,112.78l-1.63,-1.15c2.31,-3.27 4.72,-6.53 7.17,-9.69l1.58,1.23C341.04,106.3 338.64,109.54 336.36,112.78ZM757.42,104.79c-2.41,-3.16 -4.92,-6.29 -7.46,-9.33l1.53,-1.28c2.56,3.06 5.09,6.22 7.52,9.4ZM351.01,93.89l-1.52,-1.3c2.59,-3.04 5.28,-6.06 8.02,-8.99l1.46,1.36C356.25,87.87 353.58,90.88 351.01,93.89ZM742.08,86.48c-2.69,-2.92 -5.47,-5.82 -8.28,-8.61l1.41,-1.42c2.83,2.81 5.64,5.73 8.34,8.68ZM367.31,76.42 L365.91,74.99c2.86,-2.8 5.82,-5.56 8.8,-8.22l1.33,1.49C373.09,70.9 370.15,73.64 367.31,76.42ZM725.13,69.64c-2.94,-2.67 -5.98,-5.3 -9.04,-7.83l1.28,-1.5
gitextract_nt8w2kbz/
├── .editorconfig
├── .github/
│ └── workflows/
│ └── android.yml
├── .gitignore
├── LICENSE
├── README.md
├── app/
│ ├── .gitignore
│ ├── build.gradle.kts
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── dev/
│ │ └── sergiobelda/
│ │ └── samples/
│ │ └── materialmotion/
│ │ ├── MainActivity.kt
│ │ ├── databinding/
│ │ │ └── BindingAdapters.kt
│ │ ├── messages/
│ │ │ ├── ContactsAdapter.kt
│ │ │ ├── Messages.kt
│ │ │ ├── MessagesActivity.kt
│ │ │ └── MessagesAdapter.kt
│ │ ├── music/
│ │ │ ├── AlbumFragment.kt
│ │ │ ├── AlbumsAdapter.kt
│ │ │ ├── AlbumsFragment.kt
│ │ │ ├── ArtistsAdapter.kt
│ │ │ ├── ArtistsFragment.kt
│ │ │ ├── MusicActivity.kt
│ │ │ ├── MusicData.kt
│ │ │ └── PlaylistsFragment.kt
│ │ ├── notes/
│ │ │ ├── AddNoteActivity.kt
│ │ │ ├── Note.kt
│ │ │ ├── NoteDetailActivity.kt
│ │ │ ├── NotesActivity.kt
│ │ │ └── NotesAdapter.kt
│ │ ├── planets/
│ │ │ ├── PlanetFragment.kt
│ │ │ ├── Planets.kt
│ │ │ ├── PlanetsActivity.kt
│ │ │ └── StepAdapter.kt
│ │ ├── sample/
│ │ │ ├── SampleItem.kt
│ │ │ └── SamplesAdapter.kt
│ │ ├── signin/
│ │ │ ├── SignInActivity.kt
│ │ │ ├── SignInFragment.kt
│ │ │ └── WelcomeFragment.kt
│ │ └── walkthrough/
│ │ ├── WalkthroughActivity.kt
│ │ └── WalkthroughFragment.kt
│ └── res/
│ ├── color/
│ │ └── step_selector.xml
│ ├── drawable/
│ │ ├── circle.xml
│ │ ├── ic_baseline_all_inclusive_24.xml
│ │ ├── ic_baseline_person_outline_24.xml
│ │ ├── ic_baseline_playlist_play_24.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_outline_album_24.xml
│ │ ├── ic_outline_edit_24.xml
│ │ ├── ic_outline_play_arrow_24.xml
│ │ ├── ic_round_account_circle_24.xml
│ │ ├── ic_round_add_24.xml
│ │ ├── ic_round_clear_24.xml
│ │ ├── ic_round_person_24.xml
│ │ ├── ic_round_save_24.xml
│ │ ├── step_selector.xml
│ │ ├── tab_dot.xml
│ │ ├── tab_dot_background.xml
│ │ ├── undraw_celebration.xml
│ │ ├── undraw_drag.xml
│ │ ├── undraw_social_sharing.xml
│ │ └── undraw_winners.xml
│ ├── drawable-v24/
│ │ └── ic_launcher_foreground.xml
│ ├── font/
│ │ ├── metropolis.xml
│ │ ├── metropolis_medium.otf
│ │ ├── metropolis_regular.otf
│ │ └── metropolis_semibold.otf
│ ├── layout/
│ │ ├── add_note_activity.xml
│ │ ├── album_fragment.xml
│ │ ├── albums_fragment.xml
│ │ ├── artists_fragment.xml
│ │ ├── item_album.xml
│ │ ├── item_artist.xml
│ │ ├── item_contact.xml
│ │ ├── item_message.xml
│ │ ├── item_note.xml
│ │ ├── item_sample.xml
│ │ ├── item_step.xml
│ │ ├── main_activity.xml
│ │ ├── messages_activity.xml
│ │ ├── music_activity.xml
│ │ ├── note_detail_activity.xml
│ │ ├── notes_activity.xml
│ │ ├── planet_fragment.xml
│ │ ├── planets_activity.xml
│ │ ├── playlists_fragment.xml
│ │ ├── sign_in_activity.xml
│ │ ├── sign_in_fragment.xml
│ │ ├── walkthrough_activity.xml
│ │ ├── walkthrough_fragment.xml
│ │ └── welcome_fragment.xml
│ ├── menu/
│ │ └── navigation_menu.xml
│ ├── mipmap-anydpi-v26/
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ ├── navigation/
│ │ └── nav_graph.xml
│ └── values/
│ ├── colors.xml
│ ├── dimens.xml
│ ├── font_certs.xml
│ ├── ic_launcher_background.xml
│ ├── shape.xml
│ ├── strings.xml
│ ├── styles.xml
│ └── type.xml
├── build-logic/
│ ├── .gitignore
│ ├── convention/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── main/
│ │ └── kotlin/
│ │ └── SpotlessConventionPlugin.kt
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ └── settings.gradle.kts
├── build.gradle.kts
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── renovate.json
├── settings.gradle.kts
└── spotless/
├── copyright.kt
├── copyright.kts
└── copyright.xml
Condensed preview — 122 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (415K chars).
[
{
"path": ".editorconfig",
"chars": 64,
"preview": "[*.{kt,kts}]\nktlint_standard_backing-property-naming = disabled\n"
},
{
"path": ".github/workflows/android.yml",
"chars": 551,
"preview": "name: Android CI\n\non:\n push:\n branches:\n - main\n - develop\n pull_request:\n branches:\n - main\n "
},
{
"path": ".gitignore",
"chars": 226,
"preview": "*.iml\n.gradle\n/local.properties\n/.idea/caches\n/.idea/libraries\n/.idea/modules.xml\n/.idea/workspace.xml\n/.idea/navEditor."
},
{
"path": "LICENSE",
"chars": 11349,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 1981,
"preview": "<h1 align=\"center\">Material Motion Samples</h1></br>\n\n<h5 align=\"center\">\nA collection of samples using Material Compone"
},
{
"path": "app/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "app/build.gradle.kts",
"chars": 1688,
"preview": "@Suppress(\"DSL_SCOPE_VIOLATION\")\nplugins {\n alias(libs.plugins.androidApplication)\n kotlin(\"android\")\n kotlin(\""
},
{
"path": "app/proguard-rules.pro",
"chars": 748,
"preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
},
{
"path": "app/src/main/AndroidManifest.xml",
"chars": 2847,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/MainActivity.kt",
"chars": 1930,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/databinding/BindingAdapters.kt",
"chars": 918,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/messages/ContactsAdapter.kt",
"chars": 1593,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/messages/Messages.kt",
"chars": 2125,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/messages/MessagesActivity.kt",
"chars": 5410,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/messages/MessagesAdapter.kt",
"chars": 1585,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/music/AlbumFragment.kt",
"chars": 4184,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/music/AlbumsAdapter.kt",
"chars": 3479,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/music/AlbumsFragment.kt",
"chars": 2757,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/music/ArtistsAdapter.kt",
"chars": 1572,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/music/ArtistsFragment.kt",
"chars": 1969,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/music/MusicActivity.kt",
"chars": 2377,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/music/MusicData.kt",
"chars": 2682,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/music/PlaylistsFragment.kt",
"chars": 1326,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/notes/AddNoteActivity.kt",
"chars": 2945,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/notes/Note.kt",
"chars": 3384,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/notes/NoteDetailActivity.kt",
"chars": 2680,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/notes/NotesActivity.kt",
"chars": 3552,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/notes/NotesAdapter.kt",
"chars": 2011,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/planets/PlanetFragment.kt",
"chars": 2499,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/planets/Planets.kt",
"chars": 7528,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/planets/PlanetsActivity.kt",
"chars": 3265,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/planets/StepAdapter.kt",
"chars": 2362,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/sample/SampleItem.kt",
"chars": 2560,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/sample/SamplesAdapter.kt",
"chars": 1855,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/signin/SignInActivity.kt",
"chars": 1449,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/signin/SignInFragment.kt",
"chars": 2271,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/signin/WelcomeFragment.kt",
"chars": 2344,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/walkthrough/WalkthroughActivity.kt",
"chars": 4409,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/java/dev/sergiobelda/samples/materialmotion/walkthrough/WalkthroughFragment.kt",
"chars": 3161,
"preview": "/*\n * Copyright 2021 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "app/src/main/res/color/step_selector.xml",
"chars": 865,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/circle.xml",
"chars": 873,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_baseline_all_inclusive_24.xml",
"chars": 1554,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_baseline_person_outline_24.xml",
"chars": 1257,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_baseline_playlist_play_24.xml",
"chars": 1035,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_launcher_background.xml",
"chars": 6217,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_outline_album_24.xml",
"chars": 1270,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_outline_edit_24.xml",
"chars": 1225,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_outline_play_arrow_24.xml",
"chars": 1025,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_round_account_circle_24.xml",
"chars": 1226,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_round_add_24.xml",
"chars": 1135,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_round_clear_24.xml",
"chars": 1298,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_round_person_24.xml",
"chars": 1139,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/ic_round_save_24.xml",
"chars": 1280,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/step_selector.xml",
"chars": 810,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/tab_dot.xml",
"chars": 871,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/tab_dot_background.xml",
"chars": 895,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/undraw_celebration.xml",
"chars": 58317,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/undraw_drag.xml",
"chars": 16130,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/undraw_social_sharing.xml",
"chars": 15170,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable/undraw_winners.xml",
"chars": 56385,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/drawable-v24/ic_launcher_foreground.xml",
"chars": 2352,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/font/metropolis.xml",
"chars": 1035,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/add_note_activity.xml",
"chars": 4198,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/album_fragment.xml",
"chars": 2985,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/albums_fragment.xml",
"chars": 1134,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/artists_fragment.xml",
"chars": 1092,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/item_album.xml",
"chars": 2642,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/item_artist.xml",
"chars": 2074,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/item_contact.xml",
"chars": 2202,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/item_message.xml",
"chars": 4314,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/item_note.xml",
"chars": 2543,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/item_sample.xml",
"chars": 2457,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/item_step.xml",
"chars": 2185,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/main_activity.xml",
"chars": 3274,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/messages_activity.xml",
"chars": 4388,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/music_activity.xml",
"chars": 2819,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/note_detail_activity.xml",
"chars": 2570,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/notes_activity.xml",
"chars": 2649,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/planet_fragment.xml",
"chars": 2759,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/planets_activity.xml",
"chars": 2901,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/playlists_fragment.xml",
"chars": 913,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/sign_in_activity.xml",
"chars": 1179,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/sign_in_fragment.xml",
"chars": 3967,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/walkthrough_activity.xml",
"chars": 2575,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/walkthrough_fragment.xml",
"chars": 2222,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/layout/welcome_fragment.xml",
"chars": 1722,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/menu/navigation_menu.xml",
"chars": 1188,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 878,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 878,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/navigation/nav_graph.xml",
"chars": 1918,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/values/colors.xml",
"chars": 1385,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/values/dimens.xml",
"chars": 813,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/values/font_certs.xml",
"chars": 4192,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/values/ic_launcher_background.xml",
"chars": 731,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/values/shape.xml",
"chars": 2379,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/values/strings.xml",
"chars": 3132,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/values/styles.xml",
"chars": 2330,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "app/src/main/res/values/type.xml",
"chars": 2219,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright 2021 Sergio Belda\n Licensed under the Apache License, Ver"
},
{
"path": "build-logic/.gitignore",
"chars": 67,
"preview": "*.iml\n/.idea/\n/build/\n/convention/build/\n/local.properties\n.gradle\n"
},
{
"path": "build-logic/convention/build.gradle.kts",
"chars": 499,
"preview": "plugins {\n `kotlin-dsl`\n}\n\ngroup = \"dev.sergiobelda.samples.materialmotion.buildlogic\"\n\njava {\n sourceCompatibilit"
},
{
"path": "build-logic/convention/src/main/kotlin/SpotlessConventionPlugin.kt",
"chars": 2263,
"preview": "/*\n * Copyright 2022 Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not u"
},
{
"path": "build-logic/gradle/wrapper/gradle-wrapper.properties",
"chars": 252,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "build-logic/gradle.properties",
"chars": 27,
"preview": "kotlin.code.style=official\n"
},
{
"path": "build-logic/gradlew",
"chars": 8595,
"preview": "#!/bin/sh\n\n#\n# Copyright © 2015 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
},
{
"path": "build-logic/gradlew.bat",
"chars": 2896,
"preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "build-logic/settings.gradle.kts",
"chars": 329,
"preview": "rootProject.name = \"build-logic\"\n\nenableFeaturePreview(\"TYPESAFE_PROJECT_ACCESSORS\")\n\ndependencyResolutionManagement {\n "
},
{
"path": "build.gradle.kts",
"chars": 294,
"preview": "@file:Suppress(\"DSL_SCOPE_VIOLATION\")\nplugins {\n alias(libs.plugins.androidApplication) apply false\n alias(libs.pl"
},
{
"path": "gradle/libs.versions.toml",
"chars": 2135,
"preview": "[versions]\nandroidCore = \"1.17.0\"\nandroidGradlePlugin = \"8.13.2\"\nandroidTestJunit = \"1.3.0\"\nappcompat = \"1.7.1\"\nconstrai"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 252,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "gradle.properties",
"chars": 1274,
"preview": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will ov"
},
{
"path": "gradlew",
"chars": 8595,
"preview": "#!/bin/sh\n\n#\n# Copyright © 2015 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
},
{
"path": "gradlew.bat",
"chars": 2896,
"preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "renovate.json",
"chars": 272,
"preview": "{\n \"enabled\": false,\n \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n \"extends\": [\n \"config:base\""
},
{
"path": "settings.gradle.kts",
"chars": 373,
"preview": "pluginManagement {\n includeBuild(\"build-logic\")\n repositories {\n google()\n mavenCentral()\n gr"
},
{
"path": "spotless/copyright.kt",
"chars": 598,
"preview": "/*\n * Copyright $YEAR Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
},
{
"path": "spotless/copyright.kts",
"chars": 598,
"preview": "/*\n * Copyright $YEAR Sergio Belda\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not "
},
{
"path": "spotless/copyright.xml",
"chars": 651,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n Copyright $YEAR Sergio Belda\n Licensed under the Apache License, Ve"
}
]
// ... and 5 more files (download for full content)
About this extraction
This page contains the full source code of the serbelga/Material-Motion-Samples GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 122 files (382.5 KB), approximately 147.0k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.