diff --git a/.gitignore b/.gitignore index 9b30f7938..d002f45bf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,37 @@ -.gradle -local.properties -.idea +# built application files +*.apk +*.ap_ + +# files for the dex VM +*.dex + +# Java class files +*.class + +# generated files +bin/ build/ +gen/ +out/ + +# Local configuration file (sdk path, etc) +local.properties + +# Eclipse project files +.classpath +.project + +# Windows thumbnail db .DS_Store + +# Idea project fileS *.iml -*.apk -*.zip -google-services.json +*.ipr +*.iws +.idea/ + +# Gradle config files +.gradle/ + +# Sandbox stuff +_sandbox diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 14a4fcffa..ebbb59e53 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,35 +1,28 @@ -# How to become a contributor and submit your own code +# How to Contribute -## Contributor License Agreements +We'd love to accept your patches and contributions to this project. There are +just a few small guidelines you need to follow. -We'd love to accept your sample apps and patches! Before we can take them, we -have to jump a couple of legal hurdles. +## Contributor License Agreement -Please fill out either the individual or corporate Contributor License Agreement (CLA). +Contributions to this project must be accompanied by a Contributor License +Agreement. You (or your employer) retain the copyright to your contribution; +this simply gives us permission to use and redistribute your contributions as +part of the project. Head over to to see +your current agreements on file or to sign a new one. - * If you are an individual writing original source code and you're sure you - own the intellectual property, then you'll need to sign an [individual CLA] - (https://developers.google.com/open-source/cla/individual). - * If you work for a company that wants to allow you to contribute your work, - then you'll need to sign a [corporate CLA] - (https://developers.google.com/open-source/cla/corporate). +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. -Follow either of the two links above to access the appropriate CLA and -instructions for how to sign and return it. Once we receive it, we'll be able to -accept your pull requests. +## Code reviews -## Contributing A Patch +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. -1. Submit an issue describing your proposed change to the repo in question. -1. The repo owner will respond to your issue promptly. -1. If your proposed change is accepted, and you haven't already done so, sign a - Contributor License Agreement (see details above). -1. Fork the desired repo, develop and test your code changes. -1. Ensure that your code adheres to the existing style in the sample to which - you are contributing. Refer to the - [Android Code Style Guide] - (https://source.android.com/source/code-style.html) for the - recommended coding standards for this organization. -1. Ensure that your code has an appropriate set of unit tests which all pass. -1. Submit a pull request. +## Community Guidelines +This project follows +[Google's Open Source Community Guidelines](https://opensource.google.com/conduct/). \ No newline at end of file diff --git a/README.md b/README.md index f4604a78a..d98197306 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,23 @@ -Google Santa Tracker for Android +Google Santa Tracker for Android 🎅🤶 ================================ ## About -[Google Santa Tracker app for Android][play-store] is an educational and entertaining tradition that brings joy to millions of children (and children at heart) across the world over the December holiday period. The app is a companion to the [Google Santa Tracker][santa-web] website ([repository here](https://github.com/google/santa-tracker-web)), showcasing unique platform capabilities like Android Wear watchfaces, device notifications and more. -![Analytics](https://ga-beacon.appspot.com/UA-12846745-20/santa-tracker-android/readme?pixel) +[Google Santa Tracker app for Android][play-store] is an educational and entertaining tradition +that brings joy to millions of children (and children at heart) across the world over the December +holiday period. -Village Screenshot +The app is a companion to the [Google Santa Tracker][santa-web] website +([repository here](https://github.com/google/santa-tracker-web)), showcasing unique platform +capabilities like Android Wear watchfaces, device notifications and more. + +![Village Screenshot](docs/village.png) ## Features -* A beautiful materially designed village +* A beautiful designed village * Exciting games like Penguin Swim and Rocket Sleigh +* Use of Dynamic Feature Modules (each game is a separate module, fetched dynamically on first run) * Interactive Android Wear watchfaces (with sound!) * Videos, animations and more. @@ -23,34 +29,32 @@ console, follow these steps: * Create a new project * Add Firebase to your Android app - * Package name: `com.google.android.apps.santatracker.debug` - * Debug signing certificate can be blank, or follow the instructions in the - tooltip to find yours. + * Package name: `com.google.android.apps.santatracker.debug` + * Debug signing certificate can be blank, or follow the instructions in the tooltip to find yours. * Save the `google-services.json` file to the `santa-tracker/` directory Now you should be able to plug your phone in (or fire up an emulator) and run: - ./gradlew santa-tracker:installDevelopmentDebug + ./gradlew santa-tracker:installDebug Alternatively, import the source code into Android Studio (File, Import Project). -Note: You'll need Android SDK version 24, build tools 24.0.0, and the Android Support Library to -compile the project. If you're unsure about this, use Android Studio and tick the appropriate boxes -in the SDK Manager. +Note: You'll need Android SDK version 28. If you're unsure about this, use +Android Studio and tick the appropriate boxes in the SDK Manager. ## License -All image and audio files (including *.png, *.jpg, *.svg, *.mp3, *.wav -and *.ogg) are licensed under the CC-BY-NC license. All other files are -licensed under the Apache 2 license. See the LICENSE file for details. +All image and audio files (including *.png, *.jpg, *.svg, *.mp3, *.wav, *.ogg, *.m4a, *.webp) are +licensed under the CC-BY-NC license. All other files are licensed under the Apache 2 license. +See the LICENSE file for details. - Copyright 2016 Google Inc. All rights reserved. + Copyright 2019 Google LLC 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 + https://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, diff --git a/build.gradle b/build.gradle index cd509847b..8bc648ff7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,85 +1,177 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://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. + */ + +ext { + versionName = "5.3.1" + versionCode = 53010005 + + minSdkVersion = 21 + compileSdkVersion = 28 + targetSdkVersion = 27 + + tools = '28.0.3' + + supportAnnotations = "androidx.annotation:annotation:1.0.1" + appCompat = "androidx.appcompat:appcompat:1.0.2" + design = "com.google.android.material:material:1.0.0" + mediaRouter = "androidx.mediarouter:mediarouter:1.0.0" + wear = "androidx.wear:wear:1.0.0" + cardView = "androidx.cardview:cardview:1.0.0" + recyclerView = "androidx.recyclerview:recyclerview:1.0.0" + leanback = "androidx.leanback:leanback:1.0.0" + percent = "androidx.percentlayout:percentlayout:1.0.0" + customTabs = "androidx.browser:browser:1.0.0" + constraintLayout = 'androidx.constraintlayout:constraintlayout:1.1.3' + coreKtx = 'androidx.core:core-ktx:1.0.1' + + supportWearable = "com.google.android.support:wearable:2.3.0" + providedWear = "com.google.android.wearable:wearable:2.3.0" + + archLifecycle = '2.0.0' + archLifecycleRuntime = "androidx.lifecycle:lifecycle-runtime:$archLifecycle" + archLifecycleExtentions = "androidx.lifecycle:lifecycle-extensions:$archLifecycle" + archLifecycleCompiler = "androidx.lifecycle:lifecycle-compiler:$archLifecycle" + + archRoom = "2.0.0" + archRoomRuntime = "androidx.room:room-runtime:$archRoom" + archRoomCompiler = "androidx.room:room-compiler:$archRoom" + archRoomTesting = "androidx.room:room-testing:$archRoom" + + // https://developers.google.com/android/guides/releases + playServicesAnalytics = 'com.google.android.gms:play-services-analytics:16.0.4' + playServicesBase = 'com.google.android.gms:play-services-base:16.0.1' + playServicesCastFramework = 'com.google.android.gms:play-services-cast-framework:16.0.3' + playServicesGames = 'com.google.android.gms:play-services-games:16.0.0' + playServicesMaps = 'com.google.android.gms:play-services-maps:16.0.0' + playServicesNearby = 'com.google.android.gms:play-services-nearby:16.0.0' + playServicesWearable = 'com.google.android.gms:play-services-wearable:16.0.1' + playServicesPlaces = 'com.google.android.gms:play-services-places:16.0.0' + playServicesLocation = 'com.google.android.gms:play-services-location:16.0.0' + playServicesOssLicenses = 'com.google.android.gms:play-services-oss-licenses:16.0.1' + + // https://firebase.google.com/support/release-notes/android + firebaseCore = 'com.google.firebase:firebase-core:16.0.4' + firebaseAppindexing = 'com.google.firebase:firebase-appindexing:16.0.1' + firebaseAppinvite = 'com.google.firebase:firebase-invites:16.0.4' + firebaseConfig = 'com.google.firebase:firebase-config:16.0.1' + firebaseCrash = 'com.google.firebase:firebase-crash:16.2.1' + firebaseMessaging = 'com.google.firebase:firebase-messaging:17.3.3' + firebaseStorage = 'com.google.firebase:firebase-storage:16.0.1' + + dagger = '2.17' + daggerCore = "com.google.dagger:dagger:$dagger" + daggerAndroid = "com.google.dagger:dagger-android:$dagger" + daggerAndroidSupport = "com.google.dagger:dagger-android-support:$dagger" + daggerAndroidProcessor = "com.google.dagger:dagger-android-processor:$dagger" + daggerCompiler = "com.google.dagger:dagger-compiler:$dagger" + + gson = 'com.google.code.gson:gson:2.8.5' + + okhttp = 'com.squareup.okhttp3:okhttp:3.12.0' + + androidMapsUtils = 'com.google.maps.android:android-maps-utils:0.5' + + kotlinRuntime = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin" + + leakCanary = 'com.squareup.leakcanary:leakcanary-android:1.6.1' + leakCanaryNoOp = 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1' + + junit = 'junit:junit:4.12' + + espresso = '3.1.1' + espressoCore = "androidx.test.espresso:espresso-core:$espresso" + espressoContrib = "androidx.test.espresso:espresso-contrib:$espresso" + espressoIntents = "androidx.test.espresso:espresso-intents:$espresso" + espressoAccessibility = "androidx.test.espresso:espresso-accessibility:$espresso" + esspressoWeb = "androidx.test.espresso:espresso-web:$espresso" + espressoConcurrent = "androidx.test.espresso.idling:idling-concurrent:$espresso" + espressoIdlingResource = "androidx.test.espresso:espresso-idling-resource:$espresso" + + test = '1.1.1' + testingSupportRunner = "androidx.test:runner:$test" + testingSupportRules = "androidx.test:rules:$test" + + seismic = 'com.squareup:seismic:1.0.2' + + glide = 'com.github.bumptech.glide:glide:4.8.0' + + truetime = 'com.github.instacart.truetime-android:library:3.4' + + flexbox = 'com.google.android:flexbox:1.0.0' + + easypermissions = 'pub.devrel:easypermissions:1.0.1' + + mockitoAndroid = 'org.mockito:mockito-android:2.22.0' + mockitoCore = 'org.mockito:mockito-core:2.22.0' + + robolectric = 'org.robolectric:robolectric:3.8' + + playCore = 'com.google.android.play:core:1.3.6' + + mergeAdapter = 'me.mvdw.recyclerviewmergeadapter:recyclerviewmergeadapter:2.1.0' +} + buildscript { - ext.androidHome = project.hasProperty('androidHome') ? androidHome : '../../../..' + ext.kotlin = '1.3.11' + ext.spotless = '3.15.0' + ext.ktlint = '0.28.0' + ext.googlejavaformat = '1.6' repositories { - // Required for offline build. - // Links to the internal repositories for standard tools. - maven { url "$androidHome/prebuilts/gradle-plugin" } - maven { url "$androidHome/prebuilts/tools/common/m2/repository" } - - // When adding new dependencies, first enable jcenter(), then use the - // scripts/copyOfflineDep.sh to copy the dependency into the offline-lib-repository folder - maven { url "third_party/offline-lib-repository" } + google() jcenter() + maven { url "https://plugins.gradle.org/m2/" } } + dependencies { - classpath 'com.android.tools.build:gradle:2.2.2' - classpath 'com.google.gms:google-services:3.0.0' + classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.google.gms:google-services:4.2.0' + classpath 'com.google.android.gms:oss-licenses-plugin:0.9.4' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin" + classpath "com.diffplug.spotless:spotless-plugin-gradle:$spotless" } } subprojects { - repositories { - maven { - url "../third_party/offline-lib-repository" + apply plugin: "com.diffplug.gradle.spotless" + spotless { + java { + target '**/*.java' + googleJavaFormat(rootProject.ext.googlejavaformat).aosp() + // This is a workaround to suppress the following: + // You have a misbehaving rule which can't make up its mind. + // This means that spotlessCheck will fail even after spotlessApply has run. + // + // This is a bug in a formatting rule, not Spotless itself, but Spotless can + // work around this bug and generate helpful bug reports for the broken rule + // if you add 'paddedCell()' to your build.gradle as such: + // See https://github.com/diffplug/spotless/blob/master/PADDEDCELL.md for more details + paddedCell() + } + kotlin { + target '**/*.kt' + ktlint(rootProject.ext.ktlint) } } -} - -ext { - minSdkVersion = 15 - compileSdkVersion = 24 - targetSdkVersion = 24 - - tools = '24.0.0' - support = '24.2.0' - supportV4 = "com.android.support:support-v4:$support" - supportAnnotations = "com.android.support:support-annotations:$support" - appCompat = "com.android.support:appcompat-v7:$support" - design = "com.android.support:design:$support" - mediaRouter = "com.android.support:mediarouter-v7:$support" - supportWearable = "com.google.android.support:wearable:1.4.0" - - cardView = "com.android.support:cardview-v7:$support" - recyclerView = "com.android.support:recyclerview-v7:$support" - leanback = "com.android.support:leanback-v17:$support" - multidex = 'com.android.support:multidex:1.0.0' - - constraintLayout = 'com.android.support.constraint:constraint-layout:1.0.0-beta2' - - play = '9.8.0' - - playServicesAnalytics = "com.google.android.gms:play-services-analytics:$play" - playServicesAppindexing = "com.google.android.gms:play-services-appindexing:$play" - playServicesBase = "com.google.android.gms:play-services-base:$play" - playServicesBasement = "com.google.android.gms:play-services-basement:$play" - playServicesCastFramework = "com.google.android.gms:play-services-cast-framework:$play" - playServicesGames = "com.google.android.gms:play-services-games:$play" - playServicesMaps = "com.google.android.gms:play-services-maps:$play" - playServicesNearby = "com.google.android.gms:play-services-nearby:$play" - playServicesWearable = "com.google.android.gms:play-services-wearable:$play" - playServicesPlaces = "com.google.android.gms:play-services-places:$play" - playServicesLocation = "com.google.android.gms:play-services-location:$play" - - firebaseCore = "com.google.firebase:firebase-core:$play" - firebaseAnalytics = "com.google.firebase:firebase-analytics:$play" - firebaseAppinvite = "com.google.firebase:firebase-invites:$play" - firebaseConfig = "com.google.firebase:firebase-config:$play" - firebaseCrash = "com.google.firebase:firebase-crash:$play" - firebaseStorage = "com.google.firebase:firebase-storage:$play" - - androidMapsUtils = 'com.google.maps.android:android-maps-utils:0.4' - - leakCanary = 'com.squareup.leakcanary:leakcanary-android:1.5' - leakCanaryNoOp = 'com.squareup.leakcanary:leakcanary-android-no-op:1.5' - - espressoCore = 'com.android.support.test.espresso:espresso-core:2.2.2' - espressoContrib = 'com.android.support.test.espresso:espresso-contrib:2.2.2' - - seismic = 'com.squareup:seismic:1.0.2' - glide = 'com.github.bumptech.glide:glide:3.6.1' - - sugarOrm = 'com.github.satyan:sugar:1.4' - easypermissions = 'pub.devrel:easypermissions:0.2.1' + repositories { + google() + mavenCentral() + jcenter() + maven { url "https://jitpack.io" } // Needed for truetime + } } + diff --git a/cityquiz/build.gradle b/cityquiz/build.gradle new file mode 100644 index 000000000..e67cddb33 --- /dev/null +++ b/cityquiz/build.gradle @@ -0,0 +1,33 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://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. + */ + +apply plugin: 'com.android.dynamic-feature' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.tools + + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' + } +} + +dependencies { + implementation project(':santa-tracker') +} diff --git a/cityquiz/src/main/AndroidManifest.xml b/cityquiz/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c348d87d8 --- /dev/null +++ b/cityquiz/src/main/AndroidManifest.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/City.kt b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/City.kt new file mode 100644 index 000000000..40cdc6f1e --- /dev/null +++ b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/City.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.cityquiz + +import com.google.android.gms.maps.model.LatLng +import com.google.android.gms.maps.model.LatLngBounds + +class City( + lat: Double, + lng: Double, + val imageName: String, + val imageAuthor: String, + var name: String +) { + val correctLocation: LatLng = LatLng(lat, lng) + var incorrectLocationOne: LatLng = correctLocation + var incorrectLocationTwo: LatLng = correctLocation + + /** + * Provide bounds so map ensure all markers representing the city locations are visible. + * + * @return Bounds given city's locations. + */ + val bounds: LatLngBounds + get() = LatLngBounds.Builder() + .include(correctLocation) + .include(incorrectLocationOne) + .include(incorrectLocationTwo) + .build() +} diff --git a/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityLocationComparator.kt b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityLocationComparator.kt new file mode 100644 index 000000000..cebb3e6a0 --- /dev/null +++ b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityLocationComparator.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.cityquiz + +import com.google.maps.android.SphericalUtil +import java.util.Comparator + +/** Compare the distance between two Cities and the City of this comparator. */ +class CityLocationComparator(private val city: City) : Comparator { + override fun compare(c1: City, c2: City): Int { + val dist1 = SphericalUtil.computeDistanceBetween( + city.correctLocation, c1.correctLocation) + val dist2 = SphericalUtil.computeDistanceBetween( + city.correctLocation, c2.correctLocation) + return dist1.compareTo(dist2) + } +} diff --git a/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizActivity.kt b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizActivity.kt new file mode 100644 index 000000000..121fffa9f --- /dev/null +++ b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizActivity.kt @@ -0,0 +1,421 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.cityquiz + +import android.graphics.drawable.Drawable +import android.net.Uri +import android.os.Bundle +import android.os.Handler +import android.view.View +import android.widget.ImageView +import android.widget.ProgressBar +import android.widget.TextView +import androidx.core.os.postDelayed +import androidx.core.view.doOnLayout +import com.bumptech.glide.Glide +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions +import com.bumptech.glide.request.RequestListener +import com.bumptech.glide.request.target.Target +import com.google.android.apps.playgames.common.PlayGamesActivity +import com.google.android.apps.santatracker.games.EndOfGameView +import com.google.android.apps.santatracker.util.MapHelper +import com.google.android.apps.santatracker.util.MeasurementManager +import com.google.android.apps.santatracker.util.SantaLog +import com.google.android.apps.santatracker.util.VectorUtil +import com.google.android.gms.maps.CameraUpdateFactory +import com.google.android.gms.maps.GoogleMap +import com.google.android.gms.maps.OnMapReadyCallback +import com.google.android.gms.maps.SupportMapFragment +import com.google.android.gms.maps.model.MapStyleOptions +import com.google.android.gms.maps.model.Marker +import com.google.android.gms.maps.model.MarkerOptions +import com.google.android.gms.tasks.OnCompleteListener +import com.google.android.gms.tasks.Task +import com.google.firebase.analytics.FirebaseAnalytics +import com.google.firebase.remoteconfig.FirebaseRemoteConfig +import com.google.firebase.storage.FirebaseStorage +import java.lang.ref.WeakReference + +/** Main container for the City Quiz game. */ +class CityQuizActivity : PlayGamesActivity(), OnMapReadyCallback, GoogleMap.OnMarkerClickListener { + + private lateinit var cityQuizGame: CityQuizGame + + private lateinit var cityImageView: ImageView + private lateinit var cityImageProgressBar: ProgressBar + private lateinit var cloudOffImageView: ImageView + private lateinit var cityImageAuthorTextView: TextView + private lateinit var mapScrim: View + private lateinit var roundCountTextView: TextView + private lateinit var pointsTextView: TextView + + private lateinit var supportMapFragment: SupportMapFragment + private lateinit var googleMap: GoogleMap + + private var mapLaidOut: Boolean = false + private var mapReady: Boolean = false + private var initialRoundLoaded: Boolean = false + + private val cityImageGlideListener = CityImageGlideListener(this) + private val handler = Handler() + + private lateinit var analytics: FirebaseAnalytics + + override fun getLayoutId() = R.layout.activity_city_quiz + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + val roundCount = FirebaseRemoteConfig.getInstance().getLong(CITY_QUIZ_ROUND_COUNT_CONFIG_KEY) + cityQuizGame = CityQuizGame(this, roundCount.toInt()) + + // [ANALYTICS] + analytics = FirebaseAnalytics.getInstance(this) + MeasurementManager.recordScreenView(analytics, + getString(com.google.android.apps.santatracker.common.R.string.analytics_screen_city_quiz)) + + cityImageView = findViewById(R.id.cityQuizImageView) + cityImageProgressBar = findViewById(R.id.cityImageProgressBar) + cloudOffImageView = findViewById(R.id.cloudOffImageView) + cityImageAuthorTextView = findViewById(R.id.cityImageAuthorTextView) + mapScrim = findViewById(R.id.map_scrim) + roundCountTextView = findViewById(R.id.roundCountTextView) + pointsTextView = findViewById(R.id.pointsTextView) + + // Clicking the "offline" image will attempt a reload + cloudOffImageView.setOnClickListener { + cityQuizGame.currentRound?.city?.let { city -> + loadCityImage(city.imageName, city.imageAuthor) + } + } + + // Map scrim prevents clicking on map + mapScrim.setOnClickListener { + // No-op, eat the click + } + + supportMapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment + + supportMapFragment.view?.doOnLayout { + mapLaidOut = true + loadInitialRound() + } + supportMapFragment.getMapAsync(this) + } + + override fun getGameId(): String { + return getString(com.google.android.apps.playgames.R.string.city_quiz_game_id) + } + + override fun getGameTitle(): String { + return getString(com.google.android.apps.santatracker.common.R.string.cityquiz) + } + + override fun onMapReady(googleMap: GoogleMap) { + mapReady = true + this.googleMap = googleMap + + googleMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(this, + com.google.android.apps.santatracker.common.R.raw.map_style)) + googleMap.setOnMarkerClickListener(this) + + loadInitialRound() + } + + /** + * Load the initial round only if the map is ready and laid out and has not been already loaded. + */ + private fun loadInitialRound() { + if (mapLaidOut && mapReady && !initialRoundLoaded) { + loadRound() + initialRoundLoaded = true + } + } + + /** Load the current round of the game for user interaction. */ + private fun loadRound() { + if (isFinishing || supportMapFragment.view == null) { + // The user exit the game between rounds. + return + } + + updateScore() + + // Get next city in game. + val city = cityQuizGame.currentRound?.city ?: return + + // Load city image + loadCityImage(city.imageName, city.imageAuthor) + + // Set up city markers + googleMap.clear() + + if (BuildConfig.DEBUG) { + SantaLog.d(TAG, "Moving to ${city.name}") + } + googleMap.animateCamera( + CameraUpdateFactory.newLatLngBounds( + city.bounds, MapHelper.getMapPadding(supportMapFragment))) + + // Add markers and set appropriate tags. + val locationMarker = googleMap.addMarker( + MarkerOptions() + .position(city.correctLocation) + .icon(VectorUtil.vectorToBitmap(this, R.drawable.ic_pin_blue))) + locationMarker.tag = CORRECT_MARKER + + val firsIncorrectLocationMarker = googleMap.addMarker( + MarkerOptions() + .position(city.incorrectLocationOne) + .icon(VectorUtil.vectorToBitmap(this, R.drawable.ic_pin_blue))) + firsIncorrectLocationMarker.tag = FIRST_FAKE_MARKER + + val secondIncorrectLocationMarker = googleMap.addMarker( + MarkerOptions() + .position(city.incorrectLocationTwo) + .icon(VectorUtil.vectorToBitmap(this, R.drawable.ic_pin_blue))) + secondIncorrectLocationMarker.tag = SECOND_FAKE_MARKER + } + + /** + * Load the image matching the given image name into the city ImageView. + * + * @param imageName Name used to retrieve the image from Firebase Storage. + * @param imageAuthor Name used to give attribution for the image. + */ + private fun loadCityImage(imageName: String, imageAuthor: String) { + if (isFinishing) { + return + } + // Clear current image + Glide.with(this) + .load(com.google.android.apps.playgames.R.color.cityQuizPrimaryGreenDark) + .transition(DrawableTransitionOptions.withCrossFade()) + .into(cityImageView) + + cityImageProgressBar.visibility = View.VISIBLE + showImageAuthor(false) + showOnlineUI() + + // Load new image + val task = FirebaseStorage.getInstance().reference.child(imageName).downloadUrl + task.addOnCompleteListener(this, LoadCityImageTaskCompleteListener(this, imageAuthor)) + + // After timeout check if image URL has been retrieved, if not update UI. + handler.postDelayed(IMAGE_LOAD_TIMEOUT_MILLIS) { + if (!task.isComplete) { + // Firebase was did not complete image URL retrieval. + cityImageProgressBar.visibility = View.GONE + showOfflineUI() + } + } + } + + private class LoadCityImageTaskCompleteListener( + activity: CityQuizActivity, + private val imageAuthor: String + ) : OnCompleteListener { + private val activityRef = WeakReference(activity) + + override fun onComplete(task: Task) { + val activity = activityRef.get() + if (activity == null || activity.isFinishing) { + return + } + activity.cityImageProgressBar.visibility = View.GONE + + if (task.isSuccessful) { + val uri = task.result + if (BuildConfig.DEBUG) { + SantaLog.d(TAG, "Image uri: $uri") + } + + Glide.with(activity) + .load(uri) + .transition(DrawableTransitionOptions.withCrossFade()) + .listener(activity.cityImageGlideListener) + .into(activity.cityImageView) + + activity.cityImageAuthorTextView.text = activity.resources.getString(R.string.photo_by, imageAuthor) + activity.showImageAuthor(true) + } else { + if (BuildConfig.DEBUG) { + SantaLog.e(TAG, "Unable to get image URI from Firebase Storage", task.exception) + } + activity.showOfflineUI() + } + } + } + + private fun showOfflineUI() { + cloudOffImageView.visibility = View.VISIBLE + mapScrim.visibility = View.VISIBLE + } + + private fun showOnlineUI() { + cloudOffImageView.visibility = View.GONE + mapScrim.visibility = View.GONE + } + + private fun updateScore() { + // Update game information, round count and score. + roundCountTextView.text = getString( + R.string.round_count_fmt, + cityQuizGame.currentRoundCount + 1, + cityQuizGame.totalRoundCount) + pointsTextView.text = getString(R.string.game_score_fmt, cityQuizGame.calculateScore()) + } + + private fun showImageAuthor(visible: Boolean) { + if (visible) { + cityImageAuthorTextView.visibility = TextView.VISIBLE + } else { + cityImageAuthorTextView.visibility = TextView.INVISIBLE + } + } + + override fun onMarkerClick(marker: Marker): Boolean { + // Check if the round is already solved, if so ignore the marker click. + if (cityQuizGame.isFinished || cityQuizGame.currentRound?.isSolved == true) { + return true + } + + val currentRound = cityQuizGame.currentRound ?: return false + + // Identify which marker was tapped and update the round status. + val tag = marker.tag as Int + currentRound.updateLocationStatus(tag, true) + + // Check if user tapped on the correct marker and if move to the next round. + if (tag == 0) { + marker.setIcon(VectorUtil.vectorToBitmap(this, R.drawable.ic_pin_green)) + updateScore() + + // [ANALYTICS] + val numIncorrectAttempts = 5 - currentRound.calculateRoundScore() + MeasurementManager.recordCorrectCitySelected( + analytics, + currentRound.city.imageName, + numIncorrectAttempts) + + googleMap.animateCamera( + CameraUpdateFactory.newLatLng(currentRound.city.correctLocation), + object : GoogleMap.CancelableCallback { + override fun onFinish() { + showCityInfo(marker) + } + + override fun onCancel() { + showCityInfo(marker) + } + }) + + // Wait a while before moving to next round or end of game. + handler.postDelayed(NEXT_ROUND_DELAY) { + cityQuizGame.moveToNextRound() + // Check if the last round has completed. + if (!cityQuizGame.isFinished) { + loadRound() + } else { + // or exit. For now I will clear the markers. + goToGameSummary() + pointsTextView.text = getString( + R.string.game_score_fmt, + cityQuizGame.calculateScore()) + } + } + } else { + // [ANALYTICS] + cityQuizGame.currentRound?.let { round -> + MeasurementManager.recordIncorrectCitySelected(analytics, round.city.imageName) + } + + marker.setIcon(VectorUtil.vectorToBitmap(this, R.drawable.ic_pin_red)) + } + + return true + } + + private fun showCityInfo(marker: Marker) { + marker.title = cityQuizGame.currentRound?.city?.name + marker.showInfoWindow() + } + + private fun goToGameSummary() { + // Show the end-game view + val gameView = findViewById(R.id.view_end_game) as EndOfGameView + gameView.initialize(cityQuizGame.calculateScore(), + { + // Restart this activity + recreate() + }, + { + // Back to the village + finish() + }) + + // Show end game view over everything + gameView.visibility = View.VISIBLE + gameView.z = 1000f + } + + // Listener to handle Glide action completion. + private class CityImageGlideListener(activity: CityQuizActivity) : RequestListener { + private val weakActivity = WeakReference(activity) + + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target?, + isFirstResource: Boolean + ): Boolean { + // Glide failed to load image. + if (weakActivity.get() != null) { + SantaLog.e(TAG, "Glide unable to load city image.") + weakActivity.get()?.showOfflineUI() + } + return false + } + + override fun onResourceReady( + resource: Drawable?, + model: Any?, + target: Target?, + dataSource: DataSource?, + isFirstResource: Boolean + ): Boolean { + if (weakActivity.get() != null) { + // Glide loaded image, hide "cloud off" ImageView and show author TextView. + weakActivity.get()?.showOnlineUI() + weakActivity.get()?.showImageAuthor(true) + } + return false + } + } + + companion object { + private const val TAG = "CityQuizActivity" + private const val NEXT_ROUND_DELAY = 3500L + private const val CORRECT_MARKER = 0 + private const val FIRST_FAKE_MARKER = 1 + private const val SECOND_FAKE_MARKER = 2 + private const val IMAGE_LOAD_TIMEOUT_MILLIS = 5000L // 5 seconds + private const val CITY_QUIZ_ROUND_COUNT_CONFIG_KEY = "CityQuizRoundCount" + } +} diff --git a/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizGame.kt b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizGame.kt new file mode 100644 index 000000000..b2fce68de --- /dev/null +++ b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizGame.kt @@ -0,0 +1,56 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.cityquiz + +import android.content.Context + +/** Represents a City Quiz Game. */ +class CityQuizGame(context: Context, roundCount: Int = DEFAULT_ROUND_COUNT) { + private val cityQuizRounds = CityQuizUtil.getCities(context, roundCount).map(::CityQuizRound) + + var currentRoundCount: Int = 0 + private set + + /** + * Get the current round of the game. If the game is over null is returned. + * + * @return Current round or null if game is over. + */ + val currentRound: CityQuizRound? + get() = cityQuizRounds.getOrNull(currentRoundCount) + + val totalRoundCount: Int + get() = cityQuizRounds.size + + val isFinished: Boolean + get() = currentRoundCount >= cityQuizRounds.size + + fun moveToNextRound() { + currentRoundCount++ + } + + /** + * Calculates the sum of all solved rounds of the game. + * + * @return The current score of the game. + */ + fun calculateScore() = cityQuizRounds.sumBy(CityQuizRound::calculateRoundScore) + + companion object { + private const val DEFAULT_ROUND_COUNT = 5 + } +} diff --git a/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizRound.kt b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizRound.kt new file mode 100644 index 000000000..31ac24aa1 --- /dev/null +++ b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizRound.kt @@ -0,0 +1,53 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.cityquiz + +/** Represents a round in a City Quiz Game. */ +class CityQuizRound(val city: City) { + + // Location status indicates whether each location has been touched. + // position 0 = location, 1 = incorrectLocationOne, 2 = incorrectLocationTwo + private val locationStatus: BooleanArray = BooleanArray(3) + + val isSolved: Boolean + get() = locationStatus[0] + + fun updateLocationStatus(pos: Int, value: Boolean) { + locationStatus[pos] = value + } + + /** + * Calculates the score of this round. Only solved rounds are worth points. Correct guess is + * worth 5 points, incorrect guesses are worth -1 point. + * + * @return The points gained in this round. 0 if round is not yet solved. + */ + fun calculateRoundScore(): Int { + var score = 0 + // 5 points for getting the correct city + if (locationStatus[0]) { + score = 5 + if (locationStatus[1]) { + score-- + } + if (locationStatus[2]) { + score-- + } + } + return score + } +} diff --git a/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizUtil.kt b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizUtil.kt new file mode 100644 index 000000000..618b049db --- /dev/null +++ b/cityquiz/src/main/java/com/google/android/apps/santatracker/cityquiz/CityQuizUtil.kt @@ -0,0 +1,105 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.cityquiz + +import android.content.Context +import com.google.android.apps.santatracker.util.SantaLog +import org.json.JSONArray +import org.json.JSONException +import java.util.ArrayList + +/** Utility class to assist with loading city data into City Quiz Games. */ +object CityQuizUtil { + private const val TAG = "CityQuizUtil" + + /** + * Retrieve a random list of cities. + * + * @param amountOfCities Max number of cities to retrieve. + * @return Random list of cities. If amountOfCities is more than the amount of cities available, all cities + * are returned. + */ + fun getCities(context: Context, amountOfCities: Int): List { + val allCities = getCities(context) + allCities.shuffle() + // Only return the cities that will be used in the game. + return allCities.subList(0, amountOfCities.coerceAtMost(allCities.size)) + } + + private fun getCities(context: Context): MutableList { + val cities = ArrayList() + val jCities = getCitiesFromFile(context) + + for (i in 0 until jCities.length()) { + try { + val jCity = jCities.getJSONObject(i) + val lat = jCity.getDouble("lat") + val lng = jCity.getDouble("lng") + val cityResourceName = jCity.getString("name") + val cityNameResourceId = context.resources + .getIdentifier(cityResourceName, "string", context.packageName) + + // Check if city name string resource is found. + val cityName = if (cityNameResourceId != 0) { + // Use string resource for city name. + context.resources.getString(cityNameResourceId) + } else { + // Use default English city name. + jCity.getString("default_name") + } + + val imageUrl = jCity.getString("image_name") + val imageAuthor = jCity.getString("image_author") + val city = City(lat, lng, imageUrl, imageAuthor, cityName) + cities.add(city) + } catch (e: JSONException) { + SantaLog.e(TAG, "Unable to get city from json, $e") + } + } + + // Check if there are enough cities to set fake ones. + if (cities.size > 3) { + // Set fake locations for each city. + val tempCities = ArrayList(cities) + + for (city in cities) { + // Sort tempCities in order of closest to the current city. + tempCities.sortWith(CityLocationComparator(city)) + + // Get the closest three cities, excluding the current city. + val closestCities = tempCities.subList(1, 4) + closestCities.shuffle() + + // Choose the first two of the three cities from the closestCities list. + city.incorrectLocationOne = closestCities[0].correctLocation + city.incorrectLocationTwo = closestCities[1].correctLocation + } + } + + return cities + } + + private fun getCitiesFromFile(context: Context) = try { + val inputStream = context.resources.openRawResource(R.raw.city_quiz_cities) + inputStream.bufferedReader().use { r -> + JSONArray(r.readText()) + } + } catch (e: Exception) { + SantaLog.e(TAG, "Unable to parse city quiz json, $e") + JSONArray() + } +} diff --git a/cityquiz/src/main/res/drawable-hdpi/ic_pin_blue.webp b/cityquiz/src/main/res/drawable-hdpi/ic_pin_blue.webp new file mode 100644 index 000000000..ddb925b46 Binary files /dev/null and b/cityquiz/src/main/res/drawable-hdpi/ic_pin_blue.webp differ diff --git a/cityquiz/src/main/res/drawable-hdpi/ic_pin_green.webp b/cityquiz/src/main/res/drawable-hdpi/ic_pin_green.webp new file mode 100644 index 000000000..90a6911de Binary files /dev/null and b/cityquiz/src/main/res/drawable-hdpi/ic_pin_green.webp differ diff --git a/cityquiz/src/main/res/drawable-hdpi/ic_pin_red.webp b/cityquiz/src/main/res/drawable-hdpi/ic_pin_red.webp new file mode 100644 index 000000000..25ec01aab Binary files /dev/null and b/cityquiz/src/main/res/drawable-hdpi/ic_pin_red.webp differ diff --git a/cityquiz/src/main/res/drawable-hdpi/ornament_general_full.webp b/cityquiz/src/main/res/drawable-hdpi/ornament_general_full.webp new file mode 100644 index 000000000..dc067c66c Binary files /dev/null and b/cityquiz/src/main/res/drawable-hdpi/ornament_general_full.webp differ diff --git a/cityquiz/src/main/res/drawable-mdpi/ic_pin_blue.webp b/cityquiz/src/main/res/drawable-mdpi/ic_pin_blue.webp new file mode 100644 index 000000000..e65cb4da9 Binary files /dev/null and b/cityquiz/src/main/res/drawable-mdpi/ic_pin_blue.webp differ diff --git a/cityquiz/src/main/res/drawable-mdpi/ic_pin_green.webp b/cityquiz/src/main/res/drawable-mdpi/ic_pin_green.webp new file mode 100644 index 000000000..8f4c88381 Binary files /dev/null and b/cityquiz/src/main/res/drawable-mdpi/ic_pin_green.webp differ diff --git a/cityquiz/src/main/res/drawable-mdpi/ic_pin_red.webp b/cityquiz/src/main/res/drawable-mdpi/ic_pin_red.webp new file mode 100644 index 000000000..b8f54fec5 Binary files /dev/null and b/cityquiz/src/main/res/drawable-mdpi/ic_pin_red.webp differ diff --git a/cityquiz/src/main/res/drawable-mdpi/ornament_general_full.webp b/cityquiz/src/main/res/drawable-mdpi/ornament_general_full.webp new file mode 100644 index 000000000..8a97344e1 Binary files /dev/null and b/cityquiz/src/main/res/drawable-mdpi/ornament_general_full.webp differ diff --git a/cityquiz/src/main/res/drawable-xhdpi/ic_pin_blue.webp b/cityquiz/src/main/res/drawable-xhdpi/ic_pin_blue.webp new file mode 100644 index 000000000..5c7b533f9 Binary files /dev/null and b/cityquiz/src/main/res/drawable-xhdpi/ic_pin_blue.webp differ diff --git a/cityquiz/src/main/res/drawable-xhdpi/ic_pin_green.webp b/cityquiz/src/main/res/drawable-xhdpi/ic_pin_green.webp new file mode 100644 index 000000000..dd5939c5c Binary files /dev/null and b/cityquiz/src/main/res/drawable-xhdpi/ic_pin_green.webp differ diff --git a/cityquiz/src/main/res/drawable-xhdpi/ic_pin_red.webp b/cityquiz/src/main/res/drawable-xhdpi/ic_pin_red.webp new file mode 100644 index 000000000..3197350ee Binary files /dev/null and b/cityquiz/src/main/res/drawable-xhdpi/ic_pin_red.webp differ diff --git a/cityquiz/src/main/res/drawable-xhdpi/ornament_general_full.webp b/cityquiz/src/main/res/drawable-xhdpi/ornament_general_full.webp new file mode 100644 index 000000000..6c1c4204f Binary files /dev/null and b/cityquiz/src/main/res/drawable-xhdpi/ornament_general_full.webp differ diff --git a/cityquiz/src/main/res/drawable-xxhdpi/ic_pin_blue.webp b/cityquiz/src/main/res/drawable-xxhdpi/ic_pin_blue.webp new file mode 100644 index 000000000..307bca1ee Binary files /dev/null and b/cityquiz/src/main/res/drawable-xxhdpi/ic_pin_blue.webp differ diff --git a/cityquiz/src/main/res/drawable-xxhdpi/ic_pin_green.webp b/cityquiz/src/main/res/drawable-xxhdpi/ic_pin_green.webp new file mode 100644 index 000000000..f4082682a Binary files /dev/null and b/cityquiz/src/main/res/drawable-xxhdpi/ic_pin_green.webp differ diff --git a/cityquiz/src/main/res/drawable-xxhdpi/ic_pin_red.webp b/cityquiz/src/main/res/drawable-xxhdpi/ic_pin_red.webp new file mode 100644 index 000000000..485cf425b Binary files /dev/null and b/cityquiz/src/main/res/drawable-xxhdpi/ic_pin_red.webp differ diff --git a/cityquiz/src/main/res/drawable-xxhdpi/ornament_general_full.webp b/cityquiz/src/main/res/drawable-xxhdpi/ornament_general_full.webp new file mode 100644 index 000000000..d887a5e29 Binary files /dev/null and b/cityquiz/src/main/res/drawable-xxhdpi/ornament_general_full.webp differ diff --git a/cityquiz/src/main/res/drawable-xxxhdpi/ic_pin_blue.webp b/cityquiz/src/main/res/drawable-xxxhdpi/ic_pin_blue.webp new file mode 100644 index 000000000..c21b76fa8 Binary files /dev/null and b/cityquiz/src/main/res/drawable-xxxhdpi/ic_pin_blue.webp differ diff --git a/cityquiz/src/main/res/drawable-xxxhdpi/ic_pin_green.webp b/cityquiz/src/main/res/drawable-xxxhdpi/ic_pin_green.webp new file mode 100644 index 000000000..beac64e2c Binary files /dev/null and b/cityquiz/src/main/res/drawable-xxxhdpi/ic_pin_green.webp differ diff --git a/cityquiz/src/main/res/drawable-xxxhdpi/ic_pin_red.webp b/cityquiz/src/main/res/drawable-xxxhdpi/ic_pin_red.webp new file mode 100644 index 000000000..8fa04c73e Binary files /dev/null and b/cityquiz/src/main/res/drawable-xxxhdpi/ic_pin_red.webp differ diff --git a/cityquiz/src/main/res/drawable/rounded_rect_city.xml b/cityquiz/src/main/res/drawable/rounded_rect_city.xml new file mode 100644 index 000000000..2d2064e0f --- /dev/null +++ b/cityquiz/src/main/res/drawable/rounded_rect_city.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/santa-tracker/src/main/res/layout/activity_city_quiz.xml b/cityquiz/src/main/res/layout/activity_city_quiz.xml similarity index 95% rename from santa-tracker/src/main/res/layout/activity_city_quiz.xml rename to cityquiz/src/main/res/layout/activity_city_quiz.xml index 1c17a4a0d..d80a6062a 100644 --- a/santa-tracker/src/main/res/layout/activity_city_quiz.xml +++ b/cityquiz/src/main/res/layout/activity_city_quiz.xml @@ -1,12 +1,12 @@ + + + Waar is dit? + %1$d van %2$d + %1$d punte + Foto deur: %1$s + diff --git a/cityquiz/src/main/res/values-ar-rXB/strings.xml b/cityquiz/src/main/res/values-ar-rXB/strings.xml new file mode 100644 index 000000000..f3eaa06d5 --- /dev/null +++ b/cityquiz/src/main/res/values-ar-rXB/strings.xml @@ -0,0 +1,23 @@ + + + + + ‏‮Where‬‏ ‏‮is‬‏ ‏‮this‬‏? + %1$d ‏‮of‬‏ %2$d + %1$d ‏‮points‬‏ + ‏‮Photo‬‏ ‏‮by‬‏: %1$s + diff --git a/cityquiz/src/main/res/values-bg/strings.xml b/cityquiz/src/main/res/values-bg/strings.xml new file mode 100644 index 000000000..4f846c298 --- /dev/null +++ b/cityquiz/src/main/res/values-bg/strings.xml @@ -0,0 +1,23 @@ + + + + + Къде е това? + %1$d от %2$d + %1$d точки + Снимка от: %1$s + diff --git a/cityquiz/src/main/res/values-ca/strings.xml b/cityquiz/src/main/res/values-ca/strings.xml new file mode 100644 index 000000000..6e53fdc48 --- /dev/null +++ b/cityquiz/src/main/res/values-ca/strings.xml @@ -0,0 +1,23 @@ + + + + + On és això? + %1$d de %2$d + %1$d punts + Fotografia de: %1$s + diff --git a/cityquiz/src/main/res/values-da/strings.xml b/cityquiz/src/main/res/values-da/strings.xml new file mode 100644 index 000000000..db64d2ee1 --- /dev/null +++ b/cityquiz/src/main/res/values-da/strings.xml @@ -0,0 +1,23 @@ + + + + + Hvor er det? + %1$d af %2$d + %1$d point + Foto: %1$s + diff --git a/cityquiz/src/main/res/values-de-rAT/strings.xml b/cityquiz/src/main/res/values-de-rAT/strings.xml new file mode 100644 index 000000000..08d57fa84 --- /dev/null +++ b/cityquiz/src/main/res/values-de-rAT/strings.xml @@ -0,0 +1,23 @@ + + + + + Wo ist dieser Ort? + %1$d von %2$d + %1$d Punkte + Foto: %1$s + diff --git a/cityquiz/src/main/res/values-de-rCH/strings.xml b/cityquiz/src/main/res/values-de-rCH/strings.xml new file mode 100644 index 000000000..08d57fa84 --- /dev/null +++ b/cityquiz/src/main/res/values-de-rCH/strings.xml @@ -0,0 +1,23 @@ + + + + + Wo ist dieser Ort? + %1$d von %2$d + %1$d Punkte + Foto: %1$s + diff --git a/cityquiz/src/main/res/values-de/strings.xml b/cityquiz/src/main/res/values-de/strings.xml new file mode 100644 index 000000000..08d57fa84 --- /dev/null +++ b/cityquiz/src/main/res/values-de/strings.xml @@ -0,0 +1,23 @@ + + + + + Wo ist dieser Ort? + %1$d von %2$d + %1$d Punkte + Foto: %1$s + diff --git a/cityquiz/src/main/res/values-en-rGB/strings.xml b/cityquiz/src/main/res/values-en-rGB/strings.xml new file mode 100644 index 000000000..7f7d34b8e --- /dev/null +++ b/cityquiz/src/main/res/values-en-rGB/strings.xml @@ -0,0 +1,23 @@ + + + + + Where is this? + %1$d of %2$d + %1$d points + Photo by: %1$s + diff --git a/cityquiz/src/main/res/values-en-rIE/strings.xml b/cityquiz/src/main/res/values-en-rIE/strings.xml new file mode 100644 index 000000000..7f7d34b8e --- /dev/null +++ b/cityquiz/src/main/res/values-en-rIE/strings.xml @@ -0,0 +1,23 @@ + + + + + Where is this? + %1$d of %2$d + %1$d points + Photo by: %1$s + diff --git a/cityquiz/src/main/res/values-en-rIN/strings.xml b/cityquiz/src/main/res/values-en-rIN/strings.xml new file mode 100644 index 000000000..7f7d34b8e --- /dev/null +++ b/cityquiz/src/main/res/values-en-rIN/strings.xml @@ -0,0 +1,23 @@ + + + + + Where is this? + %1$d of %2$d + %1$d points + Photo by: %1$s + diff --git a/cityquiz/src/main/res/values-en-rSG/strings.xml b/cityquiz/src/main/res/values-en-rSG/strings.xml new file mode 100644 index 000000000..7f7d34b8e --- /dev/null +++ b/cityquiz/src/main/res/values-en-rSG/strings.xml @@ -0,0 +1,23 @@ + + + + + Where is this? + %1$d of %2$d + %1$d points + Photo by: %1$s + diff --git a/cityquiz/src/main/res/values-en-rXA/strings.xml b/cityquiz/src/main/res/values-en-rXA/strings.xml new file mode 100644 index 000000000..46a5847f6 --- /dev/null +++ b/cityquiz/src/main/res/values-en-rXA/strings.xml @@ -0,0 +1,23 @@ + + + + + [Ŵĥéŕé îš ţĥîš¿ one two] + [ᐅ%1$dᐊ öƒ ᐅ%2$dᐊ one two three] + [ᐅ%1$dᐊ þöîñţš one two three] + [Þĥöţö бý: ᐅ%1$sᐊ one two three] + diff --git a/cityquiz/src/main/res/values-en-rXC/strings.xml b/cityquiz/src/main/res/values-en-rXC/strings.xml new file mode 100644 index 000000000..d8d873005 --- /dev/null +++ b/cityquiz/src/main/res/values-en-rXC/strings.xml @@ -0,0 +1,23 @@ + + + + + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎Where is this?‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎%1$d‎‏‎‎‏‏‏‎ of ‎‏‎‎‏‏‎%2$d‎‏‎‎‏‏‏‎‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎%1$d‎‏‎‎‏‏‏‎ points‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎Photo by: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎ + diff --git a/cityquiz/src/main/res/values-en-rZA/strings.xml b/cityquiz/src/main/res/values-en-rZA/strings.xml new file mode 100644 index 000000000..7f7d34b8e --- /dev/null +++ b/cityquiz/src/main/res/values-en-rZA/strings.xml @@ -0,0 +1,23 @@ + + + + + Where is this? + %1$d of %2$d + %1$d points + Photo by: %1$s + diff --git a/cityquiz/src/main/res/values-es-rAR/strings.xml b/cityquiz/src/main/res/values-es-rAR/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rAR/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rBO/strings.xml b/cityquiz/src/main/res/values-es-rBO/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rBO/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rCL/strings.xml b/cityquiz/src/main/res/values-es-rCL/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rCL/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rCO/strings.xml b/cityquiz/src/main/res/values-es-rCO/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rCO/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rCR/strings.xml b/cityquiz/src/main/res/values-es-rCR/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rCR/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rDO/strings.xml b/cityquiz/src/main/res/values-es-rDO/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rDO/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rEC/strings.xml b/cityquiz/src/main/res/values-es-rEC/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rEC/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rGT/strings.xml b/cityquiz/src/main/res/values-es-rGT/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rGT/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rHN/strings.xml b/cityquiz/src/main/res/values-es-rHN/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rHN/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rMX/strings.xml b/cityquiz/src/main/res/values-es-rMX/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rMX/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rNI/strings.xml b/cityquiz/src/main/res/values-es-rNI/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rNI/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rPA/strings.xml b/cityquiz/src/main/res/values-es-rPA/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rPA/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rPE/strings.xml b/cityquiz/src/main/res/values-es-rPE/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rPE/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rPR/strings.xml b/cityquiz/src/main/res/values-es-rPR/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rPR/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rPY/strings.xml b/cityquiz/src/main/res/values-es-rPY/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rPY/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rSV/strings.xml b/cityquiz/src/main/res/values-es-rSV/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rSV/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rUS/strings.xml b/cityquiz/src/main/res/values-es-rUS/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rUS/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rUY/strings.xml b/cityquiz/src/main/res/values-es-rUY/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rUY/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es-rVE/strings.xml b/cityquiz/src/main/res/values-es-rVE/strings.xml new file mode 100644 index 000000000..e50027bdb --- /dev/null +++ b/cityquiz/src/main/res/values-es-rVE/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Sabes qué lugar es este? + %1$d de %2$d + %1$d puntos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-es/strings.xml b/cityquiz/src/main/res/values-es/strings.xml new file mode 100644 index 000000000..160a39282 --- /dev/null +++ b/cityquiz/src/main/res/values-es/strings.xml @@ -0,0 +1,23 @@ + + + + + ¿Dónde está? + %1$d de %2$d + %1$d puntos + Foto de %1$s + diff --git a/cityquiz/src/main/res/values-et/strings.xml b/cityquiz/src/main/res/values-et/strings.xml new file mode 100644 index 000000000..27922ea5f --- /dev/null +++ b/cityquiz/src/main/res/values-et/strings.xml @@ -0,0 +1,23 @@ + + + + + Kus see on? + %1$d/%2$d + %1$d punkti + Foto autor: %1$s + diff --git a/cityquiz/src/main/res/values-fi/strings.xml b/cityquiz/src/main/res/values-fi/strings.xml new file mode 100644 index 000000000..2c859b64b --- /dev/null +++ b/cityquiz/src/main/res/values-fi/strings.xml @@ -0,0 +1,23 @@ + + + + + Missä tämä on? + %1$d/%2$d + %1$d pistettä + Kuvaaja: %1$s + diff --git a/cityquiz/src/main/res/values-fil/strings.xml b/cityquiz/src/main/res/values-fil/strings.xml new file mode 100644 index 000000000..257ab1f3a --- /dev/null +++ b/cityquiz/src/main/res/values-fil/strings.xml @@ -0,0 +1,23 @@ + + + + + Saan ito? + %1$d sa %2$d + %1$d puntos + Litratong kuha ni: %1$s + diff --git a/cityquiz/src/main/res/values-fr-rCA/strings.xml b/cityquiz/src/main/res/values-fr-rCA/strings.xml new file mode 100644 index 000000000..e08c76f4f --- /dev/null +++ b/cityquiz/src/main/res/values-fr-rCA/strings.xml @@ -0,0 +1,23 @@ + + + + + Où est-ce? + %1$d sur %2$d + %1$d points + Photo par : %1$s + diff --git a/cityquiz/src/main/res/values-fr-rCH/strings.xml b/cityquiz/src/main/res/values-fr-rCH/strings.xml new file mode 100644 index 000000000..8fe653fce --- /dev/null +++ b/cityquiz/src/main/res/values-fr-rCH/strings.xml @@ -0,0 +1,23 @@ + + + + + Où est-ce ? + %1$d sur %2$d + %1$d points + Photo de : %1$s + diff --git a/cityquiz/src/main/res/values-fr/strings.xml b/cityquiz/src/main/res/values-fr/strings.xml new file mode 100644 index 000000000..8fe653fce --- /dev/null +++ b/cityquiz/src/main/res/values-fr/strings.xml @@ -0,0 +1,23 @@ + + + + + Où est-ce ? + %1$d sur %2$d + %1$d points + Photo de : %1$s + diff --git a/cityquiz/src/main/res/values-gsw/strings.xml b/cityquiz/src/main/res/values-gsw/strings.xml new file mode 100644 index 000000000..08d57fa84 --- /dev/null +++ b/cityquiz/src/main/res/values-gsw/strings.xml @@ -0,0 +1,23 @@ + + + + + Wo ist dieser Ort? + %1$d von %2$d + %1$d Punkte + Foto: %1$s + diff --git a/cityquiz/src/main/res/values-hr/strings.xml b/cityquiz/src/main/res/values-hr/strings.xml new file mode 100644 index 000000000..592080817 --- /dev/null +++ b/cityquiz/src/main/res/values-hr/strings.xml @@ -0,0 +1,23 @@ + + + + + Gdje se nalazi ovo? + %1$d od %2$d + Broj bodova: %1$d + Autor fotografije: %1$s + diff --git a/cityquiz/src/main/res/values-id/strings.xml b/cityquiz/src/main/res/values-id/strings.xml new file mode 100644 index 000000000..f54270334 --- /dev/null +++ b/cityquiz/src/main/res/values-id/strings.xml @@ -0,0 +1,23 @@ + + + + + Di manakah lokasi ini? + %1$d dari %2$d + %1$d poin + Foto oleh: %1$s + diff --git a/cityquiz/src/main/res/values-in/strings.xml b/cityquiz/src/main/res/values-in/strings.xml new file mode 100644 index 000000000..f54270334 --- /dev/null +++ b/cityquiz/src/main/res/values-in/strings.xml @@ -0,0 +1,23 @@ + + + + + Di manakah lokasi ini? + %1$d dari %2$d + %1$d poin + Foto oleh: %1$s + diff --git a/cityquiz/src/main/res/values-it/strings.xml b/cityquiz/src/main/res/values-it/strings.xml new file mode 100644 index 000000000..0ac1d8b5d --- /dev/null +++ b/cityquiz/src/main/res/values-it/strings.xml @@ -0,0 +1,23 @@ + + + + + Dove si trova? + %1$d di %2$d + %1$d punti + Foto di: %1$s + diff --git a/cityquiz/src/main/res/values-ja/strings.xml b/cityquiz/src/main/res/values-ja/strings.xml new file mode 100644 index 000000000..5c7ec00bd --- /dev/null +++ b/cityquiz/src/main/res/values-ja/strings.xml @@ -0,0 +1,23 @@ + + + + + ここはどこでしょうか? + %1$d / %2$d + %1$d ポイント + 撮影: %1$s + diff --git a/cityquiz/src/main/res/values-ko/strings.xml b/cityquiz/src/main/res/values-ko/strings.xml new file mode 100644 index 000000000..58e147108 --- /dev/null +++ b/cityquiz/src/main/res/values-ko/strings.xml @@ -0,0 +1,23 @@ + + + + + 여기가 어디인가요? + %2$d회 중 %1$d회 + %1$d점 + 사진: %1$s + diff --git a/cityquiz/src/main/res/values-ln/strings.xml b/cityquiz/src/main/res/values-ln/strings.xml new file mode 100644 index 000000000..8fe653fce --- /dev/null +++ b/cityquiz/src/main/res/values-ln/strings.xml @@ -0,0 +1,23 @@ + + + + + Où est-ce ? + %1$d sur %2$d + %1$d points + Photo de : %1$s + diff --git a/cityquiz/src/main/res/values-lt/strings.xml b/cityquiz/src/main/res/values-lt/strings.xml new file mode 100644 index 000000000..27c3b2d91 --- /dev/null +++ b/cityquiz/src/main/res/values-lt/strings.xml @@ -0,0 +1,23 @@ + + + + + Kur tai yra? + %1$d iš %2$d + %1$d tšk. + %1$s nuotrauka + diff --git a/cityquiz/src/main/res/values-lv/strings.xml b/cityquiz/src/main/res/values-lv/strings.xml new file mode 100644 index 000000000..b3c53f1ac --- /dev/null +++ b/cityquiz/src/main/res/values-lv/strings.xml @@ -0,0 +1,23 @@ + + + + + Kur tas atrodas? + %1$d no %2$d + %1$d punkti + Fotoattēla autors: %1$s + diff --git a/cityquiz/src/main/res/values-ml/strings.xml b/cityquiz/src/main/res/values-ml/strings.xml new file mode 100644 index 000000000..893409997 --- /dev/null +++ b/cityquiz/src/main/res/values-ml/strings.xml @@ -0,0 +1,23 @@ + + + + + ഇത് എവിടെയാണ്? + %1$d / %2$d + %1$d പോയിന്റുകൾ + ഫോട്ടോ എടുത്തത്: %1$s + diff --git a/cityquiz/src/main/res/values-mo/strings.xml b/cityquiz/src/main/res/values-mo/strings.xml new file mode 100644 index 000000000..bb56a1180 --- /dev/null +++ b/cityquiz/src/main/res/values-mo/strings.xml @@ -0,0 +1,23 @@ + + + + + Unde este? + %1$d din %2$d + Puncte: %1$d + Fotografie de: %1$s + diff --git a/cityquiz/src/main/res/values-nb/strings.xml b/cityquiz/src/main/res/values-nb/strings.xml new file mode 100644 index 000000000..4be8db66a --- /dev/null +++ b/cityquiz/src/main/res/values-nb/strings.xml @@ -0,0 +1,23 @@ + + + + + Hvor er dette? + %1$d av %2$d + %1$d poeng + Foto av: %1$s + diff --git a/cityquiz/src/main/res/values-no/strings.xml b/cityquiz/src/main/res/values-no/strings.xml new file mode 100644 index 000000000..4be8db66a --- /dev/null +++ b/cityquiz/src/main/res/values-no/strings.xml @@ -0,0 +1,23 @@ + + + + + Hvor er dette? + %1$d av %2$d + %1$d poeng + Foto av: %1$s + diff --git a/cityquiz/src/main/res/values-pl/strings.xml b/cityquiz/src/main/res/values-pl/strings.xml new file mode 100644 index 000000000..eb2daccf2 --- /dev/null +++ b/cityquiz/src/main/res/values-pl/strings.xml @@ -0,0 +1,23 @@ + + + + + Gdzie to jest? + %1$d z %2$d + Punkty: %1$d + Zdjęcie: %1$s + diff --git a/cityquiz/src/main/res/values-pt-rBR/strings.xml b/cityquiz/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 000000000..f3e8f9c4b --- /dev/null +++ b/cityquiz/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,23 @@ + + + + + Onde é isso? + %1$d de %2$d + %1$d pontos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-pt-rPT/strings.xml b/cityquiz/src/main/res/values-pt-rPT/strings.xml new file mode 100644 index 000000000..7ff983580 --- /dev/null +++ b/cityquiz/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,23 @@ + + + + + Sabe onde fica? + %1$d de %2$d + %1$d pontos + Foto por: %1$s + diff --git a/cityquiz/src/main/res/values-pt/strings.xml b/cityquiz/src/main/res/values-pt/strings.xml new file mode 100644 index 000000000..f3e8f9c4b --- /dev/null +++ b/cityquiz/src/main/res/values-pt/strings.xml @@ -0,0 +1,23 @@ + + + + + Onde é isso? + %1$d de %2$d + %1$d pontos + Foto de: %1$s + diff --git a/cityquiz/src/main/res/values-ro/strings.xml b/cityquiz/src/main/res/values-ro/strings.xml new file mode 100644 index 000000000..bb56a1180 --- /dev/null +++ b/cityquiz/src/main/res/values-ro/strings.xml @@ -0,0 +1,23 @@ + + + + + Unde este? + %1$d din %2$d + Puncte: %1$d + Fotografie de: %1$s + diff --git a/cityquiz/src/main/res/values-ru/strings.xml b/cityquiz/src/main/res/values-ru/strings.xml new file mode 100644 index 000000000..014995856 --- /dev/null +++ b/cityquiz/src/main/res/values-ru/strings.xml @@ -0,0 +1,23 @@ + + + + + Где это находится? + %1$d из %2$d + Очков: %1$d + Фото: %1$s + diff --git a/cityquiz/src/main/res/values-sl/strings.xml b/cityquiz/src/main/res/values-sl/strings.xml new file mode 100644 index 000000000..d2ee7580d --- /dev/null +++ b/cityquiz/src/main/res/values-sl/strings.xml @@ -0,0 +1,23 @@ + + + + + Kje je to? + %1$d od %2$d + Število točk: %1$d + Avtor fotografije: %1$s + diff --git a/cityquiz/src/main/res/values-sv/strings.xml b/cityquiz/src/main/res/values-sv/strings.xml new file mode 100644 index 000000000..32f748192 --- /dev/null +++ b/cityquiz/src/main/res/values-sv/strings.xml @@ -0,0 +1,23 @@ + + + + + Var är det här? + %1$d av %2$d + %1$d poäng + Foto av %1$s + diff --git a/cityquiz/src/main/res/values-ta/strings.xml b/cityquiz/src/main/res/values-ta/strings.xml new file mode 100644 index 000000000..81567b127 --- /dev/null +++ b/cityquiz/src/main/res/values-ta/strings.xml @@ -0,0 +1,23 @@ + + + + + இந்த இடம் எங்கே உள்ளது? + %1$d / %2$d + %1$d புள்ளிகள் + படமெடுத்தவர்: %1$s + diff --git a/cityquiz/src/main/res/values-th/strings.xml b/cityquiz/src/main/res/values-th/strings.xml new file mode 100644 index 000000000..e30378f82 --- /dev/null +++ b/cityquiz/src/main/res/values-th/strings.xml @@ -0,0 +1,23 @@ + + + + + สถานที่นี้อยู่ที่ใด + %1$d จาก %2$d + %1$d คะแนน + รูปภาพโดย: %1$s + diff --git a/cityquiz/src/main/res/values-tl/strings.xml b/cityquiz/src/main/res/values-tl/strings.xml new file mode 100644 index 000000000..257ab1f3a --- /dev/null +++ b/cityquiz/src/main/res/values-tl/strings.xml @@ -0,0 +1,23 @@ + + + + + Saan ito? + %1$d sa %2$d + %1$d puntos + Litratong kuha ni: %1$s + diff --git a/cityquiz/src/main/res/values-uk/strings.xml b/cityquiz/src/main/res/values-uk/strings.xml new file mode 100644 index 000000000..6457d096c --- /dev/null +++ b/cityquiz/src/main/res/values-uk/strings.xml @@ -0,0 +1,23 @@ + + + + + Де це? + %1$d з %2$d + Балів: %1$d + Автор фото: %1$s + diff --git a/cityquiz/src/main/res/values-vi/strings.xml b/cityquiz/src/main/res/values-vi/strings.xml new file mode 100644 index 000000000..66b4ba5a5 --- /dev/null +++ b/cityquiz/src/main/res/values-vi/strings.xml @@ -0,0 +1,23 @@ + + + + + Địa điểm này ở đâu? + %1$d / %2$d + %1$d điểm + Ảnh của: %1$s + diff --git a/cityquiz/src/main/res/values-zh-rCN/strings.xml b/cityquiz/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 000000000..498d21149 --- /dev/null +++ b/cityquiz/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,23 @@ + + + + + 这是哪里? + 第 %1$d 回合,共 %2$d 回合 + %1$d 分 + 拍摄者:%1$s + diff --git a/cityquiz/src/main/res/values-zh-rHK/strings.xml b/cityquiz/src/main/res/values-zh-rHK/strings.xml new file mode 100644 index 000000000..05ec50417 --- /dev/null +++ b/cityquiz/src/main/res/values-zh-rHK/strings.xml @@ -0,0 +1,23 @@ + + + + + 這是什麼地方? + 第 %1$d 回合,共 %2$d 回合 + %1$d 分 + 攝影師:%1$s + diff --git a/cityquiz/src/main/res/values-zh-rTW/strings.xml b/cityquiz/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 000000000..0b9332b7a --- /dev/null +++ b/cityquiz/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,23 @@ + + + + + 這是哪裡? + 第 %1$d 回合 (共 %2$d 回合) + %1$d 分 + 拍攝者:%1$s + diff --git a/cityquiz/src/main/res/values-zh/strings.xml b/cityquiz/src/main/res/values-zh/strings.xml new file mode 100644 index 000000000..498d21149 --- /dev/null +++ b/cityquiz/src/main/res/values-zh/strings.xml @@ -0,0 +1,23 @@ + + + + + 这是哪里? + 第 %1$d 回合,共 %2$d 回合 + %1$d 分 + 拍摄者:%1$s + diff --git a/cityquiz/src/main/res/values/colors.xml b/cityquiz/src/main/res/values/colors.xml new file mode 100644 index 000000000..56165f71c --- /dev/null +++ b/cityquiz/src/main/res/values/colors.xml @@ -0,0 +1,22 @@ + + + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/cityquiz/src/main/res/values/strings.xml b/cityquiz/src/main/res/values/strings.xml new file mode 100644 index 000000000..4ea3e7455 --- /dev/null +++ b/cityquiz/src/main/res/values/strings.xml @@ -0,0 +1,21 @@ + + + Where is this? + %1$d of %2$d + %1$d points + Photo by: %1$s + diff --git a/cityquiz/src/main/res/values/styles.xml b/cityquiz/src/main/res/values/styles.xml new file mode 100644 index 000000000..6c65774ee --- /dev/null +++ b/cityquiz/src/main/res/values/styles.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/common/build.gradle b/common/build.gradle index 943eb1112..8e80dcc75 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -1,5 +1,24 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://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. + */ + apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.tools @@ -8,21 +27,36 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion } + + // Disable translation lint checks until we get the translation pipeline running + lintOptions { + disable 'ExtraTranslation', 'MissingTranslation' + } } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + implementation rootProject.ext.kotlinRuntime + + implementation rootProject.ext.appCompat + + implementation rootProject.ext.coreKtx + + implementation rootProject.ext.playServicesBase + implementation rootProject.ext.playServicesGames + implementation rootProject.ext.playServicesMaps + + implementation rootProject.ext.firebaseConfig + implementation rootProject.ext.firebaseCore + implementation rootProject.ext.firebaseAppinvite + implementation rootProject.ext.firebaseCrash + + implementation rootProject.ext.archLifecycleRuntime + implementation rootProject.ext.archLifecycleExtentions - compile rootProject.ext.supportV4 - compile rootProject.ext.appCompat + implementation rootProject.ext.constraintLayout + implementation rootProject.ext.flexbox - compile rootProject.ext.playServicesAnalytics - compile rootProject.ext.playServicesBase - compile rootProject.ext.playServicesBasement - compile rootProject.ext.playServicesGames - compile rootProject.ext.playServicesMaps + implementation rootProject.ext.glide - compile rootProject.ext.firebaseCore - compile rootProject.ext.firebaseAnalytics - compile rootProject.ext.firebaseAppinvite + implementation rootProject.ext.playCore } diff --git a/common/lint.xml b/common/lint.xml new file mode 100644 index 000000000..ba0b137e5 --- /dev/null +++ b/common/lint.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/common/proguard-rules.pro b/common/proguard-rules.pro deleted file mode 100644 index e2c580fb8..000000000 --- a/common/proguard-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /Users/lwray/Desktop/Stuff/adt-bundle-mac-x86_64-20131030/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# 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 *; -#} diff --git a/common/src/debug/res/drawable-hdpi/ic_launcher_foreground.webp b/common/src/debug/res/drawable-hdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..497814d93 Binary files /dev/null and b/common/src/debug/res/drawable-hdpi/ic_launcher_foreground.webp differ diff --git a/common/src/debug/res/drawable-mdpi/ic_launcher_foreground.webp b/common/src/debug/res/drawable-mdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..a46dafafc Binary files /dev/null and b/common/src/debug/res/drawable-mdpi/ic_launcher_foreground.webp differ diff --git a/common/src/debug/res/drawable-xhdpi/ic_launcher_foreground.webp b/common/src/debug/res/drawable-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..4ebb18807 Binary files /dev/null and b/common/src/debug/res/drawable-xhdpi/ic_launcher_foreground.webp differ diff --git a/common/src/debug/res/drawable-xxhdpi/ic_launcher_foreground.webp b/common/src/debug/res/drawable-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..dbcf8d819 Binary files /dev/null and b/common/src/debug/res/drawable-xxhdpi/ic_launcher_foreground.webp differ diff --git a/common/src/debug/res/drawable-xxxhdpi/ic_launcher_foreground.webp b/common/src/debug/res/drawable-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..5731b4012 Binary files /dev/null and b/common/src/debug/res/drawable-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/common/src/debug/res/mipmap-hdpi/ic_launcher_santa.webp b/common/src/debug/res/mipmap-hdpi/ic_launcher_santa.webp new file mode 100644 index 000000000..381cc4b66 Binary files /dev/null and b/common/src/debug/res/mipmap-hdpi/ic_launcher_santa.webp differ diff --git a/common/src/debug/res/mipmap-mdpi/ic_launcher_santa.webp b/common/src/debug/res/mipmap-mdpi/ic_launcher_santa.webp new file mode 100644 index 000000000..722732ea5 Binary files /dev/null and b/common/src/debug/res/mipmap-mdpi/ic_launcher_santa.webp differ diff --git a/common/src/debug/res/mipmap-xhdpi/ic_launcher_santa.webp b/common/src/debug/res/mipmap-xhdpi/ic_launcher_santa.webp new file mode 100644 index 000000000..eedfde28e Binary files /dev/null and b/common/src/debug/res/mipmap-xhdpi/ic_launcher_santa.webp differ diff --git a/common/src/debug/res/mipmap-xxhdpi/ic_launcher_santa.webp b/common/src/debug/res/mipmap-xxhdpi/ic_launcher_santa.webp new file mode 100644 index 000000000..42b3ccd01 Binary files /dev/null and b/common/src/debug/res/mipmap-xxhdpi/ic_launcher_santa.webp differ diff --git a/common/src/debug/res/mipmap-xxxhdpi/ic_launcher_santa.webp b/common/src/debug/res/mipmap-xxxhdpi/ic_launcher_santa.webp new file mode 100644 index 000000000..51bf21518 Binary files /dev/null and b/common/src/debug/res/mipmap-xxxhdpi/ic_launcher_santa.webp differ diff --git a/common/src/debug/res/values/debug_settings.xml b/common/src/debug/res/values/debug_settings.xml new file mode 100644 index 000000000..81a97624c --- /dev/null +++ b/common/src/debug/res/values/debug_settings.xml @@ -0,0 +1,21 @@ + + + + + false + + diff --git a/common/src/debug/res/xml/config_analytics_global.xml b/common/src/debug/res/xml/config_analytics_global.xml new file mode 100644 index 000000000..5b91db2f8 --- /dev/null +++ b/common/src/debug/res/xml/config_analytics_global.xml @@ -0,0 +1,22 @@ + + + + + verbose + true + + diff --git a/common/src/debug/res/xml/google_now_actions.xml b/common/src/debug/res/xml/google_now_actions.xml new file mode 100644 index 000000000..53515ef32 --- /dev/null +++ b/common/src/debug/res/xml/google_now_actions.xml @@ -0,0 +1,62 @@ + + + + + com.google.android.apps.santatracker + 1 + Santa Tracker + + ShowAction + com.google.android.apps.santatracker.SHOW_SANTA + show $SantaSynonym:santa + show santa on Google Santa Tracker + + + $SantaSynonym + Santa + Santa Claus + Saint Nicholas + Father Christmas + Kris Kringle + + + ActivateAction + com.google.android.apps.santatracker.PLAY_GAME + play $SantaGame:game game + play $SantaGame:game + play Elf Jetpack game on Google Santa Tracker + + + $SantaGame + Elf Jetpack + Memory + Gumball + Rocket Sleigh + Dasher Dancer + + + ActivateAction + com.google.android.apps.santatracker.PLAY_RANDOM_GAME + play game + play a game + play games + play game on Google Santa Tracker + + diff --git a/common/src/main/AndroidManifest.xml b/common/src/main/AndroidManifest.xml index fa8d5b8d4..99a15d1b0 100644 --- a/common/src/main/AndroidManifest.xml +++ b/common/src/main/AndroidManifest.xml @@ -1,11 +1,11 @@ - - + package="com.google.android.apps.santatracker.common"> - + + + + + + diff --git a/common/src/main/assets/Lobster-Regular.otf b/common/src/main/assets/Lobster-Regular.otf deleted file mode 100644 index fbf991a66..000000000 Binary files a/common/src/main/assets/Lobster-Regular.otf and /dev/null differ diff --git a/common/src/main/java/com/google/android/apps/santatracker/AudioConstants.kt b/common/src/main/java/com/google/android/apps/santatracker/AudioConstants.kt new file mode 100644 index 000000000..96ae7ef81 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/AudioConstants.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker + +object AudioConstants { + const val DEFAULT_BACKGROUND_VOLUME = 0.2f + const val DEFAULT_SOUND_EFFECT_VOLUME = 0.4f +} \ No newline at end of file diff --git a/common/src/main/java/com/google/android/apps/santatracker/AudioPlayer.java b/common/src/main/java/com/google/android/apps/santatracker/AudioPlayer.java deleted file mode 100644 index c988cab74..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/AudioPlayer.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker; - -import android.content.Context; -import android.media.MediaPlayer; -import android.media.MediaPlayer.OnCompletionListener; -import android.media.MediaPlayer.OnPreparedListener; -import android.util.SparseArray; - -public class AudioPlayer { - - private Context mContext; - private SparseArray mStreams; - private boolean mMuted = false; - - private static float VOLUME_MULTIPLIER = 0.25f; - - public AudioPlayer(Context context) { - mContext = context; - mStreams = new SparseArray<>(); - this.mMuted = false; - } - - public void playTrack(final int resId, final boolean loop) { - MediaPlayer mediaPlayer = MediaPlayer.create(mContext, resId); - // Not all devices support audio (i.e. watches) - if (mediaPlayer != null) { - mStreams.put(resId, mediaPlayer); - mediaPlayer.setLooping(loop); - mediaPlayer.setOnPreparedListener(new OnPreparedListener() { - public void onPrepared(MediaPlayer mp) { - startMedia(mp); - } - }); - mediaPlayer.setOnCompletionListener(new OnCompletionListener() { - public void onCompletion(MediaPlayer mp) { - if (!mp.isLooping()) { - mp.release(); - mStreams.remove(resId); - } - } - }); - } - } - - public void playTrackIfNotAlreadyPlaying(final int resId, final boolean loop) { - if (mStreams.get(resId) == null) { - playTrack(resId, loop); - } - } - - public void playTrackExclusive(final int resId, final boolean loop) { - boolean restart = false; - MediaPlayer mp = mStreams.get(resId); - try { - if (mp == null || !mp.isPlaying()) { - restart = true; - } - } catch (IllegalStateException e) { - // Media player was not initialised or was released - restart = true; - } - - if (restart) { - stopAll(); - playTrack(resId, loop); - } - } - - private void startMedia(MediaPlayer mp) { - if (mMuted) { - mp.setVolume(0f, 0f); - } else { - mp.setVolume(VOLUME_MULTIPLIER, VOLUME_MULTIPLIER); - } - mp.start(); - } - - public void stop(int resId) { - MediaPlayer mp = mStreams.get(resId); - if (mp != null) { - mp.stop(); - mp.release(); - mStreams.remove(resId); - } - } - - public void muteAll() { - mMuted = true; - for (int i = 0; i < mStreams.size(); i++) { - mStreams.valueAt(i).setVolume(0f, 0f); - } - } - - public void unMuteAll() { - mMuted = false; - for (int i = 0; i < mStreams.size(); i++) { - mStreams.valueAt(i).setVolume(VOLUME_MULTIPLIER, VOLUME_MULTIPLIER); - } - } - - public void pauseAll() { - for (int i = 0; i < mStreams.size(); i++) { - mStreams.valueAt(i).pause(); - } - } - - public void resumeAll() { - for (int i = 0; i < mStreams.size(); i++) { - startMedia(mStreams.valueAt(i)); - } - } - - public void stopAll() { - // Stop all audio - for (int i = 0; i < mStreams.size(); i++) { - MediaPlayer mp = mStreams.valueAt(i); - mp.release(); - mStreams.removeAt(i); - } - } -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/AudioPlayer.kt b/common/src/main/java/com/google/android/apps/santatracker/AudioPlayer.kt new file mode 100644 index 000000000..3017eef38 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/AudioPlayer.kt @@ -0,0 +1,91 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker + +import android.content.Context +import android.media.MediaPlayer +import android.util.SparseArray + +class AudioPlayer(private val context: Context) { + private val streams: SparseArray = SparseArray() + private var muted = false + + fun playTrack(resId: Int, loop: Boolean) { + val mediaPlayer = MediaPlayer.create(context, resId) + // Not all devices support audio (i.e. watches) + if (mediaPlayer != null) { + streams.put(resId, mediaPlayer) + mediaPlayer.isLooping = loop + mediaPlayer.setOnPreparedListener { mp -> startMedia(mp) } + mediaPlayer.setOnCompletionListener { mp -> + if (!mp.isLooping) { + mp.release() + streams.remove(resId) + } + } + } + } + + fun playTrackExclusive(resId: Int, loop: Boolean) { + var restart = false + val mp = streams.get(resId) + try { + if (mp == null || !mp.isPlaying) { + restart = true + } + } catch (e: IllegalStateException) { + // Media player was not initialised or was released + restart = true + } + + if (restart) { + stopAll() + playTrack(resId, loop) + } + } + + private fun startMedia(mp: MediaPlayer) { + if (muted) { + mp.setVolume(0f, 0f) + } else { + mp.setVolume(AudioConstants.DEFAULT_BACKGROUND_VOLUME, + AudioConstants.DEFAULT_BACKGROUND_VOLUME) + } + mp.start() + } + + fun stop(resId: Int) { + val mp = streams.get(resId) + if (mp != null) { + mp.stop() + mp.release() + streams.remove(resId) + } + } + + fun stopAll() { + // Stop all audio + for (i in 0 until streams.size()) { + val mp = streams.valueAt(i) + if (mp != null) { + mp.stop() + mp.release() + streams.removeAt(i) + } + } + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/Intents.kt b/common/src/main/java/com/google/android/apps/santatracker/Intents.kt new file mode 100644 index 000000000..14d8ec896 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/Intents.kt @@ -0,0 +1,61 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker + +import android.content.Context +import android.content.Intent +import android.net.Uri + +object Intents { + private const val PACKAGE = "com.google.android.apps.santatracker.messaging" + // These variable names below are usually named XXX_ACTION, but naming as XXX_INTENT to tell + // the difference from the ACTION_XXXX for FCM + const val SYNC_CONFIG_INTENT = "$PACKAGE.SYNC_CONFIG" + const val SYNC_ROUTE_INTENT = "$PACKAGE.SYNC_ROUTE" + const val FINISH_TRACKER_INTENT = "$PACKAGE.FINISH_TRACKER" + + /** URL for YouTube video IDs. */ + private const val VIDEO_URL = "https://www.youtube.com/watch?v=%s" + + /** + * Constructs an Intent that plays back a YouTube video. If the YouTube app is installed, the + * video will be played back directly in full screen mode. if the YouTube app is not available + * (e.g. not installed or disabled), the video is launched in a browser instead. + * + * @param videoId YouTube Video id. + */ + @JvmStatic + fun getYoutubeIntent(context: Context, videoId: String): Intent { + val intent = Intent(Intent.ACTION_VIEW).apply { + data = Uri.parse("vnd.youtube://$videoId") + flags = Intent.FLAG_ACTIVITY_NEW_TASK + putExtra("force_fullscreen", true) + } + + val resolvers = context.packageManager.queryIntentActivities(intent, 0) ?: emptyList() + return if (resolvers.isNotEmpty()) { + // Devices with YouTube installed will get the native full-screen player + intent + } else { + // If YouTube is not available, load open the video in the browser + Intent(Intent.ACTION_VIEW).apply { + data = Uri.parse(VIDEO_URL.format(videoId)) + flags = Intent.FLAG_ACTIVITY_NEW_TASK + } + } + } +} \ No newline at end of file diff --git a/common/src/main/java/com/google/android/apps/santatracker/common/CheckableImageButton.kt b/common/src/main/java/com/google/android/apps/santatracker/common/CheckableImageButton.kt new file mode 100644 index 000000000..011862f17 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/common/CheckableImageButton.kt @@ -0,0 +1,89 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.common + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.view.accessibility.AccessibilityEvent +import android.widget.Checkable +import androidx.appcompat.widget.AppCompatImageButton +import androidx.core.view.AccessibilityDelegateCompat +import androidx.core.view.ViewCompat +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat + +class CheckableImageButton @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = androidx.appcompat.R.attr.imageButtonStyle +) : AppCompatImageButton(context, attrs, defStyleAttr), Checkable { + + private var _checked: Boolean = false + set(value) { + if (value != field) { + refreshDrawableState() + sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) + } + field = value + } + + init { + ViewCompat.setAccessibilityDelegate( + this, + object : AccessibilityDelegateCompat() { + override fun onInitializeAccessibilityEvent(host: View, event: AccessibilityEvent) { + super.onInitializeAccessibilityEvent(host, event) + event.isChecked = isChecked + } + + override fun onInitializeAccessibilityNodeInfo( + host: View, + info: AccessibilityNodeInfoCompat + ) { + super.onInitializeAccessibilityNodeInfo(host, info) + info.isCheckable = true + info.isChecked = isChecked + } + }) + } + + override fun setChecked(checked: Boolean) { + _checked = checked + } + + override fun isChecked(): Boolean { + return _checked + } + + override fun toggle() { + _checked = !_checked + } + + override fun onCreateDrawableState(extraSpace: Int): IntArray { + return if (_checked) { + View.mergeDrawableStates( + super.onCreateDrawableState(extraSpace + DRAWABLE_STATE_CHECKED.size), + DRAWABLE_STATE_CHECKED) + } else { + super.onCreateDrawableState(extraSpace) + } + } + + companion object { + private val DRAWABLE_STATE_CHECKED = intArrayOf(android.R.attr.state_checked) + } +} \ No newline at end of file diff --git a/common/src/main/java/com/google/android/apps/santatracker/common/NotificationConstants.java b/common/src/main/java/com/google/android/apps/santatracker/common/NotificationConstants.java deleted file mode 100644 index bfc2823cb..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/common/NotificationConstants.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.common; - -/** - * Constants that are used in both the Application and the Wearable modules. - */ -public final class NotificationConstants { - - public static final String KEY_LOCATION = "location"; - - private NotificationConstants() {}; - - // Only one ID because we only show one notification at a time. - public static final int NOTIFICATION_ID = 9876435; - - public static final int NOTIFICATION_TAKEOFF = 1; - - public static final String TAKEOFF_PATH = "/takeoff"; - public static final String KEY_NOTIFICATION_ID = "notification-id"; - public static final String KEY_NOTIFICATION_TYPE = "notification-type"; - public static final String KEY_TITLE = "title"; - public static final String KEY_CONTENT = "content"; - public static final String KEY_LOCATION_PHOTO = "location-photo"; - public static final String KEY_LOCATION_MAP = "location-map"; - public static final String KEY_LOCATION_FACT = "location-fact"; - public static final String KEY_TIMESTAMP = "timestap"; - public static final String KEY_FINAL_ARRIVAL = "finalArrival"; - public static final String KEY_FACT = "fact"; - public static final String KEY_STATUS = "status"; - public static final String KEY_IMAGEURL = "imageurl"; - - public static final String ACTION_DISMISS - = "com.google.android.apps.santatracker.DISMISS"; - - public static final String ACTION_SEND - = "com.google.android.apps.santatracker.SEND"; -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/common/NotificationConstants.kt b/common/src/main/java/com/google/android/apps/santatracker/common/NotificationConstants.kt new file mode 100644 index 000000000..a526a53e0 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/common/NotificationConstants.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.common + +/** Constants that are used in both the Application and the Wearable modules. */ +object NotificationConstants { + const val CHANNEL_ID = "santa-general" + + // Only one ID because we only show one notification at a time. + const val NOTIFICATION_ID = 9876435 + + const val NOTIFICATION_TAKEOFF = 1 + + const val TAKEOFF_PATH = "/takeoff" + const val KEY_NOTIFICATION_ID = "notification-id" + const val KEY_NOTIFICATION_TYPE = "notification-type" +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/common/TitleTextView.kt b/common/src/main/java/com/google/android/apps/santatracker/common/TitleTextView.kt new file mode 100644 index 000000000..ac0f14f31 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/common/TitleTextView.kt @@ -0,0 +1,110 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.common + +import android.content.Context +import android.graphics.Rect +import android.os.Build +import android.text.Layout +import android.text.Spannable +import android.text.method.TransformationMethod +import android.util.AttributeSet +import android.view.View +import android.widget.TextView +import androidx.appcompat.widget.AppCompatTextView +import androidx.core.os.LocaleListCompat + +/** + * A special version of [AppCompatTextView] that replaces spaces with line breaks in order to + * explicitly adjust the position of line breaks. Currently, this behavior is only for Japanese and + * Korean. In other locales, this view only sets [Layout.BREAK_STRATEGY_HIGH_QUALITY]. + */ +class TitleTextView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : + AppCompatTextView(context, attrs, defStyleAttr) { + + init { + if (Build.VERSION.SDK_INT >= 23) { + breakStrategy = Layout.BREAK_STRATEGY_HIGH_QUALITY + } + } + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + val tags = LocaleListCompat.getAdjustedDefault().toLanguageTags() + if (tags.startsWith("ja") || tags.startsWith("ko")) { + transformationMethod = TitleTransformationMethod(w) + } + } + + private class TitleTransformationMethod internal constructor(private val mWidth: Int) : + TransformationMethod { + + override fun getTransformation(source: CharSequence, view: View): CharSequence { + if (source is Spannable) { + return source + } + val builder = StringBuilder() + val textView = view as TextView + val paint = textView.paint + var head = 0 + var tail = 0 // The position of the last possible line break + val length = source.length + for (i in 0 until length) { + val c = source[i] + if (isLineBreak(c)) { + if (mWidth < Layout.getDesiredWidth(source, head, i, paint)) { // Don't fit + if (head == tail) { // This chunk of text is too long to fit in one line + // Just give up and let the system handle it + return source + } else { + builder.append(source, head, tail) + builder.append('\n') + tail += 1 + head = tail + } + } else { + tail = i + } + } + } + if (mWidth < Layout.getDesiredWidth(source, head, length, paint) && head < tail) { + builder.append(source, head, tail) + builder.append('\n') + head = tail + 1 + } + builder.append(source, head, length) + return builder + } + + private fun isLineBreak(c: Char): Boolean { + return c == ' ' + } + + override fun onFocusChanged( + view: View, + sourceText: CharSequence, + focused: Boolean, + direction: Int, + previouslyFocusedRect: Rect + ) { + // Do nothing + } + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/config/BooleanConfigParam.kt b/common/src/main/java/com/google/android/apps/santatracker/config/BooleanConfigParam.kt new file mode 100644 index 000000000..042d2da9c --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/config/BooleanConfigParam.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.config + +/** Boolean configuration value. */ +class BooleanConfigParam(key: String) : ConfigParam(key) { + + override fun getValue(config: Config): Boolean { + config.firebaseRemoteConfig.getValue(key) + return config.firebaseRemoteConfig.getBoolean(key) + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/config/Config.kt b/common/src/main/java/com/google/android/apps/santatracker/config/Config.kt new file mode 100644 index 000000000..8c74488a0 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/config/Config.kt @@ -0,0 +1,279 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.config + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.annotation.VisibleForTesting +import com.google.android.apps.santatracker.common.BuildConfig +import com.google.android.apps.santatracker.common.R +import com.google.android.apps.santatracker.data.WebSceneState +import com.google.android.apps.santatracker.data.webSceneState +import com.google.android.apps.santatracker.util.SantaLog +import com.google.android.gms.tasks.Task +import com.google.android.gms.tasks.Tasks +import com.google.firebase.remoteconfig.FirebaseRemoteConfig +import com.google.firebase.remoteconfig.FirebaseRemoteConfigFetchThrottledException +import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings +import java.util.ArrayList +import java.util.concurrent.TimeUnit + +/** + * Wrapper class for accessing Firebase Remote Config. Making it open because we want it to be + * mocked in tests. + */ +open class Config { + open val firebaseRemoteConfig: FirebaseRemoteConfig = FirebaseRemoteConfig.getInstance().apply { + setConfigSettings(CONFIG_SETTINGS) + setDefaults(R.xml.remote_config_defaults) + } + + private val configCacheExpiry: Long + private var throttleEndTimeMillis: Long = 0 + + open val takeoffTimeMs: Long + get() = get(SANTA_TAKEOFF) * 1000 + + open val arrivalTimeMs: Long + get() = get(SANTA_ARRIVAL) * 1000 + + init { + // Set cache expiration to 0s when debugging to allow easy testing, otherwise + // use the default value + configCacheExpiry = if (CONFIG_SETTINGS.isDeveloperModeEnabled) { + 0 + } else { + DEFAULT_CACHE_EXPIRY_S + } + } + + @SuppressLint("VisibleForTests") + @VisibleForTesting + open operator fun get(param: ConfigParam): T { + return param.getValue(this) + } + + /** + * Sync the config values with Firebase Remote Config asynchronously. + * + * @param paramChangedCallback the callback when any of [ConfigParam]s are changed. + */ + open fun syncConfigAsync(paramChangedCallback: ParamChangedCallback?) { + val currentTime = System.currentTimeMillis() + if (currentTime > throttleEndTimeMillis) { + val getConfigTask = firebaseRemoteConfig.fetch(configCacheExpiry) + + getConfigTask.addOnCompleteListener { task -> + onTaskCompleted(task, paramChangedCallback) + } + } else { + val msRemaining = throttleEndTimeMillis - currentTime + SantaLog.d(TAG, "Not trying config, throttled for " + msRemaining + "ms") + } + } + + fun syncConfig() { + val currentTime = System.currentTimeMillis() + if (currentTime > throttleEndTimeMillis) { + val task = firebaseRemoteConfig.fetch(configCacheExpiry) + Tasks.await(task, 60, TimeUnit.SECONDS) + } else { + val msRemaining = throttleEndTimeMillis - currentTime + SantaLog.d(TAG, "Not trying config, throttled for " + msRemaining + "ms") + } + } + + private fun onTaskCompleted( + getConfigTask: Task, + paramChangedCallback: ParamChangedCallback? + ) { + if (getConfigTask.isSuccessful) { + SantaLog.d(TAG, "fetchConfig:SUCCESS") + + val oldParams = Bundle() + for (param in ALL_LONG_PARAMS) { + oldParams.putLong(param.key, param.getValue(this)) + } + for (param in ALL_STRING_PARAMS) { + oldParams.putString(param.key, param.getValue(this)) + } + for (param in ALL_BOOLEAN_PARAMS) { + oldParams.putBoolean(param.key, param.getValue(this)) + } + val oldWebSceneState = webSceneState() + + // Activate config and notify clients of any changes + firebaseRemoteConfig.activateFetched() + val changedKeys = getChangedKeys(oldParams, oldWebSceneState) + if (changedKeys.isNotEmpty() && paramChangedCallback != null) { + paramChangedCallback.onChanged(changedKeys) + } + } else { + val e = getConfigTask.exception + if (e is FirebaseRemoteConfigFetchThrottledException) { + // Store throttle end time + val ex = e as FirebaseRemoteConfigFetchThrottledException? + throttleEndTimeMillis = ex!!.throttleEndTimeMillis + SantaLog.w(TAG, "fetchConfig:THROTTLED until $throttleEndTimeMillis") + } else { + SantaLog.w(TAG, "fetchConfig:UNEXPECTED_ERROR", e!!) + } + } + } + + /** + * @return a list of String representing key names of the parameters changed from the previous + * values. Returns an empty list if nothing changed. + */ + private fun getChangedKeys(oldParams: Bundle, oldWebSceneState: WebSceneState): List { + val changedParamsKeys = ArrayList() + for (param in ALL_LONG_PARAMS) { + if (oldParams.getLong(param.key) != param.getValue(this)) { + changedParamsKeys.add(param.key) + } + } + for (param in ALL_STRING_PARAMS) { + val oldValue = oldParams.getString(param.key) + if (oldValue != null && oldValue != param.getValue(this)) { + changedParamsKeys.add(param.key) + } + } + for (param in ALL_BOOLEAN_PARAMS) { + if (oldParams.getBoolean(param.key) != param.getValue(this)) { + changedParamsKeys.add(param.key) + } + } + val newWebSceneState = webSceneState() + if (oldWebSceneState != newWebSceneState) { + changedParamsKeys.add(WebConfig.WEBCONFIG) + } + return changedParamsKeys + } + + /** Interface for a callback when any of config values are changed from the previous values. */ + interface ParamChangedCallback { + /** + * Called when any of parameters are changed from the previous values. + * + * @param changedKeys has the list of key names whose values are changed from the previous + * values. + */ + fun onChanged(changedKeys: List) + } + + companion object { + private const val TAG = "Config" + + // Santa kill switch + val DISABLE_SANTA = BooleanConfigParam("DisableSanta") + + // Game kill switches + val DISABLE_CASTBUTTON = BooleanConfigParam("DisableCastButton") + val DISABLE_PHOTO = BooleanConfigParam("DisableDestinationPhoto") + val DISABLE_GUMBALLGAME = BooleanConfigParam("DisableGumballGame") + val DISABLE_JETPACKGAME = BooleanConfigParam("DisableJetpackGame") + val DISABLE_MEMORYGAME = BooleanConfigParam("DisableMemoryGame") + val DISABLE_ROCKETGAME = BooleanConfigParam("DisableRocketGame") + val DISABLE_DANCERGAME = BooleanConfigParam("DisableDancerGame") + val DISABLE_SWIMMINGGAME = BooleanConfigParam("DisableSwimmingGame") + val DISABLE_BMXGAME = BooleanConfigParam("DisableBmxGame") + val DISABLE_RUNNINGGAME = BooleanConfigParam("DisableRunningGame") + val DISABLE_TENNISGAME = BooleanConfigParam("DisableTennisGame") + val DISABLE_WATERPOLOGAME = BooleanConfigParam("DisableWaterpoloGame") + val DISABLE_CITY_QUIZ = BooleanConfigParam("DisableCityQuiz") + val DISABLE_PRESENTQUEST = BooleanConfigParam("DisablePresentQuest") + val DISABLE_SANTA_SNAP = BooleanConfigParam("DisableSantaSnap") + val DISABLE_PRESENT_THROW = BooleanConfigParam("DisablePresentThrow") + + // YouTube video IDs + val VIDEO_1 = StringConfigParam("Video1") + val VIDEO_15 = StringConfigParam("Video15") + val VIDEO_23 = StringConfigParam("Video23") + + // Unlock times + @JvmField val SANTA_TAKEOFF = LongConfigParam("SantaTakeoff") + @JvmField val SANTA_ARRIVAL = LongConfigParam("SantaArrival") + @JvmField val UNLOCK_GUMBALL = LongConfigParam("UnlockGumball") + @JvmField val UNLOCK_MEMORY = LongConfigParam("UnlockMemory") + @JvmField val UNLOCK_ROCKET = LongConfigParam("UnlockRocket") + @JvmField val UNLOCK_DANCER = LongConfigParam("UnlockDancer") + @JvmField val UNLOCK_CITYQUIZ = LongConfigParam("UnlockCityQuiz") + @JvmField val UNLOCK_VIDEO_1 = LongConfigParam("UnlockVideo1") + @JvmField val UNLOCK_VIDEO_15 = LongConfigParam("UnlockVideo15") + @JvmField val UNLOCK_VIDEO_23 = LongConfigParam("UnlockVideo23") + @JvmField val UNLOCK_JETPACK = LongConfigParam("UnlockJetpack") + @JvmField val UNLOCK_PRESENT_THROW = LongConfigParam("UnlockPresentThrow") + + // Game isFeatured switches + val FEATURE_GUMBALLGAME = BooleanConfigParam("FeatureGumballGame") + val FEATURE_JETPACKGAME = BooleanConfigParam("FeatureJetpackGame") + val FEATURE_MEMORYGAME = BooleanConfigParam("FeatureMemoryGame") + val FEATURE_ROCKETGAME = BooleanConfigParam("FeatureRocketGame") + val FEATURE_DANCERGAME = BooleanConfigParam("FeatureDancerGame") + val FEATURE_SWIMMINGGAME = BooleanConfigParam("FeatureSwimmingGame") + val FEATURE_BMXGAME = BooleanConfigParam("FeatureBmxGame") + val FEATURE_RUNNINGGAME = BooleanConfigParam("FeatureRunningGame") + val FEATURE_TENNISGAME = BooleanConfigParam("FeatureTennisGame") + val FEATURE_WATERPOLOGAME = BooleanConfigParam("FeatureWaterpoloGame") + val FEATURE_CITY_QUIZ = BooleanConfigParam("FeatureCityQuiz") + val FEATURE_PRESENTQUEST = BooleanConfigParam("FeaturePresentQuest") + val FEATURE_SANTA_SNAP = BooleanConfigParam("FeatureSantaSnap") + val FEATURE_PRESENT_THROW = BooleanConfigParam("FeaturePresentThrow") + + val STICKERS_CONFIG_URL = StringConfigParam("StickersConfigUrl") + + // Time offset + val TIME_OFFSET = LongConfigParam("TimeOffset") + + val WEB_SCENES = WebConfig() + + // Array of params related to tracker + val ALL_PARAMS_TRACKER = arrayOf( + TIME_OFFSET, DISABLE_SANTA, DISABLE_CASTBUTTON, DISABLE_PHOTO + ) + + // Array of all String params + private val ALL_STRING_PARAMS = arrayOf(VIDEO_1, VIDEO_15, VIDEO_23) + + // Array of all Boolean params + private val ALL_BOOLEAN_PARAMS = arrayOf( + DISABLE_SANTA, DISABLE_CASTBUTTON, DISABLE_PHOTO, DISABLE_GUMBALLGAME, + FEATURE_GUMBALLGAME, DISABLE_JETPACKGAME, FEATURE_JETPACKGAME, + DISABLE_MEMORYGAME, FEATURE_MEMORYGAME, DISABLE_ROCKETGAME, + FEATURE_ROCKETGAME, DISABLE_DANCERGAME, FEATURE_DANCERGAME, + DISABLE_SWIMMINGGAME, FEATURE_SWIMMINGGAME, DISABLE_BMXGAME, + FEATURE_BMXGAME, DISABLE_RUNNINGGAME, FEATURE_RUNNINGGAME, + DISABLE_TENNISGAME, FEATURE_TENNISGAME, DISABLE_WATERPOLOGAME, + FEATURE_WATERPOLOGAME, DISABLE_CITY_QUIZ, FEATURE_CITY_QUIZ, + DISABLE_PRESENTQUEST, FEATURE_PRESENTQUEST, DISABLE_SANTA_SNAP, + FEATURE_SANTA_SNAP, DISABLE_PRESENT_THROW, FEATURE_PRESENT_THROW + ) + + // Array of all Long params + private val ALL_LONG_PARAMS = arrayOf( + SANTA_TAKEOFF, SANTA_ARRIVAL, UNLOCK_GUMBALL, UNLOCK_MEMORY, UNLOCK_JETPACK, + UNLOCK_ROCKET, UNLOCK_DANCER, UNLOCK_CITYQUIZ, UNLOCK_VIDEO_1, + UNLOCK_VIDEO_15, UNLOCK_VIDEO_23, TIME_OFFSET, UNLOCK_PRESENT_THROW + ) + + private const val DEFAULT_CACHE_EXPIRY_S = (60 * 12).toLong() // 5 requests / h + + private val CONFIG_SETTINGS = FirebaseRemoteConfigSettings.Builder() + .setDeveloperModeEnabled(BuildConfig.DEBUG) + .build() + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/config/ConfigParam.kt b/common/src/main/java/com/google/android/apps/santatracker/config/ConfigParam.kt new file mode 100644 index 000000000..2e3bbd797 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/config/ConfigParam.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.config + +/** Configuration value, shared between network config (Firebase) and local cache (Shared Prefs). */ +abstract class ConfigParam(val key: String) { + abstract fun getValue(config: Config): T +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/config/LongConfigParam.kt b/common/src/main/java/com/google/android/apps/santatracker/config/LongConfigParam.kt new file mode 100644 index 000000000..b69439d27 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/config/LongConfigParam.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.config + +/** Long config param. */ +class LongConfigParam(key: String) : ConfigParam(key) { + override fun getValue(config: Config): Long = config.firebaseRemoteConfig.getLong(key) +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/config/StringConfigParam.kt b/common/src/main/java/com/google/android/apps/santatracker/config/StringConfigParam.kt new file mode 100644 index 000000000..df48b8cbb --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/config/StringConfigParam.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.config + +/** String configuration value. */ +class StringConfigParam(key: String) : ConfigParam(key) { + override fun getValue(config: Config): String = config.firebaseRemoteConfig.getString(key) +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/config/WebConfig.kt b/common/src/main/java/com/google/android/apps/santatracker/config/WebConfig.kt new file mode 100644 index 000000000..0e21ef133 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/config/WebConfig.kt @@ -0,0 +1,89 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.config + +class WebConfig { + companion object { + const val WEBCONFIG = "WEBCONFIG" + const val AIRPORT = "AIRPORT" + const val BOATLOAD = "BOATLOAD" + const val CLAUSDRAWS = "CLAUSDRAWS" + const val CODEBOOGIE = "CODEBOOGIE" + const val CODELAB = "CODELAB" + const val ELFSKI = "ELFSKI" + const val GUMBALL = "GUMBALL" + const val JAMBAND = "JAMBAND" + const val PENGUINDASH = "PENGUINDASH" + const val PRESENTBOUNCE = "PRESENTBOUNCE" + const val PRESENTDROP = "PRESENTDROP" + const val RACER = "RACER" + const val RUNNER = "RUNNER" + const val SANTASEARCH = "SANTASEARCH" + const val SANTASELFIE = "SANTASELFIE" + const val SEASONOFGIVING = "SEASONOFGIVING" + const val SNOWBALL = "SNOWBALL" + const val SNOWFLAKE = "SNOWFLAKE" + const val SPEEDSKETCH = "SPEEDSKETCH" + const val WRAPBATTLE = "WRAPBATTLE" + const val ELFMAKER = "ELFMAKER" + } + + val SCENE_CONFIG = hashMapOf( + AIRPORT to WebConfigScene("WebAirport"), + BOATLOAD to WebConfigScene("WebBoatload"), + CLAUSDRAWS to WebConfigScene("WebClausdraws"), + CODEBOOGIE to WebConfigScene("WebCodeboogie"), + CODELAB to WebConfigScene("WebCodelab"), + ELFSKI to WebConfigScene("WebElfski"), + GUMBALL to WebConfigScene("WebGumball"), + JAMBAND to WebConfigScene("WebJamband"), + PENGUINDASH to WebConfigScene("WebPenguindash"), + PRESENTBOUNCE to WebConfigScene("WebPresentbounce"), + PRESENTDROP to WebConfigScene("WebPresentdrop"), + RACER to WebConfigScene("WebRacer"), + RUNNER to WebConfigScene("WebRunner"), + SANTASEARCH to WebConfigScene("WebSantasearch"), + SANTASELFIE to WebConfigScene("WebSantaselfie"), + SEASONOFGIVING to WebConfigScene("WebSeasonofgiving"), + SNOWBALL to WebConfigScene("WebSnowball"), + SNOWFLAKE to WebConfigScene("WebSnowflake"), + SPEEDSKETCH to WebConfigScene("WebSpeedsketch"), + WRAPBATTLE to WebConfigScene("WebWrapbattle"), + ELFMAKER to WebConfigScene("WebElfMaker") + ) +} + +class WebConfigScene( + featuredFlagName: String, + disabledFlagName: String, + landscapeFlagName: String, + urlFlagName: String, + cardImageUrlFlagName: String? = null +) { + constructor(prefix: String) : this( + featuredFlagName = "${prefix}Featured", + disabledFlagName = "${prefix}Disabled", + landscapeFlagName = "${prefix}Landscape", + urlFlagName = "${prefix}Url", + cardImageUrlFlagName = "${prefix}CardImageUrl" + ) + + val configFeatured = BooleanConfigParam(featuredFlagName) + val configDisabled = BooleanConfigParam(disabledFlagName) + val configLandscape = BooleanConfigParam(landscapeFlagName) + val configUrl = StringConfigParam(urlFlagName) + val configCardImageUrl = cardImageUrlFlagName?.let { StringConfigParam(it) } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/data/FeatureState.kt b/common/src/main/java/com/google/android/apps/santatracker/data/FeatureState.kt new file mode 100644 index 000000000..b1e94bbb8 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/data/FeatureState.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.data + +import com.google.android.apps.santatracker.config.Config + +/** State for non-video non-game feature flags. */ +data class FeatureState( + val santaDisabled: Boolean, + val castDisabled: Boolean, + val photoDisabled: Boolean +) + +fun featureStateFromConfig(config: Config) = FeatureState( + Config.DISABLE_SANTA.getValue(config), + Config.DISABLE_CASTBUTTON.getValue(config), + Config.DISABLE_PHOTO.getValue(config) +) + +fun Config.featureState() = featureStateFromConfig(this) \ No newline at end of file diff --git a/common/src/main/java/com/google/android/apps/santatracker/data/GameState.kt b/common/src/main/java/com/google/android/apps/santatracker/data/GameState.kt new file mode 100644 index 000000000..b1c0f2fd6 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/data/GameState.kt @@ -0,0 +1,83 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.data + +import com.google.android.apps.santatracker.config.Config + +/** Disabled state of each game. */ +data class GameState( + var disableGumballGame: Boolean = false, + var disableJetpackGame: Boolean = false, + var disableMemoryGame: Boolean = false, + var disableRocketGame: Boolean = false, + var disableDancerGame: Boolean = false, + var disableSwimmingGame: Boolean = false, + var disableBmxGame: Boolean = false, + var disableRunningGame: Boolean = false, + var disableTennisGame: Boolean = false, + var disableWaterpoloGame: Boolean = false, + var disableCityQuizGame: Boolean = false, + var disablePresentQuest: Boolean = false, + var disableSantaSnap: Boolean = false, + var disablePresentThrow: Boolean = false, + var featureGumballGame: Boolean = false, + var featureJetpackGame: Boolean = false, + var featureMemoryGame: Boolean = false, + var featureRocketGame: Boolean = false, + var featureDancerGame: Boolean = false, + var featureSwimmingGame: Boolean = false, + var featureBmxGame: Boolean = false, + var featureRunningGame: Boolean = false, + var featureTennisGame: Boolean = false, + var featureWaterpoloGame: Boolean = false, + var featureCityQuizGame: Boolean = false, + var featurePresentQuest: Boolean = false, + var featureSantaSnap: Boolean = false, + var featurePresentThrow: Boolean = false +) + +fun gameStateFromConfig(config: Config) = GameState( + disableGumballGame = Config.DISABLE_GUMBALLGAME.getValue(config), + disableJetpackGame = Config.DISABLE_JETPACKGAME.getValue(config), + disableMemoryGame = Config.DISABLE_MEMORYGAME.getValue(config), + disableRocketGame = Config.DISABLE_ROCKETGAME.getValue(config), + disableDancerGame = Config.DISABLE_DANCERGAME.getValue(config), + disableSwimmingGame = Config.DISABLE_SWIMMINGGAME.getValue(config), + disableBmxGame = Config.DISABLE_BMXGAME.getValue(config), + disableRunningGame = Config.DISABLE_RUNNINGGAME.getValue(config), + disableTennisGame = Config.DISABLE_TENNISGAME.getValue(config), + disableWaterpoloGame = Config.DISABLE_WATERPOLOGAME.getValue(config), + disableCityQuizGame = Config.DISABLE_CITY_QUIZ.getValue(config), + disablePresentQuest = Config.DISABLE_PRESENTQUEST.getValue(config), + disableSantaSnap = Config.DISABLE_SANTA_SNAP.getValue(config), + disablePresentThrow = Config.DISABLE_PRESENT_THROW.getValue(config), + featureGumballGame = Config.FEATURE_GUMBALLGAME.getValue(config), + featureJetpackGame = Config.FEATURE_JETPACKGAME.getValue(config), + featureMemoryGame = Config.FEATURE_MEMORYGAME.getValue(config), + featureRocketGame = Config.FEATURE_ROCKETGAME.getValue(config), + featureDancerGame = Config.FEATURE_DANCERGAME.getValue(config), + featureSwimmingGame = Config.FEATURE_SWIMMINGGAME.getValue(config), + featureBmxGame = Config.FEATURE_BMXGAME.getValue(config), + featureRunningGame = Config.FEATURE_RUNNINGGAME.getValue(config), + featureTennisGame = Config.FEATURE_TENNISGAME.getValue(config), + featureWaterpoloGame = Config.FEATURE_WATERPOLOGAME.getValue(config), + featureCityQuizGame = Config.FEATURE_CITY_QUIZ.getValue(config), + featurePresentQuest = Config.FEATURE_PRESENTQUEST.getValue(config), + featureSantaSnap = Config.FEATURE_SANTA_SNAP.getValue(config), + featurePresentThrow = Config.FEATURE_PRESENT_THROW.getValue(config) +) + +fun Config.gameState() = gameStateFromConfig(this) \ No newline at end of file diff --git a/common/src/main/java/com/google/android/apps/santatracker/data/SantaPreferences.kt b/common/src/main/java/com/google/android/apps/santatracker/data/SantaPreferences.kt new file mode 100644 index 000000000..4fc74899c --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/data/SantaPreferences.kt @@ -0,0 +1,57 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.data + +import android.annotation.SuppressLint +import android.content.Context + +/** Singleton that manages access to internal data stored as preferences. */ +@SuppressLint("CommitPrefEdits") +class SantaPreferences(context: Context) { + private val settings = context.getSharedPreferences(PREFERENCES_FILENAME, Context.MODE_PRIVATE) + + var offset: Long + get() = dateOffset + set(value) { + // We have to use commit() here so that the value is updated immediately + settings.edit().putLong(PREF_OFFSET, value).apply() + dateOffset = value + } + + var isMuted: Boolean = settings.getBoolean(PREF_MUTED, false) + set(value) { + settings.edit().putBoolean(PREF_MUTED, value).apply() + field = value + } + + fun toggleMuted() { + isMuted = !isMuted + } + + init { + dateOffset = settings.getLong(PREF_OFFSET, 0) + } + + companion object { + // Shared time offset this is used only for the debug build + private var dateOffset = 0L + + private const val PREFERENCES_FILENAME = "SantaTracker" + private const val PREF_OFFSET = "PREF_OFFSET" + private const val PREF_MUTED = "PREF_MUTED" + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/data/VideoState.kt b/common/src/main/java/com/google/android/apps/santatracker/data/VideoState.kt new file mode 100644 index 000000000..83a6319be --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/data/VideoState.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.data + +import com.google.android.apps.santatracker.config.Config + +/** Configuration for video URLs. */ +data class VideoState( + val video1: String? = null, + val video15: String? = null, + val video23: String? = null +) + +fun videoStateFromConfig(config: Config) = VideoState( + Config.VIDEO_1.getValue(config), + Config.VIDEO_15.getValue(config), + Config.VIDEO_23.getValue(config) +) + +fun Config.videoState() = videoStateFromConfig(this) diff --git a/common/src/main/java/com/google/android/apps/santatracker/data/WebSceneState.kt b/common/src/main/java/com/google/android/apps/santatracker/data/WebSceneState.kt new file mode 100644 index 000000000..6462a95c5 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/data/WebSceneState.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.data + +import com.google.android.apps.santatracker.config.Config + +data class WebSceneState(val scenes: Map = emptyMap()) { + data class WebScene( + val featured: Boolean, + val disabled: Boolean, + val landscape: Boolean, + val url: String, + val cardImageUrl: String? + ) +} + +fun webSceneStateFromConfig(config: Config) = WebSceneState( + Config.WEB_SCENES.SCENE_CONFIG.mapValues { (_, value) -> + WebSceneState.WebScene( + value.configFeatured.getValue(config), + value.configDisabled.getValue(config), + value.configLandscape.getValue(config), + value.configUrl.getValue(config), + value.configCardImageUrl?.getValue(config) + ) + } +) + +fun Config.webSceneState() = webSceneStateFromConfig(this) \ No newline at end of file diff --git a/common/src/main/java/com/google/android/apps/santatracker/games/FeatureLoadStateListener.kt b/common/src/main/java/com/google/android/apps/santatracker/games/FeatureLoadStateListener.kt new file mode 100644 index 000000000..03db54f92 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/games/FeatureLoadStateListener.kt @@ -0,0 +1,89 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.games + +import android.app.PendingIntent +import android.content.IntentSender +import com.google.android.apps.santatracker.util.SantaLog +import com.google.android.play.core.splitinstall.SplitInstallManager +import com.google.android.play.core.splitinstall.SplitInstallSessionState +import com.google.android.play.core.splitinstall.SplitInstallStateUpdatedListener +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.CANCELED +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.DOWNLOADING +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.FAILED +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.INSTALLED +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.INSTALLING +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.PENDING +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.REQUIRES_USER_CONFIRMATION +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus.UNKNOWN + +/** + * Listener for loading dynamic feature modules on demand. + */ +abstract class FeatureLoadStateListener : SplitInstallStateUpdatedListener { + + private var isRegistered = false + + fun register(manager: SplitInstallManager) { + manager.registerListener(this) + isRegistered = true + } + + fun unregister(manager: SplitInstallManager) { + if (isRegistered) { + manager.unregisterListener(this) + isRegistered = false + } + } + + override fun onStateUpdate(state: SplitInstallSessionState) { + SantaLog.d(TAG, "onStateUpdate. Status: ${state.status()}") + + when (state.status()) { + PENDING -> onPending() + REQUIRES_USER_CONFIRMATION -> requiresConfirmation(state) + DOWNLOADING -> onDownloading(state.bytesDownloaded(), state.totalBytesToDownload()) + INSTALLING -> onInstalling() + INSTALLED -> onInstalled() + UNKNOWN or FAILED -> onFailure() + CANCELED -> onCanceled() + } + } + + open fun onPending() = Unit + + private fun requiresConfirmation(state: SplitInstallSessionState) { + val resolutionIntent: PendingIntent = state.resolutionIntent() ?: return + onRequiresConfirmation(resolutionIntent.intentSender) + } + + abstract fun onRequiresConfirmation(intentSender: IntentSender) + + abstract fun onDownloading(bytesDownloaded: Long, totalBytesToDownload: Long) + + abstract fun onInstalling() + + open fun onInstalled() = Unit + + open fun onFailure() = Unit + + open fun onCanceled() = Unit + + companion object { + const val TAG = "FeatureLoadStateListener" + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/games/LoadingSceneView.kt b/common/src/main/java/com/google/android/apps/santatracker/games/LoadingSceneView.kt new file mode 100644 index 000000000..36cc808f7 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/games/LoadingSceneView.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.games + +import android.content.Context +import android.content.res.ColorStateList +import android.os.Build +import android.util.AttributeSet +import android.view.Gravity +import android.view.LayoutInflater +import android.widget.LinearLayout +import android.widget.ProgressBar +import com.google.android.apps.santatracker.common.R + +/** Animated loading screen with progress indicator. */ +class LoadingSceneView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { + + init { + + // Inflate custom layout + val inflater = LayoutInflater.from(context) + inflater.inflate(R.layout.layout_loading_screen, this, true) + + this.gravity = Gravity.CENTER_VERTICAL + this.setBackgroundColor(resources.getColor(R.color.loading_web_background_blue)) + this.orientation = LinearLayout.VERTICAL + + val progressBar = findViewById(R.id.progressbar) + if (Build.VERSION.SDK_INT >= 24) { + progressBar.indeterminateDrawable = resources.getDrawable(R.drawable.avd_loading_bar, context.theme) + } else { + progressBar.indeterminateTintList = ColorStateList.valueOf(resources.getColor(R.color.SantaWhite)) + } + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/games/OnDemandActivity.kt b/common/src/main/java/com/google/android/apps/santatracker/games/OnDemandActivity.kt new file mode 100644 index 000000000..21ae3e126 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/games/OnDemandActivity.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.games + +import android.content.Context +import androidx.appcompat.app.AppCompatActivity +import com.google.android.play.core.splitcompat.SplitCompat + +/** + * Base class for activities that are loaded within an onDemand module. + */ +abstract class OnDemandActivity : AppCompatActivity() { + + override fun attachBaseContext(newBase: Context?) { + super.attachBaseContext(newBase) + SplitCompat.install(this) + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/games/PlayGamesFragment.java b/common/src/main/java/com/google/android/apps/santatracker/games/PlayGamesFragment.java deleted file mode 100644 index ec38207c0..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/games/PlayGamesFragment.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.games; - -import android.app.Activity; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.IntentSender; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.util.Log; - -import com.google.android.apps.santatracker.common.BuildConfig; -import com.google.android.gms.common.ConnectionResult; -import com.google.android.gms.common.GoogleApiAvailability; -import com.google.android.gms.common.api.GoogleApiClient; -import com.google.android.gms.games.Games; - -/** - * Non-visible fragment to encapsulate Google Play Game Services logic. - */ -public class PlayGamesFragment extends Fragment implements - GoogleApiClient.ConnectionCallbacks, - GoogleApiClient.OnConnectionFailedListener{ - - private static final String TAG = "PlayGamesFragment"; - private static final String FRAGMENT_TAG = "PlayGamesFragment_Tag"; - - /** Key to store mIsResolving in SharedPreferences. **/ - private static final String KEY_IS_RESOLVING = "is_resolving"; - - /** Key to store mShouldResolve in SharedPreferences. **/ - private static final String KEY_SHOULD_RESOLVE = "should_resolve"; - - /** Request code used for resolving Games sign-in failures. **/ - private static final int RC_GAMES = 9001; - - /** Should debug-level log messages be printed? **/ - private boolean mDebugLogEnabled = false; - - /** GoogleApiClient used for interacting with Play Game Services. **/ - private GoogleApiClient mGamesApiClient; - - /** Is a resolution already in progress? **/ - private boolean mIsResolving = false; - - /** Should connection failures be automatically resolved? **/ - private boolean mShouldResolve = false; - - /** Listener for sign-in events. **/ - private SignInListener mListener; - - /** - * Get or create an instance of the Fragment attached to an Activity. - * @param activity FragmentActivity to host the Fragment. - * @param listener SignInListener to respond to changes in sign-in state. - * @return instance of PlayGamesFragment. - */ - public static PlayGamesFragment getInstance(FragmentActivity activity, - SignInListener listener) { - - FragmentManager fm = activity.getSupportFragmentManager(); - FragmentTransaction ft = fm.beginTransaction(); - - PlayGamesFragment result = null; - - Fragment fragment = fm.findFragmentByTag(FRAGMENT_TAG); - if (fragment == null) { - result = new PlayGamesFragment(); - ft.add(result, FRAGMENT_TAG).disallowAddToBackStack().commit(); - } else { - result = (PlayGamesFragment) fragment; - } - - result.setListener(listener); - return result; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // Restore state of in-progress sign-in in the case of rotation or other - // Activity recreation. - if (savedInstanceState != null) { - mIsResolving = savedInstanceState.getBoolean(KEY_IS_RESOLVING, false); - mShouldResolve = savedInstanceState.getBoolean(KEY_SHOULD_RESOLVE, false); - } - } - - @Override - public void onStart() { - super.onStart(); - mGamesApiClient.connect(); - } - - @Override - public void onStop() { - super.onStop(); - mGamesApiClient.disconnect(); - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - // Only log debug messages when enabled - mDebugLogEnabled = BuildConfig.DEBUG; - - // Api client for interacting with Google Play Games - mGamesApiClient = new GoogleApiClient.Builder(getActivity()) - .addConnectionCallbacks(this) - .addOnConnectionFailedListener(this) - .addApi(Games.API, Games.GamesOptions.builder().build()) - .addScope(Games.SCOPE_GAMES) - .build(); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == RC_GAMES) { - debugLog("onActivityResult:RC_GAMES:" + resultCode + ":" + data); - - // If the error resolution was not successful we should not resolve further. - if (resultCode != Activity.RESULT_OK) { - mShouldResolve = false; - } - - mIsResolving = false; - mGamesApiClient.connect(); - } - } - - @Override - public void onConnected(Bundle bundle) { - debugLog("onConnected:" + bundle); - mShouldResolve = false; - mListener.onSignInSucceeded(); - } - - @Override - public void onConnectionSuspended(int i) { - debugLog("onConnectionSuspended:" + i); - } - - @Override - public void onConnectionFailed(ConnectionResult connectionResult) { - debugLog("onConnectionFailed:" + connectionResult); - if (!mIsResolving && mShouldResolve) { - if (connectionResult.hasResolution()) { - try { - connectionResult.startResolutionForResult(getActivity(), RC_GAMES); - mIsResolving = true; - } catch (IntentSender.SendIntentException e) { - debugLog("onConnectionFailed:SendIntentException:" + e.getMessage()); - mIsResolving = false; - mGamesApiClient.connect(); - } - } else { - // Could not resolve the connection result, show the user an - // error dialog. - showErrorDialog(connectionResult); - } - } else { - // Show the signed-out UI - mListener.onSignInFailed(); - } - } - - /** - * Show error dialog for Google Play Services errors that cannot be resolved. - * @param connectionResult the connection result from onConnectionFailed. - */ - private void showErrorDialog(ConnectionResult connectionResult) { - GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); - int resultCode = apiAvailability.isGooglePlayServicesAvailable(getActivity()); - - if (resultCode != ConnectionResult.SUCCESS) { - if (apiAvailability.isUserResolvableError(resultCode)) { - apiAvailability.getErrorDialog(getActivity(), resultCode, RC_GAMES, - new DialogInterface.OnCancelListener() { - @Override - public void onCancel(DialogInterface dialog) { - mShouldResolve = false; - mListener.onSignInFailed(); - } - }).show(); - } else { - String errorString = apiAvailability.getErrorString(resultCode); - debugLog("Google Play Services Error:" + connectionResult + ":" + errorString);; - - mShouldResolve = false; - mListener.onSignInFailed(); - } - } - } - - public boolean isSignedIn() { - return (mGamesApiClient != null && mGamesApiClient.isConnected()); - } - - public void beginUserInitiatedSignIn() { - mShouldResolve = true; - mGamesApiClient.connect(); - } - - public GoogleApiClient getGamesApiClient() { - return mGamesApiClient; - } - - private void debugLog(String message) { - if (!mDebugLogEnabled) { - return; - } - - Log.d(TAG, message); - } - - private void setListener(SignInListener listener) { - mListener = listener; - } - -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/games/PlayGamesFragment.kt b/common/src/main/java/com/google/android/apps/santatracker/games/PlayGamesFragment.kt new file mode 100644 index 000000000..a9e0c8eed --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/games/PlayGamesFragment.kt @@ -0,0 +1,228 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.games + +import android.app.Activity +import android.content.Intent +import android.content.IntentSender +import android.os.Bundle +import androidx.fragment.app.Fragment +import com.google.android.apps.santatracker.common.BuildConfig +import com.google.android.apps.santatracker.util.SantaLog +import com.google.android.gms.common.ConnectionResult +import com.google.android.gms.common.GoogleApiAvailability +import com.google.android.gms.common.api.GoogleApiClient +import com.google.android.gms.games.Games + +/** Non-visible fragment to encapsulate Google Play Game Services logic. */ +class PlayGamesFragment : Fragment(), GoogleApiClient.ConnectionCallbacks, + GoogleApiClient.OnConnectionFailedListener { + + /** Should debug-level log messages be printed? */ + private var debugLogEnabled = false + + /** GoogleApiClient used for interacting with Play Game Services. */ + var gamesApiClient: GoogleApiClient? = null + + /** Is a resolution already in progress? */ + private var isResolving = false + + /** Should connection failures be automatically resolved? */ + private var shouldResolve = false + + /** Listener for sign-in events. */ + private var listener: SignInListener? = null + + val isSignedIn: Boolean + get() = gamesApiClient?.isConnected == true + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // Restore state of in-progress sign-in in the case of rotation or other + // Activity recreation. + if (savedInstanceState != null) { + isResolving = savedInstanceState.getBoolean(KEY_IS_RESOLVING, false) + shouldResolve = savedInstanceState.getBoolean(KEY_SHOULD_RESOLVE, false) + } + } + + override fun onStart() { + super.onStart() + gamesApiClient?.connect() + } + + override fun onStop() { + super.onStop() + gamesApiClient?.disconnect() + } + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + + // Only log debug messages when enabled + debugLogEnabled = BuildConfig.DEBUG + + val activity = activity ?: return + // Api client for interacting with Google Play Games + gamesApiClient = GoogleApiClient.Builder(activity) + .addConnectionCallbacks(this) + .addOnConnectionFailedListener(this) + .addApi(Games.API, Games.GamesOptions.builder().build()) + .addScope(Games.SCOPE_GAMES) + .build() + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (requestCode == RC_GAMES) { + debugLog("onActivityResult:RC_GAMES:$resultCode:$data") + + // If the error resolution was not successful we should not resolve further. + if (resultCode != Activity.RESULT_OK) { + shouldResolve = false + } + + isResolving = false + gamesApiClient?.connect() + } + } + + override fun onConnected(bundle: Bundle?) { + debugLog("onConnected $bundle") + shouldResolve = false + listener?.onSignInSucceeded() + } + + override fun onConnectionSuspended(i: Int) { + debugLog("onConnectionSuspended:$i") + } + + override fun onConnectionFailed(connectionResult: ConnectionResult) { + debugLog("onConnectionFailed:$connectionResult") + if (!isResolving && shouldResolve) { + if (connectionResult.hasResolution()) { + try { + connectionResult.startResolutionForResult(activity, RC_GAMES) + isResolving = true + } catch (e: IntentSender.SendIntentException) { + debugLog("onConnectionFailed:SendIntentException:" + e.message) + isResolving = false + gamesApiClient?.connect() + } + } else { + // Could not resolve the connection result, show the user an + // error dialog. + showErrorDialog(connectionResult) + } + } else { + // Show the signed-out UI + listener?.onSignInFailed() + } + } + + /** + * Show error dialog for Google Play Services errors that cannot be resolved. + * + * @param connectionResult the connection result from onConnectionFailed. + */ + private fun showErrorDialog(connectionResult: ConnectionResult) { + val apiAvailability = GoogleApiAvailability.getInstance() + val resultCode = apiAvailability.isGooglePlayServicesAvailable(activity) + + if (resultCode != ConnectionResult.SUCCESS) { + if (apiAvailability.isUserResolvableError(resultCode)) { + apiAvailability + .getErrorDialog( + activity, + resultCode, + RC_GAMES + ) { + shouldResolve = false + listener?.onSignInFailed() + } + .show() + } else { + val errorString = apiAvailability.getErrorString(resultCode) + debugLog("Google Play Services Error:$connectionResult:$errorString") + + shouldResolve = false + listener?.onSignInFailed() + } + } + } + + fun beginUserInitiatedSignIn() { + shouldResolve = true + gamesApiClient?.connect() + } + + private fun debugLog(message: String) { + if (!debugLogEnabled) { + return + } + + SantaLog.d(TAG, message) + } + + private fun setListener(listener: SignInListener) { + this.listener = listener + } + + companion object { + + private const val TAG = "PlayGamesFragment" + private const val FRAGMENT_TAG = "PlayGamesFragment_Tag" + + /** Key to store isResolving in SharedPreferences. */ + private const val KEY_IS_RESOLVING = "is_resolving" + + /** Key to store shouldResolve in SharedPreferences. */ + private const val KEY_SHOULD_RESOLVE = "should_resolve" + + /** Request code used for resolving Games sign-in failures. */ + private const val RC_GAMES = 9001 + + /** + * Get or create an instance of the Fragment attached to an Activity. + * + * @param activity FragmentActivity to host the Fragment. + * @param listener SignInListener to respond to changes in sign-in state. + * @return instance of PlayGamesFragment. + */ + @JvmStatic + fun getInstance( + activity: androidx.fragment.app.FragmentActivity, + listener: SignInListener + ): PlayGamesFragment? { + + val fm = activity.supportFragmentManager + val ft = fm.beginTransaction() + + val result: PlayGamesFragment? + val fragment = fm.findFragmentByTag(FRAGMENT_TAG) + if (fragment == null) { + result = PlayGamesFragment() + ft.add(result, FRAGMENT_TAG).disallowAddToBackStack().commit() + } else { + result = fragment as PlayGamesFragment? + } + + result?.setListener(listener) + return result + } + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/games/SignInListener.java b/common/src/main/java/com/google/android/apps/santatracker/games/SignInListener.java deleted file mode 100644 index c546f9517..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/games/SignInListener.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.games; - -/** - * Interface for Activities that observe sign-in state, normally used with {@link GameActivity}. - */ -public interface SignInListener { - - /** - * Called when sign-in fails. As a result, a "Sign-In" button can be shown to the user. - * Not all calls to this method indicate an error, sign-in is expected to fail when the - * user has never signed in before. - */ - void onSignInFailed(); - - /** - * Called when sign-in succeeds and the application can begin to take action on behalf of - * the user. - */ - void onSignInSucceeded(); - -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/games/SignInListener.kt b/common/src/main/java/com/google/android/apps/santatracker/games/SignInListener.kt new file mode 100644 index 000000000..0a78a159f --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/games/SignInListener.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.games + +/** Interface for Activities that observe sign-in state, normally used with [GameActivity]. */ +interface SignInListener { + + /** + * Called when sign-in fails. As a result, a "Sign-In" button can be shown to the user. Not all + * calls to this method indicate an error, sign-in is expected to fail when the user has never + * signed in before. + */ + fun onSignInFailed() + + /** + * Called when sign-in succeeds and the application can begin to take action on behalf of the + * user. + */ + fun onSignInSucceeded() +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/games/SplashActivity.java b/common/src/main/java/com/google/android/apps/santatracker/games/SplashActivity.java deleted file mode 100644 index c09e3e5f7..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/games/SplashActivity.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.google.android.apps.santatracker.games; - -import android.app.UiModeManager; -import android.content.Context; -import android.content.Intent; -import android.content.res.Configuration; -import android.graphics.Point; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.support.annotation.DrawableRes; -import android.support.annotation.StringRes; -import android.support.v4.content.ContextCompat; -import android.support.v7.app.AppCompatActivity; -import android.view.Display; -import android.view.Surface; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.ImageView; -import android.widget.TextView; - -import com.google.android.apps.santatracker.common.R; -import com.google.android.apps.santatracker.util.FontHelper; -import com.google.android.apps.santatracker.util.ImmersiveModeHelper; - -/** - * Splash screen for games. The splash screen rotates at runtime to match the orientation of the game - * that will be launched. This makes launching the splash screen jank-free from any orientation. - */ -public class SplashActivity extends AppCompatActivity { - - public static final int DELAY_MILLIS = 1000; - - private static final String TAG = "SplashActivity"; - private static final String EXTRA_SPLASH_IMAGE_ID = "extra_splash_image_id"; - private static final String EXTRA_SPLASH_TITLE_ID = "extra_splash_title_id"; - private static final String EXTRA_GAME_CLASS = "extra_game_class"; - private static final String EXTRA_LANDSCAPE = "extra_landscape"; - - private Handler mHandler = new Handler(); - - private Drawable mSplashImage; - private String mSplashTitle; - - /** - * Get an intent to launch a splash screen. - * @param context launching context. - * @param splashImageId resource ID for splash image. - * @param splashTitleId resource ID for splash title. - * @param isLandscape {@code true} if the game target is landscape only. - * @param classToLaunch class of the game to launch. - */ - public static Intent getIntent(Context context, - @DrawableRes int splashImageId, - @StringRes int splashTitleId, - boolean isLandscape, - Class classToLaunch) { - - Intent intent = new Intent(context, SplashActivity.class); - intent.putExtra(EXTRA_SPLASH_IMAGE_ID, splashImageId); - intent.putExtra(EXTRA_SPLASH_TITLE_ID, splashTitleId); - intent.putExtra(EXTRA_LANDSCAPE, isLandscape); - intent.putExtra(EXTRA_GAME_CLASS, classToLaunch); - - return intent; - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_splash); - - // Immersive mode (to hide nav). - ImmersiveModeHelper.setImmersiveSticky(getWindow()); - - // Get Views - ImageView splashImageView = (ImageView) findViewById(R.id.splash_image); - TextView splashTitleView = (TextView) findViewById(R.id.splash_title); - - // Set Image - mSplashImage = ContextCompat.getDrawable(this, getIntent().getIntExtra(EXTRA_SPLASH_IMAGE_ID, -1)); - if (mSplashImage != null) { - splashImageView.setImageDrawable(mSplashImage); - } - - // Set Title - mSplashTitle = getString(getIntent().getIntExtra(EXTRA_SPLASH_TITLE_ID, -1)); - splashTitleView.setText(mSplashTitle); - - // Make text "Lobster" font - FontHelper.makeLobster(splashTitleView); - - // Start new activity in 1000ms - final Class classToLaunch = (Class) getIntent().getSerializableExtra(EXTRA_GAME_CLASS); - mHandler.postDelayed(new Runnable() { - @Override - public void run() { - startActivity(new Intent(SplashActivity.this, classToLaunch)); - finish(); - } - }, DELAY_MILLIS); - } - - @Override - protected void onStart() { - super.onStart(); - - // Orientation - boolean gameIsLandscape = getIntent().getBooleanExtra(EXTRA_LANDSCAPE, false); - boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; - Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); - int rotation = display.getRotation(); - - // Figure out how many degrees to rotate - // Landscape always wants to be at 90degrees, portrait always wants to be at 0degrees - float degreesToRotate = 0f; - if (rotation == Surface.ROTATION_0) { - degreesToRotate = gameIsLandscape && !isLandscape? 90.0f : 0.0f; - } else if (rotation == Surface.ROTATION_90) { - degreesToRotate = gameIsLandscape && isLandscape? 0f : -90f; - } else if (rotation == Surface.ROTATION_180) { - degreesToRotate = gameIsLandscape && !isLandscape? -90f : -180f; - } else if (rotation == Surface.ROTATION_270) { - degreesToRotate = gameIsLandscape && isLandscape? -180f : -270f; - } - - // On a TV, should always be 0 - if (isRunningOnTV()) { - degreesToRotate = 0f; - } - - // Rotate, if necessary - if (degreesToRotate != 0) { - Point size = new Point(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - display.getRealSize(size); - } else { - display.getSize(size); - } - int w = size.x; - int h = size.y; - - View mainLayout = findViewById(R.id.splash_layout); - mainLayout.setRotation(degreesToRotate); - mainLayout.setTranslationX((w - h) / 2); - mainLayout.setTranslationY((h - w) / 2); - - ViewGroup.LayoutParams lp = mainLayout.getLayoutParams(); - lp.height = w; - lp.width = h; - - mainLayout.requestLayout(); - } - } - - private boolean isRunningOnTV() { - UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE); - return uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION; - } - - @Override - protected void onStop() { - super.onStop(); - mHandler.removeCallbacksAndMessages(null); - } -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/invites/AppInvitesFragment.java b/common/src/main/java/com/google/android/apps/santatracker/invites/AppInvitesFragment.java deleted file mode 100644 index fb78f9c26..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/invites/AppInvitesFragment.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.invites; - -import android.app.Activity; -import android.content.ActivityNotFoundException; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.util.Log; - -import com.google.android.apps.santatracker.common.R; -import com.google.android.apps.santatracker.util.MeasurementManager; -import com.google.android.gms.appinvite.AppInvite; -import com.google.android.gms.appinvite.AppInviteInvitation; -import com.google.android.gms.appinvite.AppInviteInvitationResult; -import com.google.android.gms.appinvite.AppInviteReferral; -import com.google.android.gms.common.ConnectionResult; -import com.google.android.gms.common.api.GoogleApiClient; -import com.google.android.gms.common.api.ResultCallback; -import com.google.firebase.analytics.FirebaseAnalytics; - -public class AppInvitesFragment extends Fragment implements - GoogleApiClient.OnConnectionFailedListener { - - private static final String TAG = "AppInvitesFragment"; - private static final String FRAGMENT_TAG = "AppInvitesFragment"; - private static final int AUTOMANAGE_ID = 107; - private static final int RC_INVITE = 9007; - - public static final Uri BASE_URI = Uri.parse("https://google.com/santatracker/android/"); - - private GoogleApiClient mGoogleApiClient; - private FirebaseAnalytics mMeasurement; - - public interface GetInvitationCallback { - void onInvitation(String invitationId, String deepLink); - } - - public static AppInvitesFragment getInstance(FragmentActivity activity) { - - FragmentManager fm = activity.getSupportFragmentManager(); - FragmentTransaction ft = fm.beginTransaction(); - - AppInvitesFragment result = null; - - Fragment fragment = fm.findFragmentByTag(FRAGMENT_TAG); - if (fragment == null) { - result = new AppInvitesFragment(); - ft.add(result, FRAGMENT_TAG).disallowAddToBackStack().commit(); - } else { - result = (AppInvitesFragment) fragment; - } - - return result; - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - // Initialize app measurement. - mMeasurement = FirebaseAnalytics.getInstance(getActivity()); - - // Api client for AppInvites. - mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) - .addOnConnectionFailedListener(this) - .enableAutoManage(getActivity(), AUTOMANAGE_ID, this) - .addApi(AppInvite.API) - .build(); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - if (requestCode == RC_INVITE) { - String[] ids = AppInviteInvitation.getInvitationIds(resultCode, data); - Log.d(TAG, "onActivityResult:" + ids); - } - } - - @Override - public void onConnectionFailed(ConnectionResult connectionResult) { - Log.w(TAG, "onConnectionFailed:" + connectionResult); - } - - /** - * Send an invite with a deep link into a game. - * @param gameName a human-readable name for the game, to be displayed in the invitation UI. - * @param gameId an identifier for the game to be appended to - * http://google.com/santatracker/android/. The game should be a registered - * handler for this URL in the Android Manifest. - * @param score the inviting user's game score, which will be pre-populated in the - * invitation message. - */ - public void sendGameInvite(String gameName, String gameId, int score) { - Uri uri = BASE_URI.buildUpon() - .appendPath(gameId) - .appendQueryParameter("score", Integer.toString(score)) - .build(); - - sendInvite(getString(R.string.invite_message_game_fmt, score, gameName), uri); - MeasurementManager.recordInvitationSent(mMeasurement, "game", uri.toString()); - - } - - public void sendGenericInvite() { - Uri uri = BASE_URI; - sendInvite(getString(R.string.invite_message_generic), uri); - MeasurementManager.recordInvitationSent(mMeasurement, "generic", uri.toString()); - } - - public void sendInvite(String message, Uri uri) { - // If the message is too long, just cut it short and add ellipses. This is something that - // only occurs in some translations and we do not have a better mitigation method. The - // alternative is an ugly IllegalArgumentException from the builder. - int maxLength = AppInviteInvitation.IntentBuilder.MAX_MESSAGE_LENGTH; - if (message.length() > maxLength) { - String suffix = "..."; - String prefix = message.substring(0, maxLength - suffix.length()); - - message = prefix + suffix; - } - - Intent inviteIntent = new AppInviteInvitation.IntentBuilder(getString(R.string.invite_title)) - .setMessage(message) - .setDeepLink(uri) - .build(); - - startActivityForResult(inviteIntent, RC_INVITE); - } - - public void getInvite(final GetInvitationCallback callback, final boolean launchDeepLink) { - // Using "null, false" as arguments here to avoid a known memory leak issue in - // AppInvites. Should be fixed in Google Play services v10.4.0. - final Activity activity = getActivity(); - AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, null, false) - .setResultCallback(new ResultCallback() { - @Override - public void onResult(AppInviteInvitationResult appInviteInvitationResult) { - Log.d(TAG, "getInvite:" + appInviteInvitationResult.getStatus()); - - if (callback != null && appInviteInvitationResult.getStatus().isSuccess()) { - // Report the callback. - Intent intent = appInviteInvitationResult.getInvitationIntent(); - String invitiationId = AppInviteReferral.getInvitationId(intent); - String deepLink = AppInviteReferral.getDeepLink(intent); - callback.onInvitation(invitiationId, deepLink); - - // Record invitation receipt event. - MeasurementManager.recordInvitationReceived(mMeasurement, deepLink); - - // Launch the deep link (see above note on why we don't do this - // automatically) - if (launchDeepLink) { - try { - activity.startActivity(intent); - } catch (ActivityNotFoundException e) { - Log.w(TAG, "No handler for deep link", e); - } - } - } - - } - }); - } -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/invites/AppInvitesFragment.kt b/common/src/main/java/com/google/android/apps/santatracker/invites/AppInvitesFragment.kt new file mode 100644 index 000000000..dc2df98b7 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/invites/AppInvitesFragment.kt @@ -0,0 +1,180 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.invites + +import android.content.ActivityNotFoundException +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import com.google.android.apps.santatracker.common.R +import com.google.android.apps.santatracker.util.MeasurementManager +import com.google.android.apps.santatracker.util.SantaLog +import com.google.android.gms.appinvite.AppInvite +import com.google.android.gms.appinvite.AppInviteInvitation +import com.google.android.gms.appinvite.AppInviteReferral +import com.google.android.gms.common.ConnectionResult +import com.google.android.gms.common.api.GoogleApiClient +import com.google.firebase.analytics.FirebaseAnalytics + +class AppInvitesFragment : Fragment(), GoogleApiClient.OnConnectionFailedListener { + + private lateinit var googleApiClient: GoogleApiClient + private lateinit var firebaseAnalytics: FirebaseAnalytics + + interface GetInvitationCallback { + fun onInvitation(invitationId: String, deepLink: String) + } + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + + val activity = activity ?: return + + // Initialize app measurement. + firebaseAnalytics = FirebaseAnalytics.getInstance(activity) + + // Api client for AppInvites. + googleApiClient = GoogleApiClient.Builder(activity) + .addOnConnectionFailedListener(this) + .enableAutoManage(activity, AUTOMANAGE_ID, this) + .addApi(AppInvite.API) + .build() + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + + if (requestCode == RC_INVITE && data != null) { + val ids = AppInviteInvitation.getInvitationIds(resultCode, data) + SantaLog.d(TAG, "onActivityResult:$ids") + } + } + + override fun onConnectionFailed(connectionResult: ConnectionResult) { + SantaLog.w(TAG, "onConnectionFailed:$connectionResult") + } + + /** + * Send an invite with a deep link into a game. + * + * @param gameName a human-readable name for the game, to be displayed in the invitation UI. + * @param gameId an identifier for the game to be appended to + * http://google.com/santatracker/android/. The game should be a registered handler for this + * URL in the Android Manifest. + * @param score the inviting user's game score, which will be pre-populated in the invitation + * message. + */ + fun sendGameInvite(gameName: String, gameId: String, score: Int) { + val uri = BASE_URI.buildUpon() + .appendPath(gameId) + .appendQueryParameter("score", Integer.toString(score)) + .build() + + sendInvite(getString(R.string.invite_message_game_fmt, score, gameName), uri) + MeasurementManager.recordInvitationSent(firebaseAnalytics, "game", uri.toString()) + } + + fun sendGenericInvite() { + val uri = BASE_URI + sendInvite(getString(R.string.invite_message_generic), uri) + MeasurementManager.recordInvitationSent(firebaseAnalytics, "generic", uri.toString()) + } + + private fun sendInvite(message: String, uri: Uri) { + var message = message + // If the message is too long, just cut it short and add ellipses. This is something that + // only occurs in some translations and we do not have a better mitigation method. The + // alternative is an ugly IllegalArgumentException from the builder. + val maxLength = AppInviteInvitation.IntentBuilder.MAX_MESSAGE_LENGTH + if (message.length > maxLength) { + val suffix = "..." + val prefix = message.substring(0, maxLength - suffix.length) + + message = prefix + suffix + } + + val inviteIntent = AppInviteInvitation.IntentBuilder(getString(R.string.invite_title)) + .setMessage(message) + .setDeepLink(uri) + .build() + + startActivityForResult(inviteIntent, RC_INVITE) + } + + fun getInvite(callback: GetInvitationCallback?, launchDeepLink: Boolean) { + // Using "null, false" as arguments here to avoid a known memory leak issue in + // AppInvites. Should be fixed in Google Play services v10.4.0. + val activity = activity + AppInvite.AppInviteApi.getInvitation(googleApiClient, null, false) + .setResultCallback { appInviteInvitationResult -> + SantaLog.d(TAG, "getInvite:" + appInviteInvitationResult.status) + + if (callback != null && appInviteInvitationResult.status.isSuccess) { + // Report the callback. + val intent = appInviteInvitationResult.invitationIntent + val invitiationId = AppInviteReferral.getInvitationId(intent) + val deepLink = AppInviteReferral.getDeepLink(intent) + callback.onInvitation(invitiationId, deepLink) + + // Record invitation receipt event. + MeasurementManager.recordInvitationReceived( + firebaseAnalytics, deepLink) + + // Launch the deep link (see above note on why we don't do this + // automatically) + activity?.let { + if (launchDeepLink) { + try { + it.startActivity(intent) + } catch (e: ActivityNotFoundException) { + SantaLog.w(TAG, "No handler for deep link", e) + } + } + } + } + } + } + + companion object { + + private const val TAG = "AppInvitesFragment" + private const val FRAGMENT_TAG = "AppInvitesFragment" + private const val AUTOMANAGE_ID = 107 + private const val RC_INVITE = 9007 + + val BASE_URI: Uri = Uri.parse("https://google.com/santatracker/android/") + + @JvmStatic + fun getInstance(activity: FragmentActivity): AppInvitesFragment? { + + val fm = activity.supportFragmentManager + val ft = fm.beginTransaction() + + var result: AppInvitesFragment? + val fragment = fm.findFragmentByTag(FRAGMENT_TAG) + if (fragment == null) { + result = AppInvitesFragment() + ft.add(result, FRAGMENT_TAG).disallowAddToBackStack().commit() + } else { + result = fragment as AppInvitesFragment? + } + return result + } + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/AccessibilityUtil.kt b/common/src/main/java/com/google/android/apps/santatracker/util/AccessibilityUtil.kt new file mode 100644 index 000000000..3c9e3be9a --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/util/AccessibilityUtil.kt @@ -0,0 +1,63 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.util + +import android.content.Context +import android.view.View +import android.view.accessibility.AccessibilityEvent +import android.view.accessibility.AccessibilityManager +import androidx.core.view.accessibility.AccessibilityEventCompat + +/** Utility methods for accessibility support. */ +object AccessibilityUtil { + + /** Return true if the accessibility service or touch exploration are enabled. */ + @JvmStatic + fun isTouchAccessiblityEnabled(context: Context): Boolean { + val am = context.getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager + val isAccessibilityEnabled = am.isEnabled + val isTouchExplorationEnabled = am.isTouchExplorationEnabled + return isAccessibilityEnabled || isTouchExplorationEnabled + } + + /** + * Announce text through the AccessibilityManager for a view. + * + * @param text + * @param view + * @param manager + */ + @JvmStatic + fun announceText(text: String, view: View, manager: AccessibilityManager) { + // Only announce text if the accessibility service is enabled + if (!manager.isEnabled) { + return + } + + val event = AccessibilityEvent.obtain( + AccessibilityEventCompat.TYPE_VIEW_ACCESSIBILITY_FOCUSED) + event.text.add(text) + event.isEnabled = true + // Tie the event to the view + event.className = view.javaClass.name + event.packageName = view.context.packageName + event.setSource(view) + + // Send the announcement + manager.sendAccessibilityEvent(event) + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/AnalyticsManager.java b/common/src/main/java/com/google/android/apps/santatracker/util/AnalyticsManager.java deleted file mode 100644 index b1a6f5dc9..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/util/AnalyticsManager.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 2016 Google Inc. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.util; - -import android.content.Context; -import android.util.Log; - -import com.google.android.gms.analytics.GoogleAnalytics; -import com.google.android.gms.analytics.HitBuilders; -import com.google.android.gms.analytics.Tracker; -import com.google.android.apps.santatracker.common.R; - -/** - * Handles communication with Google Analytics. - * Based on implementation in iosched: com.google.samples.apps.iosched.util.AnalyticsManager - */ -public class AnalyticsManager { - - private static Context sAppContext = null; - private static Tracker mTracker; - - private final static String TAG = "AnalyticsManager"; - - public static synchronized void setTracker(Tracker tracker) { - mTracker = tracker; - } - - private static boolean canSend() { - return mTracker != null; - } - - /** - * Sends a screen view with the string resource loaded as its label. - */ - public static void sendScreenView(int resourceId) { - sendScreenView(getString(resourceId)); - } - - private static String getString(int id){ - if(sAppContext != null) { - return sAppContext.getString(id); - } - return null; - } - /** - * Sends a screen vie for a screen label. - */ - public static void sendScreenView(String screenName) { - if (canSend()) { - mTracker.setScreenName(screenName); - mTracker.send(new HitBuilders.AppViewBuilder().build()); - Log.d(TAG, "Screen View recorded: " + screenName); - } else { - Log.d(TAG, "Screen View NOT recorded (analytics disabled or not ready)."); - } - } - - /** - * Sends an event to the tracker with string resources loaded as parameters. - */ - public static void sendEvent(int category, int action, int label, long value) { - sendEvent(getString(category), getString(action), - getString(label), value); - } - - /** - * Sends an event to the tracker with string resources loaded as parameters. - */ - public static void sendEvent(int category, int action) { - sendEvent(getString(category), getString(action)); - } - - /** - * Sends an event to the tracker with string resources loaded as parameters. - */ - public static void sendEvent(int category, int action, String label) { - sendEvent(getString(category), getString(action), label); - } - - public static void sendEvent(String category, String action) { - if (canSend()) { - mTracker.send(new HitBuilders.EventBuilder(category,action).build()); - - Log.d(TAG, "Event recorded:"); - Log.d(TAG, "\tCategory: " + category); - Log.d(TAG, "\tAction: " + action); - } else { - Log.d(TAG, "Analytics event ignored (analytics disabled or not ready)."); - } - } - - public static void sendEvent(String category, String action, String label, long value) { - if (canSend()) { - mTracker.send(new HitBuilders.EventBuilder() - .setCategory(category) - .setAction(action) - .setLabel(label) - .setValue(value) - .build()); - - Log.d(TAG, "Event recorded:"); - Log.d(TAG, "\tCategory: " + category); - Log.d(TAG, "\tAction: " + action); - Log.d(TAG, "\tLabel: " + label); - Log.d(TAG, "\tValue: " + value); - } else { - Log.d(TAG, "Analytics event ignored (analytics disabled or not ready)."); - } - } - - /** - * Sends an event to the tracker with string resources loaded as parameters. - */ - public static void sendEvent(int category, int action, int label) { - sendEvent(getString(category), getString(action), - getString(label)); - } - - public static void sendEvent(String category, String action, String label) { - sendEvent(category, action, label, 0); - } - - public Tracker getTracker() { - return mTracker; - } - - public static synchronized void initializeAnalyticsTracker(Context context) { - // To avoid Activity life cycle related memory leaks, assigning the application context - sAppContext = context.getApplicationContext(); - if (mTracker == null) { - GoogleAnalytics analytics = GoogleAnalytics.getInstance(context); - mTracker = analytics.newTracker(R.xml.config_analytics_tracker); - Log.d(TAG, "Analytics tracker initialised."); - } - } -} \ No newline at end of file diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/FontHelper.java b/common/src/main/java/com/google/android/apps/santatracker/util/FontHelper.java deleted file mode 100644 index ed851289a..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/util/FontHelper.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.google.android.apps.santatracker.util; - -import android.graphics.Typeface; -import android.os.Build; -import android.widget.TextView; - -/** - * Helper to apply the "Santa" font to text - */ -public class FontHelper { - - private static Typeface sTypeface; - - public static void makeLobster(TextView textView) { - makeLobster(textView, true); - } - - public static void makeLobster(TextView textView, boolean italic) { - if (sTypeface == null) { - sTypeface = Typeface.createFromAsset(textView.getContext().getAssets(), - "Lobster-Regular.otf"); - } - - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) { - textView.setTypeface(sTypeface); - } else if (italic) { - textView.setTypeface(sTypeface, Typeface.ITALIC); - } else { - textView.setTypeface(sTypeface, Typeface.NORMAL); - } - } - -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/ImmersiveModeHelper.java b/common/src/main/java/com/google/android/apps/santatracker/util/ImmersiveModeHelper.java deleted file mode 100644 index 34f6ff240..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/util/ImmersiveModeHelper.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.util; - -import android.annotation.TargetApi; -import android.os.Build; -import android.util.Log; -import android.view.View; -import android.view.Window; - -public class ImmersiveModeHelper { - - private static final String TAG = ImmersiveModeHelper.class - .getSimpleName(); - - @TargetApi(Build.VERSION_CODES.KITKAT) - public static void installSystemUiVisibilityChangeListener(final Window w) { - View view = w.getDecorView(); - view.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { - @Override - public void onSystemUiVisibilityChange(int visibility) { - Log.d(TAG, "setOnSystemUiVisibilityChangeListener: visibility=" + visibility); - setImmersiveSticky(w); - } - }); - } - - @TargetApi(Build.VERSION_CODES.KITKAT) - public static void setImmersiveSticky(Window w) { - w.getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE | - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | - View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_FULLSCREEN | - View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); - - } - - @TargetApi(Build.VERSION_CODES.KITKAT) - public static void setImmersiveStickyWithActionBar(Window w) { - w.getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | - View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_FULLSCREEN | - View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); - - } -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/ImmersiveModeHelper.kt b/common/src/main/java/com/google/android/apps/santatracker/util/ImmersiveModeHelper.kt new file mode 100644 index 000000000..3c9f1bb4a --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/util/ImmersiveModeHelper.kt @@ -0,0 +1,60 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.util + +import android.annotation.TargetApi +import android.os.Build +import android.view.View +import android.view.Window + +object ImmersiveModeHelper { + + private val TAG = ImmersiveModeHelper::class.java.simpleName + + @TargetApi(Build.VERSION_CODES.KITKAT) + @JvmStatic + fun installSystemUiVisibilityChangeListener(w: Window) { + val view = w.decorView + view.setOnSystemUiVisibilityChangeListener { visibility -> + SantaLog.d( + TAG, + "setOnSystemUiVisibilityChangeListener: visibility=$visibility") + setImmersiveSticky(w) + } + } + + @TargetApi(Build.VERSION_CODES.KITKAT) + @JvmStatic + fun setImmersiveSticky(w: Window) { + w.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE + or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + or View.SYSTEM_UI_FLAG_FULLSCREEN + or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) + } + + @TargetApi(Build.VERSION_CODES.KITKAT) + @JvmStatic + fun setImmersiveStickyWithActionBar(w: Window) { + w.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + or View.SYSTEM_UI_FLAG_FULLSCREEN + or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/MapHelper.java b/common/src/main/java/com/google/android/apps/santatracker/util/MapHelper.java deleted file mode 100644 index 3408ac9c5..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/util/MapHelper.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.google.android.apps.santatracker.util; - -import android.util.Log; - -import com.google.android.gms.maps.SupportMapFragment; - -public class MapHelper { - - private static final String TAG = MapHelper.class.getSimpleName(); - - /** - * Calculate a valid padding for a map's markers. Using hard coded padding can be problematic - * when device is small, so using a padding based on the size of the map view would improve results. - * - * @param supportMapFragment The map used to determine padding. - * @return A valid padding. - */ - public static int getMapPadding(SupportMapFragment supportMapFragment) { - int height = supportMapFragment.getView().getHeight(); - int width = supportMapFragment.getView().getWidth(); - double factor = 0.3; - double padding = height < width ? height * factor : width * factor; - Log.d(TAG, "padding used: " + padding); - return (int) padding; - } - -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/MapHelper.kt b/common/src/main/java/com/google/android/apps/santatracker/util/MapHelper.kt new file mode 100644 index 000000000..9bffbee68 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/util/MapHelper.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.util + +import com.google.android.gms.maps.SupportMapFragment + +object MapHelper { + + private val TAG = MapHelper::class.java.simpleName + + /** + * Calculate a valid padding for a map's markers. Using hard coded padding can be problematic + * when device is small, so using a padding based on the size of the map view would improve + * results. + * + * @param supportMapFragment The map used to determine padding. + * @return A valid padding. + */ + @JvmStatic + fun getMapPadding(supportMapFragment: SupportMapFragment): Int { + val height = supportMapFragment.view!!.height + val width = supportMapFragment.view!!.width + val factor = 0.3 + val padding = if (height < width) height * factor else width * factor + SantaLog.d(TAG, "padding used: $padding") + return padding.toInt() + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/MeasurementManager.java b/common/src/main/java/com/google/android/apps/santatracker/util/MeasurementManager.java deleted file mode 100644 index 10ea01ace..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/util/MeasurementManager.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.util; - -import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.os.Build; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.util.Log; - -import com.google.android.apps.santatracker.common.BuildConfig; -import com.google.firebase.analytics.FirebaseAnalytics; - -import java.util.Locale; - -/** Handles communication with Firebase Analytics. */ -public class MeasurementManager { - - private static final String TAG = "MeasurementManager"; - - private static final String GAME_TITLE = "game_title"; - private static final String TYPE_SCREEN = "type_screen"; - - /** User properties **/ - private static final String BUILD_DEBUG = "BUILD_DEBUG"; - private static final String BUILD_VERSION_NAME = "BUILD_VERSION_NAME"; - private static final String DEVICE_BOARD = "DEVICE_BOARD"; - private static final String DEVICE_BRAND = "DEVICE_BRAND"; - private static final String DEVICE_LOCALE = "DEVICE_LOCALE"; - private static final String API_LEVEL = "API_LEVEL"; - - public static void recordDeviceProperties(Context context) { - FirebaseAnalytics analytics = FirebaseAnalytics.getInstance( - context.getApplicationContext()); - - // Set some user properties based on the device, this can be used for Analytics or - // for Remote Config - analytics.setUserProperty(BUILD_DEBUG, String.valueOf(BuildConfig.DEBUG)); - analytics.setUserProperty(DEVICE_BOARD, Build.BOARD); - analytics.setUserProperty(DEVICE_BRAND, Build.BRAND); - analytics.setUserProperty(DEVICE_LOCALE, Locale.getDefault().getLanguage()); - analytics.setUserProperty(API_LEVEL, String.valueOf(Build.VERSION.SDK_INT)); - - try { - // Set version name, if we can get it - PackageManager pm = context.getPackageManager(); - PackageInfo info = pm.getPackageInfo(context.getPackageName(), 0); - analytics.setUserProperty(BUILD_VERSION_NAME, info.versionName); - } catch (PackageManager.NameNotFoundException e) { - Log.w(TAG, "Could not get package info", e); - } - } - - public static void recordCustomEvent(FirebaseAnalytics measurement, - @NonNull String name, - @NonNull String action, - @Nullable String label) { - Log.d(TAG, "recordCustomEvent:" + name + ":" + action + ":" + label); - - Bundle params = new Bundle(); - params.putString("action", action); - if (label != null) { - params.putString("label", label); - } - measurement.logEvent(name, params); - } - - public static void recordCustomEvent(FirebaseAnalytics measurement, - @NonNull String name, - @NonNull String action) { - Log.d(TAG, "recordCustomEvent:" + name + ":" + action); - - recordCustomEvent(measurement, name, action, null); - } - - public static void recordScreenView(FirebaseAnalytics measurement, - @NonNull String id) { - Log.d(TAG, "recordScreenView:" + id); - - Bundle params = new Bundle(); - params.putString(FirebaseAnalytics.Param.CONTENT_TYPE, TYPE_SCREEN); - params.putString(FirebaseAnalytics.Param.ITEM_ID, id); - measurement.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, params); - } - - public static void recordInvitationReceived(FirebaseAnalytics measurement, - @NonNull String deepLink) { - Log.d(TAG, "recordInvitationReceived:" + deepLink); - - Bundle params = new Bundle(); - params.putString("deepLink", deepLink); - measurement.logEvent(FirebaseAnalytics.Event.APP_OPEN, params); - } - - public static void recordInvitationSent(FirebaseAnalytics measurement, - @NonNull String type, - @NonNull String deepLink) { - Log.d(TAG, "recordInvitationSent:" + type + ":" + deepLink); - - Bundle params = new Bundle(); - params.putString(FirebaseAnalytics.Param.CONTENT_TYPE, type); - params.putSerializable(FirebaseAnalytics.Param.ITEM_ID, deepLink); - measurement.logEvent(FirebaseAnalytics.Event.SHARE, params); - } - - public static void recordLogin(FirebaseAnalytics measurement) { - Log.d(TAG, "recordLogin"); - measurement.logEvent(FirebaseAnalytics.Event.LOGIN, null); - } - - public static void recordAchievement(FirebaseAnalytics measurement, - @NonNull String achId, - @Nullable String gameTitle) { - Log.d(TAG, "recordAchievement:" + achId + ":" + gameTitle); - - Bundle params = new Bundle(); - params.putString(FirebaseAnalytics.Param.ACHIEVEMENT_ID, achId); - if (gameTitle != null) { - params.putString(GAME_TITLE, gameTitle); - } - measurement.logEvent(FirebaseAnalytics.Event.UNLOCK_ACHIEVEMENT, params); - } - - public static void recordGameScore(FirebaseAnalytics measurement, - @NonNull Long score, - @Nullable Long level, - @Nullable String gameTitle) { - Log.d(TAG, "recordGameEnd:" + gameTitle + ":" + score + ":" + level); - - Bundle params = new Bundle(); - params.putLong(FirebaseAnalytics.Param.SCORE, score); - if (level != null) { - params.putLong(FirebaseAnalytics.Param.LEVEL, level); - } - if (gameTitle != null) { - params.putString(GAME_TITLE, gameTitle); - } - measurement.logEvent(FirebaseAnalytics.Event.POST_SCORE, params); - } - - public static void recordVillageTabClick(FirebaseAnalytics measurement, - @NonNull String tabName) { - Log.d(TAG, "recordVillageTabClick:" + tabName); - - Bundle params = new Bundle(); - params.putString("tab_name", tabName); - - measurement.logEvent("village_tab_clicked", params); - } - - public static void recordVillageSantaClick(FirebaseAnalytics measurement) { - Log.d(TAG, "recordVillageSantaClick"); - measurement.logEvent("village_santa_clicked", new Bundle()); - } - - public static void recordSwimmingEnd(FirebaseAnalytics measurement, - int numStars, - int score, - @NonNull String end_reason) { - Log.d(TAG, "recordSwimmingEnd:" + numStars + ":" + score + ":" + end_reason); - - Bundle params = new Bundle(); - params.putInt("num_stars", numStars); - params.putInt("score", score); - params.putString("end_reason", end_reason); - - // Log custom swimming event - measurement.logEvent("swimming_game_end", params); - - // Log generic game score event - recordGameScore(measurement, (long) score, null, "swimming"); - } - - public static void recordRunningEnd(FirebaseAnalytics measurement, - int numStars, - int score) { - Log.d(TAG, "recordRunningEnd:" + numStars + ":" + score); - - Bundle params = new Bundle(); - params.putInt("num_stars", numStars); - params.putInt("score", score); - - // Log custom swimming event - measurement.logEvent("running_game_end", params); - - // Log generic game score event - recordGameScore(measurement, (long) score, null, "running"); - } - - public static void recordPresentDropped(FirebaseAnalytics analytics, - boolean isLarge) { - Log.d(TAG, "recordPresentDropped:" + isLarge); - - Bundle params = new Bundle(); - if (isLarge) { - params.putString("size", "large"); - } else { - params.putString("size", "small"); - } - - analytics.logEvent("pq_present_dropped", params); - } - - public static void recordPresentsCollected(FirebaseAnalytics analytics, - int numPresents) { - Log.d(TAG, "recordPresentsCollected:" + numPresents); - - Bundle params = new Bundle(); - params.putInt("num_presents", numPresents); - - analytics.logEvent("pq_presents_collected", params); - } - - public static void recordPresentsReturned(FirebaseAnalytics analytics, - int numPresents) { - Log.d(TAG, "recordPresentsReturned:" + numPresents); - - Bundle params = new Bundle(); - params.putInt("num_presents", numPresents); - - analytics.logEvent("pq_presents_returned", params); - } - - public static void recordPresentQuestLevel(FirebaseAnalytics analytics, - int level) { - Log.d(TAG, "recordPresentQuestLevel:" + level); - - Bundle params = new Bundle(); - params.putInt("level", level); - - // Log custom event - analytics.logEvent("pq_level_unlocked", params); - - // Log standard LEVEL_UP event - Bundle params2 = new Bundle(); - params2.putLong(FirebaseAnalytics.Param.LEVEL, (long) level); - analytics.logEvent(FirebaseAnalytics.Event.LEVEL_UP, params2); - } - - public static void recordWorkshopMoved(FirebaseAnalytics analytics) { - Log.d(TAG, "recordWorkshopMoved"); - - analytics.logEvent("pq_workshop_moved", new Bundle()); - } - - public static void recordHundredMetersWalked(FirebaseAnalytics analytics) { - Log.d(TAG, "recordHundredMetersWalked"); - - analytics.logEvent("pq_hundred_meters_walked", new Bundle()); - } - - public static void recordCorrectCitySelected(FirebaseAnalytics analytics, - @NonNull String cityId, - int numIncorrectAttempts) { - Log.d(TAG, "recordCorrectCitySelected:" + cityId + ":" + numIncorrectAttempts); - - Bundle params = new Bundle(); - params.putString("city_id", cityId); - params.putInt("incorrect_attempts", numIncorrectAttempts); - - analytics.logEvent("cq_select_correct", params); - } - - public static void recordIncorrectCitySelected(FirebaseAnalytics analytics, - @NonNull String cityId) { - Log.d(TAG, "recordIncorrectCitySelected:" + cityId); - - Bundle params = new Bundle(); - params.putString("city_id", cityId); - - analytics.logEvent("cq_select_incorrect", params); - } - -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/MeasurementManager.kt b/common/src/main/java/com/google/android/apps/santatracker/util/MeasurementManager.kt new file mode 100644 index 000000000..157eb0540 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/util/MeasurementManager.kt @@ -0,0 +1,303 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.util + +import android.content.Context +import android.content.pm.PackageManager +import android.os.Build +import android.os.Bundle +import com.google.android.apps.santatracker.common.BuildConfig +import com.google.firebase.analytics.FirebaseAnalytics +import java.util.Locale + +/** Handles communication with Firebase Analytics. */ +object MeasurementManager { + + private val TAG = "MeasurementManager" + + private val GAME_TITLE = "game_title" + private val TYPE_SCREEN = "type_screen" + + /** User properties */ + private val BUILD_DEBUG = "BUILD_DEBUG" + + private val BUILD_VERSION_NAME = "BUILD_VERSION_NAME" + private val DEVICE_BOARD = "DEVICE_BOARD" + private val DEVICE_BRAND = "DEVICE_BRAND" + private val DEVICE_LOCALE = "DEVICE_LOCALE" + private val API_LEVEL = "API_LEVEL" + + @JvmStatic + fun recordDeviceProperties(context: Context) { + val analytics = FirebaseAnalytics.getInstance(context.applicationContext) + + // Set some user properties based on the device, this can be used for Analytics or + // for Remote Config + analytics.setUserProperty(BUILD_DEBUG, BuildConfig.DEBUG.toString()) + analytics.setUserProperty(DEVICE_BOARD, Build.BOARD) + analytics.setUserProperty(DEVICE_BRAND, Build.BRAND) + analytics.setUserProperty(DEVICE_LOCALE, Locale.getDefault().language) + analytics.setUserProperty(API_LEVEL, Build.VERSION.SDK_INT.toString()) + + try { + // Set version name, if we can get it + val pm = context.packageManager + val info = pm.getPackageInfo(context.packageName, 0) + analytics.setUserProperty(BUILD_VERSION_NAME, info.versionName) + } catch (e: PackageManager.NameNotFoundException) { + SantaLog.w(TAG, "Could not get package info", e) + } + } + + @JvmOverloads + @JvmStatic + fun recordCustomEvent( + measurement: FirebaseAnalytics, + name: String, + action: String, + label: String? = null, + value: Long = Integer.MIN_VALUE.toLong() + ) { + SantaLog.d(TAG, "recordCustomEvent:$name:$action:$label") + + val params = Bundle() + params.putString("action", action) + if (label != null) { + params.putString("label", label) + } + if (value != Integer.MIN_VALUE.toLong()) { + params.putString("value", java.lang.Long.toString(value)) + } + measurement.logEvent(name, params) + } + + @JvmStatic + fun recordScreenView(measurement: FirebaseAnalytics, id: String) { + SantaLog.d(TAG, "recordScreenView:$id") + + val params = Bundle() + params.putString(FirebaseAnalytics.Param.CONTENT_TYPE, TYPE_SCREEN) + params.putString(FirebaseAnalytics.Param.ITEM_ID, id) + measurement.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, params) + } + + @JvmStatic + fun recordInvitationReceived( + measurement: FirebaseAnalytics, + deepLink: String + ) { + SantaLog.d(TAG, "recordInvitationReceived:$deepLink") + + val params = Bundle() + params.putString("deepLink", deepLink) + measurement.logEvent(FirebaseAnalytics.Event.APP_OPEN, params) + } + + @JvmStatic + fun recordInvitationSent( + measurement: FirebaseAnalytics, + type: String, + deepLink: String + ) { + SantaLog.d(TAG, "recordInvitationSent:$type:$deepLink") + + val params = Bundle() + params.putString(FirebaseAnalytics.Param.CONTENT_TYPE, type) + params.putSerializable(FirebaseAnalytics.Param.ITEM_ID, deepLink) + measurement.logEvent(FirebaseAnalytics.Event.SHARE, params) + } + + @JvmStatic + fun recordLogin(measurement: FirebaseAnalytics) { + SantaLog.d(TAG, "recordLogin") + measurement.logEvent(FirebaseAnalytics.Event.LOGIN, null) + } + + @JvmStatic + fun recordAchievement( + measurement: FirebaseAnalytics, + achId: String, + gameTitle: String? + ) { + SantaLog.d(TAG, "recordAchievement:$achId:$gameTitle") + + val params = Bundle() + params.putString(FirebaseAnalytics.Param.ACHIEVEMENT_ID, achId) + if (gameTitle != null) { + params.putString(GAME_TITLE, gameTitle) + } + measurement.logEvent(FirebaseAnalytics.Event.UNLOCK_ACHIEVEMENT, params) + } + + @JvmStatic + fun recordGameScore( + measurement: FirebaseAnalytics, + score: Long, + level: Long?, + gameTitle: String? + ) { + SantaLog.d(TAG, "recordGameEnd:$gameTitle:$score:$level") + + val params = Bundle() + params.putLong(FirebaseAnalytics.Param.SCORE, score) + if (level != null) { + params.putLong(FirebaseAnalytics.Param.LEVEL, level) + } + if (gameTitle != null) { + params.putString(GAME_TITLE, gameTitle) + } + measurement.logEvent(FirebaseAnalytics.Event.POST_SCORE, params) + } + + @JvmStatic + fun recordVillageSantaClick(measurement: FirebaseAnalytics) { + SantaLog.d(TAG, "recordVillageSantaClick") + measurement.logEvent("village_santa_clicked", Bundle()) + } + + @JvmStatic + fun recordSwimmingEnd( + measurement: FirebaseAnalytics, + numStars: Int, + score: Int, + end_reason: String? + ) { + SantaLog.d(TAG, "recordSwimmingEnd:$numStars:$score:$end_reason") + + val params = Bundle() + params.putInt("num_stars", numStars) + params.putInt("score", score) + if (end_reason != null) { + params.putString("end_reason", end_reason) + } + + // Log custom swimming event + measurement.logEvent("swimming_game_end", params) + + // Log generic game score event + recordGameScore(measurement, score.toLong(), null, "swimming") + } + + @JvmStatic + fun recordRunningEnd(measurement: FirebaseAnalytics, numStars: Int, score: Int) { + SantaLog.d(TAG, "recordRunningEnd:$numStars:$score") + + val params = Bundle() + params.putInt("num_stars", numStars) + params.putInt("score", score) + + // Log custom swimming event + measurement.logEvent("running_game_end", params) + + // Log generic game score event + recordGameScore(measurement, score.toLong(), null, "running") + } + + @JvmStatic + fun recordPresentDropped(analytics: FirebaseAnalytics, isLarge: Boolean) { + SantaLog.d(TAG, "recordPresentDropped:$isLarge") + + val params = Bundle() + if (isLarge) { + params.putString("size", "large") + } else { + params.putString("size", "small") + } + + analytics.logEvent("pq_present_dropped", params) + } + + @JvmStatic + fun recordPresentsCollected(analytics: FirebaseAnalytics, numPresents: Int) { + SantaLog.d(TAG, "recordPresentsCollected:$numPresents") + + val params = Bundle() + params.putInt("num_presents", numPresents) + + analytics.logEvent("pq_presents_collected", params) + } + + @JvmStatic + fun recordPresentsReturned(analytics: FirebaseAnalytics, numPresents: Int) { + SantaLog.d(TAG, "recordPresentsReturned:$numPresents") + + val params = Bundle() + params.putInt("num_presents", numPresents) + + analytics.logEvent("pq_presents_returned", params) + } + + @JvmStatic + fun recordPresentQuestLevel(analytics: FirebaseAnalytics, level: Int) { + SantaLog.d(TAG, "recordPresentQuestLevel:$level") + + val params = Bundle() + params.putInt("level", level) + + // Log custom event + analytics.logEvent("pq_level_unlocked", params) + + // Log standard LEVEL_UP event + val params2 = Bundle() + params2.putLong(FirebaseAnalytics.Param.LEVEL, level.toLong()) + analytics.logEvent(FirebaseAnalytics.Event.LEVEL_UP, params2) + } + + @JvmStatic + fun recordWorkshopMoved(analytics: FirebaseAnalytics) { + SantaLog.d(TAG, "recordWorkshopMoved") + + analytics.logEvent("pq_workshop_moved", Bundle()) + } + + @JvmStatic + fun recordHundredMetersWalked(analytics: FirebaseAnalytics, distance: Int) { + SantaLog.d(TAG, "recordHundredMetersWalked") + + val bundle = Bundle() + bundle.putInt("distance", distance) + analytics.logEvent("pq_hundred_meters_walked", bundle) + } + + @JvmStatic + fun recordCorrectCitySelected( + analytics: FirebaseAnalytics, + cityId: String, + numIncorrectAttempts: Int + ) { + SantaLog.d(TAG, "recordCorrectCitySelected:$cityId:$numIncorrectAttempts") + + val params = Bundle() + params.putString("city_id", cityId) + params.putInt("incorrect_attempts", numIncorrectAttempts) + + analytics.logEvent("cq_select_correct", params) + } + + @JvmStatic + fun recordIncorrectCitySelected( + analytics: FirebaseAnalytics, + cityId: String + ) { + SantaLog.d(TAG, "recordIncorrectCitySelected:$cityId") + + val params = Bundle() + params.putString("city_id", cityId) + + analytics.logEvent("cq_select_incorrect", params) + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/NetworkHelper.java b/common/src/main/java/com/google/android/apps/santatracker/util/NetworkHelper.java deleted file mode 100644 index 954e6eb8d..000000000 --- a/common/src/main/java/com/google/android/apps/santatracker/util/NetworkHelper.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.google.android.apps.santatracker.util; - -import android.content.Context; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; - -/** - * Utility class to check network state. - */ -public class NetworkHelper { - - public static boolean hasNetwork(Context context) { - ConnectivityManager cm = - (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - - NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); - return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); - } - -} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/NetworkHelper.kt b/common/src/main/java/com/google/android/apps/santatracker/util/NetworkHelper.kt new file mode 100644 index 000000000..33dc507ca --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/util/NetworkHelper.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.util + +import android.content.Context +import android.net.ConnectivityManager + +/** Utility class to check network state. */ +object NetworkHelper { + + @JvmStatic + fun hasNetwork(context: Context): Boolean { + val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + + val activeNetwork = cm.activeNetworkInfo + return activeNetwork != null && activeNetwork.isConnectedOrConnecting + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/PlayServicesUtil.kt b/common/src/main/java/com/google/android/apps/santatracker/util/PlayServicesUtil.kt new file mode 100644 index 000000000..049973ef4 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/util/PlayServicesUtil.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.util + +import android.content.Context +import com.google.android.gms.common.ConnectionResult +import com.google.android.gms.common.GoogleApiAvailability + +object PlayServicesUtil { + + @JvmStatic + fun hasPlayServices(context: Context): Boolean { + return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable( + context) == ConnectionResult.SUCCESS + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/SantaLog.kt b/common/src/main/java/com/google/android/apps/santatracker/util/SantaLog.kt new file mode 100644 index 000000000..dfc836c05 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/util/SantaLog.kt @@ -0,0 +1,76 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.util + +import android.util.Log +import com.google.android.apps.santatracker.common.BuildConfig + +object SantaLog { + private val LOG_ENABLED = BuildConfig.BUILD_TYPE != "release" + + @JvmStatic + fun v(tag: String, msg: String) { + if (LOG_ENABLED) { + Log.v(tag, msg) + } + } + + @JvmStatic + fun w(tag: String, msg: String) { + if (LOG_ENABLED) { + Log.w(tag, msg) + } + } + + @JvmStatic + fun w(tag: String, msg: String, t: Throwable?) { + if (LOG_ENABLED) { + Log.w(tag, msg, t) + } + } + + @JvmStatic + fun e(tag: String, msg: String) { + Log.e(tag, msg) + } + + @JvmStatic + fun e(tag: String, msg: String, t: Throwable?) { + Log.e(tag, msg, t) + } + + @JvmStatic + fun d(tag: String, msg: String) { + if (LOG_ENABLED) { + Log.d(tag, msg) + } + } + + @JvmStatic + fun i(tag: String, msg: String) { + if (LOG_ENABLED) { + Log.i(tag, msg) + } + } + + @JvmStatic + fun d(tag: String, s: String, t: Throwable?) { + if (LOG_ENABLED) { + Log.d(tag, s, t) + } + } +} diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/SoundPoolExtensions.kt b/common/src/main/java/com/google/android/apps/santatracker/util/SoundPoolExtensions.kt new file mode 100644 index 000000000..db379cb43 --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/util/SoundPoolExtensions.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.util + +import android.media.SoundPool +import com.google.android.apps.santatracker.AudioConstants + +/** + * Extension function to play a sound using some sane defaults + */ +fun SoundPool.play( + soundId: Int, + volume: Float = AudioConstants.DEFAULT_SOUND_EFFECT_VOLUME, + priority: Int = 0, + loop: Int = 0, + rate: Float = 1f +) = play(soundId, volume, volume, priority, loop, rate) + +object SoundPoolUtils { + /** + * Util function to play a sound using some sane defaults. This is just for use from Java + */ + @JvmOverloads + @JvmStatic + fun playSoundEffect( + soundPool: SoundPool, + soundId: Int, + volume: Float = AudioConstants.DEFAULT_SOUND_EFFECT_VOLUME, + priority: Int = 0, + loop: Int = 0, + rate: Float = 1f + ) = soundPool.play(soundId, volume, volume, priority, loop, rate) +} \ No newline at end of file diff --git a/common/src/main/java/com/google/android/apps/santatracker/util/VectorUtil.kt b/common/src/main/java/com/google/android/apps/santatracker/util/VectorUtil.kt new file mode 100644 index 000000000..20573a85b --- /dev/null +++ b/common/src/main/java/com/google/android/apps/santatracker/util/VectorUtil.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.Canvas +import androidx.annotation.DrawableRes +import androidx.core.content.res.ResourcesCompat +import com.google.android.gms.maps.model.BitmapDescriptor +import com.google.android.gms.maps.model.BitmapDescriptorFactory + +object VectorUtil { + + @JvmStatic + fun vectorToBitmap(context: Context, @DrawableRes id: Int): BitmapDescriptor { + val vectorDrawable = ResourcesCompat.getDrawable(context.resources, id, null) + val bitmap = Bitmap.createBitmap( + vectorDrawable!!.intrinsicWidth, + vectorDrawable.intrinsicHeight, + Bitmap.Config.ARGB_8888) + val canvas = Canvas(bitmap) + vectorDrawable.setBounds(0, 0, canvas.width, canvas.height) + vectorDrawable.draw(canvas) + return BitmapDescriptorFactory.fromBitmap(bitmap) + } +} diff --git a/common/src/main/res/drawable-hdpi/btn_pause_purple.png b/common/src/main/res/drawable-hdpi/btn_pause_purple.png deleted file mode 100644 index 105b8564a..000000000 Binary files a/common/src/main/res/drawable-hdpi/btn_pause_purple.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/btn_play_yellow.png b/common/src/main/res/drawable-hdpi/btn_play_yellow.png deleted file mode 100644 index 064eb5588..000000000 Binary files a/common/src/main/res/drawable-hdpi/btn_play_yellow.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/btn_play_yellow.webp b/common/src/main/res/drawable-hdpi/btn_play_yellow.webp new file mode 100644 index 000000000..c77852539 Binary files /dev/null and b/common/src/main/res/drawable-hdpi/btn_play_yellow.webp differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_close.png b/common/src/main/res/drawable-hdpi/common_btn_close.png deleted file mode 100644 index a0b76e74c..000000000 Binary files a/common/src/main/res/drawable-hdpi/common_btn_close.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_edit.png b/common/src/main/res/drawable-hdpi/common_btn_edit.png deleted file mode 100644 index 6ba43ba1b..000000000 Binary files a/common/src/main/res/drawable-hdpi/common_btn_edit.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_pause.png b/common/src/main/res/drawable-hdpi/common_btn_pause.png deleted file mode 100644 index 105b8564a..000000000 Binary files a/common/src/main/res/drawable-hdpi/common_btn_pause.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_pause.webp b/common/src/main/res/drawable-hdpi/common_btn_pause.webp new file mode 100644 index 000000000..3d011cc53 Binary files /dev/null and b/common/src/main/res/drawable-hdpi/common_btn_pause.webp differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_play.png b/common/src/main/res/drawable-hdpi/common_btn_play.png deleted file mode 100644 index 064eb5588..000000000 Binary files a/common/src/main/res/drawable-hdpi/common_btn_play.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_play.webp b/common/src/main/res/drawable-hdpi/common_btn_play.webp new file mode 100644 index 000000000..c77852539 Binary files /dev/null and b/common/src/main/res/drawable-hdpi/common_btn_play.webp differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_save.png b/common/src/main/res/drawable-hdpi/common_btn_save.png deleted file mode 100644 index 7c1d0594f..000000000 Binary files a/common/src/main/res/drawable-hdpi/common_btn_save.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_share.png b/common/src/main/res/drawable-hdpi/common_btn_share.png deleted file mode 100644 index 431b96e0a..000000000 Binary files a/common/src/main/res/drawable-hdpi/common_btn_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_share.webp b/common/src/main/res/drawable-hdpi/common_btn_share.webp new file mode 100644 index 000000000..ff2e3060e Binary files /dev/null and b/common/src/main/res/drawable-hdpi/common_btn_share.webp differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_speaker_off.png b/common/src/main/res/drawable-hdpi/common_btn_speaker_off.png deleted file mode 100644 index 4fe6eb6ad..000000000 Binary files a/common/src/main/res/drawable-hdpi/common_btn_speaker_off.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_speaker_off.webp b/common/src/main/res/drawable-hdpi/common_btn_speaker_off.webp new file mode 100644 index 000000000..f10129cc0 Binary files /dev/null and b/common/src/main/res/drawable-hdpi/common_btn_speaker_off.webp differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_speaker_on.png b/common/src/main/res/drawable-hdpi/common_btn_speaker_on.png deleted file mode 100644 index c267ec2e8..000000000 Binary files a/common/src/main/res/drawable-hdpi/common_btn_speaker_on.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/common_btn_speaker_on.webp b/common/src/main/res/drawable-hdpi/common_btn_speaker_on.webp new file mode 100644 index 000000000..62fff3232 Binary files /dev/null and b/common/src/main/res/drawable-hdpi/common_btn_speaker_on.webp differ diff --git a/common/src/main/res/drawable-hdpi/games_share.png b/common/src/main/res/drawable-hdpi/games_share.png deleted file mode 100644 index 039333e99..000000000 Binary files a/common/src/main/res/drawable-hdpi/games_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/games_share.webp b/common/src/main/res/drawable-hdpi/games_share.webp new file mode 100644 index 000000000..b4fa7ace4 Binary files /dev/null and b/common/src/main/res/drawable-hdpi/games_share.webp differ diff --git a/common/src/main/res/drawable-hdpi/games_share_pressed.png b/common/src/main/res/drawable-hdpi/games_share_pressed.png deleted file mode 100644 index a29c497bb..000000000 Binary files a/common/src/main/res/drawable-hdpi/games_share_pressed.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/games_share_pressed.webp b/common/src/main/res/drawable-hdpi/games_share_pressed.webp new file mode 100644 index 000000000..a2b6dbaf8 Binary files /dev/null and b/common/src/main/res/drawable-hdpi/games_share_pressed.webp differ diff --git a/common/src/main/res/drawable-hdpi/ic_launcher_foreground.webp b/common/src/main/res/drawable-hdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..bee4e0bc6 Binary files /dev/null and b/common/src/main/res/drawable-hdpi/ic_launcher_foreground.webp differ diff --git a/common/src/main/res/drawable-hdpi/icon_check.png b/common/src/main/res/drawable-hdpi/icon_check.png deleted file mode 100644 index 03cf81f7a..000000000 Binary files a/common/src/main/res/drawable-hdpi/icon_check.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/icon_close.png b/common/src/main/res/drawable-hdpi/icon_close.png deleted file mode 100644 index 20081783b..000000000 Binary files a/common/src/main/res/drawable-hdpi/icon_close.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/icon_edit.png b/common/src/main/res/drawable-hdpi/icon_edit.png deleted file mode 100644 index 05d07b175..000000000 Binary files a/common/src/main/res/drawable-hdpi/icon_edit.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/icon_pause.png b/common/src/main/res/drawable-hdpi/icon_pause.png deleted file mode 100644 index 8b0d2ca30..000000000 Binary files a/common/src/main/res/drawable-hdpi/icon_pause.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/icon_play.png b/common/src/main/res/drawable-hdpi/icon_play.png deleted file mode 100644 index 43693e3b6..000000000 Binary files a/common/src/main/res/drawable-hdpi/icon_play.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/icon_play_again.png b/common/src/main/res/drawable-hdpi/icon_play_again.png deleted file mode 100644 index 8f7ac0b38..000000000 Binary files a/common/src/main/res/drawable-hdpi/icon_play_again.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/icon_speaker_off.png b/common/src/main/res/drawable-hdpi/icon_speaker_off.png deleted file mode 100644 index 1b6248b35..000000000 Binary files a/common/src/main/res/drawable-hdpi/icon_speaker_off.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/icon_speaker_on.png b/common/src/main/res/drawable-hdpi/icon_speaker_on.png deleted file mode 100644 index 4300b0213..000000000 Binary files a/common/src/main/res/drawable-hdpi/icon_speaker_on.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/ornament.webp b/common/src/main/res/drawable-hdpi/ornament.webp new file mode 100644 index 000000000..a1300747e Binary files /dev/null and b/common/src/main/res/drawable-hdpi/ornament.webp differ diff --git a/common/src/main/res/drawable-hdpi/winner.png b/common/src/main/res/drawable-hdpi/winner.png deleted file mode 100644 index 55580828d..000000000 Binary files a/common/src/main/res/drawable-hdpi/winner.png and /dev/null differ diff --git a/common/src/main/res/drawable-hdpi/winner.webp b/common/src/main/res/drawable-hdpi/winner.webp new file mode 100644 index 000000000..f1d810b30 Binary files /dev/null and b/common/src/main/res/drawable-hdpi/winner.webp differ diff --git a/common/src/main/res/drawable-mdpi/btn_pause_purple.png b/common/src/main/res/drawable-mdpi/btn_pause_purple.png deleted file mode 100644 index 47e4529bf..000000000 Binary files a/common/src/main/res/drawable-mdpi/btn_pause_purple.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/btn_play_yellow.png b/common/src/main/res/drawable-mdpi/btn_play_yellow.png deleted file mode 100644 index 63c10e15f..000000000 Binary files a/common/src/main/res/drawable-mdpi/btn_play_yellow.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/btn_play_yellow.webp b/common/src/main/res/drawable-mdpi/btn_play_yellow.webp new file mode 100644 index 000000000..ef12cf793 Binary files /dev/null and b/common/src/main/res/drawable-mdpi/btn_play_yellow.webp differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_close.png b/common/src/main/res/drawable-mdpi/common_btn_close.png deleted file mode 100644 index 1639c2bd0..000000000 Binary files a/common/src/main/res/drawable-mdpi/common_btn_close.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_edit.png b/common/src/main/res/drawable-mdpi/common_btn_edit.png deleted file mode 100644 index 743822eaf..000000000 Binary files a/common/src/main/res/drawable-mdpi/common_btn_edit.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_pause.png b/common/src/main/res/drawable-mdpi/common_btn_pause.png deleted file mode 100644 index 47e4529bf..000000000 Binary files a/common/src/main/res/drawable-mdpi/common_btn_pause.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_pause.webp b/common/src/main/res/drawable-mdpi/common_btn_pause.webp new file mode 100644 index 000000000..d3694d683 Binary files /dev/null and b/common/src/main/res/drawable-mdpi/common_btn_pause.webp differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_play.png b/common/src/main/res/drawable-mdpi/common_btn_play.png deleted file mode 100644 index 63c10e15f..000000000 Binary files a/common/src/main/res/drawable-mdpi/common_btn_play.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_play.webp b/common/src/main/res/drawable-mdpi/common_btn_play.webp new file mode 100644 index 000000000..ef12cf793 Binary files /dev/null and b/common/src/main/res/drawable-mdpi/common_btn_play.webp differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_save.png b/common/src/main/res/drawable-mdpi/common_btn_save.png deleted file mode 100644 index 16311a666..000000000 Binary files a/common/src/main/res/drawable-mdpi/common_btn_save.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_share.png b/common/src/main/res/drawable-mdpi/common_btn_share.png deleted file mode 100644 index c3b9b5095..000000000 Binary files a/common/src/main/res/drawable-mdpi/common_btn_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_share.webp b/common/src/main/res/drawable-mdpi/common_btn_share.webp new file mode 100644 index 000000000..e6031956a Binary files /dev/null and b/common/src/main/res/drawable-mdpi/common_btn_share.webp differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_speaker_off.png b/common/src/main/res/drawable-mdpi/common_btn_speaker_off.png deleted file mode 100644 index e2697abc5..000000000 Binary files a/common/src/main/res/drawable-mdpi/common_btn_speaker_off.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_speaker_off.webp b/common/src/main/res/drawable-mdpi/common_btn_speaker_off.webp new file mode 100644 index 000000000..c8fb6759a Binary files /dev/null and b/common/src/main/res/drawable-mdpi/common_btn_speaker_off.webp differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_speaker_on.png b/common/src/main/res/drawable-mdpi/common_btn_speaker_on.png deleted file mode 100644 index 3544e14ed..000000000 Binary files a/common/src/main/res/drawable-mdpi/common_btn_speaker_on.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/common_btn_speaker_on.webp b/common/src/main/res/drawable-mdpi/common_btn_speaker_on.webp new file mode 100644 index 000000000..25d3204c5 Binary files /dev/null and b/common/src/main/res/drawable-mdpi/common_btn_speaker_on.webp differ diff --git a/common/src/main/res/drawable-mdpi/games_share.png b/common/src/main/res/drawable-mdpi/games_share.png deleted file mode 100644 index 288d09b20..000000000 Binary files a/common/src/main/res/drawable-mdpi/games_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/games_share.webp b/common/src/main/res/drawable-mdpi/games_share.webp new file mode 100644 index 000000000..64bc8f72b Binary files /dev/null and b/common/src/main/res/drawable-mdpi/games_share.webp differ diff --git a/common/src/main/res/drawable-mdpi/games_share_pressed.png b/common/src/main/res/drawable-mdpi/games_share_pressed.png deleted file mode 100644 index 7bbf75abf..000000000 Binary files a/common/src/main/res/drawable-mdpi/games_share_pressed.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/games_share_pressed.webp b/common/src/main/res/drawable-mdpi/games_share_pressed.webp new file mode 100644 index 000000000..489b705ea Binary files /dev/null and b/common/src/main/res/drawable-mdpi/games_share_pressed.webp differ diff --git a/common/src/main/res/drawable-mdpi/ic_launcher_foreground.webp b/common/src/main/res/drawable-mdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..8abf03380 Binary files /dev/null and b/common/src/main/res/drawable-mdpi/ic_launcher_foreground.webp differ diff --git a/common/src/main/res/drawable-mdpi/icon_check.png b/common/src/main/res/drawable-mdpi/icon_check.png deleted file mode 100644 index aeb664f41..000000000 Binary files a/common/src/main/res/drawable-mdpi/icon_check.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/icon_close.png b/common/src/main/res/drawable-mdpi/icon_close.png deleted file mode 100644 index 7820dbb84..000000000 Binary files a/common/src/main/res/drawable-mdpi/icon_close.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/icon_edit.png b/common/src/main/res/drawable-mdpi/icon_edit.png deleted file mode 100644 index 031ff5eea..000000000 Binary files a/common/src/main/res/drawable-mdpi/icon_edit.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/icon_pause.png b/common/src/main/res/drawable-mdpi/icon_pause.png deleted file mode 100644 index 9d3e05847..000000000 Binary files a/common/src/main/res/drawable-mdpi/icon_pause.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/icon_play.png b/common/src/main/res/drawable-mdpi/icon_play.png deleted file mode 100644 index 97fb8b5fb..000000000 Binary files a/common/src/main/res/drawable-mdpi/icon_play.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/icon_play_again.png b/common/src/main/res/drawable-mdpi/icon_play_again.png deleted file mode 100644 index 41a045029..000000000 Binary files a/common/src/main/res/drawable-mdpi/icon_play_again.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/icon_speaker_off.png b/common/src/main/res/drawable-mdpi/icon_speaker_off.png deleted file mode 100644 index e3fe3f88a..000000000 Binary files a/common/src/main/res/drawable-mdpi/icon_speaker_off.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/icon_speaker_on.png b/common/src/main/res/drawable-mdpi/icon_speaker_on.png deleted file mode 100644 index e46adc348..000000000 Binary files a/common/src/main/res/drawable-mdpi/icon_speaker_on.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/ornament.webp b/common/src/main/res/drawable-mdpi/ornament.webp new file mode 100644 index 000000000..7df186e7d Binary files /dev/null and b/common/src/main/res/drawable-mdpi/ornament.webp differ diff --git a/common/src/main/res/drawable-mdpi/signin_pressed.9.png b/common/src/main/res/drawable-mdpi/signin_pressed.9.png index 9371a1223..dce0648fd 100644 Binary files a/common/src/main/res/drawable-mdpi/signin_pressed.9.png and b/common/src/main/res/drawable-mdpi/signin_pressed.9.png differ diff --git a/common/src/main/res/drawable-mdpi/winner.png b/common/src/main/res/drawable-mdpi/winner.png deleted file mode 100644 index 716591aaa..000000000 Binary files a/common/src/main/res/drawable-mdpi/winner.png and /dev/null differ diff --git a/common/src/main/res/drawable-mdpi/winner.webp b/common/src/main/res/drawable-mdpi/winner.webp new file mode 100644 index 000000000..afea42402 Binary files /dev/null and b/common/src/main/res/drawable-mdpi/winner.webp differ diff --git a/common/src/main/res/drawable-nodpi/icon_ribbon.png b/common/src/main/res/drawable-nodpi/icon_ribbon.png deleted file mode 100644 index d80f35f8f..000000000 Binary files a/common/src/main/res/drawable-nodpi/icon_ribbon.png and /dev/null differ diff --git a/common/src/main/res/drawable-nodpi/icon_ribbon_upsidedown.png b/common/src/main/res/drawable-nodpi/icon_ribbon_upsidedown.png deleted file mode 100644 index 5f11fc576..000000000 Binary files a/common/src/main/res/drawable-nodpi/icon_ribbon_upsidedown.png and /dev/null differ diff --git a/common/src/main/res/drawable-nodpi/icon_ribbon_upsidedown_short.png b/common/src/main/res/drawable-nodpi/icon_ribbon_upsidedown_short.png deleted file mode 100644 index df7db13d2..000000000 Binary files a/common/src/main/res/drawable-nodpi/icon_ribbon_upsidedown_short.png and /dev/null differ diff --git a/common/src/main/res/drawable-nodpi/icon_ribbon_upsidedown_short.webp b/common/src/main/res/drawable-nodpi/icon_ribbon_upsidedown_short.webp new file mode 100644 index 000000000..b62370349 Binary files /dev/null and b/common/src/main/res/drawable-nodpi/icon_ribbon_upsidedown_short.webp differ diff --git a/common/src/main/res/drawable-nodpi/jetpack_background_day.png b/common/src/main/res/drawable-nodpi/jetpack_background_day.png deleted file mode 100644 index d70876250..000000000 Binary files a/common/src/main/res/drawable-nodpi/jetpack_background_day.png and /dev/null differ diff --git a/common/src/main/res/drawable-nodpi/jetpack_background_day.webp b/common/src/main/res/drawable-nodpi/jetpack_background_day.webp new file mode 100644 index 000000000..145664600 Binary files /dev/null and b/common/src/main/res/drawable-nodpi/jetpack_background_day.webp differ diff --git a/common/src/main/res/drawable-nodpi/jetpack_background_evening.png b/common/src/main/res/drawable-nodpi/jetpack_background_evening.png deleted file mode 100644 index 14773e7d2..000000000 Binary files a/common/src/main/res/drawable-nodpi/jetpack_background_evening.png and /dev/null differ diff --git a/common/src/main/res/drawable-nodpi/jetpack_background_evening.webp b/common/src/main/res/drawable-nodpi/jetpack_background_evening.webp new file mode 100644 index 000000000..316f9fe69 Binary files /dev/null and b/common/src/main/res/drawable-nodpi/jetpack_background_evening.webp differ diff --git a/common/src/main/res/drawable-nodpi/purple_rectangle_button.png b/common/src/main/res/drawable-nodpi/purple_rectangle_button.png deleted file mode 100644 index 3cc1962c5..000000000 Binary files a/common/src/main/res/drawable-nodpi/purple_rectangle_button.png and /dev/null differ diff --git a/common/src/main/res/drawable-nodpi/purple_rectangle_button.webp b/common/src/main/res/drawable-nodpi/purple_rectangle_button.webp new file mode 100644 index 000000000..b6ae8684d Binary files /dev/null and b/common/src/main/res/drawable-nodpi/purple_rectangle_button.webp differ diff --git a/common/src/main/res/drawable-nodpi/purple_rectangle_pressed_button.png b/common/src/main/res/drawable-nodpi/purple_rectangle_pressed_button.png deleted file mode 100644 index fa93739a7..000000000 Binary files a/common/src/main/res/drawable-nodpi/purple_rectangle_pressed_button.png and /dev/null differ diff --git a/common/src/main/res/drawable-sw600dp-hdpi/games_share.png b/common/src/main/res/drawable-sw600dp-hdpi/games_share.png deleted file mode 100644 index e7e56be33..000000000 Binary files a/common/src/main/res/drawable-sw600dp-hdpi/games_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-sw600dp-hdpi/games_share.webp b/common/src/main/res/drawable-sw600dp-hdpi/games_share.webp new file mode 100644 index 000000000..8c3a0a29f Binary files /dev/null and b/common/src/main/res/drawable-sw600dp-hdpi/games_share.webp differ diff --git a/common/src/main/res/drawable-sw600dp-mdpi/games_share.png b/common/src/main/res/drawable-sw600dp-mdpi/games_share.png deleted file mode 100644 index c67eb993f..000000000 Binary files a/common/src/main/res/drawable-sw600dp-mdpi/games_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-sw600dp-mdpi/games_share.webp b/common/src/main/res/drawable-sw600dp-mdpi/games_share.webp new file mode 100644 index 000000000..f8abdab40 Binary files /dev/null and b/common/src/main/res/drawable-sw600dp-mdpi/games_share.webp differ diff --git a/common/src/main/res/drawable-sw600dp-tvdpi/games_share.png b/common/src/main/res/drawable-sw600dp-tvdpi/games_share.png deleted file mode 100644 index c67eb993f..000000000 Binary files a/common/src/main/res/drawable-sw600dp-tvdpi/games_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-sw600dp-tvdpi/games_share.webp b/common/src/main/res/drawable-sw600dp-tvdpi/games_share.webp new file mode 100644 index 000000000..f8abdab40 Binary files /dev/null and b/common/src/main/res/drawable-sw600dp-tvdpi/games_share.webp differ diff --git a/common/src/main/res/drawable-xhdpi/btn_pause_purple.png b/common/src/main/res/drawable-xhdpi/btn_pause_purple.png deleted file mode 100644 index 8c297f26b..000000000 Binary files a/common/src/main/res/drawable-xhdpi/btn_pause_purple.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/btn_play_yellow.png b/common/src/main/res/drawable-xhdpi/btn_play_yellow.png deleted file mode 100644 index cb30da1cd..000000000 Binary files a/common/src/main/res/drawable-xhdpi/btn_play_yellow.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/btn_play_yellow.webp b/common/src/main/res/drawable-xhdpi/btn_play_yellow.webp new file mode 100644 index 000000000..85f638de7 Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/btn_play_yellow.webp differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_close.png b/common/src/main/res/drawable-xhdpi/common_btn_close.png deleted file mode 100644 index d40163110..000000000 Binary files a/common/src/main/res/drawable-xhdpi/common_btn_close.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_edit.png b/common/src/main/res/drawable-xhdpi/common_btn_edit.png deleted file mode 100644 index 2ba8e0f3f..000000000 Binary files a/common/src/main/res/drawable-xhdpi/common_btn_edit.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_pause.png b/common/src/main/res/drawable-xhdpi/common_btn_pause.png deleted file mode 100644 index 8c297f26b..000000000 Binary files a/common/src/main/res/drawable-xhdpi/common_btn_pause.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_pause.webp b/common/src/main/res/drawable-xhdpi/common_btn_pause.webp new file mode 100644 index 000000000..9bd5ab5fe Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/common_btn_pause.webp differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_play.png b/common/src/main/res/drawable-xhdpi/common_btn_play.png deleted file mode 100644 index cb30da1cd..000000000 Binary files a/common/src/main/res/drawable-xhdpi/common_btn_play.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_play.webp b/common/src/main/res/drawable-xhdpi/common_btn_play.webp new file mode 100644 index 000000000..85f638de7 Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/common_btn_play.webp differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_save.png b/common/src/main/res/drawable-xhdpi/common_btn_save.png deleted file mode 100644 index 97e263881..000000000 Binary files a/common/src/main/res/drawable-xhdpi/common_btn_save.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_share.png b/common/src/main/res/drawable-xhdpi/common_btn_share.png deleted file mode 100644 index a87025786..000000000 Binary files a/common/src/main/res/drawable-xhdpi/common_btn_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_share.webp b/common/src/main/res/drawable-xhdpi/common_btn_share.webp new file mode 100644 index 000000000..3e74912b0 Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/common_btn_share.webp differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_speaker_off.png b/common/src/main/res/drawable-xhdpi/common_btn_speaker_off.png deleted file mode 100644 index 8642546b3..000000000 Binary files a/common/src/main/res/drawable-xhdpi/common_btn_speaker_off.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_speaker_off.webp b/common/src/main/res/drawable-xhdpi/common_btn_speaker_off.webp new file mode 100644 index 000000000..934ea0f5a Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/common_btn_speaker_off.webp differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_speaker_on.png b/common/src/main/res/drawable-xhdpi/common_btn_speaker_on.png deleted file mode 100644 index 982a39f2f..000000000 Binary files a/common/src/main/res/drawable-xhdpi/common_btn_speaker_on.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/common_btn_speaker_on.webp b/common/src/main/res/drawable-xhdpi/common_btn_speaker_on.webp new file mode 100644 index 000000000..55325bb08 Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/common_btn_speaker_on.webp differ diff --git a/common/src/main/res/drawable-xhdpi/games_share.png b/common/src/main/res/drawable-xhdpi/games_share.png deleted file mode 100644 index 33572337f..000000000 Binary files a/common/src/main/res/drawable-xhdpi/games_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/games_share.webp b/common/src/main/res/drawable-xhdpi/games_share.webp new file mode 100644 index 000000000..ae69a9dc7 Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/games_share.webp differ diff --git a/common/src/main/res/drawable-xhdpi/games_share_pressed.png b/common/src/main/res/drawable-xhdpi/games_share_pressed.png deleted file mode 100644 index 84dede046..000000000 Binary files a/common/src/main/res/drawable-xhdpi/games_share_pressed.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/games_share_pressed.webp b/common/src/main/res/drawable-xhdpi/games_share_pressed.webp new file mode 100644 index 000000000..fa41e2e74 Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/games_share_pressed.webp differ diff --git a/common/src/main/res/drawable-xhdpi/ic_launcher_foreground.webp b/common/src/main/res/drawable-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..b34f4c381 Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/ic_launcher_foreground.webp differ diff --git a/common/src/main/res/drawable-xhdpi/icon_check.png b/common/src/main/res/drawable-xhdpi/icon_check.png deleted file mode 100644 index e5c764875..000000000 Binary files a/common/src/main/res/drawable-xhdpi/icon_check.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/icon_close.png b/common/src/main/res/drawable-xhdpi/icon_close.png deleted file mode 100644 index f215dc37f..000000000 Binary files a/common/src/main/res/drawable-xhdpi/icon_close.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/icon_edit.png b/common/src/main/res/drawable-xhdpi/icon_edit.png deleted file mode 100644 index 6555e4b80..000000000 Binary files a/common/src/main/res/drawable-xhdpi/icon_edit.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/icon_pause.png b/common/src/main/res/drawable-xhdpi/icon_pause.png deleted file mode 100644 index 8d1dff589..000000000 Binary files a/common/src/main/res/drawable-xhdpi/icon_pause.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/icon_play.png b/common/src/main/res/drawable-xhdpi/icon_play.png deleted file mode 100644 index 46ac38ba3..000000000 Binary files a/common/src/main/res/drawable-xhdpi/icon_play.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/icon_play_again.png b/common/src/main/res/drawable-xhdpi/icon_play_again.png deleted file mode 100644 index d84001e7e..000000000 Binary files a/common/src/main/res/drawable-xhdpi/icon_play_again.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/icon_speaker_off.png b/common/src/main/res/drawable-xhdpi/icon_speaker_off.png deleted file mode 100644 index 4c65966a9..000000000 Binary files a/common/src/main/res/drawable-xhdpi/icon_speaker_off.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/icon_speaker_on.png b/common/src/main/res/drawable-xhdpi/icon_speaker_on.png deleted file mode 100644 index ece7198ed..000000000 Binary files a/common/src/main/res/drawable-xhdpi/icon_speaker_on.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/ornament.webp b/common/src/main/res/drawable-xhdpi/ornament.webp new file mode 100644 index 000000000..1dc54105d Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/ornament.webp differ diff --git a/common/src/main/res/drawable-xhdpi/winner.png b/common/src/main/res/drawable-xhdpi/winner.png deleted file mode 100644 index 4c7e1e9d3..000000000 Binary files a/common/src/main/res/drawable-xhdpi/winner.png and /dev/null differ diff --git a/common/src/main/res/drawable-xhdpi/winner.webp b/common/src/main/res/drawable-xhdpi/winner.webp new file mode 100644 index 000000000..549646ee0 Binary files /dev/null and b/common/src/main/res/drawable-xhdpi/winner.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/btn_pause_purple.png b/common/src/main/res/drawable-xxhdpi/btn_pause_purple.png deleted file mode 100644 index b20683bfa..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/btn_pause_purple.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/btn_play_yellow.png b/common/src/main/res/drawable-xxhdpi/btn_play_yellow.png deleted file mode 100644 index 658bc1b9b..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/btn_play_yellow.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/btn_play_yellow.webp b/common/src/main/res/drawable-xxhdpi/btn_play_yellow.webp new file mode 100644 index 000000000..4f4ea8121 Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/btn_play_yellow.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_close.png b/common/src/main/res/drawable-xxhdpi/common_btn_close.png deleted file mode 100644 index 188a9cedb..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/common_btn_close.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_edit.png b/common/src/main/res/drawable-xxhdpi/common_btn_edit.png deleted file mode 100644 index eca9f1ffa..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/common_btn_edit.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_pause.png b/common/src/main/res/drawable-xxhdpi/common_btn_pause.png deleted file mode 100644 index b20683bfa..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/common_btn_pause.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_pause.webp b/common/src/main/res/drawable-xxhdpi/common_btn_pause.webp new file mode 100644 index 000000000..5b268d76f Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/common_btn_pause.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_play.png b/common/src/main/res/drawable-xxhdpi/common_btn_play.png deleted file mode 100644 index 658bc1b9b..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/common_btn_play.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_play.webp b/common/src/main/res/drawable-xxhdpi/common_btn_play.webp new file mode 100644 index 000000000..4f4ea8121 Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/common_btn_play.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_save.png b/common/src/main/res/drawable-xxhdpi/common_btn_save.png deleted file mode 100644 index 7b0e15ea9..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/common_btn_save.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_share.png b/common/src/main/res/drawable-xxhdpi/common_btn_share.png deleted file mode 100644 index 8a0564a01..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/common_btn_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_share.webp b/common/src/main/res/drawable-xxhdpi/common_btn_share.webp new file mode 100644 index 000000000..32e3c528d Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/common_btn_share.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_speaker_off.png b/common/src/main/res/drawable-xxhdpi/common_btn_speaker_off.png deleted file mode 100644 index 958d055e9..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/common_btn_speaker_off.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_speaker_off.webp b/common/src/main/res/drawable-xxhdpi/common_btn_speaker_off.webp new file mode 100644 index 000000000..a445bf546 Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/common_btn_speaker_off.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_speaker_on.png b/common/src/main/res/drawable-xxhdpi/common_btn_speaker_on.png deleted file mode 100644 index 596bb60f3..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/common_btn_speaker_on.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/common_btn_speaker_on.webp b/common/src/main/res/drawable-xxhdpi/common_btn_speaker_on.webp new file mode 100644 index 000000000..871117ad9 Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/common_btn_speaker_on.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/games_share.png b/common/src/main/res/drawable-xxhdpi/games_share.png deleted file mode 100644 index e7e56be33..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/games_share.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/games_share.webp b/common/src/main/res/drawable-xxhdpi/games_share.webp new file mode 100644 index 000000000..8c3a0a29f Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/games_share.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/games_share_pressed.png b/common/src/main/res/drawable-xxhdpi/games_share_pressed.png deleted file mode 100644 index a0bde7735..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/games_share_pressed.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/games_share_pressed.webp b/common/src/main/res/drawable-xxhdpi/games_share_pressed.webp new file mode 100644 index 000000000..ba3fda338 Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/games_share_pressed.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/ic_launcher_foreground.webp b/common/src/main/res/drawable-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..1147db515 Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/ic_launcher_foreground.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/icon_check.png b/common/src/main/res/drawable-xxhdpi/icon_check.png deleted file mode 100644 index 317c3030e..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/icon_check.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/icon_close.png b/common/src/main/res/drawable-xxhdpi/icon_close.png deleted file mode 100644 index 9b2953798..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/icon_close.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/icon_edit.png b/common/src/main/res/drawable-xxhdpi/icon_edit.png deleted file mode 100644 index c5175d3ac..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/icon_edit.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/icon_pause.png b/common/src/main/res/drawable-xxhdpi/icon_pause.png deleted file mode 100644 index bb1f2649d..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/icon_pause.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/icon_play.png b/common/src/main/res/drawable-xxhdpi/icon_play.png deleted file mode 100644 index 637d191ac..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/icon_play.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/icon_play_again.png b/common/src/main/res/drawable-xxhdpi/icon_play_again.png deleted file mode 100644 index 8406a56a6..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/icon_play_again.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/icon_speaker_off.png b/common/src/main/res/drawable-xxhdpi/icon_speaker_off.png deleted file mode 100644 index 8d6877325..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/icon_speaker_off.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/icon_speaker_on.png b/common/src/main/res/drawable-xxhdpi/icon_speaker_on.png deleted file mode 100644 index 98fae7465..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/icon_speaker_on.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/ornament.webp b/common/src/main/res/drawable-xxhdpi/ornament.webp new file mode 100644 index 000000000..84e0c21d1 Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/ornament.webp differ diff --git a/common/src/main/res/drawable-xxhdpi/winner.png b/common/src/main/res/drawable-xxhdpi/winner.png deleted file mode 100644 index 2b4431a6c..000000000 Binary files a/common/src/main/res/drawable-xxhdpi/winner.png and /dev/null differ diff --git a/common/src/main/res/drawable-xxhdpi/winner.webp b/common/src/main/res/drawable-xxhdpi/winner.webp new file mode 100644 index 000000000..a1e9da6d7 Binary files /dev/null and b/common/src/main/res/drawable-xxhdpi/winner.webp differ diff --git a/common/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.webp b/common/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..423ccbbaa Binary files /dev/null and b/common/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/common/src/main/res/drawable-xxxhdpi/signin.9.png b/common/src/main/res/drawable-xxxhdpi/signin.9.png index df3c56320..9c332f917 100644 Binary files a/common/src/main/res/drawable-xxxhdpi/signin.9.png and b/common/src/main/res/drawable-xxxhdpi/signin.9.png differ diff --git a/common/src/main/res/drawable/avd_loading_bar.xml b/common/src/main/res/drawable/avd_loading_bar.xml new file mode 100644 index 000000000..020e2cc61 --- /dev/null +++ b/common/src/main/res/drawable/avd_loading_bar.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/common/src/main/res/drawable/bg_blue_rect_light.xml b/common/src/main/res/drawable/bg_blue_rect_light.xml index ffcaa1e82..1eb700d9a 100644 --- a/common/src/main/res/drawable/bg_blue_rect_light.xml +++ b/common/src/main/res/drawable/bg_blue_rect_light.xml @@ -1,12 +1,12 @@ + + + + + diff --git a/common/src/main/res/drawable/bg_top.xml b/common/src/main/res/drawable/bg_top.xml new file mode 100644 index 000000000..041fd2344 --- /dev/null +++ b/common/src/main/res/drawable/bg_top.xml @@ -0,0 +1,24 @@ + + + + + + + + + + diff --git a/common/src/main/res/drawable/btn_pause_foreground.xml b/common/src/main/res/drawable/btn_pause_foreground.xml new file mode 100644 index 000000000..21aab74dd --- /dev/null +++ b/common/src/main/res/drawable/btn_pause_foreground.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/common/src/main/res/drawable/btn_play_foreground.xml b/common/src/main/res/drawable/btn_play_foreground.xml new file mode 100644 index 000000000..938f25a0e --- /dev/null +++ b/common/src/main/res/drawable/btn_play_foreground.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/common/src/main/res/drawable/btn_speaker_mute.xml b/common/src/main/res/drawable/btn_speaker_mute.xml new file mode 100644 index 000000000..d00b39b85 --- /dev/null +++ b/common/src/main/res/drawable/btn_speaker_mute.xml @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/common/src/main/res/drawable/btn_speaker_on_foreground.xml b/common/src/main/res/drawable/btn_speaker_on_foreground.xml new file mode 100644 index 000000000..ce922bea6 --- /dev/null +++ b/common/src/main/res/drawable/btn_speaker_on_foreground.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/common/src/main/res/drawable/ic_cloud_off_white_48.xml b/common/src/main/res/drawable/ic_cloud_off_white_48.xml index 5ea6d393e..f15b3872e 100644 --- a/common/src/main/res/drawable/ic_cloud_off_white_48.xml +++ b/common/src/main/res/drawable/ic_cloud_off_white_48.xml @@ -1,11 +1,11 @@ + + + + diff --git a/common/src/main/res/drawable/ic_launcher_foreground_inset.xml b/common/src/main/res/drawable/ic_launcher_foreground_inset.xml new file mode 100644 index 000000000..6480cd03e --- /dev/null +++ b/common/src/main/res/drawable/ic_launcher_foreground_inset.xml @@ -0,0 +1,22 @@ + + + diff --git a/common/src/main/res/drawable/ic_pause_black_24dp.xml b/common/src/main/res/drawable/ic_pause_black_24dp.xml new file mode 100644 index 000000000..92764cbce --- /dev/null +++ b/common/src/main/res/drawable/ic_pause_black_24dp.xml @@ -0,0 +1,25 @@ + + + + diff --git a/common/src/main/res/drawable/loading_bar.xml b/common/src/main/res/drawable/loading_bar.xml new file mode 100644 index 000000000..6f108c962 --- /dev/null +++ b/common/src/main/res/drawable/loading_bar.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/main/res/drawable/score_background.xml b/common/src/main/res/drawable/score_background.xml index 0bd39554b..cf6119f34 100644 --- a/common/src/main/res/drawable/score_background.xml +++ b/common/src/main/res/drawable/score_background.xml @@ -1,12 +1,12 @@ + diff --git a/common/src/main/res/layout/activity_splash.xml b/common/src/main/res/layout/activity_splash.xml deleted file mode 100644 index b2d147171..000000000 --- a/common/src/main/res/layout/activity_splash.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - diff --git a/common/src/main/res/layout/layout_loading_screen.xml b/common/src/main/res/layout/layout_loading_screen.xml new file mode 100644 index 000000000..f5ddff6ee --- /dev/null +++ b/common/src/main/res/layout/layout_loading_screen.xml @@ -0,0 +1,39 @@ + + + + + + + + + diff --git a/common/src/main/res/mipmap-anydpi-v26/ic_launcher_santa.xml b/common/src/main/res/mipmap-anydpi-v26/ic_launcher_santa.xml new file mode 100644 index 000000000..18c2c3ef7 --- /dev/null +++ b/common/src/main/res/mipmap-anydpi-v26/ic_launcher_santa.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/common/src/main/res/mipmap-hdpi/ic_launcher_santa.webp b/common/src/main/res/mipmap-hdpi/ic_launcher_santa.webp new file mode 100644 index 000000000..1dfb88423 Binary files /dev/null and b/common/src/main/res/mipmap-hdpi/ic_launcher_santa.webp differ diff --git a/common/src/main/res/mipmap-mdpi/ic_launcher_santa.webp b/common/src/main/res/mipmap-mdpi/ic_launcher_santa.webp new file mode 100644 index 000000000..b409ffe6e Binary files /dev/null and b/common/src/main/res/mipmap-mdpi/ic_launcher_santa.webp differ diff --git a/common/src/main/res/mipmap-xhdpi/ic_launcher_santa.webp b/common/src/main/res/mipmap-xhdpi/ic_launcher_santa.webp new file mode 100644 index 000000000..1ca89b68a Binary files /dev/null and b/common/src/main/res/mipmap-xhdpi/ic_launcher_santa.webp differ diff --git a/common/src/main/res/mipmap-xxhdpi/ic_launcher_santa.webp b/common/src/main/res/mipmap-xxhdpi/ic_launcher_santa.webp new file mode 100644 index 000000000..ae94054f7 Binary files /dev/null and b/common/src/main/res/mipmap-xxhdpi/ic_launcher_santa.webp differ diff --git a/common/src/main/res/mipmap-xxxhdpi/ic_launcher_santa.webp b/common/src/main/res/mipmap-xxxhdpi/ic_launcher_santa.webp new file mode 100644 index 000000000..cb4578f71 Binary files /dev/null and b/common/src/main/res/mipmap-xxxhdpi/ic_launcher_santa.webp differ diff --git a/common/src/main/res/values-af/strings.xml b/common/src/main/res/values-af/strings.xml index 23cee5f16..b0a18dc4f 100644 --- a/common/src/main/res/values-af/strings.xml +++ b/common/src/main/res/values-af/strings.xml @@ -1,11 +1,11 @@ - Terug na kaart - Terug na dorpie - Hierdie weergawe van Waar is Kersvader is verouderd. Besoek asseblief die Play Store om na die nuutste weergawe op te dateer. + Terug na kaart + Terug na dorpie + Hierdie weergawe van Waar is Kersvader is verouderd. Besoek asseblief die Play Store om na die nuutste weergawe op te dateer. + Speletjie verby + Laai tans skerm + Hervat + Herspeel + Tuis + Deel + Kon nie %1$s aflaai nie. Werk jou netwerkverbinding? diff --git a/common/src/main/res/values-af/strings_appname.xml b/common/src/main/res/values-af/strings_appname.xml new file mode 100644 index 000000000..24834203e --- /dev/null +++ b/common/src/main/res/values-af/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Waar is Kersvader + diff --git a/common/src/main/res/values-af/strings_doodles.xml b/common/src/main/res/values-af/strings_doodles.xml new file mode 100644 index 000000000..c7d249b83 --- /dev/null +++ b/common/src/main/res/values-af/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Sneeubal-hardloop + Pikkewynswem + Geskenkgooi + Beste: %1$s + Demp + Ontdemp + Maak toe + Laat wag + BESTE TELLING: <b>%1$s</b> + %1$.1f s. + %1$d m + diff --git a/common/src/main/res/values-af/strings_gamenames.xml b/common/src/main/res/values-af/strings_gamenames.xml index 1f7c23b9c..2ec794ba4 100644 --- a/common/src/main/res/values-af/strings_gamenames.xml +++ b/common/src/main/res/values-af/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Geheue - Elf-stralerpak - Rocket Sleigh - Dasher Dancer - Snowdown - Stadvasvra - Geskenksoektog + Gumball + Geheue + Elf-stralerpak + Vuurpylslee + Dasher-danser + Stadvasvra + Geskenksoektog + Kersvader-kiekie + Presentgooi + Elf-stralerpak + Noordpool-lughawe + Geskenkkettie + Kersvader-tekeninge + Kode-Boogie + Kodelaboratorium + Gumball-kantel + Elf-jamgroep + Pikkewynjaagtog + Geskenkhop + Aflaai van geskenke + Rudolph die jaer + Rendier-hardloper + Kersvader-soektog + Kersvader-selfie + Seisoen van geskenke + Elf-ski + Sneeubalstorm + Kodeer \'n sneeuvlokkie + Spoedskets + Toedraaistryd + Elf-maker + Terug werk toe + Kantoorpoets + Saamryklub diff --git a/common/src/main/res/values-af/strings_invite.xml b/common/src/main/res/values-af/strings_invite.xml index 20440e569..8c6daa72e 100644 --- a/common/src/main/res/values-af/strings_invite.xml +++ b/common/src/main/res/values-af/strings_invite.xml @@ -1,12 +1,12 @@ - Nooi jou vriende om Kersvader met Google te volg - Probeer Santa Tracker en kyk hoe Kersvader om die wêreld vlieg! - Ek het %1$d aangeteken deur die %2$s-speletjie met die elwe in Santa Tracker te speel. Kan jy dit klop? + Nooi jou vriende om Kersvader met Google te volg + Probeer Santa Tracker en kyk hoe Kersvader om die wêreld vlieg! + Ek het %1$d aangeteken deur die %2$s-speletjie met die elwe in Santa Tracker te speel. Kan jy dit klop? diff --git a/common/src/main/res/values-af/strings_jetpack.xml b/common/src/main/res/values-af/strings_jetpack.xml index d43ba3abb..52319bc2f 100644 --- a/common/src/main/res/values-af/strings_jetpack.xml +++ b/common/src/main/res/values-af/strings_jetpack.xml @@ -1,12 +1,12 @@ - Meld aan om prestasies te ontsluit en jou telling te plaas! - Speel weer - Gaan terug na kaart - TELLING - Gaan terug na kaart + Meld aan om prestasies te ontsluit en jou telling te plaas! + Speel weer + Gaan terug na kaart + TELLING diff --git a/common/src/main/res/values-ar-rXB/strings.xml b/common/src/main/res/values-ar-rXB/strings.xml index c6b0af13b..02d4555ea 100644 --- a/common/src/main/res/values-ar-rXB/strings.xml +++ b/common/src/main/res/values-ar-rXB/strings.xml @@ -1,11 +1,11 @@ - ‏‮Back‬‏ ‏‮to‬‏ ‏‮map‬‏ - ‏‮Back‬‏ ‏‮to‬‏ ‏‮village‬‏ - ‏‮This‬‏ ‏‮version‬‏ ‏‮of‬‏ ‏‮Santa‬‏ ‏‮Tracker‬‏ ‏‮is‬‏ ‏‮out‬‏ ‏‮of‬‏ ‏‮date‬‏. ‏‮Please‬‏ ‏‮visit‬‏ ‏‮the‬‏ ‏‮Play‬‏ ‏‮Store‬‏ ‏‮to‬‏ ‏‮update‬‏ ‏‮to‬‏ ‏‮the‬‏ ‏‮latest‬‏ ‏‮version‬‏. + ‏‮Back‬‏ ‏‮to‬‏ ‏‮map‬‏ + ‏‮Back‬‏ ‏‮to‬‏ ‏‮village‬‏ + ‏‮This‬‏ ‏‮version‬‏ ‏‮of‬‏ ‏‮Santa‬‏ ‏‮Tracker‬‏ ‏‮is‬‏ ‏‮out‬‏ ‏‮of‬‏ ‏‮date‬‏. ‏‮Please‬‏ ‏‮visit‬‏ ‏‮the‬‏ ‏‮Play‬‏ ‏‮Store‬‏ ‏‮to‬‏ ‏‮update‬‏ ‏‮to‬‏ ‏‮the‬‏ ‏‮latest‬‏ ‏‮version‬‏. + ‏‮Game‬‏ ‏‮Over‬‏ + ‏‮Loading‬‏ ‏‮screen‬‏ + ‏‮Resume‬‏ + ‏‮Replay‬‏ + ‏‮Home‬‏ + ‏‮Share‬‏ + ‏‮An‬‏ ‏‮error‬‏ ‏‮occurred‬‏ ‏‮while‬‏ ‏‮downloading‬‏ %1$s. ‏‮Is‬‏ ‏‮your‬‏ ‏‮network‬‏ ‏‮connection‬‏ ‏‮working‬‏? diff --git a/common/src/main/res/values-ar-rXB/strings_appname.xml b/common/src/main/res/values-ar-rXB/strings_appname.xml new file mode 100644 index 000000000..9e3acc77d --- /dev/null +++ b/common/src/main/res/values-ar-rXB/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + ‏‮Santa‬‏ ‏‮Tracker‬‏ + diff --git a/common/src/main/res/values-ar-rXB/strings_doodles.xml b/common/src/main/res/values-ar-rXB/strings_doodles.xml new file mode 100644 index 000000000..4bbbd55c6 --- /dev/null +++ b/common/src/main/res/values-ar-rXB/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + ‏‮Snowball‬‏ ‏‮Run‬‏ + ‏‮Penguin‬‏ ‏‮Swim‬‏ + ‏‮Present‬‏ ‏‮Throw‬‏ + ‏‮Best‬‏: %1$s + ‏‮Mute‬‏ + ‏‮Unmute‬‏ + ‏‮Close‬‏ + ‏‮Pause‬‏ + ‏‮BEST‬‏ ‏‮SCORE‬‏: <b>%1$s</b> + %1$.1f‏‮s‬‏ + %1$d‏‮m‬‏ + diff --git a/common/src/main/res/values-ar-rXB/strings_gamenames.xml b/common/src/main/res/values-ar-rXB/strings_gamenames.xml index 3247a28d1..612a70efb 100644 --- a/common/src/main/res/values-ar-rXB/strings_gamenames.xml +++ b/common/src/main/res/values-ar-rXB/strings_gamenames.xml @@ -1,12 +1,12 @@ - ‏‮Gumball‬‏ - ‏‮Memory‬‏ - ‏‮Elf‬‏ ‏‮Jetpack‬‏ - ‏‮Rocket‬‏ ‏‮Sleigh‬‏ - ‏‮Dasher‬‏ ‏‮Dancer‬‏ - ‏‮Snowdown‬‏ - ‏‮City‬‏ ‏‮Quiz‬‏ - ‏‮Present‬‏ ‏‮Quest‬‏ + ‏‮Gumball‬‏ + ‏‮Memory‬‏ + ‏‮Elf‬‏ ‏‮Jetpack‬‏ + ‏‮Rocket‬‏ ‏‮Sleigh‬‏ + ‏‮Dasher‬‏ ‏‮Dancer‬‏ + ‏‮City‬‏ ‏‮Quiz‬‏ + ‏‮Present‬‏ ‏‮Quest‬‏ + ‏‮Santa‬‏ ‏‮Snap‬‏ + ‏‮Present‬‏ ‏‮Toss‬‏ + ‏‮Elf‬‏ ‏‮Jetpack‬‏ + ‏‮North‬‏ ‏‮Pole‬‏ ‏‮Airport‬‏ + ‏‮Gift‬‏ ‏‮Slingshot‬‏ + ‏‮Claus‬‏ ‏‮Draws‬‏ + ‏‮Code‬‏ ‏‮Boogie‬‏ + ‏‮Code‬‏ ‏‮Lab‬‏ + ‏‮Gumball‬‏ ‏‮Tilt‬‏ + ‏‮Elf‬‏ ‏‮Jamband‬‏ + ‏‮Penguin‬‏ ‏‮Dash‬‏ + ‏‮Present‬‏ ‏‮Bounce‬‏ + ‏‮Present‬‏ ‏‮Drop‬‏ + ‏‮Rudolph‬‏ ‏‮Racer‬‏ + ‏‮Reindeer‬‏ ‏‮Runner‬‏ + ‏‮Santa‬‏ ‏‮Search‬‏ + ‏‮Santa‬‏ ‏‮Selfie‬‏ + ‏‮Season‬‏ ‏‮of‬‏ ‏‮Giving‬‏ + ‏‮Elf‬‏ ‏‮Ski‬‏ + ‏‮Snowball‬‏ ‏‮Storm‬‏ + ‏‮Code‬‏ ‏‮a‬‏ ‏‮Snowflake‬‏ + ‏‮Speed‬‏ ‏‮Sketch‬‏ + ‏‮Wrap‬‏ ‏‮Battle‬‏ + ‏‮Elf‬‏ ‏‮Maker‬‏ + ‏‮Back‬‏ ‏‮to‬‏ ‏‮Work‬‏ + ‏‮Office‬‏ ‏‮Prank‬‏ + ‏‮Carpool‬‏ diff --git a/common/src/main/res/values-ar-rXB/strings_invite.xml b/common/src/main/res/values-ar-rXB/strings_invite.xml index e3fc3f371..45c8cb58c 100644 --- a/common/src/main/res/values-ar-rXB/strings_invite.xml +++ b/common/src/main/res/values-ar-rXB/strings_invite.xml @@ -1,12 +1,12 @@ - ‏‮Invite‬‏ ‏‮your‬‏ ‏‮friends‬‏ ‏‮to‬‏ ‏‮track‬‏ ‏‮Santa‬‏ ‏‮with‬‏ ‏‮Google‬‏ - ‏‮Try‬‏ ‏‮Santa‬‏ ‏‮Tracker‬‏ ‏‮and‬‏ ‏‮watch‬‏ ‏‮Santa‬‏ ‏‮fly‬‏ ‏‮around‬‏ ‏‮the‬‏ ‏‮world‬‏! - ‏‮I‬‏ ‏‮scored‬‏ %1$d ‏‮playing‬‏ ‏‮the‬‏ %2$s ‏‮game‬‏ ‏‮with‬‏ ‏‮the‬‏ ‏‮elves‬‏ ‏‮in‬‏ ‏‮Google‬‏\'‏‮s‬‏ ‏‮Santa‬‏ ‏‮Tracker‬‏, ‏‮can‬‏ ‏‮you‬‏ ‏‮beat‬‏ ‏‮that‬‏? + ‏‮Invite‬‏ ‏‮your‬‏ ‏‮friends‬‏ ‏‮to‬‏ ‏‮track‬‏ ‏‮Santa‬‏ ‏‮with‬‏ ‏‮Google‬‏ + ‏‮Try‬‏ ‏‮Santa‬‏ ‏‮Tracker‬‏ ‏‮and‬‏ ‏‮watch‬‏ ‏‮Santa‬‏ ‏‮fly‬‏ ‏‮around‬‏ ‏‮the‬‏ ‏‮world‬‏! + ‏‮I‬‏ ‏‮scored‬‏ %1$d ‏‮playing‬‏ ‏‮the‬‏ %2$s ‏‮game‬‏ ‏‮with‬‏ ‏‮the‬‏ ‏‮elves‬‏ ‏‮in‬‏ ‏‮Google‬‏\'‏‮s‬‏ ‏‮Santa‬‏ ‏‮Tracker‬‏, ‏‮can‬‏ ‏‮you‬‏ ‏‮beat‬‏ ‏‮that‬‏? diff --git a/common/src/main/res/values-ar-rXB/strings_jetpack.xml b/common/src/main/res/values-ar-rXB/strings_jetpack.xml index 1894426f5..aedf5c445 100644 --- a/common/src/main/res/values-ar-rXB/strings_jetpack.xml +++ b/common/src/main/res/values-ar-rXB/strings_jetpack.xml @@ -1,12 +1,12 @@ - ‏‮Sign‬‏ ‏‮in‬‏ ‏‮to‬‏ ‏‮unlock‬‏ ‏‮achievements‬‏ ‏‮and‬‏ ‏‮post‬‏ ‏‮your‬‏ ‏‮score‬‏! - ‏‮Play‬‏ ‏‮Again‬‏ - ‏‮Return‬‏ ‏‮to‬‏ ‏‮Map‬‏ - ‏‮SCORE‬‏ - ‏‮Return‬‏ ‏‮to‬‏ ‏‮map‬‏ + ‏‮Sign‬‏ ‏‮in‬‏ ‏‮to‬‏ ‏‮unlock‬‏ ‏‮achievements‬‏ ‏‮and‬‏ ‏‮post‬‏ ‏‮your‬‏ ‏‮score‬‏! + ‏‮Play‬‏ ‏‮Again‬‏ + ‏‮Return‬‏ ‏‮to‬‏ ‏‮Map‬‏ + ‏‮SCORE‬‏ diff --git a/common/src/main/res/values-bg/strings.xml b/common/src/main/res/values-bg/strings.xml index 39f4c0325..c7278d244 100644 --- a/common/src/main/res/values-bg/strings.xml +++ b/common/src/main/res/values-bg/strings.xml @@ -1,11 +1,11 @@ - Назад към картата - Назад към селцето - Тази версия на приложението „Къде е Дядо Коледа“ не е актуална. Моля, посетете Google Play Магазин, за да актуализирате до най-новата версия. + Назад към картата + Назад към селцето + Тази версия на приложението „Къде е Дядо Коледа“ не е актуална. Моля, посетете Google Play Магазин, за да актуализирате до най-новата версия. + Край на играта + Екранът се зарежда + Възобновяване + Повторно пускане + Начална страница + Споделяне + При изтеглянето на %1$s възникна грешка. Имате ли връзка с интернет? diff --git a/common/src/main/res/values-bg/strings_appname.xml b/common/src/main/res/values-bg/strings_appname.xml new file mode 100644 index 000000000..77829cbf9 --- /dev/null +++ b/common/src/main/res/values-bg/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Къде е Дядо Коледа + diff --git a/common/src/main/res/values-bg/strings_doodles.xml b/common/src/main/res/values-bg/strings_doodles.xml new file mode 100644 index 000000000..daafc7357 --- /dev/null +++ b/common/src/main/res/values-bg/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Замерване със снежни топки + Плуващият пингвин + Хвърляне на подаръци + Най-добър резултат: %1$s + Без звук + Включване на звука + Затваряне + Поставяне на пауза + НАЙ-ДОБЪР РЕЗУЛТАТ: <b>%1$s</b> + %1$.1f сек + %1$d м + diff --git a/common/src/main/res/values-bg/strings_gamenames.xml b/common/src/main/res/values-bg/strings_gamenames.xml index 2cacbbefe..912d0e844 100644 --- a/common/src/main/res/values-bg/strings_gamenames.xml +++ b/common/src/main/res/values-bg/strings_gamenames.xml @@ -1,12 +1,12 @@ - Гъмбол - Мемори - Реактивно джудже - Rocket Sleigh - Dasher Dancer - Snowdown - Географска викторина - Търсене на подаръци + Гъмбол + Мемори + Реактивно джудже + Rocket Sleigh + Dasher Dancer + Географска викторина + Търсене на подаръци + Коледни селфита + Хвърляне на подаръци + Реактивно джудже + Летище на Северния полюс + Стреляне с подаръци + Рисунки с коледно настроение + Танц за кодиране + Лаборатория за кодиране + Балансиране на топчета от дъвка + Джуджешка музика + Бързият пингвин + Подскачащи подаръци + Пускане на подаръци + Надпревара с Рудолф + Препускане с елен + Търсене на Дядо Коледа + Селфи на Дядо Коледа + Сезонът на щедростта + Джуджета на ски + Бой със снежни топки + Кодиране на снежинка + Рисуване върху заскрежено стъкло + Опаковане на подаръци + Създаване на джудже + Отново на работа + Офис шега + Споделено пътуване diff --git a/common/src/main/res/values-bg/strings_invite.xml b/common/src/main/res/values-bg/strings_invite.xml index 3cf4531ad..8e8439f6e 100644 --- a/common/src/main/res/values-bg/strings_invite.xml +++ b/common/src/main/res/values-bg/strings_invite.xml @@ -1,12 +1,12 @@ - Поканете приятелите си да следят Дядо Коледа с Google - Изпробвайте „Къде е Дядо Коледа“ и гледайте как белобрадият старец лети по цял свят! - Постигнах %1$d точки в играта %2$s с джуджетата в приложението на Google „Къде е Дядо Коледа“. Можете ли да надминете резултата ми? + Поканете приятелите си да следят Дядо Коледа с Google + Изпробвайте „Къде е Дядо Коледа“ и гледайте как белобрадият старец лети по цял свят! + Постигнах %1$d точки в играта %2$s с джуджетата в приложението на Google „Къде е Дядо Коледа“. Можете ли да надминете резултата ми? diff --git a/common/src/main/res/values-bg/strings_jetpack.xml b/common/src/main/res/values-bg/strings_jetpack.xml index 05ca6266a..c2833219e 100644 --- a/common/src/main/res/values-bg/strings_jetpack.xml +++ b/common/src/main/res/values-bg/strings_jetpack.xml @@ -1,12 +1,12 @@ - Влезте в профила си, за да отключвате постижения и да публикувате резултата си! - Нова игра - Назад към картата - РЕЗУЛТАТ - Назад към картата + Влезте в профила си, за да отключвате постижения и да публикувате резултата си! + Нова игра + Назад към картата + РЕЗУЛТАТ diff --git a/common/src/main/res/values-ca/strings.xml b/common/src/main/res/values-ca/strings.xml index 1f82adf7c..439d5b331 100644 --- a/common/src/main/res/values-ca/strings.xml +++ b/common/src/main/res/values-ca/strings.xml @@ -1,11 +1,11 @@ - Torna al mapa - Torna a l\'aldea - Aquesta versió de Segueix el Pare Noel està obsoleta. Visita Play Store per actualitzar l\'aplicació a la versió més recent. + Torna al mapa + Torna al llogaret + Aquesta versió de Segueix el Pare Noel està obsoleta. Ves a Play Store per actualitzar l\'aplicació a la versió més recent. + Fi de la partida + S\'està carregant la pantalla + Reprèn + Torna a jugar + Inici + Comparteix + S\'ha produït un error en baixar %1$s. Comprova que la connexió a la xarxa funcioni. diff --git a/common/src/main/res/values-ca/strings_appname.xml b/common/src/main/res/values-ca/strings_appname.xml new file mode 100644 index 000000000..bf6abca15 --- /dev/null +++ b/common/src/main/res/values-ca/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Segueix el Pare Noel + diff --git a/common/src/main/res/values-ca/strings_doodles.xml b/common/src/main/res/values-ca/strings_doodles.xml new file mode 100644 index 000000000..9533de6f3 --- /dev/null +++ b/common/src/main/res/values-ca/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Fuig de la bola de neu + Pingüí nedador + Llançament de regals + Millor puntuació: %1$s + Silencia + Deixa de silenciar + Tanca + Posa en pausa + MILLOR PUNTUACIÓ: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-ca/strings_gamenames.xml b/common/src/main/res/values-ca/strings_gamenames.xml index bd7f55d26..2e785a6a4 100644 --- a/common/src/main/res/values-ca/strings_gamenames.xml +++ b/common/src/main/res/values-ca/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Joc de les ciutats - Recerca de regals + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Joc de les ciutats + Recerca de regals + Fotos nadalenques + Llançament de regals + Elf amb motxilla propulsora + Aeroport del Pol Nord + Joc de tirar regals + Dibuixos de Nadal + El ball del codi + Laboratori de programació + Joc de guiar els caramels + La banda dels elfs + Carrera de pingüins + Joc de rebotar regals + Joc de repartir regals + La cursa de trineus de Rudolf + Ren a la carrera + On és el Pare Noel? + La selfie del Pare Noel + Temps de regals + Els elfs van a esquiar + Tempesta de boles de neu + Crea un floc de neu amb codi + Esbós ràpid + Batalla d\'embolicar regals + Creador d\'elfs + Tornada a la feina + Broma a l\'oficina + Cotxe compartit diff --git a/common/src/main/res/values-ca/strings_invite.xml b/common/src/main/res/values-ca/strings_invite.xml index 973f588ae..5343db9e5 100644 --- a/common/src/main/res/values-ca/strings_invite.xml +++ b/common/src/main/res/values-ca/strings_invite.xml @@ -1,12 +1,12 @@ - Convideu els vostres amics a seguir el Pare Noel amb Google - Prova l\'aplicació Segueix el Pare Noel i mira com el Pare Noel vola per tot el món. - He aconseguit %1$d punts jugant amb els elfs al joc %2$s a Segueix el Pare Noel de Google. Aviam si em guanyes! + Convida els teus amics a seguir el Pare Noel amb Google + Prova l\'aplicació Segueix el Pare Noel i mira com vola per tot el món. + He aconseguit %1$d punts jugant a %2$s amb els elfs a Segueix el Pare Noel de Google. Aviam si em guanyes! diff --git a/common/src/main/res/values-ca/strings_jetpack.xml b/common/src/main/res/values-ca/strings_jetpack.xml index e821119ab..e4a2b99b2 100644 --- a/common/src/main/res/values-ca/strings_jetpack.xml +++ b/common/src/main/res/values-ca/strings_jetpack.xml @@ -1,12 +1,12 @@ - Inicieu la sessió per desbloquejar assoliments i publicar la vostra puntuació - Torna a jugar - Torna al mapa - PUNTUACIÓ - Torna al mapa + Inicia la sessió per desbloquejar assoliments i publicar la teva puntuació + Torna a jugar + Torna al mapa + PUNTUACIÓ diff --git a/common/src/main/res/values-da/strings.xml b/common/src/main/res/values-da/strings.xml index 9b28ef62d..045da8932 100644 --- a/common/src/main/res/values-da/strings.xml +++ b/common/src/main/res/values-da/strings.xml @@ -1,11 +1,11 @@ - Tilbage til kortet - Tilbage til landsbyen - Denne version af Følg julemanden er forældet. Gå til Play Butik for at opdatere til den nyeste version. + Tilbage til kortet + Tilbage til landsbyen + Denne version af Følg julemanden er forældet. Gå til Play Butik for at opdatere til den nyeste version. + Spillet er slut + Indlæsningsskærm + Genoptag + Spil videre + Gå til start + Del + Der opstod en fejl under download af %1$s. Er din netværksforbindelse i orden? diff --git a/common/src/main/res/values-da/strings_appname.xml b/common/src/main/res/values-da/strings_appname.xml new file mode 100644 index 000000000..8ce902d60 --- /dev/null +++ b/common/src/main/res/values-da/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Følg julemanden + diff --git a/common/src/main/res/values-da/strings_doodles.xml b/common/src/main/res/values-da/strings_doodles.xml new file mode 100644 index 000000000..13c1b4977 --- /dev/null +++ b/common/src/main/res/values-da/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Løb fra snebolden + Pingvin på svømmetur + Gavekast + Højeste: %1$s + Slå lyden fra + Slå lyden til + Luk + Sæt på pause + HØJESTE SCORE: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-da/strings_gamenames.xml b/common/src/main/res/values-da/strings_gamenames.xml index d5d5b9f1a..5f2f68deb 100644 --- a/common/src/main/res/values-da/strings_gamenames.xml +++ b/common/src/main/res/values-da/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Raketslædespil - Julemandens rensdyr - Snowdown - Kortquiz - Gavejagten + Gumball + Memory + Elf Jetpack + Raketslædespil + Julemandens rensdyr + Kortquiz + Gavejagten + Julemands-snap + Gavekast + Nissejetpack + Nordpolens lufthavn + Slangebøsse med gaver + Julekruseduller + Kodeboogie + Kodelaboratorium + Rullende tyggegummikugler + Nissejamband + Pingvin med fart på + Gaveregn + Smid gaven + Racer-Rudolf + Få fat i gaverne med Rudolf + Find julemanden + Julemandsselfie + Årstiden for gaver + Nisseskiløb + Sneboldkrig + Lav et snefnug med kode + Hurtigtegner + Gaveindpakningens mester + Lav en nisse + Tilbage på arbejdet + Spøg på kontoret + Samkørsel diff --git a/common/src/main/res/values-da/strings_invite.xml b/common/src/main/res/values-da/strings_invite.xml index 519a6d708..847a3ec15 100644 --- a/common/src/main/res/values-da/strings_invite.xml +++ b/common/src/main/res/values-da/strings_invite.xml @@ -1,12 +1,12 @@ - Inviter dine venner til at følge julemanden med Google - Følg julemanden for at se ham flyve verden rundt! - Jeg fik en score på %1$d, da jeg spillede %2$s-spillet sammen med nisserne i Googles Følg julemanden. Kan du slå den score? + Inviter dine venner til at følge julemanden med Google + Følg julemanden for at se ham flyve verden rundt! + Jeg fik en score på %1$d, da jeg spillede %2$s-spillet sammen med nisserne i Googles Følg julemanden. Kan du slå den score? diff --git a/common/src/main/res/values-da/strings_jetpack.xml b/common/src/main/res/values-da/strings_jetpack.xml index adaa28980..eab21d974 100644 --- a/common/src/main/res/values-da/strings_jetpack.xml +++ b/common/src/main/res/values-da/strings_jetpack.xml @@ -1,12 +1,12 @@ - Log ind for at låse op for resultater og indsende dine point. - Spil igen - Tilbage til kortet - POINT - Tilbage til kortet + Log ind for at låse op for resultater og indsende dine point. + Spil igen + Tilbage til kortet + POINT diff --git a/common/src/main/res/values-de-rAT/strings.xml b/common/src/main/res/values-de-rAT/strings.xml index 34e7cbd5d..2bdc33741 100644 --- a/common/src/main/res/values-de-rAT/strings.xml +++ b/common/src/main/res/values-de-rAT/strings.xml @@ -1,11 +1,11 @@ - Zurück zur Karte - Zurück zum Dorf - Diese Version von \"Auf den Spuren des Weihnachtsmanns\" ist abgelaufen. Du kannst sie im Play Store aktualisieren. + Zurück zur Karte + Zurück zum Dorf + Diese Version von \"Auf den Spuren des Weihnachtsmanns\" ist abgelaufen. Du kannst sie im Play Store aktualisieren. + Game Over + Ladebildschirm + Fortsetzen + Wiederholen + Weiter + Teilen + Beim Download von %1$s ist ein Fehler aufgetreten. Funktioniert deine Netzwerkverbindung? diff --git a/common/src/main/res/values-de-rAT/strings_appname.xml b/common/src/main/res/values-de-rAT/strings_appname.xml new file mode 100644 index 000000000..f1644cdd9 --- /dev/null +++ b/common/src/main/res/values-de-rAT/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Auf den Spuren des Weihnachtsmanns + diff --git a/common/src/main/res/values-de-rAT/strings_doodles.xml b/common/src/main/res/values-de-rAT/strings_doodles.xml new file mode 100644 index 000000000..dd80597cd --- /dev/null +++ b/common/src/main/res/values-de-rAT/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Schneeballrennen + Pinguinschwimmen + Geschenkewerfen + Bestes Ergebnis: %1$s + Stummschalten + Stummschaltung aufheben + Schließen + Pausieren + BESTES ERGEBNIS: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-de-rAT/strings_gamenames.xml b/common/src/main/res/values-de-rAT/strings_gamenames.xml index 217efc408..ce82ae70f 100644 --- a/common/src/main/res/values-de-rAT/strings_gamenames.xml +++ b/common/src/main/res/values-de-rAT/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Raketenflug - Dasher Dancer - Snowdown - City Quiz - Present Quest + Lolli-Flipper + Memory + Elf Jetpack + Raketen Flug + Weihnachts-Disco + Städte-Quiz + Geschenke-Schnitzeljagd + Weihnachtsmann-Selfie + Geschenkewerfen + Wichtel-Jetpack + Flughafen Nordpol + Geschenkeschleuder + Zeichnen mit dem Weihnachtsmann + Code-Boogie + Code-Lab + Lolli-Flipper + Wichtel-Wunschkonzert + Pinguin gib Acht + Geschenkeautomat + Bescherung + Rudolfs Rennen + Rasendes Rentier + Such den Weihnachtsmann + Weihnachtsmann-Selfie + Zeit des Gebens + Wichtel auf der Piste + Schneeballsturm + Schneeflockencode + Frostmaler + Verpackungskünstler + Wichtelkiste + Wieder bei der Arbeit + Bürostreich + Fahrgemeinschaften diff --git a/common/src/main/res/values-de-rAT/strings_invite.xml b/common/src/main/res/values-de-rAT/strings_invite.xml index af70d7e32..61d3a7fa8 100644 --- a/common/src/main/res/values-de-rAT/strings_invite.xml +++ b/common/src/main/res/values-de-rAT/strings_invite.xml @@ -1,12 +1,12 @@ - Freunde dazu einladen, die Reise des Weihnachtsmanns mit Google zu verfolgen - Begib dich auf die Spuren des Weihnachtsmanns und verfolge ihn auf seinem Flug um die Welt! - Ich habe in \"Auf den Spuren des Weihnachtsmanns\" von Google das Spiel %2$s mit den Wichteln gespielt und %1$d Punkte erreicht. Schaffst du das auch? + Freunde dazu einladen, die Reise des Weihnachtsmanns mit Google zu verfolgen + Begib dich auf die Spuren des Weihnachtsmanns und verfolge ihn auf seinem Flug um die Welt! + Ich habe in \"Auf den Spuren des Weihnachtsmanns\" von Google das Spiel %2$s mit den Wichteln gespielt und %1$d Punkte erreicht. Schaffst du das auch? diff --git a/common/src/main/res/values-de-rAT/strings_jetpack.xml b/common/src/main/res/values-de-rAT/strings_jetpack.xml index 32a746708..d710d6d00 100644 --- a/common/src/main/res/values-de-rAT/strings_jetpack.xml +++ b/common/src/main/res/values-de-rAT/strings_jetpack.xml @@ -1,12 +1,12 @@ - Melde dich an, um deine Erfolge zu speichern und deine Punktzahl zu posten! - Neues Spiel - Zurück zur Karte - PUNKTE - Zurück zur Karte + Melde dich an, um deine Erfolge zu speichern und deine Punktzahl zu posten! + Neues Spiel + Zurück zur Karte + PUNKTE diff --git a/common/src/main/res/values-de-rCH/strings.xml b/common/src/main/res/values-de-rCH/strings.xml index 34e7cbd5d..2bdc33741 100644 --- a/common/src/main/res/values-de-rCH/strings.xml +++ b/common/src/main/res/values-de-rCH/strings.xml @@ -1,11 +1,11 @@ - Zurück zur Karte - Zurück zum Dorf - Diese Version von \"Auf den Spuren des Weihnachtsmanns\" ist abgelaufen. Du kannst sie im Play Store aktualisieren. + Zurück zur Karte + Zurück zum Dorf + Diese Version von \"Auf den Spuren des Weihnachtsmanns\" ist abgelaufen. Du kannst sie im Play Store aktualisieren. + Game Over + Ladebildschirm + Fortsetzen + Wiederholen + Weiter + Teilen + Beim Download von %1$s ist ein Fehler aufgetreten. Funktioniert deine Netzwerkverbindung? diff --git a/common/src/main/res/values-de-rCH/strings_appname.xml b/common/src/main/res/values-de-rCH/strings_appname.xml new file mode 100644 index 000000000..f1644cdd9 --- /dev/null +++ b/common/src/main/res/values-de-rCH/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Auf den Spuren des Weihnachtsmanns + diff --git a/common/src/main/res/values-de-rCH/strings_doodles.xml b/common/src/main/res/values-de-rCH/strings_doodles.xml new file mode 100644 index 000000000..20290c3a9 --- /dev/null +++ b/common/src/main/res/values-de-rCH/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Schneeballrennen + Pinguinschwimmen + Geschenkewerfen + Bestes Ergebnis: %1$s + Stummschalten + Stummschaltung aufheben + Schliessen + Pausieren + BESTES ERGEBNIS: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-de-rCH/strings_gamenames.xml b/common/src/main/res/values-de-rCH/strings_gamenames.xml index 217efc408..ce82ae70f 100644 --- a/common/src/main/res/values-de-rCH/strings_gamenames.xml +++ b/common/src/main/res/values-de-rCH/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Raketenflug - Dasher Dancer - Snowdown - City Quiz - Present Quest + Lolli-Flipper + Memory + Elf Jetpack + Raketen Flug + Weihnachts-Disco + Städte-Quiz + Geschenke-Schnitzeljagd + Weihnachtsmann-Selfie + Geschenkewerfen + Wichtel-Jetpack + Flughafen Nordpol + Geschenkeschleuder + Zeichnen mit dem Weihnachtsmann + Code-Boogie + Code-Lab + Lolli-Flipper + Wichtel-Wunschkonzert + Pinguin gib Acht + Geschenkeautomat + Bescherung + Rudolfs Rennen + Rasendes Rentier + Such den Weihnachtsmann + Weihnachtsmann-Selfie + Zeit des Gebens + Wichtel auf der Piste + Schneeballsturm + Schneeflockencode + Frostmaler + Verpackungskünstler + Wichtelkiste + Wieder bei der Arbeit + Bürostreich + Fahrgemeinschaften diff --git a/common/src/main/res/values-de-rCH/strings_invite.xml b/common/src/main/res/values-de-rCH/strings_invite.xml index af70d7e32..61d3a7fa8 100644 --- a/common/src/main/res/values-de-rCH/strings_invite.xml +++ b/common/src/main/res/values-de-rCH/strings_invite.xml @@ -1,12 +1,12 @@ - Freunde dazu einladen, die Reise des Weihnachtsmanns mit Google zu verfolgen - Begib dich auf die Spuren des Weihnachtsmanns und verfolge ihn auf seinem Flug um die Welt! - Ich habe in \"Auf den Spuren des Weihnachtsmanns\" von Google das Spiel %2$s mit den Wichteln gespielt und %1$d Punkte erreicht. Schaffst du das auch? + Freunde dazu einladen, die Reise des Weihnachtsmanns mit Google zu verfolgen + Begib dich auf die Spuren des Weihnachtsmanns und verfolge ihn auf seinem Flug um die Welt! + Ich habe in \"Auf den Spuren des Weihnachtsmanns\" von Google das Spiel %2$s mit den Wichteln gespielt und %1$d Punkte erreicht. Schaffst du das auch? diff --git a/common/src/main/res/values-de-rCH/strings_jetpack.xml b/common/src/main/res/values-de-rCH/strings_jetpack.xml index 32a746708..d710d6d00 100644 --- a/common/src/main/res/values-de-rCH/strings_jetpack.xml +++ b/common/src/main/res/values-de-rCH/strings_jetpack.xml @@ -1,12 +1,12 @@ - Melde dich an, um deine Erfolge zu speichern und deine Punktzahl zu posten! - Neues Spiel - Zurück zur Karte - PUNKTE - Zurück zur Karte + Melde dich an, um deine Erfolge zu speichern und deine Punktzahl zu posten! + Neues Spiel + Zurück zur Karte + PUNKTE diff --git a/common/src/main/res/values-de/strings.xml b/common/src/main/res/values-de/strings.xml index 34e7cbd5d..2bdc33741 100644 --- a/common/src/main/res/values-de/strings.xml +++ b/common/src/main/res/values-de/strings.xml @@ -1,11 +1,11 @@ - Zurück zur Karte - Zurück zum Dorf - Diese Version von \"Auf den Spuren des Weihnachtsmanns\" ist abgelaufen. Du kannst sie im Play Store aktualisieren. + Zurück zur Karte + Zurück zum Dorf + Diese Version von \"Auf den Spuren des Weihnachtsmanns\" ist abgelaufen. Du kannst sie im Play Store aktualisieren. + Game Over + Ladebildschirm + Fortsetzen + Wiederholen + Weiter + Teilen + Beim Download von %1$s ist ein Fehler aufgetreten. Funktioniert deine Netzwerkverbindung? diff --git a/common/src/main/res/values-de/strings_appname.xml b/common/src/main/res/values-de/strings_appname.xml new file mode 100644 index 000000000..f1644cdd9 --- /dev/null +++ b/common/src/main/res/values-de/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Auf den Spuren des Weihnachtsmanns + diff --git a/common/src/main/res/values-de/strings_doodles.xml b/common/src/main/res/values-de/strings_doodles.xml new file mode 100644 index 000000000..dd80597cd --- /dev/null +++ b/common/src/main/res/values-de/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Schneeballrennen + Pinguinschwimmen + Geschenkewerfen + Bestes Ergebnis: %1$s + Stummschalten + Stummschaltung aufheben + Schließen + Pausieren + BESTES ERGEBNIS: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-de/strings_gamenames.xml b/common/src/main/res/values-de/strings_gamenames.xml index 217efc408..ce82ae70f 100644 --- a/common/src/main/res/values-de/strings_gamenames.xml +++ b/common/src/main/res/values-de/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Raketenflug - Dasher Dancer - Snowdown - City Quiz - Present Quest + Lolli-Flipper + Memory + Elf Jetpack + Raketen Flug + Weihnachts-Disco + Städte-Quiz + Geschenke-Schnitzeljagd + Weihnachtsmann-Selfie + Geschenkewerfen + Wichtel-Jetpack + Flughafen Nordpol + Geschenkeschleuder + Zeichnen mit dem Weihnachtsmann + Code-Boogie + Code-Lab + Lolli-Flipper + Wichtel-Wunschkonzert + Pinguin gib Acht + Geschenkeautomat + Bescherung + Rudolfs Rennen + Rasendes Rentier + Such den Weihnachtsmann + Weihnachtsmann-Selfie + Zeit des Gebens + Wichtel auf der Piste + Schneeballsturm + Schneeflockencode + Frostmaler + Verpackungskünstler + Wichtelkiste + Wieder bei der Arbeit + Bürostreich + Fahrgemeinschaften diff --git a/common/src/main/res/values-de/strings_invite.xml b/common/src/main/res/values-de/strings_invite.xml index af70d7e32..61d3a7fa8 100644 --- a/common/src/main/res/values-de/strings_invite.xml +++ b/common/src/main/res/values-de/strings_invite.xml @@ -1,12 +1,12 @@ - Freunde dazu einladen, die Reise des Weihnachtsmanns mit Google zu verfolgen - Begib dich auf die Spuren des Weihnachtsmanns und verfolge ihn auf seinem Flug um die Welt! - Ich habe in \"Auf den Spuren des Weihnachtsmanns\" von Google das Spiel %2$s mit den Wichteln gespielt und %1$d Punkte erreicht. Schaffst du das auch? + Freunde dazu einladen, die Reise des Weihnachtsmanns mit Google zu verfolgen + Begib dich auf die Spuren des Weihnachtsmanns und verfolge ihn auf seinem Flug um die Welt! + Ich habe in \"Auf den Spuren des Weihnachtsmanns\" von Google das Spiel %2$s mit den Wichteln gespielt und %1$d Punkte erreicht. Schaffst du das auch? diff --git a/common/src/main/res/values-de/strings_jetpack.xml b/common/src/main/res/values-de/strings_jetpack.xml index 32a746708..d710d6d00 100644 --- a/common/src/main/res/values-de/strings_jetpack.xml +++ b/common/src/main/res/values-de/strings_jetpack.xml @@ -1,12 +1,12 @@ - Melde dich an, um deine Erfolge zu speichern und deine Punktzahl zu posten! - Neues Spiel - Zurück zur Karte - PUNKTE - Zurück zur Karte + Melde dich an, um deine Erfolge zu speichern und deine Punktzahl zu posten! + Neues Spiel + Zurück zur Karte + PUNKTE diff --git a/common/src/main/res/values-en-rGB/strings.xml b/common/src/main/res/values-en-rGB/strings.xml index e84feda05..2079fb480 100644 --- a/common/src/main/res/values-en-rGB/strings.xml +++ b/common/src/main/res/values-en-rGB/strings.xml @@ -1,11 +1,11 @@ - Back to map - Back to village - This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Back to map + Back to village + This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Game Over + Loading screen + Resume + Replay + Home + Share + An error occurred while downloading %1$s. Is your network connection working? diff --git a/common/src/main/res/values-en-rGB/strings_appname.xml b/common/src/main/res/values-en-rGB/strings_appname.xml new file mode 100644 index 000000000..77d556f56 --- /dev/null +++ b/common/src/main/res/values-en-rGB/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Santa Tracker + diff --git a/common/src/main/res/values-en-rGB/strings_doodles.xml b/common/src/main/res/values-en-rGB/strings_doodles.xml new file mode 100644 index 000000000..a896b117e --- /dev/null +++ b/common/src/main/res/values-en-rGB/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Snowball Run + Penguin Swim + Present Throw + Best: %1$s + Mute + Unmute + Close + Pause + BEST SCORE: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-en-rGB/strings_gamenames.xml b/common/src/main/res/values-en-rGB/strings_gamenames.xml index 21d77d782..a21938901 100644 --- a/common/src/main/res/values-en-rGB/strings_gamenames.xml +++ b/common/src/main/res/values-en-rGB/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - City Quiz - Present Quest + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + City Quiz + Present Quest + Santa Snap + Present Toss + Elf Jetpack + North Pole Airport + Gift Slingshot + Claus Draws + Code Boogie + Code Lab + Gumball Tilt + Elf Jam Band + Penguin Dash + Present Bounce + Present Drop + Rudolph Racer + Reindeer Runner + Santa Search + Santa Selfie + Season of Giving + Elf Ski + Snowball Storm + Code a Snowflake + Speed Sketch + Wrap Battle + Elf Maker + Back to Work + Office Prank + Carpool diff --git a/common/src/main/res/values-en-rGB/strings_invite.xml b/common/src/main/res/values-en-rGB/strings_invite.xml index b358cf80c..2ea2e73f7 100644 --- a/common/src/main/res/values-en-rGB/strings_invite.xml +++ b/common/src/main/res/values-en-rGB/strings_invite.xml @@ -1,12 +1,12 @@ - Invite your friends to track Santa with Google - Try Santa Tracker and watch Santa fly around the world! - I scored %1$d playing the %2$s game with the elves in Google\'s Santa Tracker, can you beat that? + Invite your friends to track Santa with Google + Try Santa Tracker and watch Santa fly around the world! + I scored %1$d playing the %2$s game with the elves in Google\'s Santa Tracker, can you beat that? diff --git a/common/src/main/res/values-en-rGB/strings_jetpack.xml b/common/src/main/res/values-en-rGB/strings_jetpack.xml index 7d3ff2361..494e8d531 100644 --- a/common/src/main/res/values-en-rGB/strings_jetpack.xml +++ b/common/src/main/res/values-en-rGB/strings_jetpack.xml @@ -1,12 +1,12 @@ - Sign in to unlock achievements and post your score! - Play Again - Return to Map - SCORE - Return to map + Sign in to unlock achievements and post your score! + Play Again + Return to Map + SCORE diff --git a/common/src/main/res/values-en-rIE/strings.xml b/common/src/main/res/values-en-rIE/strings.xml index e84feda05..2079fb480 100644 --- a/common/src/main/res/values-en-rIE/strings.xml +++ b/common/src/main/res/values-en-rIE/strings.xml @@ -1,11 +1,11 @@ - Back to map - Back to village - This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Back to map + Back to village + This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Game Over + Loading screen + Resume + Replay + Home + Share + An error occurred while downloading %1$s. Is your network connection working? diff --git a/common/src/main/res/values-en-rIE/strings_appname.xml b/common/src/main/res/values-en-rIE/strings_appname.xml new file mode 100644 index 000000000..77d556f56 --- /dev/null +++ b/common/src/main/res/values-en-rIE/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Santa Tracker + diff --git a/common/src/main/res/values-en-rIE/strings_doodles.xml b/common/src/main/res/values-en-rIE/strings_doodles.xml new file mode 100644 index 000000000..a896b117e --- /dev/null +++ b/common/src/main/res/values-en-rIE/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Snowball Run + Penguin Swim + Present Throw + Best: %1$s + Mute + Unmute + Close + Pause + BEST SCORE: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-en-rIE/strings_gamenames.xml b/common/src/main/res/values-en-rIE/strings_gamenames.xml index 21d77d782..a21938901 100644 --- a/common/src/main/res/values-en-rIE/strings_gamenames.xml +++ b/common/src/main/res/values-en-rIE/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - City Quiz - Present Quest + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + City Quiz + Present Quest + Santa Snap + Present Toss + Elf Jetpack + North Pole Airport + Gift Slingshot + Claus Draws + Code Boogie + Code Lab + Gumball Tilt + Elf Jam Band + Penguin Dash + Present Bounce + Present Drop + Rudolph Racer + Reindeer Runner + Santa Search + Santa Selfie + Season of Giving + Elf Ski + Snowball Storm + Code a Snowflake + Speed Sketch + Wrap Battle + Elf Maker + Back to Work + Office Prank + Carpool diff --git a/common/src/main/res/values-en-rIE/strings_invite.xml b/common/src/main/res/values-en-rIE/strings_invite.xml index b358cf80c..2ea2e73f7 100644 --- a/common/src/main/res/values-en-rIE/strings_invite.xml +++ b/common/src/main/res/values-en-rIE/strings_invite.xml @@ -1,12 +1,12 @@ - Invite your friends to track Santa with Google - Try Santa Tracker and watch Santa fly around the world! - I scored %1$d playing the %2$s game with the elves in Google\'s Santa Tracker, can you beat that? + Invite your friends to track Santa with Google + Try Santa Tracker and watch Santa fly around the world! + I scored %1$d playing the %2$s game with the elves in Google\'s Santa Tracker, can you beat that? diff --git a/common/src/main/res/values-en-rIE/strings_jetpack.xml b/common/src/main/res/values-en-rIE/strings_jetpack.xml index 7d3ff2361..494e8d531 100644 --- a/common/src/main/res/values-en-rIE/strings_jetpack.xml +++ b/common/src/main/res/values-en-rIE/strings_jetpack.xml @@ -1,12 +1,12 @@ - Sign in to unlock achievements and post your score! - Play Again - Return to Map - SCORE - Return to map + Sign in to unlock achievements and post your score! + Play Again + Return to Map + SCORE diff --git a/common/src/main/res/values-en-rIN/strings.xml b/common/src/main/res/values-en-rIN/strings.xml index e84feda05..2079fb480 100644 --- a/common/src/main/res/values-en-rIN/strings.xml +++ b/common/src/main/res/values-en-rIN/strings.xml @@ -1,11 +1,11 @@ - Back to map - Back to village - This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Back to map + Back to village + This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Game Over + Loading screen + Resume + Replay + Home + Share + An error occurred while downloading %1$s. Is your network connection working? diff --git a/common/src/main/res/values-en-rIN/strings_appname.xml b/common/src/main/res/values-en-rIN/strings_appname.xml new file mode 100644 index 000000000..77d556f56 --- /dev/null +++ b/common/src/main/res/values-en-rIN/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Santa Tracker + diff --git a/common/src/main/res/values-en-rIN/strings_doodles.xml b/common/src/main/res/values-en-rIN/strings_doodles.xml new file mode 100644 index 000000000..a896b117e --- /dev/null +++ b/common/src/main/res/values-en-rIN/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Snowball Run + Penguin Swim + Present Throw + Best: %1$s + Mute + Unmute + Close + Pause + BEST SCORE: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-en-rIN/strings_gamenames.xml b/common/src/main/res/values-en-rIN/strings_gamenames.xml index 21d77d782..a21938901 100644 --- a/common/src/main/res/values-en-rIN/strings_gamenames.xml +++ b/common/src/main/res/values-en-rIN/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - City Quiz - Present Quest + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + City Quiz + Present Quest + Santa Snap + Present Toss + Elf Jetpack + North Pole Airport + Gift Slingshot + Claus Draws + Code Boogie + Code Lab + Gumball Tilt + Elf Jam Band + Penguin Dash + Present Bounce + Present Drop + Rudolph Racer + Reindeer Runner + Santa Search + Santa Selfie + Season of Giving + Elf Ski + Snowball Storm + Code a Snowflake + Speed Sketch + Wrap Battle + Elf Maker + Back to Work + Office Prank + Carpool diff --git a/common/src/main/res/values-en-rIN/strings_invite.xml b/common/src/main/res/values-en-rIN/strings_invite.xml index b358cf80c..2ea2e73f7 100644 --- a/common/src/main/res/values-en-rIN/strings_invite.xml +++ b/common/src/main/res/values-en-rIN/strings_invite.xml @@ -1,12 +1,12 @@ - Invite your friends to track Santa with Google - Try Santa Tracker and watch Santa fly around the world! - I scored %1$d playing the %2$s game with the elves in Google\'s Santa Tracker, can you beat that? + Invite your friends to track Santa with Google + Try Santa Tracker and watch Santa fly around the world! + I scored %1$d playing the %2$s game with the elves in Google\'s Santa Tracker, can you beat that? diff --git a/common/src/main/res/values-en-rIN/strings_jetpack.xml b/common/src/main/res/values-en-rIN/strings_jetpack.xml index 7d3ff2361..494e8d531 100644 --- a/common/src/main/res/values-en-rIN/strings_jetpack.xml +++ b/common/src/main/res/values-en-rIN/strings_jetpack.xml @@ -1,12 +1,12 @@ - Sign in to unlock achievements and post your score! - Play Again - Return to Map - SCORE - Return to map + Sign in to unlock achievements and post your score! + Play Again + Return to Map + SCORE diff --git a/common/src/main/res/values-en-rSG/strings.xml b/common/src/main/res/values-en-rSG/strings.xml index e84feda05..2079fb480 100644 --- a/common/src/main/res/values-en-rSG/strings.xml +++ b/common/src/main/res/values-en-rSG/strings.xml @@ -1,11 +1,11 @@ - Back to map - Back to village - This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Back to map + Back to village + This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Game Over + Loading screen + Resume + Replay + Home + Share + An error occurred while downloading %1$s. Is your network connection working? diff --git a/common/src/main/res/values-en-rSG/strings_appname.xml b/common/src/main/res/values-en-rSG/strings_appname.xml new file mode 100644 index 000000000..77d556f56 --- /dev/null +++ b/common/src/main/res/values-en-rSG/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Santa Tracker + diff --git a/common/src/main/res/values-en-rSG/strings_doodles.xml b/common/src/main/res/values-en-rSG/strings_doodles.xml new file mode 100644 index 000000000..a896b117e --- /dev/null +++ b/common/src/main/res/values-en-rSG/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Snowball Run + Penguin Swim + Present Throw + Best: %1$s + Mute + Unmute + Close + Pause + BEST SCORE: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-en-rSG/strings_gamenames.xml b/common/src/main/res/values-en-rSG/strings_gamenames.xml index 21d77d782..a21938901 100644 --- a/common/src/main/res/values-en-rSG/strings_gamenames.xml +++ b/common/src/main/res/values-en-rSG/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - City Quiz - Present Quest + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + City Quiz + Present Quest + Santa Snap + Present Toss + Elf Jetpack + North Pole Airport + Gift Slingshot + Claus Draws + Code Boogie + Code Lab + Gumball Tilt + Elf Jam Band + Penguin Dash + Present Bounce + Present Drop + Rudolph Racer + Reindeer Runner + Santa Search + Santa Selfie + Season of Giving + Elf Ski + Snowball Storm + Code a Snowflake + Speed Sketch + Wrap Battle + Elf Maker + Back to Work + Office Prank + Carpool diff --git a/common/src/main/res/values-en-rSG/strings_invite.xml b/common/src/main/res/values-en-rSG/strings_invite.xml index b358cf80c..2ea2e73f7 100644 --- a/common/src/main/res/values-en-rSG/strings_invite.xml +++ b/common/src/main/res/values-en-rSG/strings_invite.xml @@ -1,12 +1,12 @@ - Invite your friends to track Santa with Google - Try Santa Tracker and watch Santa fly around the world! - I scored %1$d playing the %2$s game with the elves in Google\'s Santa Tracker, can you beat that? + Invite your friends to track Santa with Google + Try Santa Tracker and watch Santa fly around the world! + I scored %1$d playing the %2$s game with the elves in Google\'s Santa Tracker, can you beat that? diff --git a/common/src/main/res/values-en-rSG/strings_jetpack.xml b/common/src/main/res/values-en-rSG/strings_jetpack.xml index 7d3ff2361..494e8d531 100644 --- a/common/src/main/res/values-en-rSG/strings_jetpack.xml +++ b/common/src/main/res/values-en-rSG/strings_jetpack.xml @@ -1,12 +1,12 @@ - Sign in to unlock achievements and post your score! - Play Again - Return to Map - SCORE - Return to map + Sign in to unlock achievements and post your score! + Play Again + Return to Map + SCORE diff --git a/common/src/main/res/values-en-rXA/strings.xml b/common/src/main/res/values-en-rXA/strings.xml index 004660d19..8ed82537c 100644 --- a/common/src/main/res/values-en-rXA/strings.xml +++ b/common/src/main/res/values-en-rXA/strings.xml @@ -1,11 +1,11 @@ - [Бåçķ ţö måþ one two] - [Бåçķ ţö vîļļåĝé one two] - [Ţĥîš véŕšîöñ öƒ Šåñţå Ţŕåçķéŕ îš öûţ öƒ ðåţé. Þļéåšé vîšîţ ţĥé Þļåý Šţöŕé ţö ûþðåţé ţö ţĥé ļåţéšţ véŕšîöñ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen] + [Бåçķ ţö måþ one two] + [Бåçķ ţö vîļļåĝé one two] + [Ţĥîš véŕšîöñ öƒ Šåñţå Ţŕåçķéŕ îš öûţ öƒ ðåţé. Þļéåšé vîšîţ ţĥé Þļåý Šţöŕé ţö ûþðåţé ţö ţĥé ļåţéšţ véŕšîöñ. one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen] + [Ĝåmé Övéŕ one two] + [Ļöåðîñĝ šçŕééñ one two] + [Ŕéšûmé one] + [Ŕéþļåý one] + [Ĥömé one] + [Šĥåŕé one] + [Åñ éŕŕöŕ öççûŕŕéð ŵĥîļé ðöŵñļöåðîñĝ ᐅ%1$sᐊ. Κ ýöûŕ ñéţŵöŕķ çöññéçţîöñ ŵöŕķîñĝ¿ one two three four five six seven eight nine ten eleven twelve thirteen fourteen] diff --git a/common/src/main/res/values-en-rXA/strings_appname.xml b/common/src/main/res/values-en-rXA/strings_appname.xml new file mode 100644 index 000000000..48c384061 --- /dev/null +++ b/common/src/main/res/values-en-rXA/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + [Šåñţå Ţŕåçķéŕ one two] + diff --git a/common/src/main/res/values-en-rXA/strings_doodles.xml b/common/src/main/res/values-en-rXA/strings_doodles.xml new file mode 100644 index 000000000..0cd6de23e --- /dev/null +++ b/common/src/main/res/values-en-rXA/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + [Šñöŵбåļļ Ŕûñ one two] + [Þéñĝûîñ Šŵîm one two] + [Þŕéšéñţ Ţĥŕöŵ one two] + [Бéšţ: ᐅ%1$sᐊ one two three] + [Mûţé one] + [Ûñmûţé one] + [Çļöšé one] + [Þåûšé one] + [БÉŠŢ ŠÇÖŔÉ: <b>ᐅ%1$sᐊ</b> one two three four] + [ᐅ%1$.1fᐊš one] + [ᐅ%1$dᐊm one] + diff --git a/common/src/main/res/values-en-rXA/strings_gamenames.xml b/common/src/main/res/values-en-rXA/strings_gamenames.xml index 229b9c206..aad0c0e00 100644 --- a/common/src/main/res/values-en-rXA/strings_gamenames.xml +++ b/common/src/main/res/values-en-rXA/strings_gamenames.xml @@ -1,12 +1,12 @@ - [Ĝûmбåļļ one] - [Mémöŕý one] - [Éļƒ Ĵéţþåçķ one two] - [Ŕöçķéţ Šļéîĝĥ one two] - [Ðåšĥéŕ Ðåñçéŕ one two] - [Šñöŵðöŵñ one] - [Çîţý Qûîž one two] - [Þŕéšéñţ Qûéšţ one two] + [Ĝûmбåļļ one] + [Mémöŕý one] + [Éļƒ Ĵéţþåçķ one two] + [Ŕöçķéţ Šļéîĝĥ one two] + [Ðåšĥéŕ Ðåñçéŕ one two] + [Çîţý Qûîž one two] + [Þŕéšéñţ Qûéšţ one two] + [Šåñţå Šñåþ one two] + [Þŕéšéñţ Ţöšš one two] + [Éļƒ Ĵéţþåçķ one two] + [Ñöŕţĥ Þöļé Åîŕþöŕţ one two three] + [Ĝîƒţ Šļîñĝšĥöţ one two] + [Çļåûš Ðŕåŵš one two] + [Çöðé Бööĝîé one two] + [Çöðé Ļåб one] + [Ĝûmбåļļ Ţîļţ one two] + [Éļƒ Ĵåmбåñð one two] + [Þéñĝûîñ Ðåšĥ one two] + [Þŕéšéñţ Бöûñçé one two] + [Þŕéšéñţ Ðŕöþ one two] + [Ŕûðöļþĥ Ŕåçéŕ one two] + [Ŕéîñðééŕ Ŕûññéŕ one two] + [Šåñţå Šéåŕçĥ one two] + [Šåñţå Šéļƒîé one two] + [Šéåšöñ öƒ Ĝîvîñĝ one two] + [Éļƒ Šķî one] + [Šñöŵбåļļ Šţöŕm one two] + [Çöðé å Šñöŵƒļåķé one two] + [Šþééð Šķéţçĥ one two] + [Ŵŕåþ Бåţţļé one two] + [Éļƒ Måķéŕ one two] + [Бåçķ ţö Ŵöŕķ one two] + [Öƒƒîçé Þŕåñķ one two] + [Çåŕþööļ one] diff --git a/common/src/main/res/values-en-rXA/strings_invite.xml b/common/src/main/res/values-en-rXA/strings_invite.xml index 573e30158..5ac06a926 100644 --- a/common/src/main/res/values-en-rXA/strings_invite.xml +++ b/common/src/main/res/values-en-rXA/strings_invite.xml @@ -1,12 +1,12 @@ - [Îñvîţé ýöûŕ ƒŕîéñðš ţö ţŕåçķ Šåñţå ŵîţĥ Ĝööĝļé one two three four five six seven eight nine ten] - [Ţŕý Šåñţå Ţŕåçķéŕ åñð ŵåţçĥ Šåñţå ƒļý åŕöûñð ţĥé ŵöŕļð¡ one two three four five six seven eight nine ten eleven] - [Î šçöŕéð ᐅ%1$dᐊ þļåýîñĝ ţĥé ᐅ%2$sᐊ ĝåmé ŵîţĥ ţĥé éļvéš îñ Ĝööĝļé\'š Šåñţå Ţŕåçķéŕ, çåñ ýöû бéåţ ţĥåţ¿ one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen] + [Îñvîţé ýöûŕ ƒŕîéñðš ţö ţŕåçķ Šåñţå ŵîţĥ Ĝööĝļé one two three four five six seven eight nine ten] + [Ţŕý Šåñţå Ţŕåçķéŕ åñð ŵåţçĥ Šåñţå ƒļý åŕöûñð ţĥé ŵöŕļð¡ one two three four five six seven eight nine ten eleven] + [Î šçöŕéð ᐅ%1$dᐊ þļåýîñĝ ţĥé ᐅ%2$sᐊ ĝåmé ŵîţĥ ţĥé éļvéš îñ Ĝööĝļé\'š Šåñţå Ţŕåçķéŕ, çåñ ýöû бéåţ ţĥåţ¿ one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen] diff --git a/common/src/main/res/values-en-rXA/strings_jetpack.xml b/common/src/main/res/values-en-rXA/strings_jetpack.xml index 93bbc04af..7fa8cff9e 100644 --- a/common/src/main/res/values-en-rXA/strings_jetpack.xml +++ b/common/src/main/res/values-en-rXA/strings_jetpack.xml @@ -1,12 +1,12 @@ - [Šîĝñ îñ ţö ûñļöçķ åçĥîévéméñţš åñð þöšţ ýöûŕ šçöŕé¡ one two three four five six seven eight nine ten eleven] - [Þļåý Åĝåîñ one two] - [Ŕéţûŕñ ţö Måþ one two] - [ŠÇÖŔÉ one] - [Ŕéţûŕñ ţö måþ one two] + [Šîĝñ îñ ţö ûñļöçķ åçĥîévéméñţš åñð þöšţ ýöûŕ šçöŕé¡ one two three four five six seven eight nine ten eleven] + [Þļåý Åĝåîñ one two] + [Ŕéţûŕñ ţö Måþ one two] + [ŠÇÖŔÉ one] diff --git a/common/src/main/res/values-en-rXC/strings.xml b/common/src/main/res/values-en-rXC/strings.xml index a175c1642..86f3a435a 100644 --- a/common/src/main/res/values-en-rXC/strings.xml +++ b/common/src/main/res/values-en-rXC/strings.xml @@ -1,11 +1,11 @@ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎Back to map‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‎‎‏‎Back to village‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version.‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎Back to map‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‎‎‏‎Back to village‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version.‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‎‎Game Over‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎Loading screen‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎Resume‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‎Replay‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‎‎‎Home‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎Share‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‎‏‎An error occurred while downloading ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎. Is your network connection working?‎‏‎‎‏‎ diff --git a/common/src/main/res/values-en-rXC/strings_appname.xml b/common/src/main/res/values-en-rXC/strings_appname.xml new file mode 100644 index 000000000..c0fac02cd --- /dev/null +++ b/common/src/main/res/values-en-rXC/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‎Santa Tracker‎‏‎‎‏‎ + diff --git a/common/src/main/res/values-en-rXC/strings_doodles.xml b/common/src/main/res/values-en-rXC/strings_doodles.xml new file mode 100644 index 000000000..da75865e0 --- /dev/null +++ b/common/src/main/res/values-en-rXC/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‎‎‎Snowball Run‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‏‎Penguin Swim‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‎Present Throw‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎Best: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‏‎‏‏‏‎Mute‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎Unmute‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎Close‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎Pause‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‎‎BEST SCORE: <b>‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎</b>‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎%1$.1f‎‏‎‎‏‏‏‎s‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎%1$d‎‏‎‎‏‏‏‎m‎‏‎‎‏‎ + diff --git a/common/src/main/res/values-en-rXC/strings_gamenames.xml b/common/src/main/res/values-en-rXC/strings_gamenames.xml index 9e64dafac..ef97d56ef 100644 --- a/common/src/main/res/values-en-rXC/strings_gamenames.xml +++ b/common/src/main/res/values-en-rXC/strings_gamenames.xml @@ -1,12 +1,12 @@ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‎Gumball‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎Memory‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎Elf Jetpack‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎Rocket Sleigh‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎Dasher Dancer‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‏‎Snowdown‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎City Quiz‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎Present Quest‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‎Gumball‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎Memory‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎Elf Jetpack‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎Rocket Sleigh‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎Dasher Dancer‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎City Quiz‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎Present Quest‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎Santa Snap‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‎‎Present Toss‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎Elf Jetpack‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‏‏‏‎North Pole Airport‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‎Gift Slingshot‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‎‎‎Claus Draws‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‎‏‎Code Boogie‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‎‎Code Lab‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎Gumball Tilt‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎Elf Jamband‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‏‎‎Penguin Dash‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‏‏‎Present Bounce‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‎Present Drop‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎Rudolph Racer‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎Reindeer Runner‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎Santa Search‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎Santa Selfie‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‎Season of Giving‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‏‏‎‎‎‎Elf Ski‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‎‎Snowball Storm‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‎Code a Snowflake‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎‎‏‎Speed Sketch‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎Wrap Battle‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎Elf Maker‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎Back to Work‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎Office Prank‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‎‎‎‎‎‎Carpool‎‏‎‎‏‎ diff --git a/common/src/main/res/values-en-rXC/strings_invite.xml b/common/src/main/res/values-en-rXC/strings_invite.xml index 61c3d8a0a..eab69030a 100644 --- a/common/src/main/res/values-en-rXC/strings_invite.xml +++ b/common/src/main/res/values-en-rXC/strings_invite.xml @@ -1,12 +1,12 @@ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‎‏‎Invite your friends to track Santa with Google‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎Try Santa Tracker and watch Santa fly around the world!‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎I scored ‎‏‎‎‏‏‎%1$d‎‏‎‎‏‏‏‎ playing the ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎ game with the elves in Google\'s Santa Tracker, can you beat that?‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‎‏‎Invite your friends to track Santa with Google‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎Try Santa Tracker and watch Santa fly around the world!‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎I scored ‎‏‎‎‏‏‎%1$d‎‏‎‎‏‏‏‎ playing the ‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎ game with the elves in Google\'s Santa Tracker, can you beat that?‎‏‎‎‏‎ diff --git a/common/src/main/res/values-en-rXC/strings_jetpack.xml b/common/src/main/res/values-en-rXC/strings_jetpack.xml index 953a20328..002cf140a 100644 --- a/common/src/main/res/values-en-rXC/strings_jetpack.xml +++ b/common/src/main/res/values-en-rXC/strings_jetpack.xml @@ -1,12 +1,12 @@ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎Sign in to unlock achievements and post your score!‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‎‎Play Again‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎Return to Map‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‎SCORE‎‏‎‎‏‎ - ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎Return to map‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎Sign in to unlock achievements and post your score!‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‎‎Play Again‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎Return to Map‎‏‎‎‏‎ + ‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‎SCORE‎‏‎‎‏‎ diff --git a/common/src/main/res/values-en-rZA/strings.xml b/common/src/main/res/values-en-rZA/strings.xml index e84feda05..2079fb480 100644 --- a/common/src/main/res/values-en-rZA/strings.xml +++ b/common/src/main/res/values-en-rZA/strings.xml @@ -1,11 +1,11 @@ - Back to map - Back to village - This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Back to map + Back to village + This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Game Over + Loading screen + Resume + Replay + Home + Share + An error occurred while downloading %1$s. Is your network connection working? diff --git a/common/src/main/res/values-en-rZA/strings_appname.xml b/common/src/main/res/values-en-rZA/strings_appname.xml new file mode 100644 index 000000000..77d556f56 --- /dev/null +++ b/common/src/main/res/values-en-rZA/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Santa Tracker + diff --git a/common/src/main/res/values-en-rZA/strings_doodles.xml b/common/src/main/res/values-en-rZA/strings_doodles.xml new file mode 100644 index 000000000..a896b117e --- /dev/null +++ b/common/src/main/res/values-en-rZA/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Snowball Run + Penguin Swim + Present Throw + Best: %1$s + Mute + Unmute + Close + Pause + BEST SCORE: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-en-rZA/strings_gamenames.xml b/common/src/main/res/values-en-rZA/strings_gamenames.xml index 21d77d782..a21938901 100644 --- a/common/src/main/res/values-en-rZA/strings_gamenames.xml +++ b/common/src/main/res/values-en-rZA/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - City Quiz - Present Quest + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + City Quiz + Present Quest + Santa Snap + Present Toss + Elf Jetpack + North Pole Airport + Gift Slingshot + Claus Draws + Code Boogie + Code Lab + Gumball Tilt + Elf Jam Band + Penguin Dash + Present Bounce + Present Drop + Rudolph Racer + Reindeer Runner + Santa Search + Santa Selfie + Season of Giving + Elf Ski + Snowball Storm + Code a Snowflake + Speed Sketch + Wrap Battle + Elf Maker + Back to Work + Office Prank + Carpool diff --git a/common/src/main/res/values-en-rZA/strings_invite.xml b/common/src/main/res/values-en-rZA/strings_invite.xml index b358cf80c..2ea2e73f7 100644 --- a/common/src/main/res/values-en-rZA/strings_invite.xml +++ b/common/src/main/res/values-en-rZA/strings_invite.xml @@ -1,12 +1,12 @@ - Invite your friends to track Santa with Google - Try Santa Tracker and watch Santa fly around the world! - I scored %1$d playing the %2$s game with the elves in Google\'s Santa Tracker, can you beat that? + Invite your friends to track Santa with Google + Try Santa Tracker and watch Santa fly around the world! + I scored %1$d playing the %2$s game with the elves in Google\'s Santa Tracker, can you beat that? diff --git a/common/src/main/res/values-en-rZA/strings_jetpack.xml b/common/src/main/res/values-en-rZA/strings_jetpack.xml index 7d3ff2361..494e8d531 100644 --- a/common/src/main/res/values-en-rZA/strings_jetpack.xml +++ b/common/src/main/res/values-en-rZA/strings_jetpack.xml @@ -1,12 +1,12 @@ - Sign in to unlock achievements and post your score! - Play Again - Return to Map - SCORE - Return to map + Sign in to unlock achievements and post your score! + Play Again + Return to Map + SCORE diff --git a/common/src/main/res/values-es-rAR/strings.xml b/common/src/main/res/values-es-rAR/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rAR/strings.xml +++ b/common/src/main/res/values-es-rAR/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rAR/strings_appname.xml b/common/src/main/res/values-es-rAR/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rAR/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rAR/strings_doodles.xml b/common/src/main/res/values-es-rAR/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rAR/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rAR/strings_gamenames.xml b/common/src/main/res/values-es-rAR/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rAR/strings_gamenames.xml +++ b/common/src/main/res/values-es-rAR/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rAR/strings_invite.xml b/common/src/main/res/values-es-rAR/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rAR/strings_invite.xml +++ b/common/src/main/res/values-es-rAR/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rAR/strings_jetpack.xml b/common/src/main/res/values-es-rAR/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rAR/strings_jetpack.xml +++ b/common/src/main/res/values-es-rAR/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rBO/strings.xml b/common/src/main/res/values-es-rBO/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rBO/strings.xml +++ b/common/src/main/res/values-es-rBO/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rBO/strings_appname.xml b/common/src/main/res/values-es-rBO/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rBO/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rBO/strings_doodles.xml b/common/src/main/res/values-es-rBO/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rBO/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rBO/strings_gamenames.xml b/common/src/main/res/values-es-rBO/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rBO/strings_gamenames.xml +++ b/common/src/main/res/values-es-rBO/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rBO/strings_invite.xml b/common/src/main/res/values-es-rBO/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rBO/strings_invite.xml +++ b/common/src/main/res/values-es-rBO/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rBO/strings_jetpack.xml b/common/src/main/res/values-es-rBO/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rBO/strings_jetpack.xml +++ b/common/src/main/res/values-es-rBO/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rCL/strings.xml b/common/src/main/res/values-es-rCL/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rCL/strings.xml +++ b/common/src/main/res/values-es-rCL/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rCL/strings_appname.xml b/common/src/main/res/values-es-rCL/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rCL/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rCL/strings_doodles.xml b/common/src/main/res/values-es-rCL/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rCL/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rCL/strings_gamenames.xml b/common/src/main/res/values-es-rCL/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rCL/strings_gamenames.xml +++ b/common/src/main/res/values-es-rCL/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rCL/strings_invite.xml b/common/src/main/res/values-es-rCL/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rCL/strings_invite.xml +++ b/common/src/main/res/values-es-rCL/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rCL/strings_jetpack.xml b/common/src/main/res/values-es-rCL/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rCL/strings_jetpack.xml +++ b/common/src/main/res/values-es-rCL/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rCO/strings.xml b/common/src/main/res/values-es-rCO/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rCO/strings.xml +++ b/common/src/main/res/values-es-rCO/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rCO/strings_appname.xml b/common/src/main/res/values-es-rCO/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rCO/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rCO/strings_doodles.xml b/common/src/main/res/values-es-rCO/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rCO/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rCO/strings_gamenames.xml b/common/src/main/res/values-es-rCO/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rCO/strings_gamenames.xml +++ b/common/src/main/res/values-es-rCO/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rCO/strings_invite.xml b/common/src/main/res/values-es-rCO/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rCO/strings_invite.xml +++ b/common/src/main/res/values-es-rCO/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rCO/strings_jetpack.xml b/common/src/main/res/values-es-rCO/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rCO/strings_jetpack.xml +++ b/common/src/main/res/values-es-rCO/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rCR/strings.xml b/common/src/main/res/values-es-rCR/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rCR/strings.xml +++ b/common/src/main/res/values-es-rCR/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rCR/strings_appname.xml b/common/src/main/res/values-es-rCR/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rCR/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rCR/strings_doodles.xml b/common/src/main/res/values-es-rCR/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rCR/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rCR/strings_gamenames.xml b/common/src/main/res/values-es-rCR/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rCR/strings_gamenames.xml +++ b/common/src/main/res/values-es-rCR/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rCR/strings_invite.xml b/common/src/main/res/values-es-rCR/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rCR/strings_invite.xml +++ b/common/src/main/res/values-es-rCR/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rCR/strings_jetpack.xml b/common/src/main/res/values-es-rCR/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rCR/strings_jetpack.xml +++ b/common/src/main/res/values-es-rCR/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rDO/strings.xml b/common/src/main/res/values-es-rDO/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rDO/strings.xml +++ b/common/src/main/res/values-es-rDO/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rDO/strings_appname.xml b/common/src/main/res/values-es-rDO/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rDO/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rDO/strings_doodles.xml b/common/src/main/res/values-es-rDO/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rDO/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rDO/strings_gamenames.xml b/common/src/main/res/values-es-rDO/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rDO/strings_gamenames.xml +++ b/common/src/main/res/values-es-rDO/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rDO/strings_invite.xml b/common/src/main/res/values-es-rDO/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rDO/strings_invite.xml +++ b/common/src/main/res/values-es-rDO/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rDO/strings_jetpack.xml b/common/src/main/res/values-es-rDO/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rDO/strings_jetpack.xml +++ b/common/src/main/res/values-es-rDO/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rEC/strings.xml b/common/src/main/res/values-es-rEC/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rEC/strings.xml +++ b/common/src/main/res/values-es-rEC/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rEC/strings_appname.xml b/common/src/main/res/values-es-rEC/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rEC/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rEC/strings_doodles.xml b/common/src/main/res/values-es-rEC/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rEC/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rEC/strings_gamenames.xml b/common/src/main/res/values-es-rEC/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rEC/strings_gamenames.xml +++ b/common/src/main/res/values-es-rEC/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rEC/strings_invite.xml b/common/src/main/res/values-es-rEC/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rEC/strings_invite.xml +++ b/common/src/main/res/values-es-rEC/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rEC/strings_jetpack.xml b/common/src/main/res/values-es-rEC/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rEC/strings_jetpack.xml +++ b/common/src/main/res/values-es-rEC/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rES/strings_appname.xml b/common/src/main/res/values-es-rES/strings_appname.xml new file mode 100644 index 000000000..b633229e8 --- /dev/null +++ b/common/src/main/res/values-es-rES/strings_appname.xml @@ -0,0 +1,18 @@ + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rES/strings_gamenames.xml b/common/src/main/res/values-es-rES/strings_gamenames.xml index 2a370be4d..fc0b751df 100644 --- a/common/src/main/res/values-es-rES/strings_gamenames.xml +++ b/common/src/main/res/values-es-rES/strings_gamenames.xml @@ -1,26 +1,22 @@ - - + --> Gumball Memory Elf Jetpack - Snowglobe Rocket Sleigh Dasher Dancer - Snowball diff --git a/common/src/main/res/values-es-rES/strings_jetpack.xml b/common/src/main/res/values-es-rES/strings_jetpack.xml index a04a23838..0038b07ed 100644 --- a/common/src/main/res/values-es-rES/strings_jetpack.xml +++ b/common/src/main/res/values-es-rES/strings_jetpack.xml @@ -1,20 +1,18 @@ - - + --> Accede a tu cuenta para desbloquear logros y publicar tu puntuación Volver a jugar Puntuación diff --git a/common/src/main/res/values-es-rGT/strings.xml b/common/src/main/res/values-es-rGT/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rGT/strings.xml +++ b/common/src/main/res/values-es-rGT/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rGT/strings_appname.xml b/common/src/main/res/values-es-rGT/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rGT/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rGT/strings_doodles.xml b/common/src/main/res/values-es-rGT/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rGT/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rGT/strings_gamenames.xml b/common/src/main/res/values-es-rGT/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rGT/strings_gamenames.xml +++ b/common/src/main/res/values-es-rGT/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rGT/strings_invite.xml b/common/src/main/res/values-es-rGT/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rGT/strings_invite.xml +++ b/common/src/main/res/values-es-rGT/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rGT/strings_jetpack.xml b/common/src/main/res/values-es-rGT/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rGT/strings_jetpack.xml +++ b/common/src/main/res/values-es-rGT/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rHN/strings.xml b/common/src/main/res/values-es-rHN/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rHN/strings.xml +++ b/common/src/main/res/values-es-rHN/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rHN/strings_appname.xml b/common/src/main/res/values-es-rHN/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rHN/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rHN/strings_doodles.xml b/common/src/main/res/values-es-rHN/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rHN/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rHN/strings_gamenames.xml b/common/src/main/res/values-es-rHN/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rHN/strings_gamenames.xml +++ b/common/src/main/res/values-es-rHN/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rHN/strings_invite.xml b/common/src/main/res/values-es-rHN/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rHN/strings_invite.xml +++ b/common/src/main/res/values-es-rHN/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rHN/strings_jetpack.xml b/common/src/main/res/values-es-rHN/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rHN/strings_jetpack.xml +++ b/common/src/main/res/values-es-rHN/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rMX/strings.xml b/common/src/main/res/values-es-rMX/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rMX/strings.xml +++ b/common/src/main/res/values-es-rMX/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rMX/strings_appname.xml b/common/src/main/res/values-es-rMX/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rMX/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rMX/strings_doodles.xml b/common/src/main/res/values-es-rMX/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rMX/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rMX/strings_gamenames.xml b/common/src/main/res/values-es-rMX/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rMX/strings_gamenames.xml +++ b/common/src/main/res/values-es-rMX/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rMX/strings_invite.xml b/common/src/main/res/values-es-rMX/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rMX/strings_invite.xml +++ b/common/src/main/res/values-es-rMX/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rMX/strings_jetpack.xml b/common/src/main/res/values-es-rMX/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rMX/strings_jetpack.xml +++ b/common/src/main/res/values-es-rMX/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rNI/strings.xml b/common/src/main/res/values-es-rNI/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rNI/strings.xml +++ b/common/src/main/res/values-es-rNI/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rNI/strings_appname.xml b/common/src/main/res/values-es-rNI/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rNI/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rNI/strings_doodles.xml b/common/src/main/res/values-es-rNI/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rNI/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rNI/strings_gamenames.xml b/common/src/main/res/values-es-rNI/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rNI/strings_gamenames.xml +++ b/common/src/main/res/values-es-rNI/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rNI/strings_invite.xml b/common/src/main/res/values-es-rNI/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rNI/strings_invite.xml +++ b/common/src/main/res/values-es-rNI/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rNI/strings_jetpack.xml b/common/src/main/res/values-es-rNI/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rNI/strings_jetpack.xml +++ b/common/src/main/res/values-es-rNI/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rPA/strings.xml b/common/src/main/res/values-es-rPA/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rPA/strings.xml +++ b/common/src/main/res/values-es-rPA/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rPA/strings_appname.xml b/common/src/main/res/values-es-rPA/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rPA/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rPA/strings_doodles.xml b/common/src/main/res/values-es-rPA/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rPA/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rPA/strings_gamenames.xml b/common/src/main/res/values-es-rPA/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rPA/strings_gamenames.xml +++ b/common/src/main/res/values-es-rPA/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rPA/strings_invite.xml b/common/src/main/res/values-es-rPA/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rPA/strings_invite.xml +++ b/common/src/main/res/values-es-rPA/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rPA/strings_jetpack.xml b/common/src/main/res/values-es-rPA/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rPA/strings_jetpack.xml +++ b/common/src/main/res/values-es-rPA/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rPE/strings.xml b/common/src/main/res/values-es-rPE/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rPE/strings.xml +++ b/common/src/main/res/values-es-rPE/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rPE/strings_appname.xml b/common/src/main/res/values-es-rPE/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rPE/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rPE/strings_doodles.xml b/common/src/main/res/values-es-rPE/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rPE/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rPE/strings_gamenames.xml b/common/src/main/res/values-es-rPE/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rPE/strings_gamenames.xml +++ b/common/src/main/res/values-es-rPE/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rPE/strings_invite.xml b/common/src/main/res/values-es-rPE/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rPE/strings_invite.xml +++ b/common/src/main/res/values-es-rPE/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rPE/strings_jetpack.xml b/common/src/main/res/values-es-rPE/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rPE/strings_jetpack.xml +++ b/common/src/main/res/values-es-rPE/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rPR/strings.xml b/common/src/main/res/values-es-rPR/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rPR/strings.xml +++ b/common/src/main/res/values-es-rPR/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rPR/strings_appname.xml b/common/src/main/res/values-es-rPR/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rPR/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rPR/strings_doodles.xml b/common/src/main/res/values-es-rPR/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rPR/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rPR/strings_gamenames.xml b/common/src/main/res/values-es-rPR/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rPR/strings_gamenames.xml +++ b/common/src/main/res/values-es-rPR/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rPR/strings_invite.xml b/common/src/main/res/values-es-rPR/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rPR/strings_invite.xml +++ b/common/src/main/res/values-es-rPR/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rPR/strings_jetpack.xml b/common/src/main/res/values-es-rPR/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rPR/strings_jetpack.xml +++ b/common/src/main/res/values-es-rPR/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rPY/strings.xml b/common/src/main/res/values-es-rPY/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rPY/strings.xml +++ b/common/src/main/res/values-es-rPY/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rPY/strings_appname.xml b/common/src/main/res/values-es-rPY/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rPY/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rPY/strings_doodles.xml b/common/src/main/res/values-es-rPY/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rPY/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rPY/strings_gamenames.xml b/common/src/main/res/values-es-rPY/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rPY/strings_gamenames.xml +++ b/common/src/main/res/values-es-rPY/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rPY/strings_invite.xml b/common/src/main/res/values-es-rPY/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rPY/strings_invite.xml +++ b/common/src/main/res/values-es-rPY/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rPY/strings_jetpack.xml b/common/src/main/res/values-es-rPY/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rPY/strings_jetpack.xml +++ b/common/src/main/res/values-es-rPY/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rSV/strings.xml b/common/src/main/res/values-es-rSV/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rSV/strings.xml +++ b/common/src/main/res/values-es-rSV/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rSV/strings_appname.xml b/common/src/main/res/values-es-rSV/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rSV/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rSV/strings_doodles.xml b/common/src/main/res/values-es-rSV/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rSV/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rSV/strings_gamenames.xml b/common/src/main/res/values-es-rSV/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rSV/strings_gamenames.xml +++ b/common/src/main/res/values-es-rSV/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rSV/strings_invite.xml b/common/src/main/res/values-es-rSV/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rSV/strings_invite.xml +++ b/common/src/main/res/values-es-rSV/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rSV/strings_jetpack.xml b/common/src/main/res/values-es-rSV/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rSV/strings_jetpack.xml +++ b/common/src/main/res/values-es-rSV/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rUS/strings.xml b/common/src/main/res/values-es-rUS/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rUS/strings.xml +++ b/common/src/main/res/values-es-rUS/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rUS/strings_appname.xml b/common/src/main/res/values-es-rUS/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rUS/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rUS/strings_doodles.xml b/common/src/main/res/values-es-rUS/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rUS/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rUS/strings_gamenames.xml b/common/src/main/res/values-es-rUS/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rUS/strings_gamenames.xml +++ b/common/src/main/res/values-es-rUS/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rUS/strings_invite.xml b/common/src/main/res/values-es-rUS/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rUS/strings_invite.xml +++ b/common/src/main/res/values-es-rUS/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rUS/strings_jetpack.xml b/common/src/main/res/values-es-rUS/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rUS/strings_jetpack.xml +++ b/common/src/main/res/values-es-rUS/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rUY/strings.xml b/common/src/main/res/values-es-rUY/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rUY/strings.xml +++ b/common/src/main/res/values-es-rUY/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rUY/strings_appname.xml b/common/src/main/res/values-es-rUY/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rUY/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rUY/strings_doodles.xml b/common/src/main/res/values-es-rUY/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rUY/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rUY/strings_gamenames.xml b/common/src/main/res/values-es-rUY/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rUY/strings_gamenames.xml +++ b/common/src/main/res/values-es-rUY/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rUY/strings_invite.xml b/common/src/main/res/values-es-rUY/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rUY/strings_invite.xml +++ b/common/src/main/res/values-es-rUY/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rUY/strings_jetpack.xml b/common/src/main/res/values-es-rUY/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rUY/strings_jetpack.xml +++ b/common/src/main/res/values-es-rUY/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es-rVE/strings.xml b/common/src/main/res/values-es-rVE/strings.xml index 86c5660de..06b435697 100644 --- a/common/src/main/res/values-es-rVE/strings.xml +++ b/common/src/main/res/values-es-rVE/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Santa está obsoleta. Visita la Play Store para actualizarla a la última versión. + Fin del juego + Pantalla de carga + Reanudar + Volver a jugar + Inicio + Compartir + No se pudo descargar %1$s. ¿Funciona bien tu conexión de red? diff --git a/common/src/main/res/values-es-rVE/strings_appname.xml b/common/src/main/res/values-es-rVE/strings_appname.xml new file mode 100644 index 000000000..8670a7f83 --- /dev/null +++ b/common/src/main/res/values-es-rVE/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Santa + diff --git a/common/src/main/res/values-es-rVE/strings_doodles.xml b/common/src/main/res/values-es-rVE/strings_doodles.xml new file mode 100644 index 000000000..f8e572e76 --- /dev/null +++ b/common/src/main/res/values-es-rVE/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Carrera de bolas de nieve + Nada con los pingüinos + Lanzamiento de regalos + Mejor puntuación: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es-rVE/strings_gamenames.xml b/common/src/main/res/values-es-rVE/strings_gamenames.xml index f6cfd3ff4..56a6d49f1 100644 --- a/common/src/main/res/values-es-rVE/strings_gamenames.xml +++ b/common/src/main/res/values-es-rVE/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Cuestionario sobre ciudades - Busca regalos + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Cuestionario sobre ciudades + Busca regalos + Instantáneas navideñas + Lanzamiento de regalos + Duendes con propulsores + Aeropuerto del Polo Norte + Honda de regalos + Dibujos navideños con Santa + Baile de código + Laboratorio de códigos + Guía las Gumballs + Banda de duendes + Carrera de pingüinos + Rebotes de regalos + Entrega de regalos + Trineo de carreras de Rudolph + Reno corredor + Búsqueda de Santa + Selfies de Santa + Época de dar + Duendes en esquí + Tormenta de bolas de nieve + Codifica un copo de nieve + Dibujos rápidos + Revuelta de envoltorios + Crea tu duende + De vuelta al trabajo + Broma de oficina + Viaje compartido diff --git a/common/src/main/res/values-es-rVE/strings_invite.xml b/common/src/main/res/values-es-rVE/strings_invite.xml index 3b0ab37e4..4bf8b6a3e 100644 --- a/common/src/main/res/values-es-rVE/strings_invite.xml +++ b/common/src/main/res/values-es-rVE/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Santa con Google - Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. - Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? + Invita a tus amigos a seguir a Santa con Google + Prueba la app de Sigue a Santa y acompáñalo por todo el mundo. + Mi puntuación es de %1$d en el juego %2$s con los duendes en Sigue a Santa de Google. ¿Puedes vencerme? diff --git a/common/src/main/res/values-es-rVE/strings_jetpack.xml b/common/src/main/res/values-es-rVE/strings_jetpack.xml index ee29fa1b1..3b5ee47ae 100644 --- a/common/src/main/res/values-es-rVE/strings_jetpack.xml +++ b/common/src/main/res/values-es-rVE/strings_jetpack.xml @@ -1,12 +1,12 @@ - ¡Accede para desbloquear logros y publicar tu puntuación! - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + ¡Accede para desbloquear logros y publicar tu puntuación! + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-es/strings.xml b/common/src/main/res/values-es/strings.xml index ce6498714..3cf5f3ae7 100644 --- a/common/src/main/res/values-es/strings.xml +++ b/common/src/main/res/values-es/strings.xml @@ -1,11 +1,11 @@ - Volver al mapa - Volver a la aldea - Esta versión de Sigue a Papá Noel no es la más reciente. Ve a Play Store para actualizar la aplicación. + Volver al mapa + Volver a la aldea + Esta versión de Sigue a Papá Noel no es la más reciente. Ve a Play Store para actualizar la aplicación. + Fin de la partida + Cargando pantalla + Reanudar + Reiniciar partida + Inicio + Compartir + No se ha podido descargar %1$s. Comprueba que tu conexión de red funciona correctamente. diff --git a/common/src/main/res/values-es/strings_appname.xml b/common/src/main/res/values-es/strings_appname.xml new file mode 100644 index 000000000..aa4d813d6 --- /dev/null +++ b/common/src/main/res/values-es/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sigue a Papá Noel + diff --git a/common/src/main/res/values-es/strings_doodles.xml b/common/src/main/res/values-es/strings_doodles.xml new file mode 100644 index 000000000..65966501f --- /dev/null +++ b/common/src/main/res/values-es/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Persecución en la nieve + ¡Al agua, pingüinos! + Lanzamiento de regalos + Mejor: %1$s + Silenciar + Dejar de silenciar + Cerrar + Pausar + MEJOR PUNTUACIÓN: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-es/strings_gamenames.xml b/common/src/main/res/values-es/strings_gamenames.xml index 7ecd33f5b..a2fdb5066 100644 --- a/common/src/main/res/values-es/strings_gamenames.xml +++ b/common/src/main/res/values-es/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Juego de las ciudades - Atrapa el regalo + Guía la bola + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Juego de las ciudades + Atrapa el regalo + Fotos navideñas + Lanzamiento de regalos + Elfo propulsado + Aeropuerto del Polo Norte + Tirachinas de regalos + Diseños navideños + Baile de código + Laboratorio de programación + Guía las piruletas + Jam session élfica + Pingüino atraparregalos + ¡Que no se caiga el regalo! + Entrega los regalos + Carrera de obstáculos de Rudolph + Reno a la carrera + ¿Dónde está Papá Noel? + El selfie de Papá Noel + Tiempo de regalos + Esquí élfico + Pelea de bolas de nieve + Crea un copo de nieve con código + Retratos contrarreloj + Festival del envoltorio + Crea un elfo + A trabajar + Bromas en la oficina + Coche compartido diff --git a/common/src/main/res/values-es/strings_invite.xml b/common/src/main/res/values-es/strings_invite.xml index 693715703..6064ae188 100644 --- a/common/src/main/res/values-es/strings_invite.xml +++ b/common/src/main/res/values-es/strings_invite.xml @@ -1,12 +1,12 @@ - Invita a tus amigos a seguir a Papá Noel con Google - ¡Prueba Sigue a Papá Noel y acompáñalo virtualmente por todo el mundo! - He conseguido %1$d puntos jugando a %2$s con los elfos en Seguir a Papá Noel de Google. ¡A ver si me ganas! + Invita a tus amigos a seguir a Papá Noel con Google + ¡Prueba Sigue a Papá Noel y acompáñalo virtualmente por todo el mundo! + He conseguido %1$d puntos jugando a %2$s con los elfos en Seguir a Papá Noel de Google. ¡A ver si me ganas! diff --git a/common/src/main/res/values-es/strings_jetpack.xml b/common/src/main/res/values-es/strings_jetpack.xml index d6fbafc7e..ace3096a9 100644 --- a/common/src/main/res/values-es/strings_jetpack.xml +++ b/common/src/main/res/values-es/strings_jetpack.xml @@ -1,12 +1,12 @@ - Inicia sesión para desbloquear logros y publicar tu puntuación. - Volver a jugar - Volver al mapa - PUNTUACIÓN - Volver al mapa + Inicia sesión para desbloquear logros y publicar tu puntuación. + Volver a jugar + Volver al mapa + PUNTUACIÓN diff --git a/common/src/main/res/values-et/strings.xml b/common/src/main/res/values-et/strings.xml index deaf5a1cd..f10f9ab6c 100644 --- a/common/src/main/res/values-et/strings.xml +++ b/common/src/main/res/values-et/strings.xml @@ -1,11 +1,11 @@ - Tagasi kaardirežiimi - Tagasi külla - See Santa Trackeri versioon on aegunud. Uusima versiooni leiate Google Play poest. + Tagasi kaardirežiimi + Tagasi külla + See Santa Trackeri versioon on aegunud. Uusima versiooni leiate Google Play poest. + Mäng läbi + Laadimiskuva + Jätka + Mängi uuesti + Avakuva + Jaga + Mängu %1$s allalaadimisel ilmnes viga. Kas võrguühendus on olemas? diff --git a/common/src/main/res/values-et/strings_appname.xml b/common/src/main/res/values-et/strings_appname.xml new file mode 100644 index 000000000..2739312fb --- /dev/null +++ b/common/src/main/res/values-et/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Jõuluvana teekonna jälgimine + diff --git a/common/src/main/res/values-et/strings_doodles.xml b/common/src/main/res/values-et/strings_doodles.xml new file mode 100644 index 000000000..292309431 --- /dev/null +++ b/common/src/main/res/values-et/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Lumepallijooks + Pingviiniujumine + Kingiheide + Parim: %1$s + Vaigista + Tühista vaigistus + Sulge + Peata + PARIM TULEMUS: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-et/strings_gamenames.xml b/common/src/main/res/values-et/strings_gamenames.xml index 786f4edd5..c8bd2048f 100644 --- a/common/src/main/res/values-et/strings_gamenames.xml +++ b/common/src/main/res/values-et/strings_gamenames.xml @@ -1,12 +1,12 @@ - Nätsupall - Mälu - Haldja rakettranits - Rocket Sleigh - Dasher Dancer - Snowdown - Linnaviktoriin - Kingiseiklus + Nätsupall + Mälu + Haldja rakettranits + Rakett-kelk + Tantsiv põhjapõder + Linnaviktoriin + Kingiseiklus + Jõuluvanatuur + Kingiheide + Päkapiku rakettranits + Põhjapooluse lennujaam + Kingikatapult + Jõuluvana jutupliiats + Tants ja trall + Koodilabor + Nätsukommid + Päkapikubänd + Pingviinijooks + Põrkavad kingid + Kingitustesadu + Rudolfi võidusõit + Põhjapõdrajooks + Leia jõuluvana + Jõuluvana selfie + Pühadelahkus + Päkapikuslaalom + Lumesõda + Lumehelbe kodeerimine + Arva ära + Kiirpakkija + Päkapikudisainija + Tagasi tööle + Vingerpuss kontoris + Sõidame koos diff --git a/common/src/main/res/values-et/strings_invite.xml b/common/src/main/res/values-et/strings_invite.xml index 32a8e61d5..750faaaa5 100644 --- a/common/src/main/res/values-et/strings_invite.xml +++ b/common/src/main/res/values-et/strings_invite.xml @@ -1,12 +1,12 @@ - Kutsuge sõbrad Google\'iga jõuluvana jälgima - Proovige rakendust Santa Tracker ja vaadake, kuidas jõuluvana ümber maailma lendab! - Sain Google\'i jõuluvana jälgimise rakenduses päkapikkudega mängu %2$s mängides %1$d punkti. Arvad, et oled osavam? + Kutsuge sõbrad Google\'iga jõuluvana jälgima + Proovige rakendust Santa Tracker ja vaadake, kuidas jõuluvana ümber maailma lendab! + Sain Google\'i jõuluvana jälgimise rakenduses päkapikkudega mängu %2$s mängides %1$d punkti. Arvad, et oled osavam? diff --git a/common/src/main/res/values-et/strings_jetpack.xml b/common/src/main/res/values-et/strings_jetpack.xml index f16c7a499..048479d00 100644 --- a/common/src/main/res/values-et/strings_jetpack.xml +++ b/common/src/main/res/values-et/strings_jetpack.xml @@ -1,12 +1,12 @@ - Registreeruge, et saavutusi püüda ja oma skoore postitada! - Mängi uuesti - Tagasi kaardi juurde - TULEMUS - Tagasi kaardi juurde + Registreeruge, et saavutusi püüda ja oma skoore postitada! + Mängi uuesti + Tagasi kaardi juurde + TULEMUS diff --git a/common/src/main/res/values-fi/strings.xml b/common/src/main/res/values-fi/strings.xml index 26de43c46..491d1fef1 100644 --- a/common/src/main/res/values-fi/strings.xml +++ b/common/src/main/res/values-fi/strings.xml @@ -1,11 +1,11 @@ - Takaisin karttaan - Takaisin kylään - Tämä Joulupukin jäljittimen versio on vanhentunut. Päivitä uusimpaan versioon Play Kaupassa. + Takaisin karttaan + Takaisin kylään + Tämä Joulupukin jäljittimen versio on vanhentunut. Päivitä uusimpaan versioon Play Kaupassa. + Peli loppui + Ladataan kuvaa + Jatka + Pelaa uudelleen + Etusivu + Jaa + Virhe ladattaessa peliä %1$s. Toimiiko nettiyhteys? diff --git a/common/src/main/res/values-fi/strings_appname.xml b/common/src/main/res/values-fi/strings_appname.xml new file mode 100644 index 000000000..0187ef453 --- /dev/null +++ b/common/src/main/res/values-fi/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Joulupukin jäljitin + diff --git a/common/src/main/res/values-fi/strings_doodles.xml b/common/src/main/res/values-fi/strings_doodles.xml new file mode 100644 index 000000000..1439c891f --- /dev/null +++ b/common/src/main/res/values-fi/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Lumipallojuoksu + Pingviiniuinti + Lahjanheitto + Paras: %1$s + Mykistä + Poista mykistys + Sulje + Keskeytä + PARAS TULOS: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-fi/strings_gamenames.xml b/common/src/main/res/values-fi/strings_gamenames.xml index 8a0ad6dcf..dd278f5d5 100644 --- a/common/src/main/res/values-fi/strings_gamenames.xml +++ b/common/src/main/res/values-fi/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Muistipeli - Tontturakettireppu - Rocket Sleigh - Dasher Dancer - Snowdown - Kaupunkivisa - Lahjaseikkailu + Gumball + Muistipeli + Tontturakettireppu + Rocket Sleigh + Dasher Dancer + Kaupunkivisa + Lahjaseikkailu + Pukin pikakuvat + Lahjanheitto + Tonttu-jetpack + Korvatunturin lentokenttä + Lahjalinko + Pukin piirustuspaja + Kooditanssi + Koodauslabra + Purkkapallo + Tonttujen bilebändi + Pingviinikilpa + Pomppivat paketit + Lahjapudotus + Petterin kilpa-ajo + Porojuoksu + Pukkihaku + Pukin selfie + Antamisen aika + Tonttuslalom + Lumisota + Koodaa lumihiutale + Pikapiirros + Paketointikilpa + Tontuntekijä + Työt kutsuvat + Toimistojekku + Kimppakyyti diff --git a/common/src/main/res/values-fi/strings_invite.xml b/common/src/main/res/values-fi/strings_invite.xml index d6f5a4296..7e09d869a 100644 --- a/common/src/main/res/values-fi/strings_invite.xml +++ b/common/src/main/res/values-fi/strings_invite.xml @@ -1,12 +1,12 @@ - Kutsu ystäväsi seuraamaan pukin matkaa Googlen kanssa - Kokeile Santa Trackeria ja seuraa pukin matkaa maailman ympäri. - Sain pelissä %2$s tuloksen %1$d, kun pelasin tonttujen kanssa Googlen Joulupukin jäljitintä. Pystytkö parempaan? + Kutsu ystäväsi seuraamaan pukin matkaa Googlen kanssa + Kokeile Santa Trackeria ja seuraa pukin matkaa maailman ympäri. + Sain pelissä %2$s tuloksen %1$d, kun pelasin tonttujen kanssa Googlen Joulupukin jäljitintä. Pystytkö parempaan? diff --git a/common/src/main/res/values-fi/strings_jetpack.xml b/common/src/main/res/values-fi/strings_jetpack.xml index ee33dbd4f..a12be6acc 100644 --- a/common/src/main/res/values-fi/strings_jetpack.xml +++ b/common/src/main/res/values-fi/strings_jetpack.xml @@ -1,12 +1,12 @@ - Kirjaudu sisään, niin voit avata saavutuksia ja julkaista tuloksesi. - Pelaa uudelleen - Takaisin karttaan - PISTEET - Takaisin karttaan + Kirjaudu sisään, niin voit avata saavutuksia ja julkaista tuloksesi. + Pelaa uudelleen + Takaisin karttaan + PISTEET diff --git a/common/src/main/res/values-fil/strings.xml b/common/src/main/res/values-fil/strings.xml index b79cacce8..852634cc8 100644 --- a/common/src/main/res/values-fil/strings.xml +++ b/common/src/main/res/values-fil/strings.xml @@ -1,11 +1,11 @@ - Bumalik sa mapa - Bumalik sa village - Luma na ang bersyong ito ng Santa Tracker. Pakibisita ang Play Store upang makapag-update sa pinakabagong bersyon. + Bumalik sa mapa + Bumalik sa village + Luma na ang bersyong ito ng Santa Tracker. Pakibisita ang Play Store upang makapag-update sa pinakabagong bersyon. + Tapos na ang Laro + Nilo-load ang screen + Magpatuloy + I-replay + Home + bahagi + Nagka-error habang dina-download ang %1$s. Gumagana ba ang koneksyon ng iyong network? diff --git a/common/src/main/res/values-fil/strings_appname.xml b/common/src/main/res/values-fil/strings_appname.xml new file mode 100644 index 000000000..77d556f56 --- /dev/null +++ b/common/src/main/res/values-fil/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Santa Tracker + diff --git a/common/src/main/res/values-fil/strings_doodles.xml b/common/src/main/res/values-fil/strings_doodles.xml new file mode 100644 index 000000000..ceb2b9f97 --- /dev/null +++ b/common/src/main/res/values-fil/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Snowball Run + Penguin Swim + Present Throw + Pinakamataas: %1$s + I-mute + I-unmute + Isara + I-pause + PINAKAMATAAS NA SCORE: <b>%1$s</b> + %1$.1fs + %1$dm + diff --git a/common/src/main/res/values-fil/strings_gamenames.xml b/common/src/main/res/values-fil/strings_gamenames.xml index 21d77d782..bee518e97 100644 --- a/common/src/main/res/values-fil/strings_gamenames.xml +++ b/common/src/main/res/values-fil/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - City Quiz - Present Quest + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + City Quiz + Present Quest + Santa Snap + Present Toss + Elf Jetpack + North Pole Airport + Gift Slingshot + Claus Draws + Code Boogie + Code Lab + Gumball Tilt + Elf Jamband + Penguin Dash + Present Bounce + Present Drop + Rudolph Racer + Reindeer Runner + Santa Search + Santa Selfie + Panahon ng Bigayan + Elf Ski + Snowball Storm + Code a Snowflake + Speed Sketch + Wrap Battle + Elf Maker + Back to Work + Office Prank + Carpool diff --git a/common/src/main/res/values-fil/strings_invite.xml b/common/src/main/res/values-fil/strings_invite.xml index 3d5b566be..f8920ce63 100644 --- a/common/src/main/res/values-fil/strings_invite.xml +++ b/common/src/main/res/values-fil/strings_invite.xml @@ -1,12 +1,12 @@ - Imbitahan ang iyong mga kaibigan na subaybayan si Santa sa Google - Subukan ang Santa Tracker at panoorin ang paglipad ni Santa sa buong mundo! - Nakapuntos ako ng %1$d sa paglalaro ng %2$s game na may elves sa Santa Tracker ng Google, kaya mo bang talunin iyon? + Imbitahan ang iyong mga kaibigan na subaybayan si Santa sa Google + Subukan ang Santa Tracker at panoorin ang paglipad ni Santa sa buong mundo! + Nakapuntos ako ng %1$d sa paglalaro ng %2$s game na may elves sa Santa Tracker ng Google, kaya mo bang talunin iyon? diff --git a/common/src/main/res/values-fil/strings_jetpack.xml b/common/src/main/res/values-fil/strings_jetpack.xml index 2588c5142..e5690d3c0 100644 --- a/common/src/main/res/values-fil/strings_jetpack.xml +++ b/common/src/main/res/values-fil/strings_jetpack.xml @@ -1,12 +1,12 @@ - Mag-sign in upang mai-unlock ang mga achievement at mai-post ang iyong score! - Maglaro Muli - Bumalik sa Mapa - SCORE - Bumalik sa mapa + Mag-sign in upang mai-unlock ang mga achievement at mai-post ang iyong score! + Maglaro Muli + Bumalik sa Mapa + SCORE diff --git a/common/src/main/res/values-fr-rCA/strings.xml b/common/src/main/res/values-fr-rCA/strings.xml index 46e217406..e59893efc 100644 --- a/common/src/main/res/values-fr-rCA/strings.xml +++ b/common/src/main/res/values-fr-rCA/strings.xml @@ -1,11 +1,11 @@ - Revenir à la carte - Revenir au village - Cette version de Sur les traces du père Noël est périmée. Veuillez visiter la boutique Google Play Store pour obtenir la plus récente version. + Revenir à la carte + Revenir au village + Cette version de Sur les traces du père Noël est périmée. Veuillez visiter la boutique Google Play Store pour obtenir la plus récente version. + Partie terminée! + Écran de chargement + Reprendre + Jouer de nouveau + Accueil + Partager + Une erreur s\'est produite durant le téléchargement de %1$s. Ta connexion réseau fonctionne-t-elle? diff --git a/common/src/main/res/values-fr-rCA/strings_appname.xml b/common/src/main/res/values-fr-rCA/strings_appname.xml new file mode 100644 index 000000000..3fa5d1302 --- /dev/null +++ b/common/src/main/res/values-fr-rCA/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sur les traces du père Noël + diff --git a/common/src/main/res/values-fr-rCA/strings_doodles.xml b/common/src/main/res/values-fr-rCA/strings_doodles.xml new file mode 100644 index 000000000..04442e21f --- /dev/null +++ b/common/src/main/res/values-fr-rCA/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Évitement de la boule de neige + Nage du pingouin + Lancer de cadeaux + Meilleur score : %1$s + Couper le son + Réactiver le son + Fermer + Interrompre + MEILLEUR SCORE : <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-fr-rCA/strings_gamenames.xml b/common/src/main/res/values-fr-rCA/strings_gamenames.xml index 8922a10b3..8bc4e6f39 100644 --- a/common/src/main/res/values-fr-rCA/strings_gamenames.xml +++ b/common/src/main/res/values-fr-rCA/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Quiz urbain - Quête de cadeaux + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Quiz urbain + Quête de cadeaux + Des photos avec le père Noël + Lancer de cadeaux + Le lutin réacté + Aéroport du pôle Nord + Lance-cadeaux + Dessin de Noël + Boogie du code + Labo de code + Boule de gomme en mouvement + Le jam des lutins + La ruée du pingouin + Rebond de cadeaux + Lâcher de cadeaux + La course avec Rudolphe + La course du renne + À la recherche du père Noël + Autoportrait du père Noël + La saison pour offrir + Le ski des lutins + Tempête de boules de neige + Coder un flocon de neige + Croquis rapide + La bataille de l\'emballage + Créateur de lutin + De retour au travail + Plaisanterie au bureau + Covoiturage diff --git a/common/src/main/res/values-fr-rCA/strings_invite.xml b/common/src/main/res/values-fr-rCA/strings_invite.xml index ae571783c..ec50d6f53 100644 --- a/common/src/main/res/values-fr-rCA/strings_invite.xml +++ b/common/src/main/res/values-fr-rCA/strings_invite.xml @@ -1,12 +1,12 @@ - Invite tes amis à suivre le père Noël avec Google - Essayez l\'application Sur les traces du père Noël et suivez le père Noël à travers le monde! - J\'ai obtenu un score de %1$d en jouant à %2$s avec les lutins dans Sur les traces du père Noël de Google, peux-tu faire mieux? + Invite tes amis à suivre le père Noël avec Google + Essayez l\'application Sur les traces du père Noël et suivez le père Noël à travers le monde! + J\'ai obtenu un score de %1$d en jouant à %2$s avec les lutins dans Sur les traces du père Noël de Google, peux-tu faire mieux? diff --git a/common/src/main/res/values-fr-rCA/strings_jetpack.xml b/common/src/main/res/values-fr-rCA/strings_jetpack.xml index 020f4ef56..496925cb2 100644 --- a/common/src/main/res/values-fr-rCA/strings_jetpack.xml +++ b/common/src/main/res/values-fr-rCA/strings_jetpack.xml @@ -1,12 +1,12 @@ - Connectez-vous pour débloquer vos réussites et afficher votre score! - Jouer de nouveau - Revenir à la carte - POINTAGE - Revenir à la carte + Connectez-vous pour débloquer vos réussites et afficher votre score! + Jouer de nouveau + Revenir à la carte + POINTAGE diff --git a/common/src/main/res/values-fr-rCH/strings.xml b/common/src/main/res/values-fr-rCH/strings.xml index a28283a0d..164b3ff7a 100644 --- a/common/src/main/res/values-fr-rCH/strings.xml +++ b/common/src/main/res/values-fr-rCH/strings.xml @@ -1,11 +1,11 @@ - Retour à la carte - Retour au village - Cette version du jeu \"Sur la piste du père Noël\" est obsolète. Veuillez accéder au Play Store pour télécharger la dernière version. + Retour à la carte + Retour au village + Cette version du jeu \"Sur la piste du père Noël\" est obsolète. Veuillez accéder au Play Store pour télécharger la dernière version. + Jeu terminé + Écran de chargement + Reprendre + Réessayer + Accueil + Partager + Une erreur s\'est produite lors du téléchargement %1$s. Votre connexion réseau fonctionne-t-elle correctement ? diff --git a/common/src/main/res/values-fr-rCH/strings_appname.xml b/common/src/main/res/values-fr-rCH/strings_appname.xml new file mode 100644 index 000000000..b9a8fb866 --- /dev/null +++ b/common/src/main/res/values-fr-rCH/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sur la piste du père Noël + diff --git a/common/src/main/res/values-fr-rCH/strings_doodles.xml b/common/src/main/res/values-fr-rCH/strings_doodles.xml new file mode 100644 index 000000000..a46c86107 --- /dev/null +++ b/common/src/main/res/values-fr-rCH/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + La course-poursuite enneigée + La nage du pingouin + Lancer de cadeaux + Meilleur score : %1$s + Couper le son + Réactiver le son + Fermer + Mettre en pause + MEILLEUR SCORE : <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-fr-rCH/strings_gamenames.xml b/common/src/main/res/values-fr-rCH/strings_gamenames.xml index c78bd1054..7b01a0ae8 100644 --- a/common/src/main/res/values-fr-rCH/strings_gamenames.xml +++ b/common/src/main/res/values-fr-rCH/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Le questionnaire des villes - La quête des cadeaux + Le flipper bonbons + Memory + Elf Jetpack + Le traîneau-fusée + La disco de Noël + Le quiz des villes + La quête des cadeaux + Selfie d\'elfe + Lancer de cadeaux + Fusée du lutin + L\'aéroport du pôle Nord + Le lance-cadeaux + Dessine avec le père Noël + La danse du code + L\'atelier de programmation + Boules de chewing-gum en balade + Le groupe des lutins + La promenade du pingouin + Le cadeau rebondissant + Le lâcher de cadeaux + La course de Rudolphe + La course du renne + Où est le père Noël + Le selfie du père Noël + La saison des fêtes + La descente en skis de l\'elfe + Tempête de boules de neige + Code un flocon de neige + Esquisse rapide + Concours d\'emballage de cadeaux + Créateur de lutin + La reprise du travail + La farce au bureau + Le covoiturage diff --git a/common/src/main/res/values-fr-rCH/strings_invite.xml b/common/src/main/res/values-fr-rCH/strings_invite.xml index a584c72ac..e11a4441a 100644 --- a/common/src/main/res/values-fr-rCH/strings_invite.xml +++ b/common/src/main/res/values-fr-rCH/strings_invite.xml @@ -1,12 +1,12 @@ - Invitez vos amis à suivre le père Noël avec Google - Essaie l\'application Sur la piste du père Noël pour suivre la tournée du père Noël à travers le monde ! - J\'ai atteint un score de %1$d points au jeu %2$s avec les lutins du programme Santa Tracker de Google. Parviendras-tu à me battre ? + Invitez vos amis à suivre le père Noël avec Google + Essaie l\'application Sur la piste du père Noël pour suivre la tournée du père Noël à travers le monde ! + J\'ai atteint un score de %1$d points au jeu %2$s avec les lutins du programme Santa Tracker de Google. Parviendras-tu à me battre ? diff --git a/common/src/main/res/values-fr-rCH/strings_jetpack.xml b/common/src/main/res/values-fr-rCH/strings_jetpack.xml index b590c6fd5..72a8f454d 100644 --- a/common/src/main/res/values-fr-rCH/strings_jetpack.xml +++ b/common/src/main/res/values-fr-rCH/strings_jetpack.xml @@ -1,12 +1,12 @@ - Connectez-vous pour débloquer vos exploits et publier vos scores ! - Rejouer - Revenir à la carte - SCORE - Retour à la carte + Connectez-vous pour débloquer vos exploits et publier vos scores ! + Rejouer + Revenir à la carte + SCORE diff --git a/common/src/main/res/values-fr/strings.xml b/common/src/main/res/values-fr/strings.xml index a28283a0d..164b3ff7a 100644 --- a/common/src/main/res/values-fr/strings.xml +++ b/common/src/main/res/values-fr/strings.xml @@ -1,11 +1,11 @@ - Retour à la carte - Retour au village - Cette version du jeu \"Sur la piste du père Noël\" est obsolète. Veuillez accéder au Play Store pour télécharger la dernière version. + Retour à la carte + Retour au village + Cette version du jeu \"Sur la piste du père Noël\" est obsolète. Veuillez accéder au Play Store pour télécharger la dernière version. + Jeu terminé + Écran de chargement + Reprendre + Réessayer + Accueil + Partager + Une erreur s\'est produite lors du téléchargement %1$s. Votre connexion réseau fonctionne-t-elle correctement ? diff --git a/common/src/main/res/values-fr/strings_appname.xml b/common/src/main/res/values-fr/strings_appname.xml new file mode 100644 index 000000000..b9a8fb866 --- /dev/null +++ b/common/src/main/res/values-fr/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sur la piste du père Noël + diff --git a/common/src/main/res/values-fr/strings_doodles.xml b/common/src/main/res/values-fr/strings_doodles.xml new file mode 100644 index 000000000..a46c86107 --- /dev/null +++ b/common/src/main/res/values-fr/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + La course-poursuite enneigée + La nage du pingouin + Lancer de cadeaux + Meilleur score : %1$s + Couper le son + Réactiver le son + Fermer + Mettre en pause + MEILLEUR SCORE : <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-fr/strings_gamenames.xml b/common/src/main/res/values-fr/strings_gamenames.xml index c78bd1054..7b01a0ae8 100644 --- a/common/src/main/res/values-fr/strings_gamenames.xml +++ b/common/src/main/res/values-fr/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Le questionnaire des villes - La quête des cadeaux + Le flipper bonbons + Memory + Elf Jetpack + Le traîneau-fusée + La disco de Noël + Le quiz des villes + La quête des cadeaux + Selfie d\'elfe + Lancer de cadeaux + Fusée du lutin + L\'aéroport du pôle Nord + Le lance-cadeaux + Dessine avec le père Noël + La danse du code + L\'atelier de programmation + Boules de chewing-gum en balade + Le groupe des lutins + La promenade du pingouin + Le cadeau rebondissant + Le lâcher de cadeaux + La course de Rudolphe + La course du renne + Où est le père Noël + Le selfie du père Noël + La saison des fêtes + La descente en skis de l\'elfe + Tempête de boules de neige + Code un flocon de neige + Esquisse rapide + Concours d\'emballage de cadeaux + Créateur de lutin + La reprise du travail + La farce au bureau + Le covoiturage diff --git a/common/src/main/res/values-fr/strings_invite.xml b/common/src/main/res/values-fr/strings_invite.xml index a584c72ac..e11a4441a 100644 --- a/common/src/main/res/values-fr/strings_invite.xml +++ b/common/src/main/res/values-fr/strings_invite.xml @@ -1,12 +1,12 @@ - Invitez vos amis à suivre le père Noël avec Google - Essaie l\'application Sur la piste du père Noël pour suivre la tournée du père Noël à travers le monde ! - J\'ai atteint un score de %1$d points au jeu %2$s avec les lutins du programme Santa Tracker de Google. Parviendras-tu à me battre ? + Invitez vos amis à suivre le père Noël avec Google + Essaie l\'application Sur la piste du père Noël pour suivre la tournée du père Noël à travers le monde ! + J\'ai atteint un score de %1$d points au jeu %2$s avec les lutins du programme Santa Tracker de Google. Parviendras-tu à me battre ? diff --git a/common/src/main/res/values-fr/strings_jetpack.xml b/common/src/main/res/values-fr/strings_jetpack.xml index b590c6fd5..72a8f454d 100644 --- a/common/src/main/res/values-fr/strings_jetpack.xml +++ b/common/src/main/res/values-fr/strings_jetpack.xml @@ -1,12 +1,12 @@ - Connectez-vous pour débloquer vos exploits et publier vos scores ! - Rejouer - Revenir à la carte - SCORE - Retour à la carte + Connectez-vous pour débloquer vos exploits et publier vos scores ! + Rejouer + Revenir à la carte + SCORE diff --git a/common/src/main/res/values-gsw/strings.xml b/common/src/main/res/values-gsw/strings.xml index 34e7cbd5d..2bdc33741 100644 --- a/common/src/main/res/values-gsw/strings.xml +++ b/common/src/main/res/values-gsw/strings.xml @@ -1,11 +1,11 @@ - Zurück zur Karte - Zurück zum Dorf - Diese Version von \"Auf den Spuren des Weihnachtsmanns\" ist abgelaufen. Du kannst sie im Play Store aktualisieren. + Zurück zur Karte + Zurück zum Dorf + Diese Version von \"Auf den Spuren des Weihnachtsmanns\" ist abgelaufen. Du kannst sie im Play Store aktualisieren. + Game Over + Ladebildschirm + Fortsetzen + Wiederholen + Weiter + Teilen + Beim Download von %1$s ist ein Fehler aufgetreten. Funktioniert deine Netzwerkverbindung? diff --git a/common/src/main/res/values-gsw/strings_appname.xml b/common/src/main/res/values-gsw/strings_appname.xml new file mode 100644 index 000000000..f1644cdd9 --- /dev/null +++ b/common/src/main/res/values-gsw/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Auf den Spuren des Weihnachtsmanns + diff --git a/common/src/main/res/values-gsw/strings_doodles.xml b/common/src/main/res/values-gsw/strings_doodles.xml new file mode 100644 index 000000000..dd80597cd --- /dev/null +++ b/common/src/main/res/values-gsw/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Schneeballrennen + Pinguinschwimmen + Geschenkewerfen + Bestes Ergebnis: %1$s + Stummschalten + Stummschaltung aufheben + Schließen + Pausieren + BESTES ERGEBNIS: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-gsw/strings_gamenames.xml b/common/src/main/res/values-gsw/strings_gamenames.xml index 217efc408..ce82ae70f 100644 --- a/common/src/main/res/values-gsw/strings_gamenames.xml +++ b/common/src/main/res/values-gsw/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Raketenflug - Dasher Dancer - Snowdown - City Quiz - Present Quest + Lolli-Flipper + Memory + Elf Jetpack + Raketen Flug + Weihnachts-Disco + Städte-Quiz + Geschenke-Schnitzeljagd + Weihnachtsmann-Selfie + Geschenkewerfen + Wichtel-Jetpack + Flughafen Nordpol + Geschenkeschleuder + Zeichnen mit dem Weihnachtsmann + Code-Boogie + Code-Lab + Lolli-Flipper + Wichtel-Wunschkonzert + Pinguin gib Acht + Geschenkeautomat + Bescherung + Rudolfs Rennen + Rasendes Rentier + Such den Weihnachtsmann + Weihnachtsmann-Selfie + Zeit des Gebens + Wichtel auf der Piste + Schneeballsturm + Schneeflockencode + Frostmaler + Verpackungskünstler + Wichtelkiste + Wieder bei der Arbeit + Bürostreich + Fahrgemeinschaften diff --git a/common/src/main/res/values-gsw/strings_invite.xml b/common/src/main/res/values-gsw/strings_invite.xml index af70d7e32..61d3a7fa8 100644 --- a/common/src/main/res/values-gsw/strings_invite.xml +++ b/common/src/main/res/values-gsw/strings_invite.xml @@ -1,12 +1,12 @@ - Freunde dazu einladen, die Reise des Weihnachtsmanns mit Google zu verfolgen - Begib dich auf die Spuren des Weihnachtsmanns und verfolge ihn auf seinem Flug um die Welt! - Ich habe in \"Auf den Spuren des Weihnachtsmanns\" von Google das Spiel %2$s mit den Wichteln gespielt und %1$d Punkte erreicht. Schaffst du das auch? + Freunde dazu einladen, die Reise des Weihnachtsmanns mit Google zu verfolgen + Begib dich auf die Spuren des Weihnachtsmanns und verfolge ihn auf seinem Flug um die Welt! + Ich habe in \"Auf den Spuren des Weihnachtsmanns\" von Google das Spiel %2$s mit den Wichteln gespielt und %1$d Punkte erreicht. Schaffst du das auch? diff --git a/common/src/main/res/values-gsw/strings_jetpack.xml b/common/src/main/res/values-gsw/strings_jetpack.xml index 32a746708..d710d6d00 100644 --- a/common/src/main/res/values-gsw/strings_jetpack.xml +++ b/common/src/main/res/values-gsw/strings_jetpack.xml @@ -1,12 +1,12 @@ - Melde dich an, um deine Erfolge zu speichern und deine Punktzahl zu posten! - Neues Spiel - Zurück zur Karte - PUNKTE - Zurück zur Karte + Melde dich an, um deine Erfolge zu speichern und deine Punktzahl zu posten! + Neues Spiel + Zurück zur Karte + PUNKTE diff --git a/common/src/main/res/values-hdpi/dimens.xml b/common/src/main/res/values-hdpi/dimens.xml index db5ee012d..e023cbeaa 100644 --- a/common/src/main/res/values-hdpi/dimens.xml +++ b/common/src/main/res/values-hdpi/dimens.xml @@ -1,11 +1,11 @@ + 16dp + 8dp + 320dp + 202.5dp + 128dp + 72dp + 8dp + + 4dp 8dp 45dp + 16dp + 16dp + 24dp + 8dp + 55dp + + 60dp + 0dp + 25dp + 180dp diff --git a/common/src/main/res/values-hr/strings.xml b/common/src/main/res/values-hr/strings.xml index 28997f8ef..611917bc6 100644 --- a/common/src/main/res/values-hr/strings.xml +++ b/common/src/main/res/values-hr/strings.xml @@ -1,11 +1,11 @@ - Natrag na kartu - Natrag u selo - Ova verzija igre Slijedi Djeda Božićnjaka zastarjela je. Posjeti Trgovinu Play i nadogradi je na najnoviju verziju. + Natrag na kartu + Natrag u selo + Ova verzija igre Slijedi Djeda Božićnjaka zastarjela je. Posjeti Trgovinu Play i nadogradi je na najnoviju verziju. + Igra je gotova + Učitavanje zaslona + Nastavi + Ponovna igra + Početna + Dijeli + Došlo je do pogreške pri preuzimanju%1$s. Radi li tvoja mreža pravilno? diff --git a/common/src/main/res/values-hr/strings_appname.xml b/common/src/main/res/values-hr/strings_appname.xml new file mode 100644 index 000000000..5f12424b6 --- /dev/null +++ b/common/src/main/res/values-hr/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Slijedi Djeda Božićnjaka + diff --git a/common/src/main/res/values-hr/strings_doodles.xml b/common/src/main/res/values-hr/strings_doodles.xml new file mode 100644 index 000000000..f570dd958 --- /dev/null +++ b/common/src/main/res/values-hr/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Grudanje vilenjaka + Plivačka utrka pingvina + Bacanje darova + Najbolji rezultat: %1$s + Isključi zvuk + Uključi zvuk + Zatvori + Pauziraj + NAJBOLJI REZULTAT: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-hr/strings_gamenames.xml b/common/src/main/res/values-hr/strings_gamenames.xml index e17a1d389..54147632b 100644 --- a/common/src/main/res/values-hr/strings_gamenames.xml +++ b/common/src/main/res/values-hr/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Igra pamćenja - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Kviz o gradovima - Lov na darove + Gumball + Igra pamćenja + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Kviz o gradovima + Lov na darove + Djedov fotograf + Ubacivanje darova + Vilenjačka sprava za letenje + Zračna luka na Sjevernom polu + Praćka za darove + Djedovi crteži + Ples kodova + Laboratorij za pisanje koda + Igra s kuglicama + Vilenjački bend + Utrka pingvina + Skakutanje s darovima + Ispuštanje darova + Rudolf trkač + Utrka sobova + Potraga za Djedom Božićnjakom + Djedičin selfie + Vrijeme darivanja + Skijalište vilenjaka + Grudalište + Izrada pahuljice pomoću koda + Brzo skiciranje + Dvoboj u zamatanju darova + Tvorac vilenjaka + Ponovo na radnom mjestu + Uredska podvala + Dijeljenje vožnje diff --git a/common/src/main/res/values-hr/strings_invite.xml b/common/src/main/res/values-hr/strings_invite.xml index f34818fb3..5fe0d1e43 100644 --- a/common/src/main/res/values-hr/strings_invite.xml +++ b/common/src/main/res/values-hr/strings_invite.xml @@ -1,12 +1,12 @@ - Pozovite prijatelje i zajedno pratite Djeda Božićnjaka uz Google - Isprobajte igru Slijedi Djeda Božićnjaka i pratite Djedicu u njegovu letu širom svijeta! - Moj rezultat u igri %2$s s vilenjacima u Slijedi Djeda Božićnjaka: %1$d. Misliš da možeš bolje? + Pozovite prijatelje i zajedno pratite Djeda Božićnjaka uz Google + Isprobajte igru Slijedi Djeda Božićnjaka i pratite Djedicu u njegovu letu širom svijeta! + Moj rezultat u igri %2$s s vilenjacima u Slijedi Djeda Božićnjaka: %1$d. Misliš da možeš bolje? diff --git a/common/src/main/res/values-hr/strings_jetpack.xml b/common/src/main/res/values-hr/strings_jetpack.xml index b158ba9f7..32e229958 100644 --- a/common/src/main/res/values-hr/strings_jetpack.xml +++ b/common/src/main/res/values-hr/strings_jetpack.xml @@ -1,12 +1,12 @@ - Prijavite se da biste otključali uspjehe i objavili rezultat! - Igraj ponovo - Natrag na kartu - REZULTAT - Natrag na kartu + Prijavite se da biste otključali uspjehe i objavili rezultat! + Igraj ponovo + Natrag na kartu + REZULTAT diff --git a/common/src/main/res/values-id/strings.xml b/common/src/main/res/values-id/strings.xml index ea5473ba0..4ea0fbeb4 100644 --- a/common/src/main/res/values-id/strings.xml +++ b/common/src/main/res/values-id/strings.xml @@ -1,11 +1,11 @@ - Balik ke peta - Balik ke desa - Pelacak Sinterklas versi ini sudah usang. Kunjungi Play Store untuk update ke versi terbaru. + Balik ke peta + Balik ke desa + Pelacak Sinterklas versi ini sudah usang. Kunjungi Play Store untuk update ke versi terbaru. + Game Selesai + Memuat layar + Lanjutkan + Main Lagi + Beranda + Bagikan + Terjadi error saat mendownload %1$s. Apakah koneksi jaringan Anda berfungsi? diff --git a/common/src/main/res/values-id/strings_appname.xml b/common/src/main/res/values-id/strings_appname.xml new file mode 100644 index 000000000..e519e71dd --- /dev/null +++ b/common/src/main/res/values-id/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Pelacak Sinterklas + diff --git a/common/src/main/res/values-id/strings_doodles.xml b/common/src/main/res/values-id/strings_doodles.xml new file mode 100644 index 000000000..eaeb9d307 --- /dev/null +++ b/common/src/main/res/values-id/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Lari dari Kejaran Bola Salju + Renang Penguin + Melempar Hadiah + Terbaik: %1$s + Matikan suara + Nyalakan suara + Tutup + Jeda + SKOR TERBAIK: <b>%1$s</b> + %1$.1f dtk + %1$d m + diff --git a/common/src/main/res/values-id/strings_gamenames.xml b/common/src/main/res/values-id/strings_gamenames.xml index eb1b7b3f1..114e77301 100644 --- a/common/src/main/res/values-id/strings_gamenames.xml +++ b/common/src/main/res/values-id/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Kuis Tebak Kota - Cari Hadiah + Bola Permen + + Cocokkan Gambar + Elf Jetpack + Seluncur Roket + Seluncur Roket + + Kuis Tebak Kota + Cari Hadiah + Selfie Sinterklas + Lempar Hadiah + Jetpack Kurcaci + Bandara Kutub Utara + Ketapel Hadiah + Menggambar Tema Sinterklas + Tarian Kode + Lab Kode + Miringkan Gumball + Kolaborasi Band Kurcaci + Penguin Dash + Pantulan Hadiah + Jatuhkan Hadiah + Pembalap Rudolph + Pelari Rusa Kutub + Cari Sinterklas + Selfie Sinterklas + Musim Berbagi + Ski Kurcaci + Badai Bola Salju + Kode Keping Salju + Sketsa Cepat + Lomba Bungkus + Pembuat Kurcaci + Kembali Bekerja + Gurauan Kantor + Nebeng diff --git a/common/src/main/res/values-id/strings_invite.xml b/common/src/main/res/values-id/strings_invite.xml index 9622d1f36..ce4263a71 100644 --- a/common/src/main/res/values-id/strings_invite.xml +++ b/common/src/main/res/values-id/strings_invite.xml @@ -1,12 +1,12 @@ - Undang teman Anda untuk melacak Sinterklas dengan Google - Coba Pelacak Sinterklas dan tonton Sinterklas terbang ke seluruh dunia! - Saya memperoleh skor %1$d saat bermain game %2$s dengan para kurcaci di Google Pelacak Sinterklas. Anda bisa mengalahkannya? + Undang teman Anda untuk melacak Sinterklas dengan Google + Coba Pelacak Sinterklas dan tonton Sinterklas terbang ke seluruh dunia! + Saya memperoleh skor %1$d saat bermain game %2$s dengan para kurcaci di Google Pelacak Sinterklas. Anda bisa mengalahkannya? diff --git a/common/src/main/res/values-id/strings_jetpack.xml b/common/src/main/res/values-id/strings_jetpack.xml index 06f2d5567..dd1d09887 100644 --- a/common/src/main/res/values-id/strings_jetpack.xml +++ b/common/src/main/res/values-id/strings_jetpack.xml @@ -1,12 +1,12 @@ - Masuk untuk membuka pencapaian dan mengeposkan skor! - Main Lagi - Balik ke Peta - SKOR - Balik ke peta + Masuk untuk membuka pencapaian dan memposting skor! + Main Lagi + Balik ke Peta + SKOR diff --git a/common/src/main/res/values-in/strings.xml b/common/src/main/res/values-in/strings.xml index ea5473ba0..4ea0fbeb4 100644 --- a/common/src/main/res/values-in/strings.xml +++ b/common/src/main/res/values-in/strings.xml @@ -1,11 +1,11 @@ - Balik ke peta - Balik ke desa - Pelacak Sinterklas versi ini sudah usang. Kunjungi Play Store untuk update ke versi terbaru. + Balik ke peta + Balik ke desa + Pelacak Sinterklas versi ini sudah usang. Kunjungi Play Store untuk update ke versi terbaru. + Game Selesai + Memuat layar + Lanjutkan + Main Lagi + Beranda + Bagikan + Terjadi error saat mendownload %1$s. Apakah koneksi jaringan Anda berfungsi? diff --git a/common/src/main/res/values-in/strings_appname.xml b/common/src/main/res/values-in/strings_appname.xml new file mode 100644 index 000000000..e519e71dd --- /dev/null +++ b/common/src/main/res/values-in/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Pelacak Sinterklas + diff --git a/common/src/main/res/values-in/strings_doodles.xml b/common/src/main/res/values-in/strings_doodles.xml new file mode 100644 index 000000000..eaeb9d307 --- /dev/null +++ b/common/src/main/res/values-in/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Lari dari Kejaran Bola Salju + Renang Penguin + Melempar Hadiah + Terbaik: %1$s + Matikan suara + Nyalakan suara + Tutup + Jeda + SKOR TERBAIK: <b>%1$s</b> + %1$.1f dtk + %1$d m + diff --git a/common/src/main/res/values-in/strings_gamenames.xml b/common/src/main/res/values-in/strings_gamenames.xml index eb1b7b3f1..114e77301 100644 --- a/common/src/main/res/values-in/strings_gamenames.xml +++ b/common/src/main/res/values-in/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Kuis Tebak Kota - Cari Hadiah + Bola Permen + + Cocokkan Gambar + Elf Jetpack + Seluncur Roket + Seluncur Roket + + Kuis Tebak Kota + Cari Hadiah + Selfie Sinterklas + Lempar Hadiah + Jetpack Kurcaci + Bandara Kutub Utara + Ketapel Hadiah + Menggambar Tema Sinterklas + Tarian Kode + Lab Kode + Miringkan Gumball + Kolaborasi Band Kurcaci + Penguin Dash + Pantulan Hadiah + Jatuhkan Hadiah + Pembalap Rudolph + Pelari Rusa Kutub + Cari Sinterklas + Selfie Sinterklas + Musim Berbagi + Ski Kurcaci + Badai Bola Salju + Kode Keping Salju + Sketsa Cepat + Lomba Bungkus + Pembuat Kurcaci + Kembali Bekerja + Gurauan Kantor + Nebeng diff --git a/common/src/main/res/values-in/strings_invite.xml b/common/src/main/res/values-in/strings_invite.xml index 9622d1f36..ce4263a71 100644 --- a/common/src/main/res/values-in/strings_invite.xml +++ b/common/src/main/res/values-in/strings_invite.xml @@ -1,12 +1,12 @@ - Undang teman Anda untuk melacak Sinterklas dengan Google - Coba Pelacak Sinterklas dan tonton Sinterklas terbang ke seluruh dunia! - Saya memperoleh skor %1$d saat bermain game %2$s dengan para kurcaci di Google Pelacak Sinterklas. Anda bisa mengalahkannya? + Undang teman Anda untuk melacak Sinterklas dengan Google + Coba Pelacak Sinterklas dan tonton Sinterklas terbang ke seluruh dunia! + Saya memperoleh skor %1$d saat bermain game %2$s dengan para kurcaci di Google Pelacak Sinterklas. Anda bisa mengalahkannya? diff --git a/common/src/main/res/values-in/strings_jetpack.xml b/common/src/main/res/values-in/strings_jetpack.xml index 06f2d5567..dd1d09887 100644 --- a/common/src/main/res/values-in/strings_jetpack.xml +++ b/common/src/main/res/values-in/strings_jetpack.xml @@ -1,12 +1,12 @@ - Masuk untuk membuka pencapaian dan mengeposkan skor! - Main Lagi - Balik ke Peta - SKOR - Balik ke peta + Masuk untuk membuka pencapaian dan memposting skor! + Main Lagi + Balik ke Peta + SKOR diff --git a/common/src/main/res/values-it/strings.xml b/common/src/main/res/values-it/strings.xml index 4e5a7e3ce..74730562d 100644 --- a/common/src/main/res/values-it/strings.xml +++ b/common/src/main/res/values-it/strings.xml @@ -1,11 +1,11 @@ - Torna alla mappa - Torna al villaggio - Questa versione di Segui Babbo Natale non è aggiornata. Visita il Play Store per effettuare l\'aggiornamento alla versione più recente. + Torna alla mappa + Torna al villaggio + Questa versione di Segui Babbo Natale non è aggiornata. Visita il Play Store per effettuare l\'aggiornamento alla versione più recente. + Game over + Caricamento schermata + Riprendi + Gioca ancora + Home page + Condividi + Si è verificato un errore durante il download di %1$s. La tua connessione di rete funziona? diff --git a/common/src/main/res/values-it/strings_appname.xml b/common/src/main/res/values-it/strings_appname.xml new file mode 100644 index 000000000..c80783e1e --- /dev/null +++ b/common/src/main/res/values-it/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Segui Babbo Natale + diff --git a/common/src/main/res/values-it/strings_doodles.xml b/common/src/main/res/values-it/strings_doodles.xml new file mode 100644 index 000000000..e539d0d03 --- /dev/null +++ b/common/src/main/res/values-it/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Corri elfo, corri + Nuota pinguino + Lancio dei regali + Punteggio migliore: %1$s + Disattiva l\'audio + Riattiva l\'audio + Chiudi + Pausa + PUNTEGGIO MIGLIORE: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-it/strings_gamenames.xml b/common/src/main/res/values-it/strings_gamenames.xml index c6d403b72..e3924e557 100644 --- a/common/src/main/res/values-it/strings_gamenames.xml +++ b/common/src/main/res/values-it/strings_gamenames.xml @@ -1,12 +1,12 @@ - Pallina di gomma - Memory - Elf Jetpack - Razzo di natale - Ballo di Natale - Palle di neve - Indovina la città - Caccia ai regali + Palline di zucchero + Memory + L\'elfo volante + Razzo di natale + Ballo di Natale + Indovina la città + Caccia ai regali + Santa Snap + Lancia il regalo + Il folletto volante + Aeroporto del Polo Nord + Fionda dei regali + Disegni di Babbo Natale + La danza del codice + Laboratorio del codice + Palline di zucchero + La band dei folletti + Lo scatto del pinguino + Palleggia con il regalo + Sgancia il regalo + La corsa di Rudolph + La corsa delle renne + La ricerca di Babbo Natale + Selfie con Babbo Natale + La stagione dei regali + Folletti che sciano + Battaglia di palle di neve + Disegna con il codice + Indovina il disegno + Incarta il regalo + Crea un folletto + Si torna al lavoro + Scherzo in ufficio + Car sharing diff --git a/common/src/main/res/values-it/strings_invite.xml b/common/src/main/res/values-it/strings_invite.xml index 54a60f535..df4d2d90f 100644 --- a/common/src/main/res/values-it/strings_invite.xml +++ b/common/src/main/res/values-it/strings_invite.xml @@ -1,12 +1,12 @@ - Invita i tuoi amici a seguire Babbo Natale con Google - Prova l\'app Segui Babbo Natale e guardalo mentre vola intorno al mondo. - Ho totalizzato %1$d punti a %2$s con i folletti di Segui Babbo Natale di Google. Puoi fare di meglio? + Invita i tuoi amici a seguire Babbo Natale con Google + Prova l\'app Segui Babbo Natale e guardalo mentre vola intorno al mondo. + Ho totalizzato %1$d punti a %2$s con i folletti di Segui Babbo Natale di Google. Puoi fare di meglio? diff --git a/common/src/main/res/values-it/strings_jetpack.xml b/common/src/main/res/values-it/strings_jetpack.xml index 412a95415..8587124c9 100644 --- a/common/src/main/res/values-it/strings_jetpack.xml +++ b/common/src/main/res/values-it/strings_jetpack.xml @@ -1,12 +1,12 @@ - Accedi per sbloccare i risultati e pubblicare il tuo punteggio. - Gioca ancora - Torna alla mappa - PUNTEGGIO - Torna alla mappa + Accedi per sbloccare i risultati e pubblicare il tuo punteggio. + Gioca ancora + Torna alla mappa + PUNTEGGIO diff --git a/common/src/main/res/values-ja/strings.xml b/common/src/main/res/values-ja/strings.xml index 63ba0d80e..b4f5c4ada 100644 --- a/common/src/main/res/values-ja/strings.xml +++ b/common/src/main/res/values-ja/strings.xml @@ -1,11 +1,11 @@ - 地図に戻る - 村へ戻る - お使いの「サンタを追いかけよう」は、最新版ではありません。Google Play ストアで最新バージョンを入手してください。 + 地図に戻る + 村へ戻る + お使いの「サンタを追いかけよう」は、最新版ではありません。Google Play ストアで最新バージョンを入手してください。 + ゲームオーバー + 画面を読み込み中 + 再開 + もう一度プレイ + ホーム + 共有 + %1$sのダウンロード中にエラーが発生しました。ネットワークに正常に接続されていますか? diff --git a/common/src/main/res/values-ja/strings_appname.xml b/common/src/main/res/values-ja/strings_appname.xml new file mode 100644 index 000000000..ca1e2a05d --- /dev/null +++ b/common/src/main/res/values-ja/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + サンタを追いかけよう + diff --git a/common/src/main/res/values-ja/strings_doodles.xml b/common/src/main/res/values-ja/strings_doodles.xml new file mode 100644 index 000000000..7af849797 --- /dev/null +++ b/common/src/main/res/values-ja/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + 雪玉ダッシュ + ペンギン スイミング + プレゼント投げ + ベストスコア: %1$s + ミュート + ミュートを解除 + 閉じる + 一時停止 + ベストスコア: <b>%1$s</b> + %1$.1f 秒 + %1$d m + diff --git a/common/src/main/res/values-ja/strings_gamenames.xml b/common/src/main/res/values-ja/strings_gamenames.xml index 8c809234b..a70036c1a 100644 --- a/common/src/main/res/values-ja/strings_gamenames.xml +++ b/common/src/main/res/values-ja/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - 都市クイズ - プレゼント クエスト + ガムボール + 記憶ゲーム + ジェットパック + ロケットそり + ダッシャー ダンサー + 都市クイズ + プレゼント クエスト + サンタのスナップ写真 + プレゼントトス + ジェットパック + 北極空港 + ギフト スリングショット + サンタのお絵かき + コードブギ + コードラボ + ガムボール ティルト + Elf Jamband + ペンギン ダッシュ + プレゼント バウンス + プレゼント ドロップ + 赤鼻のトナカイのレース + トナカイ ランナー + サンタさんを探す + サンタの自撮り写真 + プレゼントの季節 + 妖精のスキー + 雪球の嵐 + 雪の結晶を描こう + スピード スケッチ + 妖精のプレゼント ラッピング + 妖精メーカー + サンタさんが戻ってくる + オフィスでのいたずら + みんなで相乗り diff --git a/common/src/main/res/values-ja/strings_invite.xml b/common/src/main/res/values-ja/strings_invite.xml index beb3a0a4a..70d1a06b4 100644 --- a/common/src/main/res/values-ja/strings_invite.xml +++ b/common/src/main/res/values-ja/strings_invite.xml @@ -1,12 +1,12 @@ - Google の「サンタを追いかけよう」に友だちを招待 - 「サンタを追いかけよう」で世界中を飛び回るサンタさんを見よう! - Google の「サンタを追いかけよう」で、妖精たちと %2$s ゲームをして %1$d 点達成!あなたもチャレンジしませんか? + Google の「サンタを追いかけよう」に友だちを招待 + 「サンタを追いかけよう」で世界中を飛び回るサンタさんを見よう! + Google の「サンタを追いかけよう」で、妖精たちと %2$s ゲームをして %1$d 点達成!あなたもチャレンジしませんか? diff --git a/common/src/main/res/values-ja/strings_jetpack.xml b/common/src/main/res/values-ja/strings_jetpack.xml index b7ce9c7c8..7d9200069 100644 --- a/common/src/main/res/values-ja/strings_jetpack.xml +++ b/common/src/main/res/values-ja/strings_jetpack.xml @@ -1,12 +1,12 @@ - ログインしたら、結果を開放してスコアを投稿しよう! - もう一度プレイ - 地図に戻る - スコア - 地図に戻る + ログインしたら、結果を開放してスコアを投稿しよう! + もう一度プレイ + 地図に戻る + スコア diff --git a/common/src/main/res/values-ko/strings.xml b/common/src/main/res/values-ko/strings.xml index e4918e77a..bca6ab357 100644 --- a/common/src/main/res/values-ko/strings.xml +++ b/common/src/main/res/values-ko/strings.xml @@ -1,11 +1,11 @@ - 지도로 돌아가기 - 마을로 돌아가기 - 산타 추적기의 버전이 오래되었습니다. Play 스토어를 방문하여 최신 버전으로 업데이트하세요. + 지도로 돌아가기 + 마을로 돌아가기 + 산타 추적기의 버전이 오래되었습니다. Play 스토어를 방문하여 최신 버전으로 업데이트하세요. + 게임 종료 + 화면 로드 중 + 계속 + 다시 시작 + + 공유 + %1$s 다운로드 중에 오류가 발생했습니다. 네트워크에 연결되어 있나요? diff --git a/common/src/main/res/values-ko/strings_appname.xml b/common/src/main/res/values-ko/strings_appname.xml new file mode 100644 index 000000000..5db30a627 --- /dev/null +++ b/common/src/main/res/values-ko/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + 산타 추적기 + diff --git a/common/src/main/res/values-ko/strings_doodles.xml b/common/src/main/res/values-ko/strings_doodles.xml new file mode 100644 index 000000000..032e96ac1 --- /dev/null +++ b/common/src/main/res/values-ko/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + 눈덩이 피해 달리기 + 펭귄 수영 + 선물 던지기 + 최고 득점: %1$s + 음소거 + 음소거 해제 + 닫기 + 일시중지 + 최고 득점: <b>%1$s</b> + %1$.1f초 + %1$d미터 + diff --git a/common/src/main/res/values-ko/strings_gamenames.xml b/common/src/main/res/values-ko/strings_gamenames.xml index 80a3fcb53..021b37d83 100644 --- a/common/src/main/res/values-ko/strings_gamenames.xml +++ b/common/src/main/res/values-ko/strings_gamenames.xml @@ -1,12 +1,12 @@ - 풍선껌 - 기억력 - 제트 추진 엘프 - 로켓 썰매 - 대셔 댄서 - 최후의 눈싸움 결전 - 도시 퀴즈 - 선물 찾기 + 풍선껌 + 기억력 + 제트 추진 엘프 + 로켓 썰매 + 대셔 댄서 + 도시 퀴즈 + 선물 찾기 + 산타 셀카 + 선물 던지기 + 제트 추진 엘프 + 북극 공항 + 새총으로 선물 날리기 + 산타 그리기 + 코드와 함께 춤을 + 코드 실험실 + 풍선껌 기울이기 + 엘프 즉석밴드 + 펭귄 질주 + 선물 튕기기 + 선물 떨구기 + 루돌프 경주 + 사슴 달리기 + 산타 찾기 + 산타 셀카 + 나눔의 계절 + 엘프 스키 + 맹공의 눈싸움 + 눈송이 코드 + 빨리 그리기 + 선물 포장 시합 + 엘프 만들기 + 산타가 돌아옵니다 + 사무실 장난 + 카풀 diff --git a/common/src/main/res/values-ko/strings_invite.xml b/common/src/main/res/values-ko/strings_invite.xml index 56847a6c1..e4eb9e532 100644 --- a/common/src/main/res/values-ko/strings_invite.xml +++ b/common/src/main/res/values-ko/strings_invite.xml @@ -1,12 +1,12 @@ - 친구를 초대하여 Google에서 산타 추적하기 - 산타 추적기를 사용해 전 세계를 도는 산타의 여정을 지켜봐 주세요. - Google 산타 추적기에서 엘프 친구들과 함께 %2$s에서 %1$d점을 득점했어요. 따라잡을 테면 따라잡아 보세요. + 친구를 초대하여 Google에서 산타 추적하기 + 산타 추적기를 사용해 전 세계를 도는 산타의 여정을 지켜봐 주세요. + Google 산타 추적기에서 엘프 친구들과 함께 %2$s에서 %1$d점을 득점했어요. 따라잡을 테면 따라잡아 보세요. diff --git a/common/src/main/res/values-ko/strings_jetpack.xml b/common/src/main/res/values-ko/strings_jetpack.xml index d6cf68636..5d2fdf653 100644 --- a/common/src/main/res/values-ko/strings_jetpack.xml +++ b/common/src/main/res/values-ko/strings_jetpack.xml @@ -1,12 +1,12 @@ - 로그인하여 업적을 달성하고 점수를 게시해 보세요. - 다시 하기 - 지도로 돌아가기 - 점수 - 지도로 돌아가기 + 로그인하여 업적을 달성하고 점수를 게시해 보세요. + 다시 하기 + 지도로 돌아가기 + 점수 diff --git a/common/src/main/res/values-land/dimens.xml b/common/src/main/res/values-land/dimens.xml new file mode 100644 index 000000000..64135fbd7 --- /dev/null +++ b/common/src/main/res/values-land/dimens.xml @@ -0,0 +1,21 @@ + + + + + 60dp + 40dp + \ No newline at end of file diff --git a/common/src/main/res/values-ln/strings.xml b/common/src/main/res/values-ln/strings.xml index a28283a0d..164b3ff7a 100644 --- a/common/src/main/res/values-ln/strings.xml +++ b/common/src/main/res/values-ln/strings.xml @@ -1,11 +1,11 @@ - Retour à la carte - Retour au village - Cette version du jeu \"Sur la piste du père Noël\" est obsolète. Veuillez accéder au Play Store pour télécharger la dernière version. + Retour à la carte + Retour au village + Cette version du jeu \"Sur la piste du père Noël\" est obsolète. Veuillez accéder au Play Store pour télécharger la dernière version. + Jeu terminé + Écran de chargement + Reprendre + Réessayer + Accueil + Partager + Une erreur s\'est produite lors du téléchargement %1$s. Votre connexion réseau fonctionne-t-elle correctement ? diff --git a/common/src/main/res/values-ln/strings_appname.xml b/common/src/main/res/values-ln/strings_appname.xml new file mode 100644 index 000000000..b9a8fb866 --- /dev/null +++ b/common/src/main/res/values-ln/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Sur la piste du père Noël + diff --git a/common/src/main/res/values-ln/strings_doodles.xml b/common/src/main/res/values-ln/strings_doodles.xml new file mode 100644 index 000000000..a46c86107 --- /dev/null +++ b/common/src/main/res/values-ln/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + La course-poursuite enneigée + La nage du pingouin + Lancer de cadeaux + Meilleur score : %1$s + Couper le son + Réactiver le son + Fermer + Mettre en pause + MEILLEUR SCORE : <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-ln/strings_gamenames.xml b/common/src/main/res/values-ln/strings_gamenames.xml index c78bd1054..7b01a0ae8 100644 --- a/common/src/main/res/values-ln/strings_gamenames.xml +++ b/common/src/main/res/values-ln/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Le questionnaire des villes - La quête des cadeaux + Le flipper bonbons + Memory + Elf Jetpack + Le traîneau-fusée + La disco de Noël + Le quiz des villes + La quête des cadeaux + Selfie d\'elfe + Lancer de cadeaux + Fusée du lutin + L\'aéroport du pôle Nord + Le lance-cadeaux + Dessine avec le père Noël + La danse du code + L\'atelier de programmation + Boules de chewing-gum en balade + Le groupe des lutins + La promenade du pingouin + Le cadeau rebondissant + Le lâcher de cadeaux + La course de Rudolphe + La course du renne + Où est le père Noël + Le selfie du père Noël + La saison des fêtes + La descente en skis de l\'elfe + Tempête de boules de neige + Code un flocon de neige + Esquisse rapide + Concours d\'emballage de cadeaux + Créateur de lutin + La reprise du travail + La farce au bureau + Le covoiturage diff --git a/common/src/main/res/values-ln/strings_invite.xml b/common/src/main/res/values-ln/strings_invite.xml index a584c72ac..e11a4441a 100644 --- a/common/src/main/res/values-ln/strings_invite.xml +++ b/common/src/main/res/values-ln/strings_invite.xml @@ -1,12 +1,12 @@ - Invitez vos amis à suivre le père Noël avec Google - Essaie l\'application Sur la piste du père Noël pour suivre la tournée du père Noël à travers le monde ! - J\'ai atteint un score de %1$d points au jeu %2$s avec les lutins du programme Santa Tracker de Google. Parviendras-tu à me battre ? + Invitez vos amis à suivre le père Noël avec Google + Essaie l\'application Sur la piste du père Noël pour suivre la tournée du père Noël à travers le monde ! + J\'ai atteint un score de %1$d points au jeu %2$s avec les lutins du programme Santa Tracker de Google. Parviendras-tu à me battre ? diff --git a/common/src/main/res/values-ln/strings_jetpack.xml b/common/src/main/res/values-ln/strings_jetpack.xml index b590c6fd5..72a8f454d 100644 --- a/common/src/main/res/values-ln/strings_jetpack.xml +++ b/common/src/main/res/values-ln/strings_jetpack.xml @@ -1,12 +1,12 @@ - Connectez-vous pour débloquer vos exploits et publier vos scores ! - Rejouer - Revenir à la carte - SCORE - Retour à la carte + Connectez-vous pour débloquer vos exploits et publier vos scores ! + Rejouer + Revenir à la carte + SCORE diff --git a/common/src/main/res/values-lt/strings.xml b/common/src/main/res/values-lt/strings.xml index 7b9732b80..5b64f29a2 100644 --- a/common/src/main/res/values-lt/strings.xml +++ b/common/src/main/res/values-lt/strings.xml @@ -1,11 +1,11 @@ - Grįžti į žemėlapį - Grįžti į kaimą - Ši Kalėdų Senelio kelionės versija pasenusi. Apsilankykite „Play“ parduotuvėje ir atnaujinkite į naujausią versiją. + Grįžti į žemėlapį + Grįžti į kaimą + Ši Kalėdų Senelio kelionės versija pasenusi. Apsilankykite „Play“ parduotuvėje ir atnaujinkite į naujausią versiją. + Žaidimo pabaiga + Įkeliamas ekranas + Tęsti + Paleisti iš naujo + Pagrindinis puslapis + Bendrinti + Atsisiunčiant „%1$s“ įvyko klaida. Ar esate prisijungę prie tinklo? diff --git a/common/src/main/res/values-lt/strings_appname.xml b/common/src/main/res/values-lt/strings_appname.xml new file mode 100644 index 000000000..48b910d72 --- /dev/null +++ b/common/src/main/res/values-lt/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Kalėdų Senelio kelionė + diff --git a/common/src/main/res/values-lt/strings_doodles.xml b/common/src/main/res/values-lt/strings_doodles.xml new file mode 100644 index 000000000..f2297ce64 --- /dev/null +++ b/common/src/main/res/values-lt/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Bėgimas nuo sniego kamuolio + Plaukiojantis pingvinas + Dovanų svaidymas + Geriausias rezultatas: %1$s + Nutildyti + Įjungti garsą + Uždaryti + Pristabdyti + GERIAUSIAS REZULTATAS: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-lt/strings_gamenames.xml b/common/src/main/res/values-lt/strings_gamenames.xml index c698b0615..f3af2a588 100644 --- a/common/src/main/res/values-lt/strings_gamenames.xml +++ b/common/src/main/res/values-lt/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Miestų viktorina - Dovanų ieškynės + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Miestų viktorina + Dovanų ieškynės + Kalėdų Senelio asmenukė + Dovanų mėtymas + Elfų skraidyklė + Šiaurės ašigalio oro uostas + Dovanų laidynė + Kalėdų Senelio piešiniai + Bugivugio kodai + Kodų laboratorija + Gumos kamuoliukų svyriai + Elfų muzikinė grupė + Pingvinas ant ledkalnių + Dovanų atmušinėjimas + Dovanų mėtymas + Rudolfas lenktynininkas + Bėgimas su šiaurės elniu + Kalėdų Senelio paieška + Kalėdų Senelio asmenukė + Dovanų laikas + Elfų slidinėjimas + Gniūžčių lietus + Sugeneruokite snaigės kodą + Greitas eskizas + Vyniotuvės + Elfo kūrimas + Grįžimas prie darbų + Biuro juokelis + Pavežimas diff --git a/common/src/main/res/values-lt/strings_invite.xml b/common/src/main/res/values-lt/strings_invite.xml index 3aefb3e38..7b4ca541f 100644 --- a/common/src/main/res/values-lt/strings_invite.xml +++ b/common/src/main/res/values-lt/strings_invite.xml @@ -1,12 +1,12 @@ - Pakvieskite draugus stebėti Kalėdų Senelį „Google“ - Išbandykite „Santa Tracker“ ir pamatysite, kaip Kalėdų Senelis skrenda per pasaulį! - Žaisdamas (-a) %2$s su elfais programoje „Google“ Kalėdų Senelio kelionė pelniau %1$d. Galite geriau? + Pakvieskite draugus stebėti Kalėdų Senelį „Google“ + Išbandykite „Santa Tracker“ ir pamatysite, kaip Kalėdų Senelis skrenda per pasaulį! + Žaisdamas (-a) %2$s su elfais programoje „Google“ Kalėdų Senelio kelionė pelniau %1$d. Galite geriau? diff --git a/common/src/main/res/values-lt/strings_jetpack.xml b/common/src/main/res/values-lt/strings_jetpack.xml index 11eb7a394..a9302bd10 100644 --- a/common/src/main/res/values-lt/strings_jetpack.xml +++ b/common/src/main/res/values-lt/strings_jetpack.xml @@ -1,12 +1,12 @@ - Prisijunkite, jei norite atrakinti laimėjimus ir paskelbti savo rezultatą! - Žaisti dar kartą - Grįžti į žemėlapį - REZULTATAS - Grįžti į žemėlapį + Prisijunkite, jei norite atrakinti laimėjimus ir paskelbti savo rezultatą! + Žaisti dar kartą + Grįžti į žemėlapį + REZULTATAS diff --git a/common/src/main/res/values-lv/strings.xml b/common/src/main/res/values-lv/strings.xml index 0ae5e5b53..7e2ca8328 100644 --- a/common/src/main/res/values-lv/strings.xml +++ b/common/src/main/res/values-lv/strings.xml @@ -1,11 +1,11 @@ - Atgriezties kartē - Atgriezties ciematā - Šī lietotnes Ziemassvētku vecīša ceļojums versija ir novecojusi. Lūdzu, apmeklējiet Play veikalu, lai iegūtu jaunāko versiju. + Atgriezties kartē + Atgriezties ciematā + Šī lietotnes Ziemassvētku vecīša ceļojums versija ir novecojusi. Lūdzu, apmeklējiet Play veikalu, lai iegūtu jaunāko versiju. + Spēle beigusies + Notiek ekrāna ielāde + Atsākt + Spēlēt atkārtoti + Sākums + Kopīgot + Lejupielādējot %1$s, radās kļūda. Vai jūsu tīkla savienojums darbojas? diff --git a/common/src/main/res/values-lv/strings_appname.xml b/common/src/main/res/values-lv/strings_appname.xml new file mode 100644 index 000000000..f6ca6af0c --- /dev/null +++ b/common/src/main/res/values-lv/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Ziemassvētku vecīša ceļojums + diff --git a/common/src/main/res/values-lv/strings_doodles.xml b/common/src/main/res/values-lv/strings_doodles.xml new file mode 100644 index 000000000..30910700b --- /dev/null +++ b/common/src/main/res/values-lv/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Bēgšana no sniega pikām + Pingvīna peldēšana + Dāvanu mešanas spēle (Present Throw) + Labākais rezultāts: %1$s + Izslēgt skaņu + Ieslēgt skaņu + Aizvērt + Apturēt + LABĀKAIS REZULTĀTS: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-lv/strings_gamenames.xml b/common/src/main/res/values-lv/strings_gamenames.xml index 33b50ef38..37f701077 100644 --- a/common/src/main/res/values-lv/strings_gamenames.xml +++ b/common/src/main/res/values-lv/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball spēle - Atmiņas spēle - Elf Jetpack spēle - Rocket Sleigh - Dasher Dancer - Snowdown - Pilsētu viktorīnas spēle (City Quiz) - Dāvanu meklēšanas spēle (Present Quest) + Gumball spēle + Atmiņas spēle + Elf Jetpack spēle + Rocket Sleigh + Dasher Dancer + Pilsētu viktorīnas spēle (City Quiz) + Dāvanu meklēšanas spēle (Present Quest) + Ziemassvētku vecīša pašbildes + Dāvanu mešana + Lidojošie rūķīši + Ziemeļpola lidosta + Dāvanu katapulta + Ziemassvētku vecīša zīmēšanas spēle + Kods: bugi + Kodu laboratorija + Spēle Gumball Tilt + Rūķīšu muzikālā apvienība + Pingvīna skrējiens + Dāvanu mētāšana + Dāvanu piegāde + Ziemeļbrieža Rūdolfa brauciens + Ziemeļbrieža skrējiens + Ziemassvētku vecīša meklēšana + Ziemassvētku vecīša pašbilde + Dāvanu laiks + Slēpojošie rūķīši + Sniega piku kauja + Sniegpārsliņas izveide ar kodu + Zīmēšana uz ātrumu + Dāvanu saiņošanas spēle + Rūķīšu veidotājs + Atpakaļ pie darba + Izjokošana birojā + Kopbraukšana diff --git a/common/src/main/res/values-lv/strings_invite.xml b/common/src/main/res/values-lv/strings_invite.xml index cb6423681..0b9ffc014 100644 --- a/common/src/main/res/values-lv/strings_invite.xml +++ b/common/src/main/res/values-lv/strings_invite.xml @@ -1,12 +1,12 @@ - Uzaicinājums draugiem sekot Ziemassvētku vecītim pakalpojumā Google - Izmēģiniet Ziemassvētku vecīša ceļojumu un skatieties, kā Ziemassvētku vecītis aplido apkārt visai pasaulei! - Es ieguvu %1$d punktus, spēlējot spēli %2$s ar elfiem Google Ziemassvētku vecīša ceļojumā. Vai varat to pārspēt? + Uzaicinājums draugiem sekot Ziemassvētku vecītim pakalpojumā Google + Izmēģiniet Ziemassvētku vecīša ceļojumu un skatieties, kā Ziemassvētku vecītis aplido apkārt visai pasaulei! + Es ieguvu %1$d punktus, spēlējot spēli %2$s ar elfiem Google Ziemassvētku vecīša ceļojumā. Vai varat to pārspēt? diff --git a/common/src/main/res/values-lv/strings_jetpack.xml b/common/src/main/res/values-lv/strings_jetpack.xml index ef7f57f82..2e71531b7 100644 --- a/common/src/main/res/values-lv/strings_jetpack.xml +++ b/common/src/main/res/values-lv/strings_jetpack.xml @@ -1,12 +1,12 @@ - Pierakstieties, lai atbloķētu sasniegumus un izliktu savu rezultātu! - Spēlēt vēlreiz - Atgriezties kartē - REZULTĀTS - Atgriezties kartē + Pierakstieties, lai atbloķētu sasniegumus un izliktu savu rezultātu! + Spēlēt vēlreiz + Atgriezties kartē + REZULTĀTS diff --git a/common/src/main/res/values-ml/strings.xml b/common/src/main/res/values-ml/strings.xml index 6e5f8919e..da02a970f 100644 --- a/common/src/main/res/values-ml/strings.xml +++ b/common/src/main/res/values-ml/strings.xml @@ -1,11 +1,11 @@ - മാപ്പിലേക്ക് മടങ്ങുക - ഗ്രാമത്തിലേക്ക് മടങ്ങുക - ഈ സാന്ത ട്രാക്കർ പതിപ്പ് കാലഹരണപ്പെട്ടതാണ്. ഏറ്റവും പുതിയ പതിപ്പിലേക്ക് അപ്‌ഡേറ്റ് ചെയ്യാൻ \'പ്ലേ സ്റ്റോർ\' സന്ദർശിക്കുക. + മാപ്പിലേക്ക് മടങ്ങുക + ഗ്രാമത്തിലേക്ക് മടങ്ങുക + ഈ സാന്ത ട്രാക്കർ പതിപ്പ് കാലഹരണപ്പെട്ടതാണ്. ഏറ്റവും പുതിയ പതിപ്പിലേക്ക് അപ്‌ഡേറ്റ് ചെയ്യാൻ \'പ്ലേ സ്റ്റോർ\' സന്ദർശിക്കുക. + ഗെയിം കഴിഞ്ഞു + സ്‌ക്രീൻ ലോഡ് ചെയ്യുന്നു + പുനരാരംഭിക്കുക + വീണ്ടും പ്ലേ ചെയ്യുക + ഹോം + പങ്കിടുക + %1$s ഡൗൺലോഡ് ചെയ്യുമ്പോൾ പിശകുണ്ടായി. നിങ്ങളുടെ നെറ്റ്‌വര്‍ക്ക് കണക്ഷന്‍ പ്രവർത്തനക്ഷമമാണോ? diff --git a/common/src/main/res/values-ml/strings_appname.xml b/common/src/main/res/values-ml/strings_appname.xml new file mode 100644 index 000000000..dab0828f9 --- /dev/null +++ b/common/src/main/res/values-ml/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + സാന്താ ട്രാക്കർ + diff --git a/common/src/main/res/values-ml/strings_doodles.xml b/common/src/main/res/values-ml/strings_doodles.xml new file mode 100644 index 000000000..af11bd630 --- /dev/null +++ b/common/src/main/res/values-ml/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + സ്നോബോൾ റൺ + പെൻഗ്വിൻ സ്വിം + പ്രസന്റ് ത്രോ + മികച്ചത്: %1$s + മ്യൂട്ടുചെയ്യുക + അൺമ്യൂട്ടുചെയ്യുക + അടയ്ക്കുക + താൽക്കാലികമായി നിർത്തുക + മികച്ച സ്‌കോർ: <b>%1$s</b> + %1$.1fസെക്കൻഡ് + %1$dമിനിറ്റ് + diff --git a/common/src/main/res/values-ml/strings_gamenames.xml b/common/src/main/res/values-ml/strings_gamenames.xml index 4dc58c05f..4ea8ac1ca 100644 --- a/common/src/main/res/values-ml/strings_gamenames.xml +++ b/common/src/main/res/values-ml/strings_gamenames.xml @@ -1,12 +1,12 @@ - ഗംബോൾ - മെമ്മറി - എൽഫ് ജെറ്റ്‌പാക്ക് - റോക്കറ്റ് ഹിമവണ്ടി - ഡാഷർ ഡാൻസർ - സ്നോഡൗൺ - സിറ്റി ക്വിസ് - പ്രസന്റ് ക്വസ്റ്റ് + ഗംബോൾ + മെമ്മറി + എൽഫ് ജെറ്റ്‌പാക്ക് + റോക്കറ്റ് ഹിമവണ്ടി + ഡാഷർ ഡാൻസർ + സിറ്റി ക്വിസ് + പ്രസന്റ് ക്വസ്റ്റ് + സാന്താ സ്‌നാപ്പ് + പ്രസന്റ് ടോസ് ഗെയിം + ജെറ്റ്‌പായ്ക്ക് ധരിച്ച കുട്ടിച്ചാത്തൻ + ഉത്തരധ്രുവ എയർപോർട്ട് + ഗിഫ്‌റ്റ് സ്ലിംഗ്‌ഷോട്ട് + ക്ലോസ് ഡ്രോസ് + കോഡ് ബൂഗി + കോഡ് ലാബ് + ഗംബോൾ ടിൽറ്റ് + എൽഫ് ജാംബാൻഡ് + പെൻഗ്വിൻ ഡാഷ് + നിലവിലെ ബൗൺസ് + നിലവിലെ ഡ്രോപ്പ് + റുഡോൾഫ് റേസർ + റെയിൻഡിയർ റണ്ണർ + സാന്തയെ തിരയൽ + സാന്തയുടെ സെൽഫി + ദാനധർമ്മങ്ങളുടെ കാലം + എൽഫ് സ്‌കീ + സ്‌നോബോൾ സ്‌റ്റോം + കോഡ് എ സ്നോഫ്ലെയ്ക്ക് + സ്‌പീഡ് സ്‌കെച്ച് + റാപ് ബാറ്റിൽ + കുട്ടിച്ചാത്തൻ സ്രഷ്ടാവ്‌ + ജോലിയിലേക്ക് മടങ്ങുകയാണ് + ഓഫീസ് പ്രാങ്ക് + കാർപൂൾ diff --git a/common/src/main/res/values-ml/strings_invite.xml b/common/src/main/res/values-ml/strings_invite.xml index c871f6569..743250c9f 100644 --- a/common/src/main/res/values-ml/strings_invite.xml +++ b/common/src/main/res/values-ml/strings_invite.xml @@ -1,12 +1,12 @@ - Google വഴി സാന്തയെ ട്രാക്കുചെയ്യുന്നതിന് സുഹൃത്തുക്കളെ ക്ഷണിക്കുക - സാന്ത ട്രാക്കർ പരീക്ഷിച്ചുകൊണ്ട് ലോകമെമ്പാടുമുള്ള സാന്തയുടെ സഞ്ചാരം കാണുക! - Google-ന്റെ സാന്ത ട്രാക്കറിൽ കുട്ടിച്ചാത്തന്മാരോടൊപ്പം %2$s ഗെയിം കളിച്ച് ഞാൻ %1$d സ്കോർ ചെയ്തു, നിങ്ങൾക്കത് മറികടക്കാനാകുമോ? + Google വഴി സാന്തയെ ട്രാക്കുചെയ്യുന്നതിന് സുഹൃത്തുക്കളെ ക്ഷണിക്കുക + സാന്ത ട്രാക്കർ പരീക്ഷിച്ചുകൊണ്ട് ലോകമെമ്പാടുമുള്ള സാന്തയുടെ സഞ്ചാരം കാണുക! + Google-ന്റെ സാന്ത ട്രാക്കറിൽ കുട്ടിച്ചാത്തന്മാരോടൊപ്പം %2$s ഗെയിം കളിച്ച് ഞാൻ %1$d സ്കോർ ചെയ്തു, നിങ്ങൾക്കത് മറികടക്കാനാകുമോ? diff --git a/common/src/main/res/values-ml/strings_jetpack.xml b/common/src/main/res/values-ml/strings_jetpack.xml index 911bae261..e2b55ead9 100644 --- a/common/src/main/res/values-ml/strings_jetpack.xml +++ b/common/src/main/res/values-ml/strings_jetpack.xml @@ -1,12 +1,12 @@ - നേട്ടങ്ങൾ അൺലോക്കുചെയ്യാനും നിങ്ങളുടെ സ്കോർ പോസ്റ്റ് ചെയ്യാനും സൈൻ ഇൻ ചെയ്യുക! - വീണ്ടും കളിക്കുക - മാപ്പിലേക്ക് മടങ്ങുക - സ്‌കോർ - മാപ്പിലേക്ക് മടങ്ങുക + നേട്ടങ്ങൾ അൺലോക്കുചെയ്യാനും നിങ്ങളുടെ സ്കോർ പോസ്റ്റ് ചെയ്യാനും സൈൻ ഇൻ ചെയ്യുക! + വീണ്ടും കളിക്കുക + മാപ്പിലേക്ക് മടങ്ങുക + സ്‌കോർ diff --git a/common/src/main/res/values-mo/strings.xml b/common/src/main/res/values-mo/strings.xml index 2a02c6c70..3d2bf4886 100644 --- a/common/src/main/res/values-mo/strings.xml +++ b/common/src/main/res/values-mo/strings.xml @@ -1,11 +1,11 @@ - Înapoi la hartă - Înapoi în sat - Această versiune a aplicației Pe urmele lui Moș Crăciun este învechită. Accesează Magazinul Google Play pentru cea mai nouă versiune. + Înapoi la hartă + Înapoi în sat + Această versiune a aplicației Pe urmele lui Moș Crăciun este învechită. Accesează Magazinul Google Play pentru cea mai nouă versiune. + Joc încheiat + Ecran de încărcare + Reia + Redă + Pagina de pornire + Arată + A apărut o eroare la descărcarea jocului %1$s. Funcționează conexiunea la rețea? diff --git a/common/src/main/res/values-mo/strings_appname.xml b/common/src/main/res/values-mo/strings_appname.xml new file mode 100644 index 000000000..a18f70ed2 --- /dev/null +++ b/common/src/main/res/values-mo/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Pe urmele lui Moș Crăciun + diff --git a/common/src/main/res/values-mo/strings_doodles.xml b/common/src/main/res/values-mo/strings_doodles.xml new file mode 100644 index 000000000..dbc74fdc4 --- /dev/null +++ b/common/src/main/res/values-mo/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Fugi de bulgăre + Înotul pinguinului + Azvârle cadouri + Cel mai bun: %1$s + Dezactivează + Activează + Închide + Întrerupe + CEL MAI BUN SCOR: <b>%1$s</b> + Secunde: %1$.1f + Metri: %1$d + diff --git a/common/src/main/res/values-mo/strings_gamenames.xml b/common/src/main/res/values-mo/strings_gamenames.xml index 5e6af0942..a212b46a4 100644 --- a/common/src/main/res/values-mo/strings_gamenames.xml +++ b/common/src/main/res/values-mo/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Sania-rachetă - Dansează cu Dasher - Bulgăreală - Găsește orașul - În căutarea cadourilor + Gumball + Memory + Elf Jetpack + Sania-rachetă + Dansează cu Dasher + Găsește orașul + În căutarea cadourilor + Sesiune foto + Aruncarea cadourilor + Elf zburător + Aeroportul de la Polul Nord + Praștia pentru cadouri + Desenează cu Moș Crăciun + Dans codificat + Laborator de programare + Direct la țintă + Orchestra elfilor + Goana pinguinului + Cadouri săltărețe + Împărțirea cadourilor + Cursa lui Rudolph + Aleargă cu renii + Unde este Moș Crăciun? + Moș Crăciun la frizer + Anotimpul cadourilor + Elfi schiori + Furtună cu bulgări de zăpadă + Scrie codul unui fulg de zăpadă + Ghicitori desenate + Bătălia de împachetat cadouri + Creator de elfi + Înapoi la treabă + Farsă în birou + În drum spre petrecere diff --git a/common/src/main/res/values-mo/strings_invite.xml b/common/src/main/res/values-mo/strings_invite.xml index 85b2be76b..44f35b913 100644 --- a/common/src/main/res/values-mo/strings_invite.xml +++ b/common/src/main/res/values-mo/strings_invite.xml @@ -1,12 +1,12 @@ - Invită-ți prietenii să-l urmărească pe Moș Crăciun cu Google - Joacă Pe urmele lui Moș Crăciun și vezi pe unde călătorește Moș Crăciun în întreaga lume! - Am obținut un scor de %1$d jucând %2$s cu elfii, în Pe urmele lui Moș Crăciun de la Google. Mă poți întrece? + Invită-ți prietenii să-l urmărească pe Moș Crăciun cu Google + Joacă Pe urmele lui Moș Crăciun și vezi pe unde călătorește Moș Crăciun în întreaga lume! + Am obținut un scor de %1$d jucând %2$s cu elfii, în Pe urmele lui Moș Crăciun de la Google. Mă poți întrece? diff --git a/common/src/main/res/values-mo/strings_jetpack.xml b/common/src/main/res/values-mo/strings_jetpack.xml index 8da1aad5e..72aef9e6b 100644 --- a/common/src/main/res/values-mo/strings_jetpack.xml +++ b/common/src/main/res/values-mo/strings_jetpack.xml @@ -1,12 +1,12 @@ - Conectează-te pentru a debloca realizările și pentru a-ți posta scorul! - Joacă din nou - Înapoi la hartă - SCOR - Înapoi la hartă + Conectează-te pentru a debloca realizările și pentru a-ți posta scorul! + Joacă din nou + Înapoi la hartă + SCOR diff --git a/common/src/main/res/values-nb/strings.xml b/common/src/main/res/values-nb/strings.xml index b90aa3de2..f47576d31 100644 --- a/common/src/main/res/values-nb/strings.xml +++ b/common/src/main/res/values-nb/strings.xml @@ -1,11 +1,11 @@ - Tilbake til kartet - Tilbake til landsbyen - Denne versjonen av Følg julenissen er utdatert. Gå til Play-butikken for å oppdatere til den nyeste versjonen. + Tilbake til kartet + Tilbake til landsbyen + Denne versjonen av Følg julenissen er utdatert. Gå til Play-butikken for å oppdatere til den nyeste versjonen. + Spillet er over + Innlastingsskjermbilde + Gjenoppta + Spill på nytt + Startside + Del + Det oppsto en feil ved nedlasting av %1$s. Fungerer nettverkstilkoblingen som den skal? diff --git a/common/src/main/res/values-nb/strings_appname.xml b/common/src/main/res/values-nb/strings_appname.xml new file mode 100644 index 000000000..a4cfe16f2 --- /dev/null +++ b/common/src/main/res/values-nb/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Følg julenissen + diff --git a/common/src/main/res/values-nb/strings_doodles.xml b/common/src/main/res/values-nb/strings_doodles.xml new file mode 100644 index 000000000..b0abb177e --- /dev/null +++ b/common/src/main/res/values-nb/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Snøballflukten + Pingvinsvømming + Gavekasting + Beste: %1$s + Slå av lyden + Slå på lyden + Lukk + Sett på pause + BESTE RESULTAT: <b>%1$s</b> + %1$.1f s + %1$d min + diff --git a/common/src/main/res/values-nb/strings_gamenames.xml b/common/src/main/res/values-nb/strings_gamenames.xml index 7059d7d4f..5692f044c 100644 --- a/common/src/main/res/values-nb/strings_gamenames.xml +++ b/common/src/main/res/values-nb/strings_gamenames.xml @@ -1,12 +1,12 @@ - Rulledrops - Memory - Elf Jetpack - Rakettsleden - Nissedans - Snøballkrig - Byquiz - Gavejakt + Rulledrops + Memory + Elf Jetpack + Rakettsleden + Nissedans + Byquiz + Gavejakten + Nisseknips + Gavekast + Alvejetpack + Nordpolen flyplass + Gavesprettert + Nissetegning + Kodeboogie + Kodingslab + Rulledrops + Alveband + Pingvinrennet + Gavesprett + Gaveslipp + Rudolf-løpet + Gavegalopp + Julenissesøk + Julenissens selfie + En tid for å gi + Alveskikjøring + Snøballstorm + Snøfnuggkoding + Hurtigtegning + Pakkekamp + Lag en alv + Tilbake til arbeidet + Alvestreker + Samkjøring diff --git a/common/src/main/res/values-nb/strings_invite.xml b/common/src/main/res/values-nb/strings_invite.xml index e0c854846..1fab794e4 100644 --- a/common/src/main/res/values-nb/strings_invite.xml +++ b/common/src/main/res/values-nb/strings_invite.xml @@ -1,12 +1,12 @@ - Inviter vennene dine til å følge nissen med Google - Følg julenissen, og se julenissen fly verden rundt! - Jeg fikk %1$d poeng i %2$s-spillet med alvene i Følg julenissen fra Google. Kan du slå det? + Inviter vennene dine til å følge nissen med Google + Følg julenissen, og se julenissen fly verden rundt! + Jeg fikk %1$d poeng i %2$s-spillet med alvene i Følg julenissen fra Google. Kan du slå det? diff --git a/common/src/main/res/values-nb/strings_jetpack.xml b/common/src/main/res/values-nb/strings_jetpack.xml index f704c1c69..54b15ccdc 100644 --- a/common/src/main/res/values-nb/strings_jetpack.xml +++ b/common/src/main/res/values-nb/strings_jetpack.xml @@ -1,12 +1,12 @@ - Logg på for å låse opp prestasjoner og legge ut poengsummen din. - Spill igjen - Gå tilbake til kartet - POENG - Gå tilbake til kartet + Logg på for å låse opp prestasjoner og legge ut poengsummen din. + Spill igjen + Gå tilbake til kartet + POENG diff --git a/common/src/main/res/values-no/strings.xml b/common/src/main/res/values-no/strings.xml index b90aa3de2..f47576d31 100644 --- a/common/src/main/res/values-no/strings.xml +++ b/common/src/main/res/values-no/strings.xml @@ -1,11 +1,11 @@ - Tilbake til kartet - Tilbake til landsbyen - Denne versjonen av Følg julenissen er utdatert. Gå til Play-butikken for å oppdatere til den nyeste versjonen. + Tilbake til kartet + Tilbake til landsbyen + Denne versjonen av Følg julenissen er utdatert. Gå til Play-butikken for å oppdatere til den nyeste versjonen. + Spillet er over + Innlastingsskjermbilde + Gjenoppta + Spill på nytt + Startside + Del + Det oppsto en feil ved nedlasting av %1$s. Fungerer nettverkstilkoblingen som den skal? diff --git a/common/src/main/res/values-no/strings_appname.xml b/common/src/main/res/values-no/strings_appname.xml new file mode 100644 index 000000000..a4cfe16f2 --- /dev/null +++ b/common/src/main/res/values-no/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Følg julenissen + diff --git a/common/src/main/res/values-no/strings_doodles.xml b/common/src/main/res/values-no/strings_doodles.xml new file mode 100644 index 000000000..b0abb177e --- /dev/null +++ b/common/src/main/res/values-no/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Snøballflukten + Pingvinsvømming + Gavekasting + Beste: %1$s + Slå av lyden + Slå på lyden + Lukk + Sett på pause + BESTE RESULTAT: <b>%1$s</b> + %1$.1f s + %1$d min + diff --git a/common/src/main/res/values-no/strings_gamenames.xml b/common/src/main/res/values-no/strings_gamenames.xml index 7059d7d4f..5692f044c 100644 --- a/common/src/main/res/values-no/strings_gamenames.xml +++ b/common/src/main/res/values-no/strings_gamenames.xml @@ -1,12 +1,12 @@ - Rulledrops - Memory - Elf Jetpack - Rakettsleden - Nissedans - Snøballkrig - Byquiz - Gavejakt + Rulledrops + Memory + Elf Jetpack + Rakettsleden + Nissedans + Byquiz + Gavejakten + Nisseknips + Gavekast + Alvejetpack + Nordpolen flyplass + Gavesprettert + Nissetegning + Kodeboogie + Kodingslab + Rulledrops + Alveband + Pingvinrennet + Gavesprett + Gaveslipp + Rudolf-løpet + Gavegalopp + Julenissesøk + Julenissens selfie + En tid for å gi + Alveskikjøring + Snøballstorm + Snøfnuggkoding + Hurtigtegning + Pakkekamp + Lag en alv + Tilbake til arbeidet + Alvestreker + Samkjøring diff --git a/common/src/main/res/values-no/strings_invite.xml b/common/src/main/res/values-no/strings_invite.xml index e0c854846..1fab794e4 100644 --- a/common/src/main/res/values-no/strings_invite.xml +++ b/common/src/main/res/values-no/strings_invite.xml @@ -1,12 +1,12 @@ - Inviter vennene dine til å følge nissen med Google - Følg julenissen, og se julenissen fly verden rundt! - Jeg fikk %1$d poeng i %2$s-spillet med alvene i Følg julenissen fra Google. Kan du slå det? + Inviter vennene dine til å følge nissen med Google + Følg julenissen, og se julenissen fly verden rundt! + Jeg fikk %1$d poeng i %2$s-spillet med alvene i Følg julenissen fra Google. Kan du slå det? diff --git a/common/src/main/res/values-no/strings_jetpack.xml b/common/src/main/res/values-no/strings_jetpack.xml index f704c1c69..54b15ccdc 100644 --- a/common/src/main/res/values-no/strings_jetpack.xml +++ b/common/src/main/res/values-no/strings_jetpack.xml @@ -1,12 +1,12 @@ - Logg på for å låse opp prestasjoner og legge ut poengsummen din. - Spill igjen - Gå tilbake til kartet - POENG - Gå tilbake til kartet + Logg på for å låse opp prestasjoner og legge ut poengsummen din. + Spill igjen + Gå tilbake til kartet + POENG diff --git a/common/src/main/res/values-pl/strings.xml b/common/src/main/res/values-pl/strings.xml index a4f308079..5fc5b692e 100644 --- a/common/src/main/res/values-pl/strings.xml +++ b/common/src/main/res/values-pl/strings.xml @@ -1,11 +1,11 @@ - Wróć do mapy - Wróć do wioski - Ta wersja Trasy Świętego Mikołaja jest nieaktualna. Odwiedź Sklep Google Play, aby pobrać najnowszą wersję. + Wróć do mapy + Wróć do wioski + Ta wersja Trasy Świętego Mikołaja jest nieaktualna. Odwiedź Sklep Google Play, aby pobrać najnowszą wersję. + Koniec gry + Wczytuję ekran + Wznów + Zagraj jeszcze raz + Ekran główny + Udostępnij + Podczas pobierania gry %1$s wystąpił błąd. Czy masz połączenie z siecią? diff --git a/common/src/main/res/values-pl/strings_appname.xml b/common/src/main/res/values-pl/strings_appname.xml new file mode 100644 index 000000000..fd632ae59 --- /dev/null +++ b/common/src/main/res/values-pl/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Trasa Świętego Mikołaja + diff --git a/common/src/main/res/values-pl/strings_doodles.xml b/common/src/main/res/values-pl/strings_doodles.xml new file mode 100644 index 000000000..2ffdebf96 --- /dev/null +++ b/common/src/main/res/values-pl/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Ucieczka przed śnieżką + Pływające pingwiny + Rzut prezentem + Najlepszy wynik: %1$s + Wycisz + Wyłącz wyciszenie + Zamknij + Wstrzymaj + NAJLEPSZY WYNIK: <b>%1$s</b>j + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-pl/strings_gamenames.xml b/common/src/main/res/values-pl/strings_gamenames.xml index 6757bfcd9..76002b088 100644 --- a/common/src/main/res/values-pl/strings_gamenames.xml +++ b/common/src/main/res/values-pl/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Sanie rakietowe - Fircyk i Tancerz - Śnieżne starcie - Miejski quiz - Wyprawa po prezenty + Gumball + Memory + Elf Jetpack + Sanie rakietowe + Fircyk i Tancerz + Miejski quiz + Wyprawa po prezenty + Mikołajowe fotki + Rzut prezentem + Odrzutowy plecak elfów + Lotnisko na Biegunie Północnym + Proca z prezentami + Rysowanie z Mikołajem + Kodowanie w rytmie boogie + Programowanie trasy + Spadające kulki + Muzyczny zespół elfów + Bieg pingwina + Podskakujące prezenty + Wrzucanie prezentów + Wyścigi z Rudolfem + Pędzący renifer + Poszukiwanie Mikołaja + Selfie Świętego Mikołaja + Czas prezentów + Elf na nartach + Atak śnieżkami + Zakoduj śnieżynkę + Rysowanie na czas + Pojedynek na pakowanie + Kreator elfów + Powrót do pracy + Żart biurowy + Wspólna jazda diff --git a/common/src/main/res/values-pl/strings_invite.xml b/common/src/main/res/values-pl/strings_invite.xml index df36c3352..c2452f583 100644 --- a/common/src/main/res/values-pl/strings_invite.xml +++ b/common/src/main/res/values-pl/strings_invite.xml @@ -1,12 +1,12 @@ - Zaproś do śledzenia Mikołaja - Dzięki aplikacji Trasa Świętego Mikołaja zobaczysz, jak Święty Mikołaj lata po całym świecie. - Mój wynik w grze %2$s rozgrywanej z elfami w Google Santa Tracker to %1$d. Dasz radę mnie pokonać? + Zaproś do śledzenia Mikołaja + Dzięki aplikacji Trasa Świętego Mikołaja zobaczysz, jak Święty Mikołaj lata po całym świecie. + Mój wynik w grze %2$s rozgrywanej z elfami w Google Santa Tracker to %1$d. Dasz radę mnie pokonać? diff --git a/common/src/main/res/values-pl/strings_jetpack.xml b/common/src/main/res/values-pl/strings_jetpack.xml index 3e5e74fa7..96f23f777 100644 --- a/common/src/main/res/values-pl/strings_jetpack.xml +++ b/common/src/main/res/values-pl/strings_jetpack.xml @@ -1,12 +1,12 @@ - Zaloguj się, aby odblokować osiągnięcia i opublikować swój wynik. - Zagraj jeszcze raz - Wróć do mapy - WYNIK - Wróć do mapy + Zaloguj się, aby odblokować osiągnięcia i opublikować swój wynik. + Zagraj jeszcze raz + Wróć do mapy + WYNIK diff --git a/common/src/main/res/values-pt-rBR/strings.xml b/common/src/main/res/values-pt-rBR/strings.xml index b586d8b3b..45042eec6 100644 --- a/common/src/main/res/values-pt-rBR/strings.xml +++ b/common/src/main/res/values-pt-rBR/strings.xml @@ -1,11 +1,11 @@ - Voltar para o mapa - Voltar para a vila - Esta versão do Siga o Papai Noel está desatualizada. Visite a Play Store e atualize para a versão mais recente. + Voltar para o mapa + Voltar para a vila + Esta versão do Siga o Papai Noel está desatualizada. Visite a Play Store e atualize para a versão mais recente. + Fim de jogo + Tela de carregamento + Retomar + Jogar novamente + Página inicial + Compartilhar + Ocorreu um erro durante o download de %1$s. Sua conexão de rede está funcionando? diff --git a/common/src/main/res/values-pt-rBR/strings_appname.xml b/common/src/main/res/values-pt-rBR/strings_appname.xml new file mode 100644 index 000000000..9cd66ed7c --- /dev/null +++ b/common/src/main/res/values-pt-rBR/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Siga o Papai Noel + diff --git a/common/src/main/res/values-pt-rBR/strings_doodles.xml b/common/src/main/res/values-pt-rBR/strings_doodles.xml new file mode 100644 index 000000000..c92fb723d --- /dev/null +++ b/common/src/main/res/values-pt-rBR/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Corrida da bola de neve + Pinguim nadador + Presente ao alvo + Melhor pontuação: %1$s + Desativar som + Ativar som + Fechar + Pausar + MELHOR PONTUAÇÃO: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-pt-rBR/strings_gamenames.xml b/common/src/main/res/values-pt-rBR/strings_gamenames.xml index cd05396ed..65c6d932f 100644 --- a/common/src/main/res/values-pt-rBR/strings_gamenames.xml +++ b/common/src/main/res/values-pt-rBR/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memória - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Jogo das cidades - Caça ao presente + Ladeira dos chicletes + Jogo da memória + Elf Jetpack + Trenó-foguete + Dança das renas + Jogo das cidades + Caça ao presente + Selfie do Papai Noel + Jogue o presente + Duende a jato + Aeroporto do Polo Norte + Estilingue de presentes + Desenhe com o Papai Noel + Dança dos códigos + Laboratório de códigos + Ladeira dos chicletes + Banda dos duendes + Corrida do pinguim + Pula-pula de presentes + Entrega de presentes + Corrida do Rudolph + Rena corredora + Onde está o Papai Noel? + Selfie do Papai Noel + Época de bondade + Esqui de duendes + Batalha de bolas de neve + Crie um floco de neve + Desenho rápido + Competição de embrulhos + Criador de duendes + De volta ao trabalho + Pegadinha no escritório + Carona diff --git a/common/src/main/res/values-pt-rBR/strings_invite.xml b/common/src/main/res/values-pt-rBR/strings_invite.xml index 75e268a18..0e9137cf8 100644 --- a/common/src/main/res/values-pt-rBR/strings_invite.xml +++ b/common/src/main/res/values-pt-rBR/strings_invite.xml @@ -1,12 +1,12 @@ - Convide seus amigos para seguir o Papai Noel com o Google - Teste o app Siga o Papai Noel e acompanhe suas aventuras pelo mundo! - Fiz %1$d pontos no jogo %2$s com os duendes no Siga o Papai Noel do Google. Você consegue fazer mais? + Convide seus amigos para seguir o Papai Noel com o Google + Teste o app Siga o Papai Noel e acompanhe suas aventuras pelo mundo! + Fiz %1$d pontos no jogo %2$s com os duendes no Siga o Papai Noel do Google. Você consegue fazer mais? diff --git a/common/src/main/res/values-pt-rBR/strings_jetpack.xml b/common/src/main/res/values-pt-rBR/strings_jetpack.xml index 6701da49c..44d10f953 100644 --- a/common/src/main/res/values-pt-rBR/strings_jetpack.xml +++ b/common/src/main/res/values-pt-rBR/strings_jetpack.xml @@ -1,12 +1,12 @@ - Faça login para desbloquear conquistas e postar sua pontuação. - Jogar novamente - Retornar ao mapa - PONTUAÇÃO - Retornar ao mapa + Faça login para desbloquear conquistas e postar sua pontuação. + Jogar novamente + Retornar ao mapa + PONTUAÇÃO diff --git a/common/src/main/res/values-pt-rPT/strings.xml b/common/src/main/res/values-pt-rPT/strings.xml index ba25ef2ba..4e4627304 100644 --- a/common/src/main/res/values-pt-rPT/strings.xml +++ b/common/src/main/res/values-pt-rPT/strings.xml @@ -1,11 +1,11 @@ - Voltar ao mapa - Voltar à aldeia - A versão da aplicação Viagem do Pai Natal está desatualizada. Visite a Play Store para atualizar para a versão mais recente. + Voltar ao mapa + Voltar à aldeia + A versão da aplicação Viagem do Pai Natal está desatualizada. Visite a Play Store para atualizar para a versão mais recente. + Fim do jogo + Ecrã de carregamento + Retomar + Reiniciar jogo + Página inicial + Partilhar + Ocorreu um erro ao transferir o jogo %1$s. A sua ligação de rede está a funcionar? diff --git a/common/src/main/res/values-pt-rPT/strings_appname.xml b/common/src/main/res/values-pt-rPT/strings_appname.xml new file mode 100644 index 000000000..0538667f7 --- /dev/null +++ b/common/src/main/res/values-pt-rPT/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + A viagem do Pai Natal + diff --git a/common/src/main/res/values-pt-rPT/strings_doodles.xml b/common/src/main/res/values-pt-rPT/strings_doodles.xml new file mode 100644 index 000000000..5550789b5 --- /dev/null +++ b/common/src/main/res/values-pt-rPT/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Fuga da bola de neve + Natação do pinguim + Atirar presentes + Melhor: %1$s + Desativar som + Reativar som + Fechar + Interromper + MELHOR PONTUAÇÃO: <b>%1$s</b> + %1$.1f seg. + %1$d min + diff --git a/common/src/main/res/values-pt-rPT/strings_gamenames.xml b/common/src/main/res/values-pt-rPT/strings_gamenames.xml index 212518f7a..afef1f37c 100644 --- a/common/src/main/res/values-pt-rPT/strings_gamenames.xml +++ b/common/src/main/res/values-pt-rPT/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memória - Elf Jetpack - Trenó-foguete - Dançarino Veloz - Snowdown - Questionário de cidades - Caça aos presentes + Pastilha elástica + Memória + Elf Jetpack + Trenó-foguete + Dançarino veloz + Questionário de cidades + Caça aos presentes + Foto com o Pai Natal + Lançamento de presentes + Elfos com propulsores a jato + Aeroporto do Polo Norte + Fisga de presentes + Desenhos festivos + Baile de código + Laboratório de Códigos + Flipper dos rebuçados + Banda dos gnomos + Corrida do pinguim + Salto dos presentes + Lançamento de presentes + Piloto Rodolfo + Corrida da rena + Procura do Pai Natal + Selfie do Pai Natal + Tempo de dar + Elfos esquiadores + Tempestade de bolas de neve + Codifique um floco de neve + Esboços rápidos + Toca a embrulhar + Criador de elfos + De volta ao trabalho + Praxe no escritório + Partilha de carro diff --git a/common/src/main/res/values-pt-rPT/strings_invite.xml b/common/src/main/res/values-pt-rPT/strings_invite.xml index 9edd0d466..4a0035e69 100644 --- a/common/src/main/res/values-pt-rPT/strings_invite.xml +++ b/common/src/main/res/values-pt-rPT/strings_invite.xml @@ -1,12 +1,12 @@ - Convidar os seus amigos para seguirem o Pai Natal com o Google - Experimenta A viagem do Pai Natal e vê-o voar por todo o mundo! - Consegui uma classificação de %1$d no jogo %2$s com os gnomos em A viagem do Pai Natal da Google. Consegues melhor? + Convidar os seus amigos para seguirem o Pai Natal com o Google + Experimenta A viagem do Pai Natal e vê-o voar por todo o mundo! + Consegui uma classificação de %1$d no jogo %2$s com os gnomos em A viagem do Pai Natal da Google. Consegues melhor? diff --git a/common/src/main/res/values-pt-rPT/strings_jetpack.xml b/common/src/main/res/values-pt-rPT/strings_jetpack.xml index 91844d77e..4c5658e69 100644 --- a/common/src/main/res/values-pt-rPT/strings_jetpack.xml +++ b/common/src/main/res/values-pt-rPT/strings_jetpack.xml @@ -1,12 +1,12 @@ - Inicie sessão para desbloquear conquistas e publicar a sua pontuação! - Jogar de novo - Voltar ao mapa - PONTUAÇÃO - Voltar ao mapa + Inicie sessão para desbloquear conquistas e publicar a sua pontuação! + Jogar de novo + Voltar ao mapa + PONTUAÇÃO diff --git a/common/src/main/res/values-pt/strings.xml b/common/src/main/res/values-pt/strings.xml index b586d8b3b..45042eec6 100644 --- a/common/src/main/res/values-pt/strings.xml +++ b/common/src/main/res/values-pt/strings.xml @@ -1,11 +1,11 @@ - Voltar para o mapa - Voltar para a vila - Esta versão do Siga o Papai Noel está desatualizada. Visite a Play Store e atualize para a versão mais recente. + Voltar para o mapa + Voltar para a vila + Esta versão do Siga o Papai Noel está desatualizada. Visite a Play Store e atualize para a versão mais recente. + Fim de jogo + Tela de carregamento + Retomar + Jogar novamente + Página inicial + Compartilhar + Ocorreu um erro durante o download de %1$s. Sua conexão de rede está funcionando? diff --git a/common/src/main/res/values-pt/strings_appname.xml b/common/src/main/res/values-pt/strings_appname.xml new file mode 100644 index 000000000..9cd66ed7c --- /dev/null +++ b/common/src/main/res/values-pt/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Siga o Papai Noel + diff --git a/common/src/main/res/values-pt/strings_doodles.xml b/common/src/main/res/values-pt/strings_doodles.xml new file mode 100644 index 000000000..c92fb723d --- /dev/null +++ b/common/src/main/res/values-pt/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Corrida da bola de neve + Pinguim nadador + Presente ao alvo + Melhor pontuação: %1$s + Desativar som + Ativar som + Fechar + Pausar + MELHOR PONTUAÇÃO: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-pt/strings_gamenames.xml b/common/src/main/res/values-pt/strings_gamenames.xml index cd05396ed..65c6d932f 100644 --- a/common/src/main/res/values-pt/strings_gamenames.xml +++ b/common/src/main/res/values-pt/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memória - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Jogo das cidades - Caça ao presente + Ladeira dos chicletes + Jogo da memória + Elf Jetpack + Trenó-foguete + Dança das renas + Jogo das cidades + Caça ao presente + Selfie do Papai Noel + Jogue o presente + Duende a jato + Aeroporto do Polo Norte + Estilingue de presentes + Desenhe com o Papai Noel + Dança dos códigos + Laboratório de códigos + Ladeira dos chicletes + Banda dos duendes + Corrida do pinguim + Pula-pula de presentes + Entrega de presentes + Corrida do Rudolph + Rena corredora + Onde está o Papai Noel? + Selfie do Papai Noel + Época de bondade + Esqui de duendes + Batalha de bolas de neve + Crie um floco de neve + Desenho rápido + Competição de embrulhos + Criador de duendes + De volta ao trabalho + Pegadinha no escritório + Carona diff --git a/common/src/main/res/values-pt/strings_invite.xml b/common/src/main/res/values-pt/strings_invite.xml index 75e268a18..0e9137cf8 100644 --- a/common/src/main/res/values-pt/strings_invite.xml +++ b/common/src/main/res/values-pt/strings_invite.xml @@ -1,12 +1,12 @@ - Convide seus amigos para seguir o Papai Noel com o Google - Teste o app Siga o Papai Noel e acompanhe suas aventuras pelo mundo! - Fiz %1$d pontos no jogo %2$s com os duendes no Siga o Papai Noel do Google. Você consegue fazer mais? + Convide seus amigos para seguir o Papai Noel com o Google + Teste o app Siga o Papai Noel e acompanhe suas aventuras pelo mundo! + Fiz %1$d pontos no jogo %2$s com os duendes no Siga o Papai Noel do Google. Você consegue fazer mais? diff --git a/common/src/main/res/values-pt/strings_jetpack.xml b/common/src/main/res/values-pt/strings_jetpack.xml index 6701da49c..44d10f953 100644 --- a/common/src/main/res/values-pt/strings_jetpack.xml +++ b/common/src/main/res/values-pt/strings_jetpack.xml @@ -1,12 +1,12 @@ - Faça login para desbloquear conquistas e postar sua pontuação. - Jogar novamente - Retornar ao mapa - PONTUAÇÃO - Retornar ao mapa + Faça login para desbloquear conquistas e postar sua pontuação. + Jogar novamente + Retornar ao mapa + PONTUAÇÃO diff --git a/common/src/main/res/values-ro/strings.xml b/common/src/main/res/values-ro/strings.xml index 2a02c6c70..3d2bf4886 100644 --- a/common/src/main/res/values-ro/strings.xml +++ b/common/src/main/res/values-ro/strings.xml @@ -1,11 +1,11 @@ - Înapoi la hartă - Înapoi în sat - Această versiune a aplicației Pe urmele lui Moș Crăciun este învechită. Accesează Magazinul Google Play pentru cea mai nouă versiune. + Înapoi la hartă + Înapoi în sat + Această versiune a aplicației Pe urmele lui Moș Crăciun este învechită. Accesează Magazinul Google Play pentru cea mai nouă versiune. + Joc încheiat + Ecran de încărcare + Reia + Redă + Pagina de pornire + Arată + A apărut o eroare la descărcarea jocului %1$s. Funcționează conexiunea la rețea? diff --git a/common/src/main/res/values-ro/strings_appname.xml b/common/src/main/res/values-ro/strings_appname.xml new file mode 100644 index 000000000..a18f70ed2 --- /dev/null +++ b/common/src/main/res/values-ro/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Pe urmele lui Moș Crăciun + diff --git a/common/src/main/res/values-ro/strings_doodles.xml b/common/src/main/res/values-ro/strings_doodles.xml new file mode 100644 index 000000000..dbc74fdc4 --- /dev/null +++ b/common/src/main/res/values-ro/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Fugi de bulgăre + Înotul pinguinului + Azvârle cadouri + Cel mai bun: %1$s + Dezactivează + Activează + Închide + Întrerupe + CEL MAI BUN SCOR: <b>%1$s</b> + Secunde: %1$.1f + Metri: %1$d + diff --git a/common/src/main/res/values-ro/strings_gamenames.xml b/common/src/main/res/values-ro/strings_gamenames.xml index 5e6af0942..a212b46a4 100644 --- a/common/src/main/res/values-ro/strings_gamenames.xml +++ b/common/src/main/res/values-ro/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Sania-rachetă - Dansează cu Dasher - Bulgăreală - Găsește orașul - În căutarea cadourilor + Gumball + Memory + Elf Jetpack + Sania-rachetă + Dansează cu Dasher + Găsește orașul + În căutarea cadourilor + Sesiune foto + Aruncarea cadourilor + Elf zburător + Aeroportul de la Polul Nord + Praștia pentru cadouri + Desenează cu Moș Crăciun + Dans codificat + Laborator de programare + Direct la țintă + Orchestra elfilor + Goana pinguinului + Cadouri săltărețe + Împărțirea cadourilor + Cursa lui Rudolph + Aleargă cu renii + Unde este Moș Crăciun? + Moș Crăciun la frizer + Anotimpul cadourilor + Elfi schiori + Furtună cu bulgări de zăpadă + Scrie codul unui fulg de zăpadă + Ghicitori desenate + Bătălia de împachetat cadouri + Creator de elfi + Înapoi la treabă + Farsă în birou + În drum spre petrecere diff --git a/common/src/main/res/values-ro/strings_invite.xml b/common/src/main/res/values-ro/strings_invite.xml index 85b2be76b..44f35b913 100644 --- a/common/src/main/res/values-ro/strings_invite.xml +++ b/common/src/main/res/values-ro/strings_invite.xml @@ -1,12 +1,12 @@ - Invită-ți prietenii să-l urmărească pe Moș Crăciun cu Google - Joacă Pe urmele lui Moș Crăciun și vezi pe unde călătorește Moș Crăciun în întreaga lume! - Am obținut un scor de %1$d jucând %2$s cu elfii, în Pe urmele lui Moș Crăciun de la Google. Mă poți întrece? + Invită-ți prietenii să-l urmărească pe Moș Crăciun cu Google + Joacă Pe urmele lui Moș Crăciun și vezi pe unde călătorește Moș Crăciun în întreaga lume! + Am obținut un scor de %1$d jucând %2$s cu elfii, în Pe urmele lui Moș Crăciun de la Google. Mă poți întrece? diff --git a/common/src/main/res/values-ro/strings_jetpack.xml b/common/src/main/res/values-ro/strings_jetpack.xml index 8da1aad5e..72aef9e6b 100644 --- a/common/src/main/res/values-ro/strings_jetpack.xml +++ b/common/src/main/res/values-ro/strings_jetpack.xml @@ -1,12 +1,12 @@ - Conectează-te pentru a debloca realizările și pentru a-ți posta scorul! - Joacă din nou - Înapoi la hartă - SCOR - Înapoi la hartă + Conectează-te pentru a debloca realizările și pentru a-ți posta scorul! + Joacă din nou + Înapoi la hartă + SCOR diff --git a/common/src/main/res/values-ru/strings.xml b/common/src/main/res/values-ru/strings.xml index 4723778cb..883231193 100644 --- a/common/src/main/res/values-ru/strings.xml +++ b/common/src/main/res/values-ru/strings.xml @@ -1,11 +1,11 @@ - Назад к карте - Вернуться в деревню - Эта версия приложения устарела. Обновите его. + Назад к карте + Вернуться в деревню + Эта версия приложения устарела. Обновите его. + Игра окончена + Загрузка… + Продолжить + Сыграть ещё раз + Главная + Поделиться + При скачивании данных игры \"%1$s\" произошла ошибка. Проверьте подключение к Интернету. diff --git a/common/src/main/res/values-ru/strings_appname.xml b/common/src/main/res/values-ru/strings_appname.xml new file mode 100644 index 000000000..7b4a522f5 --- /dev/null +++ b/common/src/main/res/values-ru/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Радар Санта-Клауса + diff --git a/common/src/main/res/values-ru/strings_doodles.xml b/common/src/main/res/values-ru/strings_doodles.xml new file mode 100644 index 000000000..661e1840f --- /dev/null +++ b/common/src/main/res/values-ru/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Убеги от снежка + Заплыв пингвинов + Доставь подарок + Лучший результат: %1$s + Отключить звук + Включить звук + Закрыть + Пауза + ЛУЧШИЙ РЕЗУЛЬТАТ: <b>%1$s</b> + %1$.1f сек. + %1$d м + diff --git a/common/src/main/res/values-ru/strings_gamenames.xml b/common/src/main/res/values-ru/strings_gamenames.xml index 5210a317e..f7a2a3f9b 100644 --- a/common/src/main/res/values-ru/strings_gamenames.xml +++ b/common/src/main/res/values-ru/strings_gamenames.xml @@ -1,12 +1,12 @@ - Жвачка - Память - Летающий эльф - Реактивные сани - Лучший танцор - Снежная битва - Угадай город - Найди подарок + Жвачка + Память + Летающий эльф + Реактивные сани + Лучший танцор + Угадай город + Найди подарок + Полет за подарками + Метание подарков + Летающий эльф + Аэропорт Северного полюса + Стреляй подарками + Новогодние рисунки + Буги-вуги + Управляй эльфом + Леденцы + Эльфы-музыканты + Быстрый пингвин + Попади в цель + Доставка подарков + Гонки с Рудольфом + Охота за подарками + Найди Санту + Санта меняет имидж + Раскрась елочную игрушку + Лыжный спуск + Снежная перестрелка + Создай снежинку из кода + Узоры на окне + Упаковка на скорость + Создаем эльфа + Снова за дело + Розыгрыш в офисе + На вечеринку в одной машине diff --git a/common/src/main/res/values-ru/strings_invite.xml b/common/src/main/res/values-ru/strings_invite.xml index ca7f1bd96..fca3a0f45 100644 --- a/common/src/main/res/values-ru/strings_invite.xml +++ b/common/src/main/res/values-ru/strings_invite.xml @@ -1,12 +1,12 @@ - Пригласите друзей - Скачай приложение \"Радар Санта-Клауса\" и следи за путешествиями Санты. - Мой результат в игре %2$s – %1$d очков! Сможешь набрать больше? + Пригласите друзей + Скачай приложение \"Радар Санта-Клауса\" и следи за путешествиями Санты. + Мой результат в игре %2$s – %1$d очков! Сможешь набрать больше? diff --git a/common/src/main/res/values-ru/strings_jetpack.xml b/common/src/main/res/values-ru/strings_jetpack.xml index c60dc6b61..95fc24df1 100644 --- a/common/src/main/res/values-ru/strings_jetpack.xml +++ b/common/src/main/res/values-ru/strings_jetpack.xml @@ -1,12 +1,12 @@ - Хотите получать награды и делиться результатами с друзьями? Войдите в аккаунт! - Сыграть ещё раз - Перейти к карте - СЧЕТ - Перейти к карте + Хотите получать награды и делиться результатами с друзьями? Войдите в аккаунт! + Сыграть ещё раз + Перейти к карте + СЧЕТ diff --git a/common/src/main/res/values-sl/strings.xml b/common/src/main/res/values-sl/strings.xml index f73238995..ad1f9f94d 100644 --- a/common/src/main/res/values-sl/strings.xml +++ b/common/src/main/res/values-sl/strings.xml @@ -1,11 +1,11 @@ - Nazaj na zemljevid - Nazaj v vas - Ta različica Spremljanja Božičkove poti je zastarela. Obiščite Play Store in jo posodobite v najnovejšo različico. + Nazaj na zemljevid + Nazaj v vas + Ta različica Spremljanja Božičkove poti je zastarela. Obiščite Play Store in jo posodobite v najnovejšo različico. + Igra je končana + Zaslon za nalaganje + Nadaljuj + Ponovno predvajaj + Domača stran + Daj v skupno rabo + Med prenašanjem igre %1$s je prišlo do napake. Ali je vaša omrežna povezava vzpostavljena? diff --git a/common/src/main/res/values-sl/strings_appname.xml b/common/src/main/res/values-sl/strings_appname.xml new file mode 100644 index 000000000..5d922fc47 --- /dev/null +++ b/common/src/main/res/values-sl/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Spremljanje Božičkove poti + diff --git a/common/src/main/res/values-sl/strings_doodles.xml b/common/src/main/res/values-sl/strings_doodles.xml new file mode 100644 index 000000000..151db807f --- /dev/null +++ b/common/src/main/res/values-sl/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Beg pred snežno kepo + Pingvinovo plavanje + Metanje daril + Najboljši rezultat: %1$s + Izklopi zvok + Vklopi zvok + Zapri + Začasno ustavi + NAJBOLJŠI REZULTAT: <b>%1$s</b> + %1$.1f s + %1$d m + diff --git a/common/src/main/res/values-sl/strings_gamenames.xml b/common/src/main/res/values-sl/strings_gamenames.xml index 0da5f22f7..d3f7c1fb2 100644 --- a/common/src/main/res/values-sl/strings_gamenames.xml +++ b/common/src/main/res/values-sl/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snežni spopad - Ugibanje mest - Iskanje daril + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + Ugibanje mest + Iskanje daril + Božičkovi sebki + Metanje daril + Palčkov raketni nahrbtnik + Letališče Severni pol + Frača z darili + Božično risanje + Kodirni ples + Laboratorij za kodiranje + Vodenje bonbonov + Skupina Palčki + Pingvinovo iskanje + Poskočna darila + Spust darila + Hitri Rudolf + Jelenov tek + Iskanje Božička + Božičkov selfi + Čas podarjanja + Palček smuča + Nevihta kep + Kodiranje snežinke + Hitrostno skiciranje + Zavijalni dvoboj + Ustvarjanje palčka + Znova na delu + Pisarniška potegavščina + Skupna vožnja diff --git a/common/src/main/res/values-sl/strings_invite.xml b/common/src/main/res/values-sl/strings_invite.xml index bf7b355ed..9f7fe991d 100644 --- a/common/src/main/res/values-sl/strings_invite.xml +++ b/common/src/main/res/values-sl/strings_invite.xml @@ -1,12 +1,12 @@ - Povabite svoje prijatelje, da spremljajo Božička z Googlom - Preskusite Spremljanje Božičkove poti in glejte, kako Božiček leta po svetu. - V Googlovi aplikaciji Spremljanje Božičkove poti sem v igri %2$s s palčki dosegel rezultat %1$d. Me lahko premagate? + Povabite svoje prijatelje, da spremljajo Božička z Googlom + Preskusite Spremljanje Božičkove poti in glejte, kako Božiček leta po svetu. + V Googlovi aplikaciji Spremljanje Božičkove poti sem v igri %2$s s palčki dosegel rezultat %1$d. Me lahko premagate? diff --git a/common/src/main/res/values-sl/strings_jetpack.xml b/common/src/main/res/values-sl/strings_jetpack.xml index 132f5817b..ef5204d3b 100644 --- a/common/src/main/res/values-sl/strings_jetpack.xml +++ b/common/src/main/res/values-sl/strings_jetpack.xml @@ -1,12 +1,12 @@ - Prijavite se, da odklenete dosežke in objavite svoj rezultat. - Igraj znova - Nazaj na zemljevid - REZULTAT - Nazaj na zemljevid + Prijavite se, da odklenete dosežke in objavite svoj rezultat. + Igraj znova + Nazaj na zemljevid + REZULTAT diff --git a/common/src/main/res/values-sv/strings.xml b/common/src/main/res/values-sv/strings.xml index 3e746baf3..0b4f388ef 100644 --- a/common/src/main/res/values-sv/strings.xml +++ b/common/src/main/res/values-sv/strings.xml @@ -1,11 +1,11 @@ - Tillbaka till kartan - Tillbaka till byn - Den här versionen av Följ jultomten är inaktuell. Besök Play Butik för att uppdatera appen till den senaste versionen. + Tillbaka till kartan + Tillbaka till byn + Den här versionen av Följ jultomten är inaktuell. Besök Play Butik för att uppdatera appen till den senaste versionen. + Spelet är slut + Läser in scenen + Återuppta + Spela igen + Startsida + Dela + Ett fel inträffade när %1$s laddades ned. Kontrollera nätverksanslutningen. diff --git a/common/src/main/res/values-sv/strings_appname.xml b/common/src/main/res/values-sv/strings_appname.xml new file mode 100644 index 000000000..3bfe8b154 --- /dev/null +++ b/common/src/main/res/values-sv/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Följ jultomten + diff --git a/common/src/main/res/values-sv/strings_doodles.xml b/common/src/main/res/values-sv/strings_doodles.xml new file mode 100644 index 000000000..c58969ee8 --- /dev/null +++ b/common/src/main/res/values-sv/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Snowball Run + Penguin Swim + Klappkast + Bäst: %1$s + Ljud av + Ljud på + Stäng + Pausa + TOPPRESULTAT: <b>%1$s</b> + %1$.1f sek + %1$d min + diff --git a/common/src/main/res/values-sv/strings_gamenames.xml b/common/src/main/res/values-sv/strings_gamenames.xml index 44b936c20..bd47d2d97 100644 --- a/common/src/main/res/values-sv/strings_gamenames.xml +++ b/common/src/main/res/values-sv/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Tomtenisse-jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Stadsfrågor - Klappjakten + Gumball + Memory + Tomtenisse-jetpack + Rocket Sleigh + Dasher Dancer + Stadsfrågor + Klappjakten + Tomteselfies + Presentkast + Tomtenisse-jetpack + Nordpolens flygplats + Julklappskastning + Ritkul i jul + Koddans + Kodlabb + Godisspel + Tomtenissarna jammar + Pingvinloppet + Julklappsstuds + Julklappsutdelning + Rudolfloppet + Renspurten + Tomtesökning + Tomteselfie + Gåvornas säsong + Nisseslalom + Snöbollsstorm + Koda en snöflinga + Snabbskissa + Den stora inslagningen + Skapa en tomtenisse + Tillbaka på jobbet + Kontorsspratt + Bilpool diff --git a/common/src/main/res/values-sv/strings_invite.xml b/common/src/main/res/values-sv/strings_invite.xml index e3c2896e8..232afec89 100644 --- a/common/src/main/res/values-sv/strings_invite.xml +++ b/common/src/main/res/values-sv/strings_invite.xml @@ -1,12 +1,12 @@ - Bjud in dina vänner att följa Jultomten med Google - Prova Följ jultomten och se hur tomten flyger runt hela världen! - Jag fick %1$d poäng när jag spelade %2$s med tomtenissarna i Googles Följ Jultomten. Kan du slå det? + Bjud in dina vänner att följa Jultomten med Google + Prova Följ jultomten och se hur tomten flyger runt hela världen! + Jag fick %1$d poäng när jag spelade %2$s med tomtenissarna i Googles Följ Jultomten. Kan du slå det? diff --git a/common/src/main/res/values-sv/strings_jetpack.xml b/common/src/main/res/values-sv/strings_jetpack.xml index 46d15b936..f017f3a4d 100644 --- a/common/src/main/res/values-sv/strings_jetpack.xml +++ b/common/src/main/res/values-sv/strings_jetpack.xml @@ -1,12 +1,12 @@ - Logga in för att låsa upp prestationer och skicka in ditt resultat. - Spela igen - Tillbaka till kartan - POÄNG - Tillbaka till kartan + Logga in för att låsa upp prestationer och skicka in ditt resultat. + Spela igen + Tillbaka till kartan + POÄNG diff --git a/common/src/main/res/values-sw600dp/dimens.xml b/common/src/main/res/values-sw600dp/dimens.xml index 462c04b88..9851d63ac 100644 --- a/common/src/main/res/values-sw600dp/dimens.xml +++ b/common/src/main/res/values-sw600dp/dimens.xml @@ -1,11 +1,11 @@ + 16dp + 48dp + 28dp + 8dp + 320dp + 202.5dp + 128dp + 72dp + 8dp + + 4dp 20dp 75dp - + 16dp + 24dp + 8dp + 55dp diff --git a/common/src/main/res/values-sw720dp/dimens.xml b/common/src/main/res/values-sw720dp/dimens.xml index 977dcf8ed..489d38f72 100644 --- a/common/src/main/res/values-sw720dp/dimens.xml +++ b/common/src/main/res/values-sw720dp/dimens.xml @@ -1,11 +1,11 @@ + 16dp + 80dp + 56dp + 8dp + 320dp + 202.5dp + 128dp + 72dp + 8dp + + 4dp 28sp 120dp - + 16dp + 24dp + 8dp + 55dp diff --git a/common/src/main/res/values-ta/strings.xml b/common/src/main/res/values-ta/strings.xml index 7cf5b90c7..af7766055 100644 --- a/common/src/main/res/values-ta/strings.xml +++ b/common/src/main/res/values-ta/strings.xml @@ -1,11 +1,11 @@ - வரைபடத்திற்குச் செல் - கிராமத்திற்குச் செல் - சான்டா டிராக்கரின் இந்தப் பதிப்பு காலாவதியானது. Play ஸ்டோருக்குச் சென்று, சமீபத்திய பதிப்புக்குப் புதுப்பிக்கவும். + வரைபடத்திற்குச் செல் + கிராமத்திற்குச் செல் + சான்டா டிராக்கரின் இந்தப் பதிப்பு காலாவதியானது. Play ஸ்டோருக்குச் சென்று, சமீபத்திய பதிப்புக்குப் புதுப்பிக்கவும். + ஆட்டம் முடிந்தது + திரையை ஏற்றுகிறது + மீண்டும் தொடங்கு + மீண்டும் இயக்கு + முகப்பு + பகிர் + %1$sஐப் பதிவிறக்கும் போது பிழை ஏற்பட்டது. உங்கள் நெட்வொர்க் இணைப்பு இயங்குகிறதா? diff --git a/common/src/main/res/values-ta/strings_appname.xml b/common/src/main/res/values-ta/strings_appname.xml new file mode 100644 index 000000000..8818c1a6c --- /dev/null +++ b/common/src/main/res/values-ta/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + சான்டா டிராக்கர் + diff --git a/common/src/main/res/values-ta/strings_doodles.xml b/common/src/main/res/values-ta/strings_doodles.xml new file mode 100644 index 000000000..593f52f93 --- /dev/null +++ b/common/src/main/res/values-ta/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + ஸ்னோபால் ரன் + பென்குயின் ஸ்விம் + பிரசென்ட் த்ரோ + சிறந்தது: %1$s + ஒலியடக்கும் பொத்தான் + ஒலி இயக்கும் பொத்தான் + மூடும் பொத்தான் + இடைநிறுத்தும் பொத்தான் + சிறந்த ஸ்கோர்: <b>%1$s</b> + %1$.1fவி + %1$dமீ + diff --git a/common/src/main/res/values-ta/strings_gamenames.xml b/common/src/main/res/values-ta/strings_gamenames.xml index 1daa55333..9fdf6d91a 100644 --- a/common/src/main/res/values-ta/strings_gamenames.xml +++ b/common/src/main/res/values-ta/strings_gamenames.xml @@ -1,12 +1,12 @@ - கம் பால் - மெமரி - எல்ஃப் ஜெட்பேக் - ராக்கெட் ஸ்லெய் - டேஷர் டான்சர் - ஸ்னோடவுன் - சிட்டி வினாடி வினா - பிரசென்ட் குவெஸ்ட் + கம் பால் + மெமரி + எல்ஃப் ஜெட்பேக் + ராக்கெட் ஸ்லெய் + டேஷர் டான்சர் + சிட்டி வினாடி வினா + பிரசென்ட் குவெஸ்ட் + சான்டா ஸ்னாப் + பிரசென்ட் டாஸ் + எல்ஃப் ஜெட்பேக் + வட துருவ விமான நிலையம் + கிஃப்ட் ஸ்லிங்ஷாட் + கிளாஸ் ஓவியம் + கோடு பூகி + கோடு லேப் + கம்பால் டில்ட் + எல்ஃப் ஜாம்பேண்ட் + பென்குயின் டேஷ் + பிரசென்ட் பவுன்ஸ் + பிரசென்ட் டிராப் + ருடால்ஃப் ரேஸர் + கலைமான் ஓட்டம் + சான்டா தேடல் + சான்டா செல்ஃபி + கொடையளிக்கும் காலம் + எல்ஃப் பனிச்சறுக்கு + ஸ்னோபால் ஸ்டோர்ம் + ஸ்னோஃப்ளேக்கைக் கோடிங் செய்யுங்கள் + ஸ்பீடு ஸ்கெட்ச் + ராப் பாட்டில் + எல்ஃப் மேக்கர் + மீண்டும் வேலை + அலுவலகக் குறும்பு + கார்பூல் diff --git a/common/src/main/res/values-ta/strings_invite.xml b/common/src/main/res/values-ta/strings_invite.xml index c37f48ded..e895f3f8b 100644 --- a/common/src/main/res/values-ta/strings_invite.xml +++ b/common/src/main/res/values-ta/strings_invite.xml @@ -1,12 +1,12 @@ - Google உடன் சேர்ந்து சான்டாவின் இடமறிய நண்பர்களை அழைக்கவும் - சான்டா ட்ராக்கரைப் பயன்படுத்தி, சான்டாவின் பயண வழிகளைப் பார்க்கவும்! - Google இன் சான்டா டிராக்கரில் குட்டித் தேவதைகளுடன் %2$s கேமில் %1$d ஸ்கோர் செய்துள்ளேன்! இதை முறியடிக்க முடியுமா? + Google உடன் சேர்ந்து சான்டாவின் இடமறிய நண்பர்களை அழைக்கவும் + சான்டா ட்ராக்கரைப் பயன்படுத்தி, சான்டாவின் பயண வழிகளைப் பார்க்கவும்! + Google இன் சான்டா டிராக்கரில் குட்டித் தேவதைகளுடன் %2$s கேமில் %1$d ஸ்கோர் செய்துள்ளேன்! இதை முறியடிக்க முடியுமா? diff --git a/common/src/main/res/values-ta/strings_jetpack.xml b/common/src/main/res/values-ta/strings_jetpack.xml index f88d4d5b0..ae051d3cc 100644 --- a/common/src/main/res/values-ta/strings_jetpack.xml +++ b/common/src/main/res/values-ta/strings_jetpack.xml @@ -1,12 +1,12 @@ - சாதனைகளை எட்டவும் உங்கள் ஸ்கோரை வெளியிடவும், உள்நுழையவும்! - மீண்டும் விளையாடுக - வரைபடத்திற்குச் செல் - ஸ்கோர் - வரைபடத்திற்குச் செல் + சாதனைகளை எட்டவும் உங்கள் ஸ்கோரை வெளியிடவும், உள்நுழையவும்! + மீண்டும் விளையாடுக + வரைபடத்திற்குச் செல் + ஸ்கோர் diff --git a/common/src/main/res/values-th/strings.xml b/common/src/main/res/values-th/strings.xml index 98466e86f..be5d739f8 100644 --- a/common/src/main/res/values-th/strings.xml +++ b/common/src/main/res/values-th/strings.xml @@ -1,11 +1,11 @@ - กลับไปยังแผนที่ - กลับไปยังหมู่บ้าน - ตามติดซานต้าเวอร์ชันนี้ล้าสมัยแล้ว โปรดไปที่ Play Store เพื่ออัปเดตเป็นเวอร์ชันล่าสุด + กลับไปยังแผนที่ + กลับไปยังหมู่บ้าน + ตามติดซานต้าเวอร์ชันนี้ล้าสมัยแล้ว โปรดไปที่ Play Store เพื่ออัปเดตเป็นเวอร์ชันล่าสุด + จบเกม + หน้าจอโหลด + เล่นต่อ + เล่นอีกครั้ง + หน้าแรก + แชร์ + เกิดข้อผิดพลาดขณะดาวน์โหลด %1$s การเชื่อมต่อเครือข่ายของคุณใช้งานได้ใช่ไหม diff --git a/common/src/main/res/values-th/strings_appname.xml b/common/src/main/res/values-th/strings_appname.xml new file mode 100644 index 000000000..f7865e874 --- /dev/null +++ b/common/src/main/res/values-th/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + ตามติดซานต้า + diff --git a/common/src/main/res/values-th/strings_doodles.xml b/common/src/main/res/values-th/strings_doodles.xml new file mode 100644 index 000000000..bc547afbd --- /dev/null +++ b/common/src/main/res/values-th/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + วิ่งท้าบอลหิมะ + เพนกวินแข่งว่ายน้ำ + โยนของขวัญ + ดีที่สุด: %1$s + ปิดเสียง + เปิดเสียง + ปิด + หยุดชั่วคราว + คะแนนที่ดีที่สุด: <b>%1$s</b> + %1$.1f วินาที + %1$d นาที + diff --git a/common/src/main/res/values-th/strings_gamenames.xml b/common/src/main/res/values-th/strings_gamenames.xml index 9ef0159d1..1b26a9c52 100644 --- a/common/src/main/res/values-th/strings_gamenames.xml +++ b/common/src/main/res/values-th/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - เกมความจำ - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - City Quiz - Present Quest + ลูกบอลหรรษา + เกมความจำ + Elf Jetpack + เลื่อนจรวด + คริสต์มาสแดนซ์ + ทายเมือง + ตามล่าของขวัญ + ซานต้าเซลฟี + โยนของขวัญ + เจ็ตแพ็คของเอลฟ์ + สนามบินขั้วโลกเหนือ + โยนของขวัญด้วยหนังสติ๊ก + วาดรูปซานตาคลอส + โค้ดเต้นรำ + ห้องทดลองโค้ด + เอียง Gumball + วงแจมแบนด์ของชาวเอลฟ์ + เพนกวินแดช + โยนของขวัญ + หย่อนของขวัญ + รูดอล์ฟนักวิ่งแข่ง + นักวิ่งเรนเดียร์ + ค้นหาซานต้า + ซานต้าเซลฟี + เทศกาลแห่งการให้ + เอลฟ์เล่นสกี + ศึกปาลูกบอลหิมะ + สร้างเกล็ดหิมะ + สเก็ตช์ภาพอย่างเร็ว + แข่งห่อของขวัญ + เครื่องผลิตเอลฟ์ + ซานต้าแจกของ + แกล้งกันเล่น + คาร์พูล diff --git a/common/src/main/res/values-th/strings_invite.xml b/common/src/main/res/values-th/strings_invite.xml index 39feb0aee..c75636940 100644 --- a/common/src/main/res/values-th/strings_invite.xml +++ b/common/src/main/res/values-th/strings_invite.xml @@ -1,12 +1,12 @@ - เชิญเพื่อนๆ มาร่วมตามติดซานต้ากับ Google - ลองตามติดซานต้าและดูซานต้าบินไปรอบโลก! - ฉันได้ %1$d คะแนนในการเล่นเกม %2$s กับชาวเอลฟ์ในตามติดซานต้าของ Google คุณเอาชนะฉันได้ไหม + เชิญเพื่อนๆ มาร่วมตามติดซานต้ากับ Google + ลองตามติดซานต้าและดูซานต้าบินไปรอบโลก! + ฉันได้ %1$d คะแนนในการเล่นเกม %2$s กับชาวเอลฟ์ในตามติดซานต้าของ Google คุณเอาชนะฉันได้ไหม diff --git a/common/src/main/res/values-th/strings_jetpack.xml b/common/src/main/res/values-th/strings_jetpack.xml index c8cb6c6dc..6457683f3 100644 --- a/common/src/main/res/values-th/strings_jetpack.xml +++ b/common/src/main/res/values-th/strings_jetpack.xml @@ -1,12 +1,12 @@ - ลงชื่อเข้าใช้เพื่อปลดล็อกรางวัลพิเศษและโพสต์คะแนนของคุณ - เล่นอีกครั้ง - กลับไปที่แผนที่ - คะแนน - กลับไปที่แผนที่ + ลงชื่อเข้าใช้เพื่อปลดล็อกรางวัลพิเศษและโพสต์คะแนนของคุณ + เล่นอีกครั้ง + กลับไปที่แผนที่ + คะแนน diff --git a/common/src/main/res/values-tl/strings.xml b/common/src/main/res/values-tl/strings.xml index b79cacce8..852634cc8 100644 --- a/common/src/main/res/values-tl/strings.xml +++ b/common/src/main/res/values-tl/strings.xml @@ -1,11 +1,11 @@ - Bumalik sa mapa - Bumalik sa village - Luma na ang bersyong ito ng Santa Tracker. Pakibisita ang Play Store upang makapag-update sa pinakabagong bersyon. + Bumalik sa mapa + Bumalik sa village + Luma na ang bersyong ito ng Santa Tracker. Pakibisita ang Play Store upang makapag-update sa pinakabagong bersyon. + Tapos na ang Laro + Nilo-load ang screen + Magpatuloy + I-replay + Home + bahagi + Nagka-error habang dina-download ang %1$s. Gumagana ba ang koneksyon ng iyong network? diff --git a/common/src/main/res/values-tl/strings_appname.xml b/common/src/main/res/values-tl/strings_appname.xml new file mode 100644 index 000000000..77d556f56 --- /dev/null +++ b/common/src/main/res/values-tl/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Santa Tracker + diff --git a/common/src/main/res/values-tl/strings_doodles.xml b/common/src/main/res/values-tl/strings_doodles.xml new file mode 100644 index 000000000..ceb2b9f97 --- /dev/null +++ b/common/src/main/res/values-tl/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Snowball Run + Penguin Swim + Present Throw + Pinakamataas: %1$s + I-mute + I-unmute + Isara + I-pause + PINAKAMATAAS NA SCORE: <b>%1$s</b> + %1$.1fs + %1$dm + diff --git a/common/src/main/res/values-tl/strings_gamenames.xml b/common/src/main/res/values-tl/strings_gamenames.xml index 21d77d782..bee518e97 100644 --- a/common/src/main/res/values-tl/strings_gamenames.xml +++ b/common/src/main/res/values-tl/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - City Quiz - Present Quest + Gumball + Memory + Elf Jetpack + Rocket Sleigh + Dasher Dancer + City Quiz + Present Quest + Santa Snap + Present Toss + Elf Jetpack + North Pole Airport + Gift Slingshot + Claus Draws + Code Boogie + Code Lab + Gumball Tilt + Elf Jamband + Penguin Dash + Present Bounce + Present Drop + Rudolph Racer + Reindeer Runner + Santa Search + Santa Selfie + Panahon ng Bigayan + Elf Ski + Snowball Storm + Code a Snowflake + Speed Sketch + Wrap Battle + Elf Maker + Back to Work + Office Prank + Carpool diff --git a/common/src/main/res/values-tl/strings_invite.xml b/common/src/main/res/values-tl/strings_invite.xml index 3d5b566be..f8920ce63 100644 --- a/common/src/main/res/values-tl/strings_invite.xml +++ b/common/src/main/res/values-tl/strings_invite.xml @@ -1,12 +1,12 @@ - Imbitahan ang iyong mga kaibigan na subaybayan si Santa sa Google - Subukan ang Santa Tracker at panoorin ang paglipad ni Santa sa buong mundo! - Nakapuntos ako ng %1$d sa paglalaro ng %2$s game na may elves sa Santa Tracker ng Google, kaya mo bang talunin iyon? + Imbitahan ang iyong mga kaibigan na subaybayan si Santa sa Google + Subukan ang Santa Tracker at panoorin ang paglipad ni Santa sa buong mundo! + Nakapuntos ako ng %1$d sa paglalaro ng %2$s game na may elves sa Santa Tracker ng Google, kaya mo bang talunin iyon? diff --git a/common/src/main/res/values-tl/strings_jetpack.xml b/common/src/main/res/values-tl/strings_jetpack.xml index 2588c5142..e5690d3c0 100644 --- a/common/src/main/res/values-tl/strings_jetpack.xml +++ b/common/src/main/res/values-tl/strings_jetpack.xml @@ -1,12 +1,12 @@ - Mag-sign in upang mai-unlock ang mga achievement at mai-post ang iyong score! - Maglaro Muli - Bumalik sa Mapa - SCORE - Bumalik sa mapa + Mag-sign in upang mai-unlock ang mga achievement at mai-post ang iyong score! + Maglaro Muli + Bumalik sa Mapa + SCORE diff --git a/common/src/main/res/values-uk/strings.xml b/common/src/main/res/values-uk/strings.xml index 776f0320c..af17600ed 100644 --- a/common/src/main/res/values-uk/strings.xml +++ b/common/src/main/res/values-uk/strings.xml @@ -1,11 +1,11 @@ - Назад на карту - Назад у містечко - Ця версія додатка Де Дід Мороз застаріла. Перейдіть у веб-магазин Play, щоб завантажити останню версію. + Назад на карту + Назад у містечко + Ця версія додатка Де Дід Мороз застаріла. Перейдіть у веб-магазин Play, щоб завантажити останню версію. + Гру закінчено + Завантаження екрана + Відновити + Грати ще раз + Головний екран + Поділитися + Помилка завантаження гри \"%1$s\". Перевірте підключення до мережі. diff --git a/common/src/main/res/values-uk/strings_appname.xml b/common/src/main/res/values-uk/strings_appname.xml new file mode 100644 index 000000000..3f47baaf9 --- /dev/null +++ b/common/src/main/res/values-uk/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Де Дід Мороз + diff --git a/common/src/main/res/values-uk/strings_doodles.xml b/common/src/main/res/values-uk/strings_doodles.xml new file mode 100644 index 000000000..10eb9771e --- /dev/null +++ b/common/src/main/res/values-uk/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Утікай від сніжки + Заплив пінгвіна + Роздача подарунків + Найкращий результат: %1$s + Вимкнути звук + Увімкнути звук + Закрити + Призупинити + НАЙКРАЩИЙ РЕЗУЛЬТАТ: <b>%1$s</b> + %1$.1f с + %1$d хв + diff --git a/common/src/main/res/values-uk/strings_gamenames.xml b/common/src/main/res/values-uk/strings_gamenames.xml index 64c3fd8fa..c9386428a 100644 --- a/common/src/main/res/values-uk/strings_gamenames.xml +++ b/common/src/main/res/values-uk/strings_gamenames.xml @@ -1,12 +1,12 @@ - Гамбол - Згадати все - Реактивні ельфи - Реактивні санчата - Олені - Сніжки - Угадай місто - Знайди подарунок + Гамбол + Згадати все + Реактивні ельфи + Реактивні санчата + Олені + Угадай місто + Знайди подарунок + Знімок для Діда Мороза + Подарунковий бум + Реактивні ельфи + Аеропорт Північного полюса + Подарункова рогатка + Малюнок для Діда Мороза + Бугі-вугі + Пазли + Перекоти кульку + Музичний гурт помічників Діда Мороза + Біг пінгвіна + Підкидання подарунків + Кидання подарунків + Гонщик Рудольф + Олень-бігун + Пошук Діда Мороза + Селфі Діда Мороза + Сезон подарунків + Ельф на лижах + Бій сніжками + Створення сніжинки + Швидка замальовка + Пакування подарунків + Мій власний ельф + Знову до роботи + Офісна витівка + Підготовка до вечірки diff --git a/common/src/main/res/values-uk/strings_invite.xml b/common/src/main/res/values-uk/strings_invite.xml index 7092566b7..5dbacc947 100644 --- a/common/src/main/res/values-uk/strings_invite.xml +++ b/common/src/main/res/values-uk/strings_invite.xml @@ -1,12 +1,12 @@ - Запросіть друзів стежити за Дідом Морозом у Google - Завантажте додаток Де Дід Мороз і стежте за мандрівкою Діда Мороза! - У грі \"%2$s\" у Google Де Дід Мороз у мене вже стільки очок: %1$d. Наберете більше? + Запросіть друзів стежити за Дідом Морозом у Google + Завантажте додаток Де Дід Мороз і стежте за мандрівкою Діда Мороза! + У грі \"%2$s\" у Google Де Дід Мороз у мене вже стільки очок: %1$d. Наберете більше? diff --git a/common/src/main/res/values-uk/strings_jetpack.xml b/common/src/main/res/values-uk/strings_jetpack.xml index 3908af866..42267245f 100644 --- a/common/src/main/res/values-uk/strings_jetpack.xml +++ b/common/src/main/res/values-uk/strings_jetpack.xml @@ -1,12 +1,12 @@ - Увійдіть, щоб розблокувати досягнення й повідомити свій результат іншим. - Грати ще раз - Назад на карту - РАХУНОК - Назад на карту + Увійдіть, щоб розблокувати досягнення й повідомити свій результат іншим. + Грати ще раз + Назад на карту + РАХУНОК diff --git a/common/src/main/res/values-v21/styles.xml b/common/src/main/res/values-v21/styles.xml deleted file mode 100644 index 91e804b61..000000000 --- a/common/src/main/res/values-v21/styles.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - diff --git a/common/src/main/res/values-vi/strings.xml b/common/src/main/res/values-vi/strings.xml index 252fd4a46..b47c71066 100644 --- a/common/src/main/res/values-vi/strings.xml +++ b/common/src/main/res/values-vi/strings.xml @@ -1,11 +1,11 @@ - Quay lại bản đồ - Quay lại làng - Phiên bản Theo chân ông già Noel này đã cũ. Vui lòng truy cập Cửa hàng Play để cập nhật lên phiên bản mới nhất. + Quay lại bản đồ + Quay lại làng + Phiên bản Theo chân ông già Noel này đã cũ. Vui lòng truy cập Cửa hàng Play để cập nhật lên phiên bản mới nhất. + Kết thúc + Đang tải màn hình + Tiếp tục + Phát lại + Trang chủ + Chia sẻ + Đã xảy ra lỗi khi tải %1$s. Vui lòng kiểm tra kết nối mạng. diff --git a/common/src/main/res/values-vi/strings_appname.xml b/common/src/main/res/values-vi/strings_appname.xml new file mode 100644 index 000000000..ff842c03b --- /dev/null +++ b/common/src/main/res/values-vi/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + Theo chân ông già Noel + diff --git a/common/src/main/res/values-vi/strings_doodles.xml b/common/src/main/res/values-vi/strings_doodles.xml new file mode 100644 index 000000000..2b826737f --- /dev/null +++ b/common/src/main/res/values-vi/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + Chạy bóng tuyết + Chim cánh cụt bơi lội + Ném quà + Điểm tốt nhất: %1$s + Tắt tiếng + Bật tiếng + Đóng + Tạm dừng + ĐIỂM TỐT NHẤT: <b>%1$s</b> + %1$.1f giây + %1$d mét + diff --git a/common/src/main/res/values-vi/strings_gamenames.xml b/common/src/main/res/values-vi/strings_gamenames.xml index c99176348..779de57e4 100644 --- a/common/src/main/res/values-vi/strings_gamenames.xml +++ b/common/src/main/res/values-vi/strings_gamenames.xml @@ -1,12 +1,12 @@ - Trò chơi Gumball - Trò chơi Trí nhớ - Trò chơi Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - Đoán tên thành phố - Săn tìm quà tặng + Trò chơi Gumball + Trò chơi Trí nhớ + Trò chơi Elf Jetpack + Rocket Sleigh + Dasher Dancer + Đoán tên thành phố + Săn tìm quà tặng + Santa Snap + Tung quà + Ba lô phản lực của chú lùn + Sân bay Bắc Cực + Súng bắn quà + Vẽ tranh ông già Noel + Vũ điệu của mã + Phòng thí nghiệm mã + Nghiêng Gumball + Ban nhạc của chú lùn + Chim cánh cụt nhặt quà + Trò chơi nảy quà + Thả quà + Tay đua Rudolph + Người cưỡi tuần lộc + Tìm kiếm ông già Noel + Ảnh tự chụp của ông già Noel + Mùa trao tặng + Yêu tinh trượt tuyết + Bão bóng tuyết + Viết mã cho bông tuyết + Ký họa nhanh + Wrap Battle + Công cụ tạo chú lùn + Quay lại làm việc + Trò đùa ở văn phòng + Đi chung xe diff --git a/common/src/main/res/values-vi/strings_invite.xml b/common/src/main/res/values-vi/strings_invite.xml index 85f55f4e1..7ba8721da 100644 --- a/common/src/main/res/values-vi/strings_invite.xml +++ b/common/src/main/res/values-vi/strings_invite.xml @@ -1,12 +1,12 @@ - Mời bạn bè theo dõi ông già Noel với Google - Hãy dùng thử công cụ Theo chân ông già Noel và xem ông già Noel bay khắp thế giới! - Tôi đã ghi %1$d khi chơi trò %2$s với các chú lùn trong công cụ Theo chân ông già Noel của Google, bạn có thể đánh bại số điểm đó không? + Mời bạn bè theo dõi ông già Noel với Google + Hãy dùng thử công cụ Theo chân ông già Noel và xem ông già Noel bay khắp thế giới! + Tôi đã ghi %1$d khi chơi trò %2$s với các chú lùn trong công cụ Theo chân ông già Noel của Google, bạn có thể đánh bại số điểm đó không? diff --git a/common/src/main/res/values-vi/strings_jetpack.xml b/common/src/main/res/values-vi/strings_jetpack.xml index 2a9b1dc3b..d4013effd 100644 --- a/common/src/main/res/values-vi/strings_jetpack.xml +++ b/common/src/main/res/values-vi/strings_jetpack.xml @@ -1,12 +1,12 @@ - Đăng nhập để gặt hái thành tích và đăng điểm của bạn! - Chơi lại - Trở lại bản đồ - ĐIỂM - Trở lại bản đồ + Đăng nhập để gặt hái thành tích và đăng điểm của bạn! + Chơi lại + Trở lại bản đồ + ĐIỂM diff --git a/common/src/main/res/values-xhdpi/dimens.xml b/common/src/main/res/values-xhdpi/dimens.xml index 938f9baef..c214dff58 100644 --- a/common/src/main/res/values-xhdpi/dimens.xml +++ b/common/src/main/res/values-xhdpi/dimens.xml @@ -1,11 +1,11 @@ + 16dp + 8dp + 320dp + 202.5dp + 128dp + 72dp + 8dp + + 4dp 12sp 50dp - + 16dp + 24dp + 8dp + 55dp diff --git a/common/src/main/res/values-zh-rCN/strings.xml b/common/src/main/res/values-zh-rCN/strings.xml index a6881d7fb..e8f4e8266 100644 --- a/common/src/main/res/values-zh-rCN/strings.xml +++ b/common/src/main/res/values-zh-rCN/strings.xml @@ -1,11 +1,11 @@ - 返回地图 - 返回小镇 - 此版本的“追踪圣诞老人”应用已经失效。请访问 Google Play 商店更新为最新版本。 + 返回地图 + 返回小镇 + 此版本的“追踪圣诞老人”应用已经失效。请访问 Google Play 商店更新为最新版本。 + 游戏结束 + 正在加载屏幕 + 继续 + 再玩一次 + 主屏幕 + 分享 + 下载《%1$s》时出错。您的网络连接是否正常? diff --git a/common/src/main/res/values-zh-rCN/strings_appname.xml b/common/src/main/res/values-zh-rCN/strings_appname.xml new file mode 100644 index 000000000..e08aae898 --- /dev/null +++ b/common/src/main/res/values-zh-rCN/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + 追踪圣诞老人 + diff --git a/common/src/main/res/values-zh-rCN/strings_doodles.xml b/common/src/main/res/values-zh-rCN/strings_doodles.xml new file mode 100644 index 000000000..57338d376 --- /dev/null +++ b/common/src/main/res/values-zh-rCN/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + 雪球跑跑跑 + 企鹅爱游泳 + 扔礼物 + 最高得分:%1$s + 静音 + 取消静音 + 关闭 + 暂停 + 最高得分:<b>%1$s</b> + %1$.1f 秒 + %1$d 米 + diff --git a/common/src/main/res/values-zh-rCN/strings_gamenames.xml b/common/src/main/res/values-zh-rCN/strings_gamenames.xml index 133b74861..6816463d2 100644 --- a/common/src/main/res/values-zh-rCN/strings_gamenames.xml +++ b/common/src/main/res/values-zh-rCN/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - 城市知多少 - 寻找礼物 + 掉落口香糖 + 翻牌配对 + Elf Jetpack + 火箭雪橇 + 猛冲者跳舞 + 城市知多少 + 寻找礼物 + 圣诞老人快拍 + 投掷礼物 + 精灵飞侠 + 北极机场 + 礼物弹弓 + 圣诞老人绘图 + 编码热舞 + 编码实验室 + 彩球滑落 + 摇滚精灵乐 + 企鹅向前冲 + 礼物弹弹跳 + 礼从天降 + 驯鹿狂飙 + 驯鹿快跑接大礼 + 圣诞老人找找乐 + 圣诞老人换造型 + 温馨分享季 + 精灵滑雪 + 雪球风暴 + 雪花编码 + 快手画图 + 包装快手 + 精灵制造 + 圣诞老人复工啦 + 办公室恶作剧 + 拼车欢乐多 diff --git a/common/src/main/res/values-zh-rCN/strings_invite.xml b/common/src/main/res/values-zh-rCN/strings_invite.xml index 60cbcdc2e..3ec8b3c89 100644 --- a/common/src/main/res/values-zh-rCN/strings_invite.xml +++ b/common/src/main/res/values-zh-rCN/strings_invite.xml @@ -1,12 +1,12 @@ - 邀请好友在 Google 上追踪圣诞老人 - 快来试玩“追踪圣诞老人”,与圣诞老人一起环游世界! - 我在 Google 的“追踪圣诞老人”中与小精灵们玩“%2$s”游戏时得了 %1$d 分。你敢来挑战吗? + 邀请好友在 Google 上追踪圣诞老人 + 快来试玩“追踪圣诞老人”,与圣诞老人一起环游世界! + 我在 Google 的“追踪圣诞老人”中与小精灵们玩“%2$s”游戏时得了 %1$d 分。你敢来挑战吗? diff --git a/common/src/main/res/values-zh-rCN/strings_jetpack.xml b/common/src/main/res/values-zh-rCN/strings_jetpack.xml index fe8cea794..8a8673f21 100644 --- a/common/src/main/res/values-zh-rCN/strings_jetpack.xml +++ b/common/src/main/res/values-zh-rCN/strings_jetpack.xml @@ -1,12 +1,12 @@ - 登录即可记录您的成就并发布您的得分! - 重玩 - 返回地图 - 得分 - 返回地图 + 登录即可记录您的成就并发布您的得分! + 重玩 + 返回地图 + 得分 diff --git a/common/src/main/res/values-zh-rHK/strings.xml b/common/src/main/res/values-zh-rHK/strings.xml index df8c0de53..dfbca94c0 100644 --- a/common/src/main/res/values-zh-rHK/strings.xml +++ b/common/src/main/res/values-zh-rHK/strings.xml @@ -1,11 +1,11 @@ - 返回地圖 - 返回村落 - 這個「聖誕老人追蹤器」不是最新版本。請前往 Play 商店更新至最新版本。 + 返回地圖 + 返回村落 + 這個「聖誕老人追蹤器」不是最新版本。請前往 Play 商店更新至最新版本。 + 遊戲結束 + 正在載入畫面 + 繼續 + 再玩一次 + 主畫面 + 分享 + 下載 %1$s 時出現錯誤,請檢查網絡連線。 diff --git a/common/src/main/res/values-zh-rHK/strings_appname.xml b/common/src/main/res/values-zh-rHK/strings_appname.xml new file mode 100644 index 000000000..469cfbd1c --- /dev/null +++ b/common/src/main/res/values-zh-rHK/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + 聖誕老人追蹤器 + diff --git a/common/src/main/res/values-zh-rHK/strings_doodles.xml b/common/src/main/res/values-zh-rHK/strings_doodles.xml new file mode 100644 index 000000000..15c046891 --- /dev/null +++ b/common/src/main/res/values-zh-rHK/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + 雪球大暴走 + 企鵝暢泳 + 拋禮物 + 最佳成績:%1$s + 靜音 + 取消靜音 + 關閉 + 暫停 + 最佳成績:<b>%1$s</b> + %1$.1f 秒 + %1$d 分鐘 + diff --git a/common/src/main/res/values-zh-rHK/strings_gamenames.xml b/common/src/main/res/values-zh-rHK/strings_gamenames.xml index 0bb3ca070..33390ea90 100644 --- a/common/src/main/res/values-zh-rHK/strings_gamenames.xml +++ b/common/src/main/res/values-zh-rHK/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - 小精靈飛行背包 - 火箭雪橇 - 猛衝‧跳舞 - Snowdown - 城市問答 - 禮物尋寶 + Gumball + Memory + 小精靈飛行背包 + 火箭雪橇 + 猛衝‧跳舞 + 城市問答 + 禮物尋寶 + 聖誕老人快照 + 禮物拋拋樂 + 小精靈一飛衝天 + 北極機場 + 禮物彈弓手 + 聖誕老人畫畫 + 編碼熱舞 + 編碼實驗室 + 口香糖遊戲機 + 小精靈 Jam 歌夾 Band + 企鵝衝衝衝 + 禮物彈彈跳 + 禮物從天降 + 聖誕馴鹿競賽 + 馴鹿狂奔接大禮 + 尋找聖誕老人 + 聖誕老人自拍 + 奉獻的季節 + 小精靈高山滑雪 + 雪球大戰 + 編碼雪花樂 + 極速繪畫 + 聖誕禮物密密包 + 小精靈製造器 + 聖誕老人復工了 + 辦公室惡作劇 + 一起坐車 diff --git a/common/src/main/res/values-zh-rHK/strings_invite.xml b/common/src/main/res/values-zh-rHK/strings_invite.xml index b56509370..e38d43d79 100644 --- a/common/src/main/res/values-zh-rHK/strings_invite.xml +++ b/common/src/main/res/values-zh-rHK/strings_invite.xml @@ -1,12 +1,12 @@ - 邀請好友在 Google 追蹤聖誕老人 - 試玩「追蹤聖誕老人」,追看聖誕老人遨遊世界各地! - 我與小精靈在 Google「追蹤聖誕老人」玩%1$d時得獲得 %2$s 分,您能打敗我嗎? + 邀請好友在 Google 追蹤聖誕老人 + 試玩「追蹤聖誕老人」,追看聖誕老人遨遊世界各地! + 我與小精靈在 Google「追蹤聖誕老人」玩%1$d時得獲得 %2$s 分,您能打敗我嗎? diff --git a/common/src/main/res/values-zh-rHK/strings_jetpack.xml b/common/src/main/res/values-zh-rHK/strings_jetpack.xml index d77112925..094086182 100644 --- a/common/src/main/res/values-zh-rHK/strings_jetpack.xml +++ b/common/src/main/res/values-zh-rHK/strings_jetpack.xml @@ -1,12 +1,12 @@ - 登入即可解鎖成就並發佈您的得分! - 再玩一次 - 返回地圖 - 得分 - 返回地圖 + 登入即可解鎖成就並發佈您的得分! + 再玩一次 + 返回地圖 + 得分 diff --git a/common/src/main/res/values-zh-rTW/strings.xml b/common/src/main/res/values-zh-rTW/strings.xml index 3b85494a6..78fa5793a 100644 --- a/common/src/main/res/values-zh-rTW/strings.xml +++ b/common/src/main/res/values-zh-rTW/strings.xml @@ -1,11 +1,11 @@ - 返回地圖 - 返回聖誕老人村 - 目前的聖誕老人追蹤器版本已過期。請前往 Google Play 商店更新至最新版本。 + 返回地圖 + 返回聖誕老人村 + 目前的聖誕老人追蹤器版本已過期。請前往 Google Play 商店更新至最新版本。 + 遊戲結束 + 正在載入畫面 + 繼續 + 再玩一次 + 主畫面 + 分享 + 下載「%1$s」時發生錯誤,請檢查你的網路連線。 diff --git a/common/src/main/res/values-zh-rTW/strings_appname.xml b/common/src/main/res/values-zh-rTW/strings_appname.xml new file mode 100644 index 000000000..469cfbd1c --- /dev/null +++ b/common/src/main/res/values-zh-rTW/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + 聖誕老人追蹤器 + diff --git a/common/src/main/res/values-zh-rTW/strings_doodles.xml b/common/src/main/res/values-zh-rTW/strings_doodles.xml new file mode 100644 index 000000000..5d0237122 --- /dev/null +++ b/common/src/main/res/values-zh-rTW/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + 雪球大進擊 + 企鵝游泳大賽 + 投擲禮物 + 最佳成績:%1$s + 靜音 + 取消靜音 + 關閉 + 暫停 + 最佳成績:<b>%1$s</b> + %1$.1f 秒 + %1$d 公尺 + diff --git a/common/src/main/res/values-zh-rTW/strings_gamenames.xml b/common/src/main/res/values-zh-rTW/strings_gamenames.xml index 4a4050a5f..23a002618 100644 --- a/common/src/main/res/values-zh-rTW/strings_gamenames.xml +++ b/common/src/main/res/values-zh-rTW/strings_gamenames.xml @@ -1,12 +1,12 @@ - 口香糖球 - 翻牌配對 - Elf Jetpack - 火箭雪橇 - 馴鹿快跑 - 雪球爭霸戰 - 城市猜謎 - 禮物尋寶 + 口香糖球 + 翻牌配對 + Elf Jetpack + 火箭雪橇 + 馴鹿快跑 + 城市猜謎 + 禮物尋寶 + 聖誕老公公快照 + 禮物丟丟樂 + 精靈飛俠 + 北極機場 + 禮物彈弓 + 聖誕老公公繪畫比賽 + 程式碼之舞力全開 + 程式碼實驗室 + 口香糖球掉下來 + 搖滾精靈樂 + 企鵝向前衝 + 彈跳小禮物 + 禮物直直落 + 飆風馴鹿 + 「鹿」跑有禮 + 聖誕老公公在哪裡? + 聖誕老公公自拍照 + 溫馨分享季 + 精靈滑雪板 + 雪球大戰 + 使用程式碼設計雪花 + 急速繪畫 + 包裝快手 + 精靈製造機 + 返回工作崗位 + 辦公室惡作劇 + 共乘 diff --git a/common/src/main/res/values-zh-rTW/strings_invite.xml b/common/src/main/res/values-zh-rTW/strings_invite.xml index 60f9d5111..b3391261a 100644 --- a/common/src/main/res/values-zh-rTW/strings_invite.xml +++ b/common/src/main/res/values-zh-rTW/strings_invite.xml @@ -1,12 +1,12 @@ - 邀請好友與 Google 一起追蹤聖誕老人 - 快來體驗聖誕老人追蹤器,和聖誕老人一起遨遊世界! - 我在 Google 聖誕老人追蹤器中與小精靈一起玩「%2$s」遊戲,獲得 %1$d 分!你能打敗我嗎? + 邀請好友與 Google 一起追蹤聖誕老人 + 快來體驗聖誕老人追蹤器,和聖誕老人一起遨遊世界! + 我在 Google 聖誕老人追蹤器中與小精靈一起玩「%2$s」遊戲,獲得 %1$d 分!你能打敗我嗎? diff --git a/common/src/main/res/values-zh-rTW/strings_jetpack.xml b/common/src/main/res/values-zh-rTW/strings_jetpack.xml index 25da57a8c..3a1503571 100644 --- a/common/src/main/res/values-zh-rTW/strings_jetpack.xml +++ b/common/src/main/res/values-zh-rTW/strings_jetpack.xml @@ -1,12 +1,12 @@ - 登入即可解開遊戲關卡並發表您的得分! - 再玩一次 - 返回地圖 - 總成績 - 返回地圖 + 登入即可解開遊戲關卡並發表您的得分! + 再玩一次 + 返回地圖 + 總成績 diff --git a/common/src/main/res/values-zh/strings.xml b/common/src/main/res/values-zh/strings.xml index a6881d7fb..e8f4e8266 100644 --- a/common/src/main/res/values-zh/strings.xml +++ b/common/src/main/res/values-zh/strings.xml @@ -1,11 +1,11 @@ - 返回地图 - 返回小镇 - 此版本的“追踪圣诞老人”应用已经失效。请访问 Google Play 商店更新为最新版本。 + 返回地图 + 返回小镇 + 此版本的“追踪圣诞老人”应用已经失效。请访问 Google Play 商店更新为最新版本。 + 游戏结束 + 正在加载屏幕 + 继续 + 再玩一次 + 主屏幕 + 分享 + 下载《%1$s》时出错。您的网络连接是否正常? diff --git a/common/src/main/res/values-zh/strings_appname.xml b/common/src/main/res/values-zh/strings_appname.xml new file mode 100644 index 000000000..e08aae898 --- /dev/null +++ b/common/src/main/res/values-zh/strings_appname.xml @@ -0,0 +1,20 @@ + + + + + 追踪圣诞老人 + diff --git a/common/src/main/res/values-zh/strings_doodles.xml b/common/src/main/res/values-zh/strings_doodles.xml new file mode 100644 index 000000000..57338d376 --- /dev/null +++ b/common/src/main/res/values-zh/strings_doodles.xml @@ -0,0 +1,30 @@ + + + + + 雪球跑跑跑 + 企鹅爱游泳 + 扔礼物 + 最高得分:%1$s + 静音 + 取消静音 + 关闭 + 暂停 + 最高得分:<b>%1$s</b> + %1$.1f 秒 + %1$d 米 + diff --git a/common/src/main/res/values-zh/strings_gamenames.xml b/common/src/main/res/values-zh/strings_gamenames.xml index 133b74861..6816463d2 100644 --- a/common/src/main/res/values-zh/strings_gamenames.xml +++ b/common/src/main/res/values-zh/strings_gamenames.xml @@ -1,12 +1,12 @@ - Gumball - Memory - Elf Jetpack - Rocket Sleigh - Dasher Dancer - Snowdown - 城市知多少 - 寻找礼物 + 掉落口香糖 + 翻牌配对 + Elf Jetpack + 火箭雪橇 + 猛冲者跳舞 + 城市知多少 + 寻找礼物 + 圣诞老人快拍 + 投掷礼物 + 精灵飞侠 + 北极机场 + 礼物弹弓 + 圣诞老人绘图 + 编码热舞 + 编码实验室 + 彩球滑落 + 摇滚精灵乐 + 企鹅向前冲 + 礼物弹弹跳 + 礼从天降 + 驯鹿狂飙 + 驯鹿快跑接大礼 + 圣诞老人找找乐 + 圣诞老人换造型 + 温馨分享季 + 精灵滑雪 + 雪球风暴 + 雪花编码 + 快手画图 + 包装快手 + 精灵制造 + 圣诞老人复工啦 + 办公室恶作剧 + 拼车欢乐多 diff --git a/common/src/main/res/values-zh/strings_invite.xml b/common/src/main/res/values-zh/strings_invite.xml index 60cbcdc2e..3ec8b3c89 100644 --- a/common/src/main/res/values-zh/strings_invite.xml +++ b/common/src/main/res/values-zh/strings_invite.xml @@ -1,12 +1,12 @@ - 邀请好友在 Google 上追踪圣诞老人 - 快来试玩“追踪圣诞老人”,与圣诞老人一起环游世界! - 我在 Google 的“追踪圣诞老人”中与小精灵们玩“%2$s”游戏时得了 %1$d 分。你敢来挑战吗? + 邀请好友在 Google 上追踪圣诞老人 + 快来试玩“追踪圣诞老人”,与圣诞老人一起环游世界! + 我在 Google 的“追踪圣诞老人”中与小精灵们玩“%2$s”游戏时得了 %1$d 分。你敢来挑战吗? diff --git a/common/src/main/res/values-zh/strings_jetpack.xml b/common/src/main/res/values-zh/strings_jetpack.xml index fe8cea794..8a8673f21 100644 --- a/common/src/main/res/values-zh/strings_jetpack.xml +++ b/common/src/main/res/values-zh/strings_jetpack.xml @@ -1,12 +1,12 @@ - 登录即可记录您的成就并发布您的得分! - 重玩 - 返回地图 - 得分 - 返回地图 + 登录即可记录您的成就并发布您的得分! + 重玩 + 返回地图 + 得分 diff --git a/common/src/main/res/values/colors.xml b/common/src/main/res/values/colors.xml new file mode 100644 index 000000000..8f77d1f14 --- /dev/null +++ b/common/src/main/res/values/colors.xml @@ -0,0 +1,73 @@ + + + + + #3F51B5 + #303F9F + #FF4081 + + #16cc82 + #1DC07D + #109f65 + #87d745 + #ffffff + #89000000 + #b2138e61 + + #139538 + @color/trackerPrimary + #FF5722 + @color/trackerPrimary + #9affb4 + #283593 + #FFFFFF + + #789088 + #885090 + #80A058 + #786880 + #686890 + #6898B0 + #A87880 + #4898A0 + #6890A8 + #588090 + #A8A8B0 + #7860A0 + #7f3d86 + #58A060 + #708088 + #B05068 + #90C8C0 + #509870 + #68A8A8 + #9850A0 + #88A0A8 + #8888A8 + #408080 + #60B080 + #605060 + #504888 + #50A868 + #A098A8 + #60B060 + #FB8C00 + #9E4A20 + + #ff00c3ea + + diff --git a/common/src/main/res/values/dimens.xml b/common/src/main/res/values/dimens.xml new file mode 100644 index 000000000..b88afcdd8 --- /dev/null +++ b/common/src/main/res/values/dimens.xml @@ -0,0 +1,26 @@ + + + + + 16sp + 32dp + 32dp + 20dp + + 250dp + 8dp + diff --git a/common/src/main/res/values/font_certs.xml b/common/src/main/res/values/font_certs.xml new file mode 100644 index 000000000..539a0cc47 --- /dev/null +++ b/common/src/main/res/values/font_certs.xml @@ -0,0 +1,32 @@ + + + + + @array/com_google_android_gms_fonts_certs_dev + @array/com_google_android_gms_fonts_certs_prod + + + + MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs= + + + + + MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK + + + diff --git a/common/src/main/res/values/game_colors.xml b/common/src/main/res/values/game_colors.xml index e4956cbcc..7124bd5c0 100644 --- a/common/src/main/res/values/game_colors.xml +++ b/common/src/main/res/values/game_colors.xml @@ -1,12 +1,12 @@ + + + @font/lobster + + diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 01f4d6f30..771bbc91b 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -1,22 +1,27 @@ - - - Common + --> Back to map Back to village This version of Santa Tracker is out of date. Please visit the Play Store to update to the latest version. + Game Over + Loading screen + Resume + Replay + Home + Share + extra_large_present + An error occurred while downloading %1$s. Is your network connection working? diff --git a/common/src/main/res/values/strings_activity_uris.xml b/common/src/main/res/values/strings_activity_uris.xml new file mode 100644 index 000000000..38d7c9909 --- /dev/null +++ b/common/src/main/res/values/strings_activity_uris.xml @@ -0,0 +1,31 @@ + + + + + http + https + www.google.com + /santatracker/android/jetpack + /santatracker/android/cityquiz + /santatracker/android/gumball + /santatracker/android/memory + /santatracker/now + /santatracker/android/dasherdancer + /santatracker/android/presentquest + /santatracker/android/rocketsleigh + /santatracker/android/unity + diff --git a/common/src/main/res/values/strings_appname.xml b/common/src/main/res/values/strings_appname.xml new file mode 100644 index 000000000..73050b583 --- /dev/null +++ b/common/src/main/res/values/strings_appname.xml @@ -0,0 +1,18 @@ + + + Santa Tracker + diff --git a/common/src/main/res/values/strings_doodles.xml b/common/src/main/res/values/strings_doodles.xml new file mode 100644 index 000000000..2dc30714c --- /dev/null +++ b/common/src/main/res/values/strings_doodles.xml @@ -0,0 +1,51 @@ + + + + Snowball Run + Penguin Swim + Present Throw + Best: %1$s + Mute + Unmute + Close + Pause + + Load + Save + Reset + Delete + Delete + Save + Cancel + Create object + Collision + Scenery + + BEST SCORE: <b>%1$s</b> + + + + %1$.1fs + + + %1$dm + + %1$d + %1$d + +%1$d + %1$d + diff --git a/common/src/main/res/values/strings_gamenames.xml b/common/src/main/res/values/strings_gamenames.xml index 21d77d782..ff646f3e7 100644 --- a/common/src/main/res/values/strings_gamenames.xml +++ b/common/src/main/res/values/strings_gamenames.xml @@ -1,27 +1,51 @@ - - + --> Gumball Memory Elf Jetpack Rocket Sleigh Dasher Dancer - Snowdown City Quiz - Present Quest + Present Quest + Santa Snap + Present Toss + Elf Jetpack + North Pole Airport + Gift Slingshot + Claus Draws + Code Boogie + Code Lab + Gumball Tilt + Elf Jamband + Penguin Dash + Present Bounce + Present Drop + Rudolph Racer + Reindeer Runner + Santa Search + Santa Selfie + Season of Giving + Elf Ski + Snowball Storm + Code a Snowflake + Speed Sketch + Wrap Battle + Elf Maker + Back to Work + Office Prank + Carpool diff --git a/common/src/main/res/values/strings_invite.xml b/common/src/main/res/values/strings_invite.xml index 1a242e409..2696ac62f 100644 --- a/common/src/main/res/values/strings_invite.xml +++ b/common/src/main/res/values/strings_invite.xml @@ -1,21 +1,19 @@ - - + --> Invite your friends to track Santa with Google diff --git a/common/src/main/res/values/strings_jetpack.xml b/common/src/main/res/values/strings_jetpack.xml index 7d3ff2361..9be04c546 100644 --- a/common/src/main/res/values/strings_jetpack.xml +++ b/common/src/main/res/values/strings_jetpack.xml @@ -1,24 +1,21 @@ - - + --> Sign in to unlock achievements and post your score! Play Again Return to Map SCORE - Return to map diff --git a/common/src/main/res/values/styles.xml b/common/src/main/res/values/styles.xml index edaa91371..704d94e70 100644 --- a/common/src/main/res/values/styles.xml +++ b/common/src/main/res/values/styles.xml @@ -1,12 +1,12 @@ - + + - + + + + + + + + diff --git a/common/src/main/res/values/values_analytics.xml b/common/src/main/res/values/values_analytics.xml new file mode 100644 index 000000000..440735496 --- /dev/null +++ b/common/src/main/res/values/values_analytics.xml @@ -0,0 +1,85 @@ + + + + + Village + Gumball + Memory + Jetpack + Tracker + CastController + CityQuiz + WebScene: %1$s + + Launch + Notification + Launch Button + Voice + Unhandled + + Cast + ConnectionLaunchActivity + ConnectionMapActivity + Connected + Disconnected + StateChangeLaunchActivity + StateChangeMapActivity + overlayshown + + OpenController + ActionBar + MediaRouter + + SwitchController + Touch + Dpad + + Tracker + SantaCamEnabled + ActionBar + FAB + Timeout + + LocationSelected + OpenStreetView + OpenVideo + ClickSanta + + Error + Finished + TimeUpdate + NoData + SwitchOff + + Card + Expanded + Closed + + StartGame + Village + Click + EasterEgg Unlocked + + Moon + Sun + UFO + Plane + + WebScene + Error + WebAction + diff --git a/common/src/main/res/xml/config_analytics_global.xml b/common/src/main/res/xml/config_analytics_global.xml new file mode 100644 index 000000000..5b3f55272 --- /dev/null +++ b/common/src/main/res/xml/config_analytics_global.xml @@ -0,0 +1,22 @@ + + + + + warning + false + + diff --git a/common/src/main/res/xml/config_analytics_tracker.xml b/common/src/main/res/xml/config_analytics_tracker.xml index 05f92ab4a..0dc1620eb 100644 --- a/common/src/main/res/xml/config_analytics_tracker.xml +++ b/common/src/main/res/xml/config_analytics_tracker.xml @@ -1,11 +1,11 @@ + + diff --git a/common/src/main/res/xml/remote_config_defaults.xml b/common/src/main/res/xml/remote_config_defaults.xml index dfc985a53..d62bef5f2 100644 --- a/common/src/main/res/xml/remote_config_defaults.xml +++ b/common/src/main/res/xml/remote_config_defaults.xml @@ -1,12 +1,12 @@ + + + SantaArrival + 1545778800 + + + UnlockGumball + 0 + + + UnlockMemory + 0 + + + UnlockJetpack + 0 + + + UnlockRocket + 0 + + + UnlockDancer + 0 + + + UnlockRocket + 0 + + + UnlockVideo1 + 0 + + + UnlockVideo15 + 1544832000000 + + + UnlockVideo23 + 1545523200000 + CityQuizRoundCount 5 @@ -140,4 +248,102 @@ SwimmingObstacleDensity 0.10 + + WebAirportDisabled + true + + + WebBoatloadDisabled + true + + + WebClausdrawsDisabled + true + + + WebCodeboogieDisabled + true + + + WebCodelabDisabled + true + + + WebElfskiDisabled + true + + + + WebGumballDisabled + true + + + WebJambandDisabled + true + + + WebJetpackDisabled + true + + + WebPenguindashDisabled + true + + + WebPresentbounceDisabled + true + + + WebPresentdropDisabled + true + + + WebRacerDisabled + true + + + WebRunnerDisabled + true + + + WebSantasearchDisabled + true + + + WebSantaselfieDisabled + true + + + WebSantasnapDisabled + true + + + WebSeasonofgivingDisabled + true + + WebSnowballDisabled + true + + + WebSnowflakeDisabled + true + + + WebSpeedsketchDisabled + true + + + WebWrapbattleDisabled + true + + + WebElfMakerDisabled + true + + + StickersConfigUrl + + https://firebasestorage.googleapis.com/v0/b/santa-tracker-firebase.appspot.com/o/stickers%2Fstickers.json?alt=media&token=aa113740-b356-4012-9a22-179c7650ce72 + + diff --git a/common/src/release/res/xml/config_analytics_global.xml b/common/src/release/res/xml/config_analytics_global.xml new file mode 100644 index 000000000..5b3f55272 --- /dev/null +++ b/common/src/release/res/xml/config_analytics_global.xml @@ -0,0 +1,22 @@ + + + + + warning + false + + diff --git a/dasherdancer/.gitignore b/dasherdancer/.gitignore deleted file mode 100644 index 796b96d1c..000000000 --- a/dasherdancer/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/dasherdancer/build.gradle b/dasherdancer/build.gradle index 1fec3f3fd..aa3310d25 100644 --- a/dasherdancer/build.gradle +++ b/dasherdancer/build.gradle @@ -1,4 +1,21 @@ -apply plugin: 'com.android.library' +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://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. + */ + +apply plugin: 'com.android.dynamic-feature' +apply plugin: 'kotlin-android' android { compileSdkVersion rootProject.ext.compileSdkVersion @@ -11,7 +28,5 @@ android { } dependencies { - compile project(':common') - compile rootProject.ext.supportV4 - compile rootProject.ext.seismic + api project(':santa-tracker') } diff --git a/dasherdancer/proguard-rules.pro b/dasherdancer/proguard-rules.pro deleted file mode 100644 index 67abb7535..000000000 --- a/dasherdancer/proguard-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /Users/rpetit/android_sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# 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 *; -#} diff --git a/dasherdancer/src/main/AndroidManifest.xml b/dasherdancer/src/main/AndroidManifest.xml index 88cbea013..1c9120f83 100644 --- a/dasherdancer/src/main/AndroidManifest.xml +++ b/dasherdancer/src/main/AndroidManifest.xml @@ -1,11 +1,11 @@ + xmlns:dist="http://schemas.android.com/apk/distribution" + xmlns:tools="http://schemas.android.com/tools" + package="com.google.android.apps.santatracker.dasherdancer" + tools:ignore="MissingLeanbackLauncher"> + + + + + + + + + + + + + android:label="@string/app_name_santa"> + android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" > + + android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" /> diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Character.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Character.java deleted file mode 100644 index 8f3a7a403..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Character.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -import android.support.annotation.RawRes; - -/** - * Interface for characters. To create a character, implement this interface. The animationKey passed - * to this interface's methods is called with one of the ANIM_* static values defined in this interface. - * Generally implementing classes should use an array to store their durations, frame indices arrays, - * and frame arrays. - */ -public interface Character { - - int ANIM_IDLE = 0; - int ANIM_TAP = 1; - int ANIM_SHAKE = 2; - int ANIM_SWIPE_DOWN = 3; - int ANIM_SWIPE_UP = 4; - int ANIM_SWIPE_LEFT = 5; - int ANIM_SWIPE_RIGHT = 6; - int ANIM_PINCH_IN = 7; - int ANIM_PINCH_OUT = 8; - - int[] ALL_ANIMS = new int[]{ - ANIM_IDLE, ANIM_TAP, ANIM_SHAKE, - ANIM_SWIPE_DOWN, ANIM_SWIPE_UP, ANIM_SWIPE_LEFT, ANIM_SWIPE_RIGHT, - ANIM_PINCH_IN, ANIM_PINCH_OUT - }; - - long getDuration(int animationKey); - - int[] getFrameIndices(int animationKey); - - int[] getFrames(int animationKey); - - @RawRes - int getSoundResource(int animationid); - - // The initial release used getClass().getSimpleName(), which was ProGuarded out. - // These strings are the pro-guarded names from the released version. In future releases - // these should be changed to the names of the characters. - String getCharacterName(); -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Character.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Character.kt new file mode 100644 index 000000000..e89990cf0 --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Character.kt @@ -0,0 +1,57 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +import androidx.annotation.RawRes + +/** + * Interface for characters. To create a character, implement this interface. The animationKey + * passed to this interface's methods is called with one of the ANIM_* static values defined in this + * interface. Generally implementing classes should use an array to store their durations, frame + * indices arrays, and frame arrays. + */ +interface Character { + + // The initial release used getClass().getSimpleName(), which was ProGuarded out. + // These strings are the pro-guarded names from the released version. In future releases + // these should be changed to the names of the characters. + val characterName: String + + fun getDuration(animationKey: Int): Long + + fun getFrameIndices(animationKey: Int): IntArray + + fun getFrames(animationKey: Int): IntArray + + @RawRes + fun getSoundResource(animationid: Int): Int + + companion object { + + const val ANIM_IDLE = 0 + const val ANIM_TAP = 1 + const val ANIM_SHAKE = 2 + const val ANIM_SWIPE_DOWN = 3 + const val ANIM_SWIPE_UP = 4 + const val ANIM_SWIPE_LEFT = 5 + const val ANIM_SWIPE_RIGHT = 6 + const val ANIM_PINCH_IN = 7 + const val ANIM_PINCH_OUT = 8 + + val ALL_ANIMS = intArrayOf(ANIM_IDLE, ANIM_TAP, ANIM_SHAKE, ANIM_SWIPE_DOWN, ANIM_SWIPE_UP, ANIM_SWIPE_LEFT, ANIM_SWIPE_RIGHT, ANIM_PINCH_IN, ANIM_PINCH_OUT) + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterActivity.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterActivity.java deleted file mode 100644 index b41fd8b61..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterActivity.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -import com.google.android.apps.santatracker.util.AnalyticsManager; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; - -public class CharacterActivity extends Activity { - - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_character); - - AnalyticsManager.initializeAnalyticsTracker(this); - AnalyticsManager.sendScreenView(R.string.analytics_screen_dasher_charselect); - } - - public void onCharacterClick(View view) { - int characterId = -1; - if (view.getId() == R.id.btn_character_santa) { - characterId = DasherDancerActivity.CHARACTER_ID_SANTA; - } else if (view.getId() == R.id.btn_character_elf) { - characterId = DasherDancerActivity.CHARACTER_ID_ELF; - } else if (view.getId() == R.id.btn_character_reindeer) { - characterId = DasherDancerActivity.CHARACTER_ID_REINDEER; - } else if (view.getId() == R.id.btn_character_snowman) { - characterId = DasherDancerActivity.CHARACTER_ID_SNOWMAN; - } - Intent result = new Intent(); - result.putExtra(DasherDancerActivity.EXTRA_CHARACTER_ID, characterId); - setResult(Activity.RESULT_OK, result); - finish(); - } - -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterActivity.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterActivity.kt new file mode 100644 index 000000000..3d3dc1416 --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterActivity.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.view.View +import com.google.android.apps.santatracker.util.MeasurementManager +import com.google.firebase.analytics.FirebaseAnalytics + +class CharacterActivity : Activity() { + + public override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_character) + + MeasurementManager.recordScreenView( + FirebaseAnalytics.getInstance(this), + getString(R.string.analytics_screen_dasher_charselect)) + } + + fun onCharacterClick(view: View) { + var characterId = -1 + when (view.id) { + R.id.btn_character_santa -> characterId = DasherDancerActivity.CHARACTER_ID_SANTA + R.id.btn_character_elf -> characterId = DasherDancerActivity.CHARACTER_ID_ELF + R.id.btn_character_reindeer -> characterId = DasherDancerActivity.CHARACTER_ID_REINDEER + R.id.btn_character_snowman -> characterId = DasherDancerActivity.CHARACTER_ID_SNOWMAN + } + val result = Intent() + result.putExtra(DasherDancerActivity.EXTRA_CHARACTER_ID, characterId) + setResult(Activity.RESULT_OK, result) + finish() + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterAdapter.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterAdapter.java deleted file mode 100644 index 7705b5080..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterAdapter.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - - -import android.support.v4.view.PagerAdapter; -import android.util.Log; -import android.util.SparseArray; -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.widget.ImageView; - -import java.lang.*; - -public class CharacterAdapter extends PagerAdapter { - - private static final String LOG_TAG = CharacterAdapter.class.getSimpleName(); - - private static final int[] mBackgrounds = new int[]{ - R.color.bg_blue,R.color.bg_pink,R.color.bg_purple, - R.color.bg_green,R.color.bg_red,R.color.bg_orange, - R.color.bg_yellow - }; - - private SparseArray mViews; - private Character[] mCharacters; - - public CharacterAdapter(Character[] characters) { - mCharacters = characters; - mViews = new SparseArray(); - } - - @Override - public void destroyItem(ViewGroup container, int position, Object object) { - if (position < mCharacters.length) { - View view = mViews.get(position); - if ((view == null) && (object != null)) { - try { - view = (ImageView)object; - } catch (ClassCastException e) { - Log.e(LOG_TAG, "Wrong type of object supplied to destroyItem."); - } - } - - if (view != null) { - container.removeView(view); - } - - mViews.remove(position); - } - } - - @Override - public int getCount() { - if(mCharacters != null) { - return mCharacters.length; - } - return 0; - } - - @Override - public Object instantiateItem(ViewGroup container, int position) { - ImageView view = null; - - if (position < mCharacters.length) { - if (mViews.get(position) != null) { - view = mViews.get(position); - } else { - view = new FrameAnimationView(container.getContext()); - view.setScaleType(ImageView.ScaleType.MATRIX); - //Load the first idle frame. - view.setBackgroundResource(mBackgrounds[position]); - view.setTag(position); - mViews.put(position, view); - } - - LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); - container.addView(view, lp); - } - - return view; - } - - @Override - public boolean isViewFromObject(View arg0, Object arg1) { - return arg0 == arg1; - } - -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterAdapter.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterAdapter.kt new file mode 100644 index 000000000..33daa7265 --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/CharacterAdapter.kt @@ -0,0 +1,86 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +import android.util.SparseArray +import android.view.View +import android.view.ViewGroup +import android.view.ViewGroup.LayoutParams +import android.widget.ImageView +import androidx.viewpager.widget.PagerAdapter +import com.google.android.apps.santatracker.util.SantaLog + +class CharacterAdapter(private val characters: Array) : PagerAdapter() { + + private val views: SparseArray = SparseArray() + + override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { + if (position < characters.size) { + var view: View? = views.get(position) + if (view == null) { + try { + view = `object` as ImageView + } catch (e: ClassCastException) { + SantaLog.e(LOG_TAG, "Wrong type of object supplied to destroyItem.") + } + } + + if (view != null) { + container.removeView(view) + } + + views.remove(position) + } + } + + override fun getCount(): Int { + return characters.size + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + var view: ImageView? = null + + if (position < characters.size) { + if (views.get(position) != null) { + view = views.get(position) + } else { + view = FrameAnimationView(container.context) + view.scaleType = ImageView.ScaleType.MATRIX + // Load the first idle frame. + view.setBackgroundResource(mBackgrounds[position]) + view.tag = position + views.put(position, view) + } + + val lp = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT) + container.addView(view, lp) + } + + return view!! + } + + override fun isViewFromObject(arg0: View, arg1: Any): Boolean { + return arg0 === arg1 + } + + companion object { + + private val LOG_TAG = CharacterAdapter::class.java.simpleName + + private val mBackgrounds = intArrayOf(R.color.bg_blue, R.color.bg_pink, R.color.bg_purple, R.color.bg_green, R.color.bg_red, R.color.bg_orange, R.color.bg_yellow) + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/DasherDancerActivity.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/DasherDancerActivity.java deleted file mode 100644 index d91d117a5..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/DasherDancerActivity.java +++ /dev/null @@ -1,961 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -import android.animation.Animator; -import android.animation.Animator.AnimatorListener; -import android.animation.ObjectAnimator; -import android.app.ActivityManager; -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Point; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; -import android.media.AudioManager; -import android.media.SoundPool; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.support.annotation.DrawableRes; -import android.support.annotation.Nullable; -import android.support.v4.app.FragmentActivity; -import android.support.v4.view.ViewPager.OnPageChangeListener; -import android.util.Log; -import android.util.LruCache; -import android.view.GestureDetector.OnGestureListener; -import android.view.MotionEvent; -import android.view.ScaleGestureDetector; -import android.view.ScaleGestureDetector.OnScaleGestureListener; -import android.view.View; -import android.widget.ImageView; - -import com.google.android.apps.santatracker.games.PlayGamesFragment; -import com.google.android.apps.santatracker.games.SignInListener; -import com.google.android.apps.santatracker.util.AnalyticsManager; -import com.google.android.apps.santatracker.util.ImmersiveModeHelper; -import com.google.android.apps.santatracker.util.MeasurementManager; -import com.google.android.gms.games.Games; -import com.google.firebase.analytics.FirebaseAnalytics; -import com.squareup.seismic.ShakeDetector; -import com.squareup.seismic.ShakeDetector.Listener; - -import java.util.HashSet; - -public class DasherDancerActivity extends FragmentActivity implements - OnGestureListener, OnScaleGestureListener, Handler.Callback, Listener, SensorEventListener, - AnimatorListener, OnPageChangeListener, SignInListener { - - private static final String TAG = "DasherDancer"; - - /** - * Extra key used to pass back the character id that should be selected, set by the CharacterActivity. - */ - public static final String EXTRA_CHARACTER_ID = "extra_character_id"; - - //Character ids, which are also indices in the sCharacters array. - public static final int CHARACTER_ID_SANTA = 0; - public static final int CHARACTER_ID_ELF = 1; - public static final int CHARACTER_ID_REINDEER = 2; - public static final int CHARACTER_ID_SNOWMAN = 3; - - /** Number of times to try downsampling before giving up **/ - public static final int MAX_DOWNSAMPLING_ATTEMPTS = 3; - - /** - * Request code for calling CharacterActivity for result. - */ - private static final int sCharacterRequestCode = 1; - - /** - * Our array of playable characters. Add more characters here an create new CHARACTER_ID_* static variables. - */ - private static final Character[] sCharacters = new Character[]{ - new Santa(), new Elf(), new Reindeer(), new Snowman() - }; - - private boolean[] mCharacterInitialized = new boolean[] { - false, false, false, false - }; - - private int[][] mSoundIds = new int[][]{ - {-1,-1,-1,-1,-1,-1,-1,-1,-1}, //santa - {-1,-1,-1,-1,-1,-1,-1,-1,-1}, //elf - {-1,-1,-1,-1,-1,-1,-1,-1,-1}, //reindeer - {-1,-1,-1,-1,-1,-1,-1,-1,-1} //snowman - }; - - private LruCache mMemoryCache; - private NoSwipeViewPager mPager; - private Handler mHandler; - private ShakeDetector mDetector; - private LoadBitmapsTask mLoadBitmapsTask; - private LoadCharacterResourcesTask mLoadCharacterTask; - private ObjectAnimator mAnimator; - private boolean mPlayingRest = false; - private boolean mAnimCanceled = false; - private boolean mAnimPlaying = false; - private boolean mScaling = false; - private boolean mInitialized = false; - private SoundPool mSoundPool; - private int mSoundId = -1; - private boolean mCanTouch = false; - private ObjectAnimator mProgressAnimator; - private ActivityManager mActivityManager; - private FirebaseAnalytics mMeasurement; - - // Bitmap downsampling options - private BitmapFactory.Options mOptions; - private int mDownSamplingAttempts; - - private PlayGamesFragment mGamesFragment; - - // For achievements - private HashSet[] mAchievements; - - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_dasher_dancer); - - mMeasurement = FirebaseAnalytics.getInstance(this); - MeasurementManager.recordScreenView(mMeasurement, - getString(R.string.analytics_screen_dasher)); - - AnalyticsManager.initializeAnalyticsTracker(this); - AnalyticsManager.sendScreenView(R.string.analytics_screen_dasher); - - mActivityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); - - mMemoryCache = new LruCache(240) { - protected void entryRemoved(boolean evicted, Integer key, Drawable oldValue, Drawable newValue) { - if ((oldValue != null) && (oldValue != newValue)) { - if (oldValue instanceof InsetDrawableCompat){ - Drawable drawable = ((InsetDrawableCompat) oldValue).getDrawable(); - if (drawable instanceof BitmapDrawable){ - ((BitmapDrawable) drawable).getBitmap().recycle(); - } - } - } - } - }; - - // Initialize default Bitmap options - mOptions = new BitmapFactory.Options(); - mOptions.inPreferredConfig = Bitmap.Config.RGB_565; - mOptions.inSampleSize = getResources().getInteger(R.integer.res); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - if (mActivityManager.isLowRamDevice()) { - Log.w(TAG, "isLowRamDevice: downsampling default bitmap options"); - mOptions.inSampleSize *= 2; - } - } - - CharacterAdapter adapter = new CharacterAdapter(sCharacters); - mPager = (NoSwipeViewPager) findViewById(R.id.character_pager); - mPager.setAdapter(adapter); - mPager.setGestureDetectorListeners(this, this, this); - mPager.setOnPageChangeListener(this); - - mHandler = new Handler(getMainLooper(), this); - - mDetector = new ShakeDetector(this); - - mSoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0); - - mAchievements = new HashSet[4]; - mAchievements[0] = new HashSet(); - mAchievements[1] = new HashSet(); - mAchievements[2] = new HashSet(); - mAchievements[3] = new HashSet(); - - mProgressAnimator = ObjectAnimator.ofFloat(findViewById(R.id.progress),"rotation",360f); - mProgressAnimator.setDuration(4000); - mProgressAnimator.start(); - - mGamesFragment = PlayGamesFragment.getInstance(this, this); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - ImmersiveModeHelper.setImmersiveSticky(getWindow()); - ImmersiveModeHelper.installSystemUiVisibilityChangeListener(getWindow()); - } - } - - @Override - public void onResume() { - super.onResume(); - SensorManager manager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); - Sensor accel = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); - manager.registerListener(this, accel, SensorManager.SENSOR_DELAY_NORMAL); - mDetector.start(manager); - - if(mInitialized) { - //Start the animation for the first character. - mPager.postDelayed(new Runnable() { - - @Override - public void run() { - loadAnimation(true, - sCharacters[mPager.getCurrentItem()].getDuration(Character.ANIM_IDLE), - sCharacters[mPager.getCurrentItem()].getFrameIndices(Character.ANIM_IDLE), - sCharacters[mPager.getCurrentItem()].getFrames(Character.ANIM_IDLE)); - } - - }, 300); - } - else { - if(mLoadCharacterTask != null) { - mLoadCharacterTask.cancel(true); - } - - mLoadCharacterTask = new LoadCharacterResourcesTask(mPager.getCurrentItem()); - mLoadCharacterTask.execute(); - } - } - - @Override - public void onPause() { - super.onPause(); - - mDetector.stop(); - - SensorManager manager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); - manager.unregisterListener(this);; - - if(mAnimator != null) { - mAnimator.cancel(); - } - FrameAnimationView character = (FrameAnimationView) mPager.findViewWithTag(mPager.getCurrentItem()); - if (character != null) { - character.setImageDrawable(null); - } - } - - /** - * Finishes the activity. - * @param view - */ - public void onNavClick(View view) { - if(mLoadBitmapsTask != null) { - mLoadBitmapsTask.cancel(true); - } - if(mAnimator != null) { - mAnimator.cancel(); - } - finish(); - } - - /** - * Starts the CharacterActivity for result. That result is an integer that corresponds to - * the index of an entry in sCharacters. - * @param view - */ - public void onChangeClick(View view) { - if(mLoadBitmapsTask != null) { - mLoadBitmapsTask.cancel(true); - } - if(mLoadCharacterTask != null) { - mLoadCharacterTask.cancel(true); - } - if(mAnimator != null) { - mAnimator.cancel(); - } - FrameAnimationView character = (FrameAnimationView) mPager.findViewWithTag(mPager.getCurrentItem()); - character.setImageDrawable(null); - character.setFrames(null, null); - character.invalidate(); - Intent intent = new Intent(this, CharacterActivity.class); - startActivityForResult(intent, sCharacterRequestCode); - } - - /** - * Moves the view pager to the next character to the left of the current position. - */ - public void onLeftClick(View view) { - final int currentPosition = mPager.getCurrentItem(); - if(currentPosition != 0) { - characterSelectedHelper(currentPosition - 1, true); - } - } - - /** - * Moves the view pager to the next character to the right of the current position. - */ - public void onRightClick(View view) { - final int currentPosition = mPager.getCurrentItem(); - if(currentPosition != mPager.getAdapter().getCount()-1) { - characterSelectedHelper(currentPosition + 1, true); - } - } - - @Override - public boolean onDown(MotionEvent e) { - return true; - } - - @Override - public void onShowPress(MotionEvent e) { - //Ignore this. - } - - @Override - public boolean onSingleTapUp(MotionEvent e) { - if(!mAnimPlaying) { - mSoundId = mSoundIds[mPager.getCurrentItem()][Character.ANIM_TAP]; - } - - AnalyticsManager.sendEvent(getString(R.string.analytics_category_interaction), - sCharacters[mPager.getCurrentItem()].getCharacterName(), - getString(R.string.analytics_action_tap)); - - updateGestureAchievements(Character.ANIM_TAP); - loadAnimation(false, - sCharacters[mPager.getCurrentItem()].getDuration(Character.ANIM_TAP), - sCharacters[mPager.getCurrentItem()].getFrameIndices(Character.ANIM_TAP), - sCharacters[mPager.getCurrentItem()].getFrames(Character.ANIM_TAP)); - return true; - } - - @Override - public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, - float distanceY) { - return false; - } - - @Override - public void onLongPress(MotionEvent e) { - //Ignore - } - - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, - float velocityY) { - float xDelta = Math.abs(e1.getX() - e2.getX()); - float yDelta = Math.abs(e1.getY() - e2.getY()); - if(xDelta > yDelta) { - //Moving side to side. - if(e1.getX() > e2.getX()) { - //Moving left. - if(!mAnimPlaying) { - mSoundId = mSoundIds[mPager.getCurrentItem()][Character.ANIM_SWIPE_LEFT]; - } - AnalyticsManager.sendEvent(getString(R.string.analytics_category_interaction), - sCharacters[mPager.getCurrentItem()].getCharacterName(), - getString(R.string.analytics_action_swipe_left)); - updateGestureAchievements(Character.ANIM_SWIPE_LEFT); - loadAnimation(false, - sCharacters[mPager.getCurrentItem()].getDuration(Character.ANIM_SWIPE_LEFT), - sCharacters[mPager.getCurrentItem()].getFrameIndices(Character.ANIM_SWIPE_LEFT), - sCharacters[mPager.getCurrentItem()].getFrames(Character.ANIM_SWIPE_LEFT)); - } - else if(e2.getX() > e1.getX()) { - //Moving right. - if(!mAnimPlaying) { - mSoundId = mSoundIds[mPager.getCurrentItem()][Character.ANIM_SWIPE_RIGHT]; - } - AnalyticsManager.sendEvent(getString(R.string.analytics_category_interaction), - sCharacters[mPager.getCurrentItem()].getCharacterName(), - getString(R.string.analytics_action_swipe_right)); - updateGestureAchievements(Character.ANIM_SWIPE_RIGHT); - loadAnimation(false, - sCharacters[mPager.getCurrentItem()].getDuration(Character.ANIM_SWIPE_RIGHT), - sCharacters[mPager.getCurrentItem()].getFrameIndices(Character.ANIM_SWIPE_RIGHT), - sCharacters[mPager.getCurrentItem()].getFrames(Character.ANIM_SWIPE_RIGHT)); - } - } - else { - //We are moving up and down - if(e1.getY() > e2.getY()) { - //Moving up. - if(!mAnimPlaying) { - mSoundId = mSoundIds[mPager.getCurrentItem()][Character.ANIM_SWIPE_UP]; - } - AnalyticsManager.sendEvent(getString(R.string.analytics_category_interaction), - sCharacters[mPager.getCurrentItem()].getCharacterName(), - getString(R.string.analytics_action_swipe_up)); - updateGestureAchievements(Character.ANIM_SWIPE_UP); - loadAnimation(false, - sCharacters[mPager.getCurrentItem()].getDuration(Character.ANIM_SWIPE_UP), - sCharacters[mPager.getCurrentItem()].getFrameIndices(Character.ANIM_SWIPE_UP), - sCharacters[mPager.getCurrentItem()].getFrames(Character.ANIM_SWIPE_UP)); - } - else if(e2.getY() > e1.getY()) { - //Moving down. - if(!mAnimPlaying) { - mSoundId = mSoundIds[mPager.getCurrentItem()][Character.ANIM_SWIPE_DOWN]; - } - AnalyticsManager.sendEvent(getString(R.string.analytics_category_interaction), - sCharacters[mPager.getCurrentItem()].getCharacterName(), - getString(R.string.analytics_action_swipe_down)); - updateGestureAchievements(Character.ANIM_SWIPE_DOWN); - loadAnimation(false, - sCharacters[mPager.getCurrentItem()].getDuration(Character.ANIM_SWIPE_DOWN), - sCharacters[mPager.getCurrentItem()].getFrameIndices(Character.ANIM_SWIPE_DOWN), - sCharacters[mPager.getCurrentItem()].getFrames(Character.ANIM_SWIPE_DOWN)); - } - } - return false; - } - - @Override - public boolean handleMessage(Message msg) { - loadAnimation(true, - sCharacters[mPager.getCurrentItem()].getDuration(Character.ANIM_IDLE), - sCharacters[mPager.getCurrentItem()].getFrameIndices(Character.ANIM_IDLE), - sCharacters[mPager.getCurrentItem()].getFrames(Character.ANIM_IDLE)); - return true; - } - - @Override - public boolean onScale(ScaleGestureDetector detector) { - - return false; - } - - @Override - public boolean onScaleBegin(ScaleGestureDetector detector) { - mScaling = true; - return true; - } - - @Override - public void onScaleEnd(ScaleGestureDetector detector) { - mScaling = false; - if(detector.getScaleFactor() > 1) { - //Pinch in - if(!mAnimPlaying) { - mSoundId = mSoundIds[mPager.getCurrentItem()][Character.ANIM_PINCH_IN]; - } - AnalyticsManager.sendEvent(getString(R.string.analytics_category_interaction), - sCharacters[mPager.getCurrentItem()].getCharacterName(), - getString(R.string.analytics_action_pinch_in)); - updateGestureAchievements(Character.ANIM_PINCH_IN); - loadAnimation(false, - sCharacters[mPager.getCurrentItem()].getDuration(Character.ANIM_PINCH_IN), - sCharacters[mPager.getCurrentItem()].getFrameIndices(Character.ANIM_PINCH_IN), - sCharacters[mPager.getCurrentItem()].getFrames(Character.ANIM_PINCH_IN)); - } - else if(detector.getScaleFactor() < 1) { - //Pinch out - if(!mAnimPlaying) { - mSoundId = mSoundIds[mPager.getCurrentItem()][Character.ANIM_PINCH_OUT]; - } - AnalyticsManager.sendEvent(getString(R.string.analytics_category_interaction), - sCharacters[mPager.getCurrentItem()].getCharacterName(), - getString(R.string.analytics_action_pinch_out)); - updateGestureAchievements(Character.ANIM_PINCH_OUT); - loadAnimation(false, - sCharacters[mPager.getCurrentItem()].getDuration(Character.ANIM_PINCH_OUT), - sCharacters[mPager.getCurrentItem()].getFrameIndices(Character.ANIM_PINCH_OUT), - sCharacters[mPager.getCurrentItem()].getFrames(Character.ANIM_PINCH_OUT)); - } - } - - @Override - public void onSensorChanged(SensorEvent event) { - //Ignore this. - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - //Ignore this. - } - - @Override - public void hearShake() { - if(!mAnimPlaying) { - mSoundId = mSoundIds[mPager.getCurrentItem()][Character.ANIM_SHAKE]; - } - AnalyticsManager.sendEvent(getString(R.string.analytics_category_interaction), - sCharacters[mPager.getCurrentItem()].getCharacterName(), - getString(R.string.analytics_action_shake)); - updateGestureAchievements(Character.ANIM_SHAKE); - loadAnimation(false, - sCharacters[mPager.getCurrentItem()].getDuration(Character.ANIM_SHAKE), - sCharacters[mPager.getCurrentItem()].getFrameIndices(Character.ANIM_SHAKE), - sCharacters[mPager.getCurrentItem()].getFrames(Character.ANIM_SHAKE)); - } - - /** - * Helper method to load and start animations. Takes care of canceling any ongoing animations, - * and will return without executing anything if mAnimPlaying is true or mScaling is true. - * @param playingRest - * @param animationTime - * @param frameIndices - * @param frameResourceIds - */ - private void loadAnimation(boolean playingRest, long animationTime, int[] frameIndices, int[] frameResourceIds) { - if((!playingRest && (mAnimPlaying || mScaling)) || !mCanTouch) { - return; - } - if(playingRest) { - mAnimPlaying = false; - } - else { - mAnimPlaying = true; - } - mPlayingRest = playingRest; - if(mLoadBitmapsTask != null) { - mLoadBitmapsTask.cancel(true); - mAnimator.cancel(); - } - - mLoadBitmapsTask = new LoadBitmapsTask(animationTime, frameIndices, frameResourceIds); - mLoadBitmapsTask.execute(); - } - - /** - * Load and cache all sounds for a given character. - * @param characterIndex index of the character in the array, like {@link #CHARACTER_ID_SANTA}. - */ - private void loadSoundsForCharacter(int characterIndex) { - for (int animationId : Character.ALL_ANIMS) { - // No need to load sounds twice - if (mSoundIds[characterIndex][animationId] != -1) { - continue; - } - - int soundResource = sCharacters[characterIndex].getSoundResource(animationId); - if (soundResource != -1) { - mSoundIds[characterIndex][animationId] = - mSoundPool.load(this, soundResource, 1); - } - } - } - - @Override - public void onSignInFailed() { - - } - - @Override - public void onSignInSucceeded() { - - } - - @Nullable - private Drawable tryLoadBitmap(@DrawableRes int resourceId) throws BitmapLoadException { - try { - Bitmap bmp = BitmapFactory.decodeResource(getResources(), resourceId, mOptions); - BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bmp); - Point p = ResourceOffsets.getOffsets(resourceId); - int x = Math.round(p.x / (float)mOptions.inSampleSize); - int y = Math.round(p.y / (float)mOptions.inSampleSize); - int w = Math.round(ResourceOffsets.ORIG_SIZE.x / (float)mOptions.inSampleSize); - int h = Math.round(ResourceOffsets.ORIG_SIZE.y / (float)mOptions.inSampleSize); - InsetDrawableCompat insetDrawable = new InsetDrawableCompat(bitmapDrawable, - x, - y, - w - bmp.getWidth() - x, - h - bmp.getHeight() - y - ); - return insetDrawable; - - } catch (OutOfMemoryError oom) { - Log.w(TAG, "Out of memory error, inSampleSize=" + mOptions.inSampleSize); - if (mDownSamplingAttempts < MAX_DOWNSAMPLING_ATTEMPTS) { - mOptions.inSampleSize *= 2; - mDownSamplingAttempts++; - } - } - - throw new BitmapLoadException("Failed to load resource ID: " + resourceId); - } - - /** - * Load all of the resources for a given Character, then begin playing the "IDLE" animation. - * for that character. - */ - private class LoadCharacterResourcesTask extends RetryableAsyncTask { - - private Character mCharacter; - private int mCharacterIndex; - - LoadCharacterResourcesTask(int characterIndex) { - mCharacter = sCharacters[characterIndex]; - mCharacterIndex = characterIndex; - } - - @Override - protected Void doInBackground(Void... params) { - mCanTouch = false; - //See if we can free up any memory before we allocate some ourselves. - //Request garbage collection. - System.gc(); - - // Load all sounds for this character - loadSoundsForCharacter(mCharacterIndex); - - // Load all animations types for this character - for (int animation : Character.ALL_ANIMS) { - for (int resourceId : mCharacter.getFrames(animation)) { - if (isCancelled()) { - break; - } - - if (mMemoryCache.get(resourceId) == null) { - try { - Drawable bitmap = tryLoadBitmap(resourceId); - mMemoryCache.put(resourceId, bitmap); - } catch (BitmapLoadException e) { - Log.e(TAG, "LoadCharacterResourcesTask: failed", e); - - // Retry the task - return retrySelf(params); - } - - if (isCancelled()) { - // Remove the BMP we just added - // The check and remove should be atomic so we synchronize - // (There could be an evict going on so make sure it's still there... - synchronized(mMemoryCache) { - if (mMemoryCache.get(resourceId) != null) { - mMemoryCache.remove(resourceId); - } - } - } - } - } - } - - return null; - } - - @Override - public void onPostExecute(Void result) { - if(isCancelled()) { - return; - } - - findViewById(R.id.progress).setVisibility(View.GONE); - - Character currentCharacter = sCharacters[mPager.getCurrentItem()]; - Drawable[] frames = new Drawable[currentCharacter.getFrames(Character.ANIM_IDLE).length]; - for(int i=0; i { - - private int[] mFrames; - private int[] mFrameIndices; - private long mDuration; - - public LoadBitmapsTask(long duration, int[] frameIndices, int[] frames) { - mDuration = duration; - mFrameIndices = frameIndices; - mFrames = frames; - } - - @Override - protected Drawable[] doInBackground(Void... params) { - Drawable[] bitmaps = new Drawable[mFrames.length]; - - for(int i = 0; i < mFrames.length; i++) { - if (isCancelled()) { - break; - } - - int id = mFrames[i]; - if(mMemoryCache.get(id) == null) { - try { - bitmaps[i] = tryLoadBitmap(id); - } catch (BitmapLoadException e) { - Log.e(TAG, "LoadBitmapsTask: failed", e); - return retrySelf(params); - } - - mMemoryCache.put(id, bitmaps[i]); - if (isCancelled()) { - synchronized (mMemoryCache) { - if (mMemoryCache.get(id) != null) { - mMemoryCache.remove(id); - } - } - } - } - else { - bitmaps[i] = mMemoryCache.get(mFrames[i]); - } - } - return bitmaps; - } - - @Override - public void onPostExecute(Drawable[] result) { - if(result == null || isCancelled()) { - return; - } - - FrameAnimationView character = (FrameAnimationView) mPager.findViewWithTag(mPager.getCurrentItem()); - character.setFrames(result, mFrameIndices); - if(mAnimator != null) { - mAnimator.cancel(); - } - mAnimator = ObjectAnimator.ofInt(character, "frameIndex", 0, mFrameIndices.length-1); - mAnimator.setDuration(mDuration); - mAnimator.addListener(DasherDancerActivity.this); - mAnimator.start(); - if(mSoundId != -1) { - mSoundPool.play(mSoundId,1f,1f,0,0,1); - mSoundId = -1; - } - } - - @Override - public boolean shouldRetry() { - return (mDownSamplingAttempts < MAX_DOWNSAMPLING_ATTEMPTS); - } - - @Override - public void onPrepareForRetry() { - // Remove all frames this task should load - for (int id : mFrames) { - mMemoryCache.remove(id); - } - - // See if we can now GC - System.gc(); - } - } - - @Override - public void onAnimationStart(Animator animation) { - mAnimCanceled = false; - if(!mPlayingRest) { - mAnimPlaying = true; - } - } - - @Override - public void onAnimationEnd(Animator animation) { - if(mAnimCanceled) { - return; - } - mAnimPlaying = false; //yoda - if(mPlayingRest) { - //We are at rest, so play the idle animation again. - FrameAnimationView character = (FrameAnimationView) mPager.findViewWithTag(mPager.getCurrentItem()); - mAnimator = ObjectAnimator.ofInt( - character, - "frameIndex", - 0, sCharacters[0].getFrameIndices(Character.ANIM_IDLE).length); - mAnimator.setDuration(sCharacters[0].getDuration(Character.ANIM_IDLE)); - mAnimator.addListener(DasherDancerActivity.this); - mAnimator.start(); - } - else { - //We finished an animation triggered by a gesture, so start the idle animation again. - mHandler.sendEmptyMessage(1); - } - } - - @Override - public void onAnimationCancel(Animator animation) { - mAnimCanceled = true; - mAnimPlaying = false; - } - - @Override - public void onAnimationRepeat(Animator animation) { - //Ignore - } - - @Override - public void onPageScrollStateChanged(int arg0) { - //Ignore - } - - @Override - public void onPageScrolled(int arg0, float arg1, int arg2) { - //Ignore - } - - @Override - public void onPageSelected(int arg0) { - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == sCharacterRequestCode) { - if (resultCode == RESULT_OK) { - mInitialized = false; - if (mPager != null) { - FrameAnimationView character = (FrameAnimationView) mPager.findViewWithTag(mPager.getCurrentItem()); - character.setImageDrawable(null); - } - if (data.getExtras() != null) { - //Based on the character id returned, move the view pager to that character. - final int position = data.getExtras().getInt(EXTRA_CHARACTER_ID); - characterSelectedHelper(position, false); - } - } - } - } - - @Override - public void onBackPressed() { - //If we are backing out of the game, clear the cache to free memory. - mSoundPool.release(); - mMemoryCache.evictAll(); - //Request garbage collection. - System.gc(); - super.onBackPressed(); - } - - @Override - public void onDestroy() { - mSoundPool.release(); - mMemoryCache.evictAll(); - //Request garbage collection. - System.gc(); - super.onDestroy(); - } - - private void characterSelectedHelper(final int position, final boolean smoothScroll) { - if(mLoadBitmapsTask != null) { - mLoadBitmapsTask.cancel(true); - } - if(mLoadCharacterTask != null) { - mLoadCharacterTask.cancel(true); - } - if(mAnimator != null) { - mAnimator.cancel(); - } - - if(position == 0) { - findViewById(R.id.left_button).setVisibility(View.GONE); - findViewById(R.id.right_button).setVisibility(View.VISIBLE); - } - else if(position+1 == mPager.getAdapter().getCount()) { - findViewById(R.id.right_button).setVisibility(View.GONE); - findViewById(R.id.left_button).setVisibility(View.VISIBLE); - } - else { - findViewById(R.id.left_button).setVisibility(View.VISIBLE); - findViewById(R.id.right_button).setVisibility(View.VISIBLE); - } - - AnalyticsManager.sendEvent(R.string.analytics_category_character, - R.string.analytics_action_character_change, - sCharacters[position].getCharacterName()); - - mPager.postDelayed(new Runnable() { - @Override - public void run() { - //Show progress - mPager.setCurrentItem(position, smoothScroll); - findViewById(R.id.progress).setVisibility(View.VISIBLE); - mProgressAnimator.start(); - ((ImageView) mPager.findViewWithTag(mPager.getCurrentItem())).setImageDrawable(null); - mMemoryCache.evictAll(); - //Request garbage collection. - System.gc(); - if (mLoadCharacterTask != null) { - mLoadCharacterTask.cancel(true); - } - - mLoadCharacterTask = new LoadCharacterResourcesTask(position); - mLoadCharacterTask.execute(); - } - }, 100); - } - - private void updateGestureAchievements(int type) { - int character = mPager.getCurrentItem(); - mAchievements[character].add(type); - if (mAchievements[character].size() == 8) { - if (mGamesFragment.isSignedIn()) { - if (character == CHARACTER_ID_SANTA) { - Games.Achievements.unlock(mGamesFragment.getGamesApiClient(), getString(R.string.achievement_santas_dance_party)); - MeasurementManager.recordAchievement(mMeasurement, - getString(R.string.achievement_santas_dance_party), - getString(R.string.analytics_screen_dasher)); - } else if (character == CHARACTER_ID_ELF) { - Games.Achievements.unlock(mGamesFragment.getGamesApiClient(), getString(R.string.achievement_elfs_dance_party)); - MeasurementManager.recordAchievement(mMeasurement, - getString(R.string.achievement_elfs_dance_party), - getString(R.string.analytics_screen_dasher)); - } else if (character == CHARACTER_ID_REINDEER) { - Games.Achievements.unlock(mGamesFragment.getGamesApiClient(), getString(R.string.achievement_rudolphs_dance_party)); - MeasurementManager.recordAchievement(mMeasurement, - getString(R.string.achievement_rudolphs_dance_party), - getString(R.string.analytics_screen_dasher)); - } else if (character == CHARACTER_ID_SNOWMAN) { - Games.Achievements.unlock(mGamesFragment.getGamesApiClient(), getString(R.string.achievement_snowmans_dance_party)); - MeasurementManager.recordAchievement(mMeasurement, - getString(R.string.achievement_snowmans_dance_party), - getString(R.string.analytics_screen_dasher)); - } - } - } - } - - /** - * Convenience class for exception when loading Bitmaps. - */ - private static class BitmapLoadException extends Exception { - - public BitmapLoadException(String msg) { - super(msg); - } - - } -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/DasherDancerActivity.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/DasherDancerActivity.kt new file mode 100644 index 000000000..e572fb211 --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/DasherDancerActivity.kt @@ -0,0 +1,929 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +import android.animation.Animator +import android.animation.Animator.AnimatorListener +import android.animation.ObjectAnimator +import android.app.Activity +import android.app.ActivityManager +import android.content.Context +import android.content.Intent +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.Drawable +import android.hardware.Sensor +import android.hardware.SensorEvent +import android.hardware.SensorEventListener +import android.hardware.SensorManager +import android.media.AudioManager +import android.media.SoundPool +import android.os.Bundle +import android.os.Handler +import android.os.Message +import android.util.LruCache +import android.view.GestureDetector.OnGestureListener +import android.view.MotionEvent +import android.view.ScaleGestureDetector +import android.view.ScaleGestureDetector.OnScaleGestureListener +import android.view.View +import android.widget.ImageView +import androidx.annotation.DrawableRes +import androidx.core.view.postDelayed +import androidx.viewpager.widget.ViewPager.OnPageChangeListener +import com.google.android.apps.santatracker.common.CheckableImageButton +import com.google.android.apps.santatracker.data.SantaPreferences +import com.google.android.apps.santatracker.games.OnDemandActivity +import com.google.android.apps.santatracker.games.PlayGamesFragment +import com.google.android.apps.santatracker.games.SignInListener +import com.google.android.apps.santatracker.util.ImmersiveModeHelper +import com.google.android.apps.santatracker.util.MeasurementManager +import com.google.android.apps.santatracker.util.SantaLog +import com.google.android.apps.santatracker.util.play +import com.google.android.gms.games.Games +import com.google.firebase.analytics.FirebaseAnalytics +import com.squareup.seismic.ShakeDetector +import com.squareup.seismic.ShakeDetector.Listener +import java.util.HashSet + +class DasherDancerActivity : OnDemandActivity(), OnGestureListener, OnScaleGestureListener, + Handler.Callback, Listener, SensorEventListener, AnimatorListener, OnPageChangeListener, + SignInListener { + + private val soundIds = arrayOf( + intArrayOf(-1, -1, -1, -1, -1, -1, -1, -1, -1), // santa + intArrayOf(-1, -1, -1, -1, -1, -1, -1, -1, -1), // elf + intArrayOf(-1, -1, -1, -1, -1, -1, -1, -1, -1), // reindeer + intArrayOf(-1, -1, -1, -1, -1, -1, -1, -1, -1) // snowman + ) + + private lateinit var progressAnimator: ObjectAnimator + private lateinit var activityManager: ActivityManager + private lateinit var firebaseAnalytics: FirebaseAnalytics + private lateinit var detector: ShakeDetector + private lateinit var soundPool: SoundPool + private lateinit var memoryCache: LruCache + private lateinit var pager: NoSwipeViewPager + private lateinit var handler: Handler + private var loadBitmapsTask: LoadBitmapsTask? = null + private var loadCharacterTask: LoadCharacterResourcesTask? = null + private var animator: ObjectAnimator? = null + private var playingRest = false + private var animCanceled = false + private var animPlaying = false + private var scaling = false + private var initialized = false + private var soundId = -1 + private var canTouch = false + + private lateinit var muteButton: CheckableImageButton + private lateinit var santaPreferences: SantaPreferences + + // Bitmap downsampling options + private lateinit var options: BitmapFactory.Options + private var downSamplingAttempts: Int = 0 + + private var gamesFragment: PlayGamesFragment? = null + + // For achievements + private lateinit var achievements: Array> + + public override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + setContentView(R.layout.activity_dasher_dancer) + + santaPreferences = SantaPreferences(this) + + muteButton = findViewById(R.id.mute_button) + muteButton.isChecked = !santaPreferences.isMuted + muteButton.setOnClickListener { + // Toggle the state + santaPreferences.toggleMuted() + // Now update the vie + muteButton.isChecked = !santaPreferences.isMuted + onMuteChanged(santaPreferences.isMuted) + } + + firebaseAnalytics = FirebaseAnalytics.getInstance(this) + MeasurementManager.recordScreenView( + firebaseAnalytics, getString(R.string.analytics_screen_dasher)) + + activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager + + memoryCache = object : LruCache(240) { + override fun entryRemoved( + evicted: Boolean, + key: Int?, + oldValue: Drawable?, + newValue: Drawable? + ) { + if (oldValue != null && oldValue !== newValue) { + if (oldValue is InsetDrawableCompat) { + val drawable = oldValue.drawable + if (drawable is BitmapDrawable) { + drawable.bitmap.recycle() + } + } + } + } + } + + // Initialize default Bitmap options + options = BitmapFactory.Options().apply { + inPreferredConfig = Bitmap.Config.RGB_565 + inSampleSize = resources.getInteger(R.integer.res) + if (activityManager.isLowRamDevice) { + SantaLog.w(TAG, "isLowRamDevice: downsampling default bitmap options") + inSampleSize *= 2 + } + } + + val adapter = CharacterAdapter(characters) + pager = findViewById(R.id.character_pager) as NoSwipeViewPager + pager.let { + it.adapter = adapter + it.setGestureDetectorListeners(this, this, this) + it.setOnPageChangeListener(this) + } + + handler = Handler(mainLooper, this) + detector = ShakeDetector(this) + soundPool = SoundPool(4, AudioManager.STREAM_MUSIC, 0) + achievements = arrayOf(HashSet(), HashSet(), HashSet(), HashSet()) + progressAnimator = + ObjectAnimator.ofFloat(findViewById(R.id.progress), "rotation", 360f).apply { + duration = 4000 + start() + } + gamesFragment = PlayGamesFragment.getInstance(this, this) + ImmersiveModeHelper.setImmersiveSticky(window) + ImmersiveModeHelper.installSystemUiVisibilityChangeListener(window) + } + + public override fun onResume() { + super.onResume() + val manager = getSystemService(Context.SENSOR_SERVICE) as SensorManager + val accel = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) + manager.registerListener(this, accel, SensorManager.SENSOR_DELAY_NORMAL) + detector.start(manager) + + if (initialized) { + // Start the animation for the first character. + pager.postDelayed(300) { + loadAnimation(true, + characters[pager.currentItem].getDuration(Character.ANIM_IDLE), + characters[pager.currentItem].getFrameIndices(Character.ANIM_IDLE), + characters[pager.currentItem].getFrames(Character.ANIM_IDLE)) + } + } else { + loadCharacterTask?.cancel(true) + loadCharacterTask = LoadCharacterResourcesTask(pager.currentItem) + loadCharacterTask?.execute() + } + } + + public override fun onPause() { + super.onPause() + + detector.stop() + + val manager = getSystemService(Context.SENSOR_SERVICE) as SensorManager + manager.unregisterListener(this) + + animator?.cancel() + val character = pager.findViewWithTag(pager.currentItem) + character?.setImageDrawable(null) + } + + /** + * Finishes the activity. + * + * @param view + */ + fun onNavClick(view: View) { + loadBitmapsTask?.cancel(true) + animator?.cancel() + finish() + } + + /** + * Starts the CharacterActivity for result. That result is an integer that corresponds to the + * index of an entry in characters. + * + * @param view + */ + fun onChangeClick(view: View) { + loadBitmapsTask?.cancel(true) + loadCharacterTask?.cancel(true) + animator?.cancel() + val character = pager.findViewWithTag(pager.currentItem) + character.setImageDrawable(null) + character.setFrames(null, null) + character.invalidate() + val intent = Intent(this, CharacterActivity::class.java) + startActivityForResult(intent, sCharacterRequestCode) + } + + /** Moves the view pager to the next character to the left of the current position. */ + fun onLeftClick(view: View) { + val currentPosition = pager.currentItem + if (currentPosition != 0) { + characterSelectedHelper(currentPosition - 1, true) + } + } + + /** Moves the view pager to the next character to the right of the current position. */ + fun onRightClick(view: View) { + val currentPosition = pager.currentItem + if (currentPosition != pager.adapter!!.count - 1) { + characterSelectedHelper(currentPosition + 1, true) + } + } + + override fun onDown(e: MotionEvent): Boolean { + return true + } + + override fun onShowPress(e: MotionEvent) { + // Ignore this. + } + + override fun onSingleTapUp(e: MotionEvent): Boolean { + if (!animPlaying) { + soundId = soundIds[pager.currentItem][Character.ANIM_TAP] + } + + MeasurementManager.recordCustomEvent( + firebaseAnalytics, + getString(R.string.analytics_category_interaction), + characters[pager.currentItem].characterName, + getString(R.string.analytics_action_tap)) + + updateGestureAchievements(Character.ANIM_TAP) + loadAnimation( + false, + characters[pager.currentItem].getDuration(Character.ANIM_TAP), + characters[pager.currentItem].getFrameIndices(Character.ANIM_TAP), + characters[pager.currentItem].getFrames(Character.ANIM_TAP)) + return true + } + + override fun onScroll( + e1: MotionEvent, + e2: MotionEvent, + distanceX: Float, + distanceY: Float + ): Boolean { + return false + } + + override fun onLongPress(e: MotionEvent) { + // Ignore + } + + override fun onFling( + e1: MotionEvent, + e2: MotionEvent, + velocityX: Float, + velocityY: Float + ): Boolean { + val xDelta = Math.abs(e1.x - e2.x) + val yDelta = Math.abs(e1.y - e2.y) + if (xDelta > yDelta) { + // Moving side to side. + if (e1.x > e2.x) { + // Moving left. + if (!animPlaying) { + soundId = soundIds[pager.currentItem][Character.ANIM_SWIPE_LEFT] + } + MeasurementManager.recordCustomEvent( + firebaseAnalytics, + getString(R.string.analytics_category_interaction), + characters[pager.currentItem].characterName, + getString(R.string.analytics_action_swipe_left)) + updateGestureAchievements(Character.ANIM_SWIPE_LEFT) + loadAnimation( + false, + characters[pager.currentItem].getDuration(Character.ANIM_SWIPE_LEFT), + characters[pager.currentItem].getFrameIndices( + Character.ANIM_SWIPE_LEFT), + characters[pager.currentItem].getFrames(Character.ANIM_SWIPE_LEFT)) + } else if (e2.x > e1.x) { + // Moving right. + if (!animPlaying) { + soundId = soundIds[pager.currentItem][Character.ANIM_SWIPE_RIGHT] + } + MeasurementManager.recordCustomEvent( + firebaseAnalytics, + getString(R.string.analytics_category_interaction), + characters[pager.currentItem].characterName, + getString(R.string.analytics_action_swipe_right)) + updateGestureAchievements(Character.ANIM_SWIPE_RIGHT) + loadAnimation( + false, + characters[pager.currentItem].getDuration( + Character.ANIM_SWIPE_RIGHT), + characters[pager.currentItem].getFrameIndices( + Character.ANIM_SWIPE_RIGHT), + characters[pager.currentItem].getFrames(Character.ANIM_SWIPE_RIGHT)) + } + } else { + // We are moving up and down + if (e1.y > e2.y) { + // Moving up. + if (!animPlaying) { + soundId = soundIds[pager.currentItem][Character.ANIM_SWIPE_UP] + } + MeasurementManager.recordCustomEvent( + firebaseAnalytics, + getString(R.string.analytics_category_interaction), + characters[pager.currentItem].characterName, + getString(R.string.analytics_action_swipe_up)) + updateGestureAchievements(Character.ANIM_SWIPE_UP) + loadAnimation( + false, + characters[pager.currentItem].getDuration(Character.ANIM_SWIPE_UP), + characters[pager.currentItem].getFrameIndices( + Character.ANIM_SWIPE_UP), + characters[pager.currentItem].getFrames(Character.ANIM_SWIPE_UP)) + } else if (e2.y > e1.y) { + // Moving down. + if (!animPlaying) { + soundId = soundIds[pager.currentItem][Character.ANIM_SWIPE_DOWN] + } + MeasurementManager.recordCustomEvent( + firebaseAnalytics, + getString(R.string.analytics_category_interaction), + characters[pager.currentItem].characterName, + getString(R.string.analytics_action_swipe_down)) + updateGestureAchievements(Character.ANIM_SWIPE_DOWN) + loadAnimation( + false, + characters[pager.currentItem].getDuration(Character.ANIM_SWIPE_DOWN), + characters[pager.currentItem].getFrameIndices( + Character.ANIM_SWIPE_DOWN), + characters[pager.currentItem].getFrames(Character.ANIM_SWIPE_DOWN)) + } + } + return false + } + + override fun handleMessage(msg: Message): Boolean { + loadAnimation( + true, + characters[pager.currentItem].getDuration(Character.ANIM_IDLE), + characters[pager.currentItem].getFrameIndices(Character.ANIM_IDLE), + characters[pager.currentItem].getFrames(Character.ANIM_IDLE)) + return true + } + + override fun onScale(detector: ScaleGestureDetector): Boolean { + + return false + } + + override fun onScaleBegin(detector: ScaleGestureDetector): Boolean { + scaling = true + return true + } + + override fun onScaleEnd(detector: ScaleGestureDetector) { + scaling = false + if (detector.scaleFactor > 1) { + // Pinch in + if (!animPlaying) { + soundId = soundIds[pager.currentItem][Character.ANIM_PINCH_IN] + } + MeasurementManager.recordCustomEvent( + firebaseAnalytics, + getString(R.string.analytics_category_interaction), + characters[pager.currentItem].characterName, + getString(R.string.analytics_action_pinch_in)) + updateGestureAchievements(Character.ANIM_PINCH_IN) + loadAnimation( + false, + characters[pager.currentItem].getDuration(Character.ANIM_PINCH_IN), + characters[pager.currentItem].getFrameIndices(Character.ANIM_PINCH_IN), + characters[pager.currentItem].getFrames(Character.ANIM_PINCH_IN)) + } else if (detector.scaleFactor < 1) { + // Pinch out + if (!animPlaying) { + soundId = soundIds[pager.currentItem][Character.ANIM_PINCH_OUT] + } + MeasurementManager.recordCustomEvent( + firebaseAnalytics, + getString(R.string.analytics_category_interaction), + characters[pager.currentItem].characterName, + getString(R.string.analytics_action_pinch_out)) + updateGestureAchievements(Character.ANIM_PINCH_OUT) + loadAnimation( + false, + characters[pager.currentItem].getDuration(Character.ANIM_PINCH_OUT), + characters[pager.currentItem].getFrameIndices(Character.ANIM_PINCH_OUT), + characters[pager.currentItem].getFrames(Character.ANIM_PINCH_OUT)) + } + } + + override fun onSensorChanged(event: SensorEvent) { + // Ignore this. + } + + override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) { + // Ignore this. + } + + override fun hearShake() { + if (!animPlaying) { + soundId = soundIds[pager.currentItem][Character.ANIM_SHAKE] + } + MeasurementManager.recordCustomEvent( + firebaseAnalytics, + getString(R.string.analytics_category_interaction), + characters[pager.currentItem].characterName, + getString(R.string.analytics_action_shake)) + updateGestureAchievements(Character.ANIM_SHAKE) + loadAnimation( + false, + characters[pager.currentItem].getDuration(Character.ANIM_SHAKE), + characters[pager.currentItem].getFrameIndices(Character.ANIM_SHAKE), + characters[pager.currentItem].getFrames(Character.ANIM_SHAKE)) + } + + private fun onMuteChanged(isMuted: Boolean) { + if (isMuted) { + soundPool.autoPause() + } else { + soundPool.autoResume() + } + } + + /** + * Helper method to load and start animations. Takes care of canceling any ongoing animations, + * and will return without executing anything if animPlaying is true or scaling is true. + * + * @param playingRest + * @param animationTime + * @param frameIndices + * @param frameResourceIds + */ + private fun loadAnimation( + playingRest: Boolean, + animationTime: Long, + frameIndices: IntArray, + frameResourceIds: IntArray + ) { + if (!playingRest && (animPlaying || scaling) || !canTouch) { + return + } + animPlaying = !playingRest + this.playingRest = playingRest + if (loadBitmapsTask != null) { + loadBitmapsTask?.cancel(true) + animator?.cancel() + } + + loadBitmapsTask = LoadBitmapsTask(animationTime, frameIndices, frameResourceIds) + loadBitmapsTask?.execute() + } + + /** + * Load and cache all sounds for a given character. + * + * @param characterIndex index of the character in the array, like [.CHARACTER_ID_SANTA]. + */ + private fun loadSoundsForCharacter(characterIndex: Int) { + for (animationId in Character.ALL_ANIMS) { + // No need to load sounds twice + if (soundIds[characterIndex][animationId] != -1) { + continue + } + + val soundResource = characters[characterIndex].getSoundResource(animationId) + if (soundResource != -1) { + soundIds[characterIndex][animationId] = soundPool.load(this, soundResource, 1) + } + } + } + + override fun onSignInFailed() {} + + override fun onSignInSucceeded() {} + + @Throws(DasherDancerActivity.BitmapLoadException::class) + private fun tryLoadBitmap(@DrawableRes resourceId: Int): Drawable { + try { + BitmapFactory.decodeResource(resources, resourceId, options)?.let { bmp -> + val bitmapDrawable = BitmapDrawable(resources, bmp) + val p = ResourceOffsets.getOffsets(resourceId) + val x = Math.round(p.x / options.inSampleSize.toFloat()) + val y = Math.round(p.y / options.inSampleSize.toFloat()) + val w = Math.round(ResourceOffsets.ORIG_SIZE.x / options.inSampleSize.toFloat()) + val h = Math.round(ResourceOffsets.ORIG_SIZE.y / options.inSampleSize.toFloat()) + return InsetDrawableCompat( + bitmapDrawable, x, y, w - bmp.width - x, h - bmp.height - y) + } + } catch (oom: OutOfMemoryError) { + SantaLog.w(TAG, "Out of memory error, inSampleSize=" + options.inSampleSize) + if (downSamplingAttempts < MAX_DOWNSAMPLING_ATTEMPTS) { + options.inSampleSize *= 2 + downSamplingAttempts++ + } + } + + throw BitmapLoadException("Failed to load resource ID: $resourceId") + } + + /** + * Load all of the resources for a given Character, then begin playing the "IDLE" animation. for + * that character. + */ + private inner class LoadCharacterResourcesTask internal constructor( + private val characterIndex: Int + ) : RetryableAsyncTask() { + + private val character: Character = characters[characterIndex] + + override fun doInBackground(vararg params: Void?): Void? { + canTouch = false + // See if we can free up any memory before we allocate some ourselves. + // Request garbage collection. + System.gc() + + // Load all sounds for this character + loadSoundsForCharacter(characterIndex) + + // Load all animations types for this character + for (animation in Character.ALL_ANIMS) { + for (resourceId in character.getFrames(animation)) { + if (isCancelled) { + break + } + + if (memoryCache.get(resourceId) == null) { + try { + val bitmap = tryLoadBitmap(resourceId) + memoryCache.put(resourceId, bitmap) + } catch (e: BitmapLoadException) { + SantaLog.e(TAG, "LoadCharacterResourcesTask: failed", e) + + // Retry the task + return retrySelf(params as Array) + } + + if (isCancelled) { + // Remove the BMP we just added + // The check and remove should be atomic so we synchronize + // (There could be an evict going on so make sure it's still there... + synchronized(memoryCache) { + if (memoryCache.get(resourceId) != null) { + memoryCache.remove(resourceId) + } + } + } + } + } + } + return null + } + + override fun onPostExecute(result: Void?) { + if (isCancelled) { + return + } + + findViewById(R.id.progress).visibility = View.GONE + + val currentCharacter = characters[pager.currentItem] + val frames = + arrayOfNulls(currentCharacter.getFrames(Character.ANIM_IDLE).size) + for (i in frames.indices) { + frames[i] = memoryCache.get(currentCharacter.getFrames(Character.ANIM_IDLE)[i]) + } + + val characterView = pager.findViewWithTag(pager.currentItem) + characterView.setFrames(frames, currentCharacter.getFrameIndices(Character.ANIM_IDLE)) + + playingRest = true + animator = ObjectAnimator.ofInt( + characterView, + "frameIndex", + 0, + currentCharacter.getFrameIndices(Character.ANIM_IDLE).size - 1) + animator?.let { + it.duration = currentCharacter.getDuration(Character.ANIM_IDLE) + it.addListener(this@DasherDancerActivity) + it.start() + } + initialized = true + canTouch = true + } + + public override fun shouldRetry(): Boolean { + return downSamplingAttempts < MAX_DOWNSAMPLING_ATTEMPTS + } + + public override fun onPrepareForRetry() { + // Clear all frames for this character + for (animation in Character.ALL_ANIMS) { + for (resourceId in character.getFrames(animation)) { + memoryCache.remove(resourceId) + } + } + + // Try to retry + System.gc() + } + } + + /** AsyncTask that loads bitmaps for animation and starts the animation upon completion. */ + private inner class LoadBitmapsTask( + private val mDuration: Long, + private val mFrameIndices: IntArray, + private val mFrames: IntArray + ) : RetryableAsyncTask>() { + + override fun doInBackground(vararg params: Void?): Array? { + val bitmaps = arrayOfNulls(mFrames.size) + for (i in mFrames.indices) { + if (isCancelled) { + break + } + + val id = mFrames[i] + if (memoryCache.get(id) == null) { + try { + bitmaps[i] = tryLoadBitmap(id) + } catch (e: BitmapLoadException) { + SantaLog.e(TAG, "LoadBitmapsTask: failed", e) + return retrySelf(params as Array) + } + + memoryCache.put(id, bitmaps[i]) + if (isCancelled) { + synchronized(memoryCache) { + if (memoryCache.get(id) != null) { + memoryCache.remove(id) + } + } + } + } else { + bitmaps[i] = memoryCache.get(mFrames[i]) + } + } + return bitmaps + } + + override fun onPostExecute(result: Array?) { + if (result == null || isCancelled) { + return + } + + val character = pager.findViewWithTag(pager.currentItem) + character.setFrames(result, mFrameIndices) + animator?.cancel() + animator = ObjectAnimator.ofInt(character, "frameIndex", 0, mFrameIndices.size - 1) + animator?.let { + it.duration = mDuration + it.addListener(this@DasherDancerActivity) + it.start() + } + if (soundId != -1 && !santaPreferences.isMuted) { + soundPool.play(soundId) + soundId = -1 + } + } + + public override fun shouldRetry(): Boolean { + return downSamplingAttempts < MAX_DOWNSAMPLING_ATTEMPTS + } + + public override fun onPrepareForRetry() { + // Remove all frames this task should load + for (id in mFrames) { + memoryCache.remove(id) + } + + // See if we can now GC + System.gc() + } + } + + override fun onAnimationStart(animation: Animator) { + animCanceled = false + if (!playingRest) { + animPlaying = true + } + } + + override fun onAnimationEnd(animation: Animator) { + if (animCanceled) { + return + } + animPlaying = false // yoda + if (playingRest) { + // We are at rest, so play the idle animation again. + val character = pager.findViewWithTag(pager.currentItem) as FrameAnimationView + animator = ObjectAnimator.ofInt( + character, + "frameIndex", + 0, + characters[0].getFrameIndices(Character.ANIM_IDLE).size) + animator?.let { + it.duration = characters[0].getDuration(Character.ANIM_IDLE) + it.addListener(this@DasherDancerActivity) + it.start() + } + } else { + // We finished an animation triggered by a gesture, so start the idle animation again. + handler.sendEmptyMessage(1) + } + } + + override fun onAnimationCancel(animation: Animator) { + animCanceled = true + animPlaying = false + } + + override fun onAnimationRepeat(animation: Animator) { + // Ignore + } + + override fun onPageScrollStateChanged(arg0: Int) { + // Ignore + } + + override fun onPageScrolled(arg0: Int, arg1: Float, arg2: Int) { + // Ignore + } + + override fun onPageSelected(arg0: Int) {} + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (requestCode == sCharacterRequestCode) { + if (resultCode == Activity.RESULT_OK) { + initialized = false + val character = pager.findViewWithTag(pager.currentItem) as FrameAnimationView + character.setImageDrawable(null) + data?.extras?.let { + val position = it.getInt(EXTRA_CHARACTER_ID) + characterSelectedHelper(position, false) + } + } + } + } + + override fun onBackPressed() { + // If we are backing out of the game, clear the cache to free memory. + soundPool.release() + memoryCache.evictAll() + // Request garbage collection. + System.gc() + super.onBackPressed() + } + + public override fun onDestroy() { + soundPool.release() + memoryCache.evictAll() + // Request garbage collection. + System.gc() + super.onDestroy() + } + + private fun characterSelectedHelper(position: Int, smoothScroll: Boolean) { + loadBitmapsTask?.cancel(true) + loadCharacterTask?.cancel(true) + animator?.cancel() + + when { + position == 0 -> { + findViewById(R.id.left_button).visibility = View.GONE + findViewById(R.id.right_button).visibility = View.VISIBLE + } + position + 1 == pager.adapter!!.count -> { + findViewById(R.id.right_button).visibility = View.GONE + findViewById(R.id.left_button).visibility = View.VISIBLE + } + else -> { + findViewById(R.id.left_button).visibility = View.VISIBLE + findViewById(R.id.right_button).visibility = View.VISIBLE + } + } + + MeasurementManager.recordCustomEvent( + firebaseAnalytics, + getString(R.string.analytics_category_character), + getString(R.string.analytics_action_character_change), + characters[position].characterName) + + pager.postDelayed(100) { + // Show progress + pager.setCurrentItem(position, smoothScroll) + findViewById(R.id.progress).visibility = View.VISIBLE + progressAnimator.start() + (pager.findViewWithTag(pager.currentItem) as ImageView) + .setImageDrawable(null) + memoryCache.evictAll() + // Request garbage collection. + System.gc() + loadCharacterTask?.cancel(true) + + loadCharacterTask = LoadCharacterResourcesTask(position) + loadCharacterTask?.execute() + } + } + + private fun updateGestureAchievements(type: Int) { + val character = pager.currentItem + achievements[character].add(type) + if (achievements[character].size == 8) { + if (gamesFragment!!.isSignedIn) { + when (character) { + CHARACTER_ID_SANTA -> { + Games.Achievements.unlock( + gamesFragment!!.gamesApiClient, + getString(R.string.achievement_santas_dance_party)) + MeasurementManager.recordAchievement( + firebaseAnalytics, + getString(R.string.achievement_santas_dance_party), + getString(R.string.analytics_screen_dasher)) + } + CHARACTER_ID_ELF -> { + Games.Achievements.unlock( + gamesFragment!!.gamesApiClient, + getString(R.string.achievement_elfs_dance_party)) + MeasurementManager.recordAchievement( + firebaseAnalytics, + getString(R.string.achievement_elfs_dance_party), + getString(R.string.analytics_screen_dasher)) + } + CHARACTER_ID_REINDEER -> { + Games.Achievements.unlock( + gamesFragment!!.gamesApiClient, + getString(R.string.achievement_rudolphs_dance_party)) + MeasurementManager.recordAchievement( + firebaseAnalytics, + getString(R.string.achievement_rudolphs_dance_party), + getString(R.string.analytics_screen_dasher)) + } + CHARACTER_ID_SNOWMAN -> { + Games.Achievements.unlock( + gamesFragment!!.gamesApiClient, + getString(R.string.achievement_snowmans_dance_party)) + MeasurementManager.recordAchievement( + firebaseAnalytics, + getString(R.string.achievement_snowmans_dance_party), + getString(R.string.analytics_screen_dasher)) + } + } + } + } + } + + /** Convenience class for exception when loading Bitmaps. */ + private class BitmapLoadException(msg: String) : Exception(msg) + + companion object { + + private const val TAG = "DasherDancer" + + /** + * Extra key used to pass back the character id that should be selected, set by the + * CharacterActivity. + */ + const val EXTRA_CHARACTER_ID = "extra_character_id" + + // Character ids, which are also indices in the characters array. + const val CHARACTER_ID_SANTA = 0 + const val CHARACTER_ID_ELF = 1 + const val CHARACTER_ID_REINDEER = 2 + const val CHARACTER_ID_SNOWMAN = 3 + + /** Number of times to try downsampling before giving up */ + const val MAX_DOWNSAMPLING_ATTEMPTS = 3 + + /** Request code for calling CharacterActivity for result. */ + private const val sCharacterRequestCode = 1 + + /** + * Our array of playable characters. Add more characters here an create new CHARACTER_ID_* + * static variables. + */ + private val characters = arrayOf(Santa(), Elf(), Reindeer(), Snowman()) + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Elf.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Elf.java deleted file mode 100644 index b3a8ea958..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Elf.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -import java.lang.*; - -public class Elf implements Character { - - private static final long[] sDurations = new long[]{ - 1000, 1000, 1000, 1000, 1000, - 1000, 1000, 1000, 1333 - }; - - private static final int[][] sFrames = new int[][]{ - { - R.drawable.elf_idle0001, R.drawable.elf_idle0002, R.drawable.elf_idle0003, R.drawable.elf_idle0004, - R.drawable.elf_idle0005, R.drawable.elf_idle0006, R.drawable.elf_idle0007, R.drawable.elf_idle0008, - R.drawable.elf_idle0009, R.drawable.elf_idle0010, R.drawable.elf_idle0011, R.drawable.elf_idle0012, - R.drawable.elf_idle0013, R.drawable.elf_idle0014, R.drawable.elf_idle0015, R.drawable.elf_idle0016, - R.drawable.elf_idle0017, R.drawable.elf_idle0018, R.drawable.elf_idle0019, R.drawable.elf_idle0020, - R.drawable.elf_idle0021, R.drawable.elf_idle0022, R.drawable.elf_idle0023, R.drawable.elf_idle0024}, //idle - {R.drawable.elf_tap0001, R.drawable.elf_tap0002, R.drawable.elf_tap0003, R.drawable.elf_tap0004, - R.drawable.elf_tap0005, R.drawable.elf_tap0006, R.drawable.elf_tap0007, R.drawable.elf_tap0008, - R.drawable.elf_tap0009, R.drawable.elf_tap0010, R.drawable.elf_tap0011, R.drawable.elf_tap0012, - R.drawable.elf_tap0013, R.drawable.elf_tap0014, R.drawable.elf_tap0015, R.drawable.elf_tap0016, - R.drawable.elf_tap0017, R.drawable.elf_tap0018, R.drawable.elf_tap0019, R.drawable.elf_tap0020, - R.drawable.elf_tap0021, R.drawable.elf_tap0022, R.drawable.elf_tap0023, R.drawable.elf_tap0024},//tap - {R.drawable.elf_shake0001, R.drawable.elf_shake0002, R.drawable.elf_shake0003, R.drawable.elf_shake0004, - R.drawable.elf_shake0005, R.drawable.elf_shake0006, R.drawable.elf_shake0007, R.drawable.elf_shake0008, - R.drawable.elf_shake0009, R.drawable.elf_shake0010, R.drawable.elf_shake0011, R.drawable.elf_shake0012, - R.drawable.elf_shake0013, R.drawable.elf_shake0014, R.drawable.elf_shake0015, R.drawable.elf_shake0016, - R.drawable.elf_shake0017, R.drawable.elf_shake0018, R.drawable.elf_shake0019, R.drawable.elf_shake0020, - R.drawable.elf_shake0021, R.drawable.elf_shake0022, R.drawable.elf_shake0023, R.drawable.elf_shake0024},//shake - {R.drawable.elf_swipedown0001, - R.drawable.elf_swipedown0002, - R.drawable.elf_swipedown0003, - R.drawable.elf_swipedown0004, - R.drawable.elf_swipedown0005, - R.drawable.elf_swipedown0006, - R.drawable.elf_swipedown0007, - R.drawable.elf_swipedown0008, - R.drawable.elf_swipedown0009, - R.drawable.elf_swipedown0010, - R.drawable.elf_swipedown0011, - R.drawable.elf_swipedown0012, - R.drawable.elf_swipedown0013, - R.drawable.elf_swipedown0014, - R.drawable.elf_swipedown0015, - R.drawable.elf_swipedown0016, - R.drawable.elf_swipedown0017, - R.drawable.elf_swipedown0018, - R.drawable.elf_swipedown0019, - R.drawable.elf_swipedown0020, - R.drawable.elf_swipedown0021, - R.drawable.elf_swipedown0022, - R.drawable.elf_swipedown0023, - R.drawable.elf_swipedown0024},//swipe down - {R.drawable.elf_swipeup0002, - R.drawable.elf_swipeup0003, - R.drawable.elf_swipeup0004, - R.drawable.elf_swipeup0005, - R.drawable.elf_swipeup0006, - R.drawable.elf_swipeup0007, - R.drawable.elf_swipeup0008, - R.drawable.elf_swipeup0009, - R.drawable.elf_swipeup0010, - R.drawable.elf_swipeup0011, - R.drawable.elf_swipeup0012, - R.drawable.elf_swipeup0013, - R.drawable.elf_swipeup0014, - R.drawable.elf_swipeup0015, - R.drawable.elf_swipeup0016, - R.drawable.elf_swipeup0017, - R.drawable.elf_swipeup0018, - R.drawable.elf_swipeup0019, - R.drawable.elf_swipeup0020, - R.drawable.elf_swipeup0021, - R.drawable.elf_swipeup0022, - R.drawable.elf_swipeup0023, - R.drawable.elf_swipeup0024},//swipe up - {R.drawable.elf_swipeleft0001, - R.drawable.elf_swipeleft0002, - R.drawable.elf_swipeleft0003, - R.drawable.elf_swipeleft0004, - R.drawable.elf_swipeleft0005, - R.drawable.elf_swipeleft0006, - R.drawable.elf_swipeleft0007, - R.drawable.elf_swipeleft0008, - R.drawable.elf_swipeleft0009, - R.drawable.elf_swipeleft0010, - R.drawable.elf_swipeleft0011, - R.drawable.elf_swipeleft0012, - R.drawable.elf_swipeleft0013, - R.drawable.elf_swipeleft0014, - R.drawable.elf_swipeleft0015, - R.drawable.elf_swipeleft0016, - R.drawable.elf_swipeleft0017, - R.drawable.elf_swipeleft0018, - R.drawable.elf_swipeleft0019, - R.drawable.elf_swipeleft0020, - R.drawable.elf_swipeleft0021, - R.drawable.elf_swipeleft0022, - R.drawable.elf_swipeleft0023, - R.drawable.elf_swipeleft0024},//swipe left - {R.drawable.elf_swiperight0002, - R.drawable.elf_swiperight0003, - R.drawable.elf_swiperight0004, - R.drawable.elf_swiperight0005, - R.drawable.elf_swiperight0006, - R.drawable.elf_swiperight0007, - R.drawable.elf_swiperight0008, - R.drawable.elf_swiperight0009, - R.drawable.elf_swiperight0010, - R.drawable.elf_swiperight0011, - R.drawable.elf_swiperight0012, - R.drawable.elf_swiperight0013, - R.drawable.elf_swiperight0014, - R.drawable.elf_swiperight0015, - R.drawable.elf_swiperight0016, - R.drawable.elf_swiperight0017, - R.drawable.elf_swiperight0018, - R.drawable.elf_swiperight0019, - R.drawable.elf_swiperight0020, - R.drawable.elf_swiperight0021, - R.drawable.elf_swiperight0022, - R.drawable.elf_swiperight0023, - R.drawable.elf_swiperight0024},//swipe right - {R.drawable.elf_pinchout0001, - R.drawable.elf_pinchout0002, - R.drawable.elf_pinchout0003, - R.drawable.elf_pinchout0004, - R.drawable.elf_pinchout0005, - R.drawable.elf_pinchout0006, - R.drawable.elf_pinchout0007, - R.drawable.elf_pinchout0008, - R.drawable.elf_pinchout0009, - R.drawable.elf_pinchout0010, - R.drawable.elf_pinchout0011, - R.drawable.elf_pinchout0012, - R.drawable.elf_pinchout0013, - R.drawable.elf_pinchout0014, - R.drawable.elf_pinchout0015, - R.drawable.elf_pinchout0016, - R.drawable.elf_pinchout0017, - R.drawable.elf_pinchout0018, - R.drawable.elf_pinchout0019, - R.drawable.elf_pinchout0020, - R.drawable.elf_pinchout0021, - R.drawable.elf_pinchout0022, - R.drawable.elf_pinchout0023, - R.drawable.elf_pinchout0024},//pinch in - {R.drawable.elf_pinchin_ball0001, R.drawable.elf_pinchin_ball0002, R.drawable.elf_pinchin_ball0003, R.drawable.elf_pinchin_ball0004, - R.drawable.elf_pinchin_ball0005, R.drawable.elf_pinchin_ball0006, R.drawable.elf_pinchin_ball0007, R.drawable.elf_pinchin_ball0008, - R.drawable.elf_pinchin_ball0009, R.drawable.elf_pinchin_ball0010, R.drawable.elf_pinchin_ball0011, R.drawable.elf_pinchin_ball0012, - R.drawable.elf_pinchin_ball0013, R.drawable.elf_pinchin_ball0014, R.drawable.elf_pinchin_ball0015, R.drawable.elf_pinchin_ball0016, - R.drawable.elf_pinchin_ball0017, R.drawable.elf_pinchin_ball0018, R.drawable.elf_pinchin_ball0019, R.drawable.elf_pinchin_ball0020, - R.drawable.elf_pinchin_ball0021, R.drawable.elf_pinchin_ball0022, R.drawable.elf_pinchin_ball0023, R.drawable.elf_pinchin_ball0024, - R.drawable.elf_pinchin_ball0025, R.drawable.elf_pinchin_ball0026, R.drawable.elf_pinchin_ball0027, R.drawable.elf_pinchin_ball0028, - R.drawable.elf_pinchin_ball0029, R.drawable.elf_pinchin_ball0030, R.drawable.elf_pinchin_ball0031, R.drawable.elf_pinchin_ball0032}//pinch out - }; - - private static final int[][] sFrameIndices = new int[][]{ - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//idle - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//tap - {0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23},//shake - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//swipe down - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22},//swipe up - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//swipe left - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22},//swipe right - {0, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23},//pinch in - {0, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}//pinch out - }; - - @Override - public long getDuration(int animationKey) { - return sDurations[animationKey]; - } - - @Override - public int[] getFrameIndices(int animationKey) { - return sFrameIndices[animationKey]; - } - - @Override - public int[] getFrames(int animationKey) { - return sFrames[animationKey]; - } - - @Override - public int getSoundResource(int animationid) { - switch (animationid) { - case Character.ANIM_PINCH_IN: - return R.raw.elf_pinchin_ball; - case Character.ANIM_PINCH_OUT: - return R.raw.elf_pinchout; - case Character.ANIM_SHAKE: - return R.raw.elf_shake2; - case Character.ANIM_SWIPE_DOWN: - return R.raw.elf_swipedown2; - case Character.ANIM_SWIPE_UP: - return R.raw.elf_swipeup2; - case Character.ANIM_SWIPE_LEFT: - return R.raw.elf_swipeleft; - case Character.ANIM_SWIPE_RIGHT: - return R.raw.elf_swiperight; - case Character.ANIM_TAP: - return R.raw.elf_tap3; - } - - return -1; - } - - @Override - public String getCharacterName() { - return "h"; - } -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Elf.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Elf.kt new file mode 100644 index 000000000..3b16f2121 --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Elf.kt @@ -0,0 +1,186 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +class Elf : Character { + + override val characterName: String + get() = "h" + + override fun getDuration(animationKey: Int): Long { + return durations[animationKey] + } + + override fun getFrameIndices(animationKey: Int): IntArray { + return frameIndices[animationKey] + } + + override fun getFrames(animationKey: Int): IntArray { + return frames[animationKey] + } + + override fun getSoundResource(animationid: Int): Int { + when (animationid) { + Character.ANIM_PINCH_IN -> return R.raw.elf_pinchin_ball + Character.ANIM_PINCH_OUT -> return R.raw.elf_pinchout + Character.ANIM_SHAKE -> return R.raw.elf_shake2 + Character.ANIM_SWIPE_DOWN -> return R.raw.elf_swipedown2 + Character.ANIM_SWIPE_UP -> return R.raw.elf_swipeup2 + Character.ANIM_SWIPE_LEFT -> return R.raw.elf_swipeleft + Character.ANIM_SWIPE_RIGHT -> return R.raw.elf_swiperight + Character.ANIM_TAP -> return R.raw.elf_tap3 + } + + return -1 + } + + companion object { + + private val durations = longArrayOf(1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1333) + + private val frames = arrayOf( + intArrayOf(R.drawable.elf_idle_0001, R.drawable.elf_idle_0002, + R.drawable.elf_idle_0003, R.drawable.elf_idle_0004, R.drawable.elf_idle_0005, + R.drawable.elf_idle_0006, R.drawable.elf_idle_0007, R.drawable.elf_idle_0008, + R.drawable.elf_idle_0009, R.drawable.elf_idle_0010, R.drawable.elf_idle_0011, + R.drawable.elf_idle_0012, R.drawable.elf_idle_0011, R.drawable.elf_idle_0010, + R.drawable.elf_idle_0015, R.drawable.elf_idle_0009, R.drawable.elf_idle_0017, + R.drawable.elf_idle_0007, R.drawable.elf_idle_0019, R.drawable.elf_idle_0020, + R.drawable.elf_idle_0021, R.drawable.elf_idle_0022, R.drawable.elf_idle_0002, + R.drawable.elf_idle_0024), // idle + intArrayOf(R.drawable.elf_idle_0024, R.drawable.elf_tap_0002, R.drawable.elf_tap_0003, + R.drawable.elf_tap_0004, R.drawable.elf_tap_0005, R.drawable.elf_tap_0006, + R.drawable.elf_tap_0007, R.drawable.elf_tap_0008, R.drawable.elf_tap_0009, + R.drawable.elf_tap_0010, R.drawable.elf_tap_0011, R.drawable.elf_tap_0012, + R.drawable.elf_tap_0013, R.drawable.elf_tap_0014, R.drawable.elf_tap_0015, + R.drawable.elf_tap_0016, R.drawable.elf_tap_0017, R.drawable.elf_tap_0018, + R.drawable.elf_idle_0024, R.drawable.elf_idle_0024, R.drawable.elf_idle_0024, + R.drawable.elf_idle_0024, R.drawable.elf_idle_0024, + R.drawable.elf_idle_0024), // tap + intArrayOf(R.drawable.elf_shake_0001, R.drawable.elf_shake_0002, + R.drawable.elf_shake_0003, R.drawable.elf_shake_0004, + R.drawable.elf_shake_0005, R.drawable.elf_shake_0006, + R.drawable.elf_shake_0007, R.drawable.elf_shake_0008, + R.drawable.elf_shake_0009, R.drawable.elf_shake_0010, + R.drawable.elf_shake_0011, R.drawable.elf_shake_0012, + R.drawable.elf_shake_0013, R.drawable.elf_shake_0014, + R.drawable.elf_shake_0015, R.drawable.elf_shake_0016, + R.drawable.elf_shake_0017, R.drawable.elf_shake_0018, + R.drawable.elf_shake_0019, R.drawable.elf_shake_0020, + R.drawable.elf_shake_0021, R.drawable.elf_shake_0022, + R.drawable.elf_shake_0023, R.drawable.elf_shake_0001), // shake + intArrayOf(R.drawable.elf_swipedown_0001, R.drawable.elf_swipedown_0001, + R.drawable.elf_swipedown_0003, R.drawable.elf_swipedown_0004, + R.drawable.elf_swipedown_0005, R.drawable.elf_swipedown_0006, + R.drawable.elf_swipedown_0007, R.drawable.elf_swipedown_0008, + R.drawable.elf_swipedown_0009, R.drawable.elf_swipedown_0010, + R.drawable.elf_swipedown_0011, R.drawable.elf_swipedown_0012, + R.drawable.elf_swipedown_0013, R.drawable.elf_swipedown_0012, + R.drawable.elf_swipedown_0015, R.drawable.elf_swipedown_0016, + R.drawable.elf_swipedown_0017, R.drawable.elf_swipedown_0018, + R.drawable.elf_swipedown_0019, R.drawable.elf_swipedown_0020, + R.drawable.elf_swipedown_0021, R.drawable.elf_swipedown_0022, + R.drawable.elf_swipedown_0023, R.drawable.elf_swipedown_0001), // swipe down + intArrayOf(R.drawable.elf_swipeup_0002, R.drawable.elf_swipeup_0003, + R.drawable.elf_swipeup_0004, R.drawable.elf_swipeup_0005, + R.drawable.elf_swipeup_0006, R.drawable.elf_swipeup_0007, + R.drawable.elf_swipeup_0008, R.drawable.elf_swipeup_0009, + R.drawable.elf_swipeup_0010, R.drawable.elf_swipeup_0011, + R.drawable.elf_swipeup_0012, R.drawable.elf_swipeup_0013, + R.drawable.elf_swipeup_0014, R.drawable.elf_swipeup_0015, + R.drawable.elf_swipeup_0016, R.drawable.elf_swipeup_0017, + R.drawable.elf_swipeup_0018, R.drawable.elf_swipeup_0019, + R.drawable.elf_swipeup_0020, R.drawable.elf_swipeup_0021, + R.drawable.elf_swipeup_0022, R.drawable.elf_swipeup_0023, + R.drawable.elf_swipedown_0001), // swipe up + intArrayOf(R.drawable.elf_swipeleft_0001, R.drawable.elf_swipeleft_0002, + R.drawable.elf_swipeleft_0003, R.drawable.elf_swipeleft_0004, + R.drawable.elf_swipeleft_0005, R.drawable.elf_swipeleft_0006, + R.drawable.elf_swipeleft_0007, R.drawable.elf_swipeleft_0008, + R.drawable.elf_swipeleft_0009, R.drawable.elf_swipeleft_0010, + R.drawable.elf_swipeleft_0011, R.drawable.elf_swipeleft_0012, + R.drawable.elf_swipeleft_0013, R.drawable.elf_swipeleft_0014, + R.drawable.elf_swipeleft_0015, R.drawable.elf_swipeleft_0016, + R.drawable.elf_swipeleft_0017, R.drawable.elf_swipeleft_0018, + R.drawable.elf_swipeleft_0019, R.drawable.elf_swipeleft_0020, + R.drawable.elf_swipeleft_0021, R.drawable.elf_swipeleft_0022, + R.drawable.elf_swipeleft_0023, R.drawable.elf_swipeleft_0024), // swipe left + intArrayOf(R.drawable.elf_swiperight_0002, R.drawable.elf_swiperight_0003, + R.drawable.elf_swiperight_0004, R.drawable.elf_swiperight_0005, + R.drawable.elf_swiperight_0006, R.drawable.elf_swiperight_0007, + R.drawable.elf_swiperight_0008, R.drawable.elf_swiperight_0009, + R.drawable.elf_swiperight_0010, R.drawable.elf_swiperight_0011, + R.drawable.elf_swiperight_0012, R.drawable.elf_swiperight_0013, + R.drawable.elf_swiperight_0014, R.drawable.elf_swiperight_0015, + R.drawable.elf_swiperight_0016, R.drawable.elf_swiperight_0017, + R.drawable.elf_swiperight_0018, R.drawable.elf_swiperight_0019, + R.drawable.elf_swiperight_0020, R.drawable.elf_swiperight_0021, + R.drawable.elf_swiperight_0022, R.drawable.elf_swiperight_0023, + R.drawable.elf_swipedown_0001), // swipe right + intArrayOf(R.drawable.elf_pinchout_0001, R.drawable.elf_pinchout_0002, + R.drawable.elf_pinchout_0003, R.drawable.elf_pinchout_0004, + R.drawable.elf_pinchout_0005, R.drawable.elf_pinchout_0006, + R.drawable.elf_pinchout_0007, R.drawable.elf_pinchout_0007, + R.drawable.elf_pinchout_0007, R.drawable.elf_pinchout_0007, + R.drawable.elf_pinchout_0007, R.drawable.elf_pinchout_0007, + R.drawable.elf_pinchout_0007, R.drawable.elf_pinchout_0007, + R.drawable.elf_pinchout_0007, R.drawable.elf_pinchout_0007, + R.drawable.elf_pinchout_0007, R.drawable.elf_pinchout_0007, + R.drawable.elf_pinchout_0019, R.drawable.elf_pinchout_0020, + R.drawable.elf_pinchout_0021, R.drawable.elf_pinchout_0022, + R.drawable.elf_pinchout_0023, R.drawable.elf_pinchout_0024), // pinch in + intArrayOf(R.drawable.elf_pinchin_0001, R.drawable.elf_pinchin_0002, + R.drawable.elf_pinchin_0003, R.drawable.elf_pinchin_0004, + R.drawable.elf_pinchin_0005, R.drawable.elf_pinchin_0006, + R.drawable.elf_pinchin_0007, R.drawable.elf_pinchin_0008, + R.drawable.elf_pinchin_0009, R.drawable.elf_pinchin_0010, + R.drawable.elf_pinchin_0011, R.drawable.elf_pinchin_0012, + R.drawable.elf_pinchin_0013, R.drawable.elf_pinchin_0014, + R.drawable.elf_pinchin_0015, R.drawable.elf_pinchin_0016, + R.drawable.elf_pinchin_0017, R.drawable.elf_pinchin_0018, + R.drawable.elf_pinchin_0019, R.drawable.elf_pinchin_0020, + R.drawable.elf_pinchin_0021, R.drawable.elf_pinchin_0022, + R.drawable.elf_pinchin_0023, R.drawable.elf_pinchin_0024, + R.drawable.elf_pinchin_0025, R.drawable.elf_pinchin_0026, + R.drawable.elf_pinchin_0027, R.drawable.elf_pinchin_0028, + R.drawable.elf_pinchin_0029, R.drawable.elf_pinchin_0030, + R.drawable.elf_pinchin_0031, + R.drawable.elf_pinchin_0032) // pinch out + ) + + private val frameIndices = + arrayOf(intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // idle + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // tap + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // shake + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // swipe down + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22), // swipe up + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // swipe left + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22), // swipe right + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // pinch in + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31) // pinch out + ) + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/FrameAnimationView.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/FrameAnimationView.java deleted file mode 100644 index bf6732ab1..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/FrameAnimationView.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.widget.ImageView; - -public class FrameAnimationView extends ImageView { - - private Drawable[] mFrames; - - private int[] mFrameIndices; - private int mFrameIndex; - private final Paint mPaint = new Paint(); - private InsetDrawableCompat mInsetDrawable; - private BitmapDrawable mBitmapDrawable; - - - public FrameAnimationView(Context context) { - super(context); - init(); - } - - public FrameAnimationView(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public FrameAnimationView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - private void init() { - mPaint.setAntiAlias(true); - setImageDrawable(mInsetDrawable); - } - - /** - * Will attempt to recycle the old frames before setting the new frames. - * - * @param frames - * @param frameIndices - */ - public void setFrames(Drawable[] frames, int[] frameIndices) { - if (mFrames != null) { - mFrames = null; - } - mFrames = frames; - mFrameIndices = frameIndices; - } - - public int getFrameIndex() { - return mFrameIndex; - } - - public void setFrameIndex(int frameIndex) { - mFrameIndex = frameIndex; - if (mFrames != null && mFrameIndex >= 0 && mFrameIndex < mFrameIndices.length - && mFrames[mFrameIndices[mFrameIndex]] != null && !isBitmapRecycled(mFrames[mFrameIndices[mFrameIndex]])) { - invalidate(); - } - } - - private boolean isBitmapRecycled(Drawable drawable) { - if (drawable != null && drawable instanceof InsetDrawableCompat) { - drawable = ((InsetDrawableCompat) drawable).getDrawable(); - } - if (drawable != null && drawable instanceof BitmapDrawable) { - Bitmap bmp = ((BitmapDrawable) drawable).getBitmap(); - if (bmp != null) { - return bmp.isRecycled(); - } - } - return true; - } - - Matrix matrix = new Matrix(); - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - super.onSizeChanged(w, h, oldw, oldh); - recalculateMatrix(w, h); - } - - private void recalculateMatrix(int vwidth, int vheight) { - if (mFrames != null && mFrameIndex >= 0 && mFrameIndex < mFrameIndices.length) { - InsetDrawableCompat insetDrawableCompat = - (InsetDrawableCompat) mFrames[mFrameIndices[mFrameIndex]]; - - if (isBitmapRecycled(insetDrawableCompat)) { - return; - } - - matrix.reset(); - float scale; - float dx = 0, dy = 0; - - int dwidth = insetDrawableCompat.getDrawable().getIntrinsicWidth() + - insetDrawableCompat.getLeft() + insetDrawableCompat.getRight(); - int dheight = insetDrawableCompat.getDrawable().getIntrinsicHeight() + - insetDrawableCompat.getTop() + insetDrawableCompat.getBottom(); - - if (dwidth * vheight > vwidth * dheight) { - scale = (float) vheight / (float) dheight; - dx = (vwidth - dwidth * scale) * 0.5f; - } else { - scale = (float) vwidth / (float) dwidth; - dy = (vheight - dheight * scale) * 0.5f; - } - - matrix.setTranslate(insetDrawableCompat.getLeft(), insetDrawableCompat.getTop()); - matrix.postScale(scale, scale); - matrix.postTranslate(Math.round(dx), Math.round(dy)); - setImageMatrix(matrix); - } - } - - public void onDraw(Canvas c) { - if (mFrames != null && mFrameIndex >= 0 && mFrameIndex < mFrameIndices.length) { - //the line below should work with InsetDrawable with CENTER_CROP, - //but it doesn't work on older APIs (JB) beacause of different handling of insets: - //setImageDrawable(mFrames[mFrameIndices[mFrameIndex]]); - - //code below fixes the bug in InsetDrawable and works on all API levels: - //instead of setting the InsetDrawable on FrameAnimationView, - //we set the Bitmap directly and use the insets to calculate the correct matrix - - InsetDrawableCompat insetDrawableCompat = (InsetDrawableCompat) mFrames[mFrameIndices[mFrameIndex]]; - if (isBitmapRecycled(insetDrawableCompat)) { - return; - } - Bitmap newBitmap = ((BitmapDrawable) insetDrawableCompat.getDrawable()).getBitmap(); - - Drawable current = getDrawable(); - if (current == null - || (current instanceof BitmapDrawable - && !newBitmap.equals(((BitmapDrawable) current).getBitmap()))) { - setImageBitmap(newBitmap); - recalculateMatrix(getWidth(), getHeight()); - } - } - - if (isBitmapRecycled(getDrawable())) { - return; - } - super.onDraw(c); - } -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/FrameAnimationView.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/FrameAnimationView.kt new file mode 100644 index 000000000..f250dfb8e --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/FrameAnimationView.kt @@ -0,0 +1,167 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Matrix +import android.graphics.Paint +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.Drawable +import android.util.AttributeSet +import androidx.appcompat.widget.AppCompatImageView + +class FrameAnimationView : AppCompatImageView { + + private var frames: Array? = null + + private var frameIndices: IntArray? = null + var frameIndex: Int = 0 + set(frameIndex) { + field = frameIndex + val frames = frames ?: return + val frameIndices = frameIndices ?: return + if (this.frameIndex >= 0 && + this.frameIndex < frameIndices.size && + frames[frameIndices[this.frameIndex]] != null && + !isBitmapRecycled(frames[frameIndices[this.frameIndex]])) { + invalidate() + } + } + private val paint = Paint() + private val insetDrawable: InsetDrawableCompat? = null + + internal var matrix = Matrix() + + constructor(context: Context) : super(context) { + init() + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { + init() + } + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init() + } + + private fun init() { + paint.isAntiAlias = true + setImageDrawable(insetDrawable) + } + + /** + * Will attempt to recycle the old frames before setting the new frames. + * + * @param frames + * @param frameIndices + */ + fun setFrames(frames: Array?, frameIndices: IntArray?) { + if (this.frames != null) { + this.frames = null + } + this.frames = frames + this.frameIndices = frameIndices + } + + private fun isBitmapRecycled(drawable: Drawable?): Boolean { + var drawable = drawable + if (drawable != null && drawable is InsetDrawableCompat) { + drawable = drawable.drawable + } + if (drawable != null && drawable is BitmapDrawable) { + val bmp = drawable.bitmap + if (bmp != null) { + return bmp.isRecycled + } + } + return true + } + + override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { + super.onSizeChanged(w, h, oldw, oldh) + recalculateMatrix(w, h) + } + + private fun recalculateMatrix(vwidth: Int, vheight: Int) { + val frames = frames ?: return + val frameIndices = frameIndices ?: return + if (frameIndex >= 0 && frameIndex < frameIndices.size) { + val insetDrawableCompat = frames[frameIndices[frameIndex]] as InsetDrawableCompat + + if (isBitmapRecycled(insetDrawableCompat)) { + return + } + + matrix.reset() + val scale: Float + var dx = 0f + var dy = 0f + + val dwidth = (insetDrawableCompat.drawable!!.intrinsicWidth + + insetDrawableCompat.left + + insetDrawableCompat.right) + val dheight = (insetDrawableCompat.drawable!!.intrinsicHeight + + insetDrawableCompat.top + + insetDrawableCompat.bottom) + + if (dwidth * vheight > vwidth * dheight) { + scale = vheight.toFloat() / dheight.toFloat() + dx = (vwidth - dwidth * scale) * 0.5f + } else { + scale = vwidth.toFloat() / dwidth.toFloat() + dy = (vheight - dheight * scale) * 0.5f + } + + matrix.setTranslate(insetDrawableCompat.left.toFloat(), insetDrawableCompat.top.toFloat()) + matrix.postScale(scale, scale) + matrix.postTranslate(Math.round(dx).toFloat(), Math.round(dy).toFloat()) + imageMatrix = matrix + } + } + + public override fun onDraw(c: Canvas) { + val frames = frames ?: return + val frameIndices = frameIndices ?: return + if (frameIndex >= 0 && frameIndex < frameIndices.size) { + // the line below should work with InsetDrawable with CENTER_CROP, + // but it doesn't work on older APIs (JB) beacause of different handling of insets: + // setImageDrawable(frames[frameIndices[mFrameIndex]]); + + // code below fixes the bug in InsetDrawable and works on all API levels: + // instead of setting the InsetDrawable on FrameAnimationView, + // we set the Bitmap directly and use the insets to calculate the correct matrix + + val insetDrawableCompat = frames[frameIndices[frameIndex]] as InsetDrawableCompat + if (isBitmapRecycled(insetDrawableCompat)) { + return + } + val newBitmap = (insetDrawableCompat.drawable as BitmapDrawable).bitmap + + val current = drawable + if (current == null || current is BitmapDrawable && newBitmap != current.bitmap) { + setImageBitmap(newBitmap) + recalculateMatrix(width, height) + } + } + + if (isBitmapRecycled(drawable)) { + return + } + super.onDraw(c) + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/InsetDrawableCompat.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/InsetDrawableCompat.java deleted file mode 100644 index 2d2c60052..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/InsetDrawableCompat.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -import android.graphics.drawable.Drawable; -import android.graphics.drawable.InsetDrawable; - - -public class InsetDrawableCompat extends InsetDrawable { - - private Drawable mDrawable; - private int mLeft, mTop, mRight, mBottom; - - public Drawable getDrawable(){ - return mDrawable; - } - - public int getLeft() { - return mLeft; - } - - public int getTop() { - return mTop; - } - - public int getRight() { - return mRight; - } - - public int getBottom() { - return mBottom; - } - - public InsetDrawableCompat(Drawable drawable, int inset) { - super(drawable, inset); - mDrawable = drawable; - mLeft = inset; - mTop = inset; - mRight = inset; - mBottom = inset; - } - - public InsetDrawableCompat(Drawable drawable, int insetLeft, int insetTop, int insetRight, int insetBottom) { - super(drawable, insetLeft, insetTop, insetRight, insetBottom); - mDrawable = drawable; - mLeft = insetLeft; - mTop = insetTop; - mRight = insetRight; - mBottom = insetBottom; - } - -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/InsetDrawableCompat.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/InsetDrawableCompat.kt new file mode 100644 index 000000000..f1176a1cd --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/InsetDrawableCompat.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +import android.graphics.drawable.Drawable +import android.graphics.drawable.InsetDrawable + +class InsetDrawableCompat : InsetDrawable { + + private var inDrawable: Drawable? = null + var left: Int = 0 + private set + var top: Int = 0 + private set + var right: Int = 0 + private set + var bottom: Int = 0 + private set + + override fun getDrawable(): Drawable? { + return inDrawable + } + + constructor( + drawable: Drawable, + insetLeft: Int, + insetTop: Int, + insetRight: Int, + insetBottom: Int + ) : super(drawable, insetLeft, insetTop, insetRight, insetBottom) { + inDrawable = drawable + left = insetLeft + top = insetTop + right = insetRight + bottom = insetBottom + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/NoSwipeViewPager.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/NoSwipeViewPager.java deleted file mode 100644 index 41cc7b543..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/NoSwipeViewPager.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -import android.content.Context; -import android.support.v4.view.ViewPager; -import android.util.AttributeSet; -import android.view.GestureDetector; -import android.view.GestureDetector.OnGestureListener; -import android.view.MotionEvent; -import android.view.ScaleGestureDetector; -import android.view.ScaleGestureDetector.OnScaleGestureListener; - -public class NoSwipeViewPager extends ViewPager { - - private GestureDetector mGestureDetector; - private ScaleGestureDetector mScaleGestureDetector; - - public NoSwipeViewPager(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - //Take all events, as we are going to animate the current view based on touch events. - return true; - } - - @Override - public boolean onTouchEvent(MotionEvent ev) { - boolean retVal = false; - if(ev.getPointerCount() > 1) { - retVal = mScaleGestureDetector.onTouchEvent(ev); - } - if(!retVal && ev.getPointerCount() == 1) { - retVal = mGestureDetector.onTouchEvent(ev) || retVal; - } - return retVal; - } - - public void setGestureDetectorListeners(Context context, - OnGestureListener listener, OnScaleGestureListener scaleListener) { - mGestureDetector = new GestureDetector(context, listener); - mScaleGestureDetector = new ScaleGestureDetector(context, scaleListener); - } -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/NoSwipeViewPager.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/NoSwipeViewPager.kt new file mode 100644 index 000000000..7f7a46aea --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/NoSwipeViewPager.kt @@ -0,0 +1,57 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +import android.content.Context +import android.util.AttributeSet +import android.view.GestureDetector +import android.view.GestureDetector.OnGestureListener +import android.view.MotionEvent +import android.view.ScaleGestureDetector +import android.view.ScaleGestureDetector.OnScaleGestureListener +import androidx.viewpager.widget.ViewPager + +class NoSwipeViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) { + + private var gestureDetector: GestureDetector? = null + private var scaleGestureDetector: ScaleGestureDetector? = null + + override fun onInterceptTouchEvent(ev: MotionEvent): Boolean { + // Take all events, as we are going to animate the current view based on touch events. + return true + } + + override fun onTouchEvent(ev: MotionEvent): Boolean { + var retVal = false + if (ev.pointerCount > 1) { + retVal = scaleGestureDetector!!.onTouchEvent(ev) + } + if (!retVal && ev.pointerCount == 1) { + retVal = gestureDetector!!.onTouchEvent(ev) || retVal + } + return retVal + } + + fun setGestureDetectorListeners( + context: Context, + listener: OnGestureListener, + scaleListener: OnScaleGestureListener + ) { + gestureDetector = GestureDetector(context, listener) + scaleGestureDetector = ScaleGestureDetector(context, scaleListener) + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Reindeer.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Reindeer.java deleted file mode 100644 index 3cdab2a9c..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Reindeer.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -public class Reindeer implements Character { - - private static final long[] sDurations = new long[]{ - 1000, 1000, 1000, 1000, 1000, - 1000, 1000, 1000, 1000 - }; - - private static final int[][] sFrames = new int[][]{ - { - R.drawable.reindeer_tap0001}, //idle - {R.drawable.reindeer_tap0001, R.drawable.reindeer_tap0002, R.drawable.reindeer_tap0003, R.drawable.reindeer_tap0004, - R.drawable.reindeer_tap0005, R.drawable.reindeer_tap0006, R.drawable.reindeer_tap0007, R.drawable.reindeer_tap0008, - R.drawable.reindeer_tap0009, R.drawable.reindeer_tap0010, R.drawable.reindeer_tap0011, R.drawable.reindeer_tap0012, - R.drawable.reindeer_tap0013, R.drawable.reindeer_tap0014, R.drawable.reindeer_tap0015, R.drawable.reindeer_tap0016, - R.drawable.reindeer_tap0017, R.drawable.reindeer_tap0018, R.drawable.reindeer_tap0019, R.drawable.reindeer_tap0020, - R.drawable.reindeer_tap0021, R.drawable.reindeer_tap0022, R.drawable.reindeer_tap0023, R.drawable.reindeer_tap0024},//tap - {R.drawable.reindeer_shake0001, R.drawable.reindeer_shake0002, R.drawable.reindeer_shake0003, R.drawable.reindeer_shake0004, - R.drawable.reindeer_shake0005, R.drawable.reindeer_shake0006, R.drawable.reindeer_shake0007, R.drawable.reindeer_shake0008, - R.drawable.reindeer_shake0009, R.drawable.reindeer_shake0010, R.drawable.reindeer_shake0011, R.drawable.reindeer_shake0012, - R.drawable.reindeer_shake0013, R.drawable.reindeer_shake0014, R.drawable.reindeer_shake0015, R.drawable.reindeer_shake0016, - R.drawable.reindeer_shake0017, R.drawable.reindeer_shake0018, R.drawable.reindeer_shake0019, R.drawable.reindeer_shake0020, - R.drawable.reindeer_shake0021, R.drawable.reindeer_shake0022, R.drawable.reindeer_shake0023, R.drawable.reindeer_shake0024},//shake - {R.drawable.reindeer_swipedown0001, - R.drawable.reindeer_swipedown0002, - R.drawable.reindeer_swipedown0003, - R.drawable.reindeer_swipedown0004, - R.drawable.reindeer_swipedown0005, - R.drawable.reindeer_swipedown0006, - R.drawable.reindeer_swipedown0007, - R.drawable.reindeer_swipedown0008, - R.drawable.reindeer_swipedown0009, - R.drawable.reindeer_swipedown0010, - R.drawable.reindeer_swipedown0011, - R.drawable.reindeer_swipedown0012, - R.drawable.reindeer_swipedown0013, - R.drawable.reindeer_swipedown0014, - R.drawable.reindeer_swipedown0015, - R.drawable.reindeer_swipedown0016, - R.drawable.reindeer_swipedown0017, - R.drawable.reindeer_swipedown0018, - R.drawable.reindeer_swipedown0019, - R.drawable.reindeer_swipedown0020, - R.drawable.reindeer_swipedown0021, - R.drawable.reindeer_swipedown0022, - R.drawable.reindeer_swipedown0023, - R.drawable.reindeer_swipedown0024},//swipe down - {R.drawable.reindeer_swipeup0002, - R.drawable.reindeer_swipeup0003, - R.drawable.reindeer_swipeup0004, - R.drawable.reindeer_swipeup0005, - R.drawable.reindeer_swipeup0006, - R.drawable.reindeer_swipeup0007, - R.drawable.reindeer_swipeup0008, - R.drawable.reindeer_swipeup0009, - R.drawable.reindeer_swipeup0010, - R.drawable.reindeer_swipeup0011, - R.drawable.reindeer_swipeup0012, - R.drawable.reindeer_swipeup0013, - R.drawable.reindeer_swipeup0014, - R.drawable.reindeer_swipeup0015, - R.drawable.reindeer_swipeup0016, - R.drawable.reindeer_swipeup0017, - R.drawable.reindeer_swipeup0018, - R.drawable.reindeer_swipeup0019, - R.drawable.reindeer_swipeup0020, - R.drawable.reindeer_swipeup0021, - R.drawable.reindeer_swipeup0022, - R.drawable.reindeer_swipeup0023, - R.drawable.reindeer_swipeup0024},//swipe up - {R.drawable.reindeer_swipeleft0001, - R.drawable.reindeer_swipeleft0002, - R.drawable.reindeer_swipeleft0003, - R.drawable.reindeer_swipeleft0004, - R.drawable.reindeer_swipeleft0005, - R.drawable.reindeer_swipeleft0006, - R.drawable.reindeer_swipeleft0007, - R.drawable.reindeer_swipeleft0008, - R.drawable.reindeer_swipeleft0009, - R.drawable.reindeer_swipeleft0010, - R.drawable.reindeer_swipeleft0011, - R.drawable.reindeer_swipeleft0012, - R.drawable.reindeer_swipeleft0013, - R.drawable.reindeer_swipeleft0014, - R.drawable.reindeer_swipeleft0015, - R.drawable.reindeer_swipeleft0016, - R.drawable.reindeer_swipeleft0017, - R.drawable.reindeer_swipeleft0018, - R.drawable.reindeer_swipeleft0019, - R.drawable.reindeer_swipeleft0020, - R.drawable.reindeer_swipeleft0021, - R.drawable.reindeer_swipeleft0022, - R.drawable.reindeer_swipeleft0023, - R.drawable.reindeer_swipeleft0024},//swipe left - {R.drawable.reindeer_swiperight0002, - R.drawable.reindeer_swiperight0003, - R.drawable.reindeer_swiperight0004, - R.drawable.reindeer_swiperight0005, - R.drawable.reindeer_swiperight0006, - R.drawable.reindeer_swiperight0007, - R.drawable.reindeer_swiperight0008, - R.drawable.reindeer_swiperight0009, - R.drawable.reindeer_swiperight0010, - R.drawable.reindeer_swiperight0011, - R.drawable.reindeer_swiperight0012, - R.drawable.reindeer_swiperight0013, - R.drawable.reindeer_swiperight0014, - R.drawable.reindeer_swiperight0015, - R.drawable.reindeer_swiperight0016, - R.drawable.reindeer_swiperight0017, - R.drawable.reindeer_swiperight0018, - R.drawable.reindeer_swiperight0019, - R.drawable.reindeer_swiperight0020, - R.drawable.reindeer_swiperight0021, - R.drawable.reindeer_swiperight0022, - R.drawable.reindeer_swiperight0023, - R.drawable.reindeer_swiperight0024},//swipe right - {R.drawable.reindeer_pinchout0001, - R.drawable.reindeer_pinchout0002, - R.drawable.reindeer_pinchout0003, - R.drawable.reindeer_pinchout0004, - R.drawable.reindeer_pinchout0005, - R.drawable.reindeer_pinchout0006, - R.drawable.reindeer_pinchout0007, - R.drawable.reindeer_pinchout0008, - R.drawable.reindeer_pinchout0009, - R.drawable.reindeer_pinchout0010, - R.drawable.reindeer_pinchout0011, - R.drawable.reindeer_pinchout0012, - R.drawable.reindeer_pinchout0013, - R.drawable.reindeer_pinchout0014, - R.drawable.reindeer_pinchout0015, - R.drawable.reindeer_pinchout0016, - R.drawable.reindeer_pinchout0017, - R.drawable.reindeer_pinchout0018, - R.drawable.reindeer_pinchout0019, - R.drawable.reindeer_pinchout0020, - R.drawable.reindeer_pinchout0021, - R.drawable.reindeer_pinchout0022, - R.drawable.reindeer_pinchout0023, - R.drawable.reindeer_pinchout0024},//pinch in - {R.drawable.reindeer_pinchin0001, - R.drawable.reindeer_pinchin0002, - R.drawable.reindeer_pinchin0003, - R.drawable.reindeer_pinchin0004, - R.drawable.reindeer_pinchin0005, - R.drawable.reindeer_pinchin0006, - R.drawable.reindeer_pinchin0007, - R.drawable.reindeer_pinchin0008, - R.drawable.reindeer_pinchin0009, - R.drawable.reindeer_pinchin0010, - R.drawable.reindeer_pinchin0011, - R.drawable.reindeer_pinchin0012, - R.drawable.reindeer_pinchin0013, - R.drawable.reindeer_pinchin0014, - R.drawable.reindeer_pinchin0015, - R.drawable.reindeer_pinchin0016, - R.drawable.reindeer_pinchin0017, - R.drawable.reindeer_pinchin0018, - R.drawable.reindeer_pinchin0019, - R.drawable.reindeer_pinchin0020, - R.drawable.reindeer_pinchin0021, - R.drawable.reindeer_pinchin0022, - R.drawable.reindeer_pinchin0023, - R.drawable.reindeer_pinchin0024}//pinch in - }; - - private static final int[][] sFrameIndices = new int[][]{ - {0},//idle - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//tap - {0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23},//shake - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//swipe down - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22},//swipe up - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//swipe left - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22},//swipe right - {0, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23},//pinch in - {0, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23}//pinch out - }; - - @Override - public long getDuration(int animationKey) { - return sDurations[animationKey]; - } - - @Override - public int[] getFrameIndices(int animationKey) { - return sFrameIndices[animationKey]; - } - - @Override - public int[] getFrames(int animationKey) { - return sFrames[animationKey]; - } - - @Override - public int getSoundResource(int animationid) { - switch (animationid) { - case Character.ANIM_PINCH_IN: - return R.raw.reindeer_pinchin; - case Character.ANIM_PINCH_OUT: - return R.raw.reindeer_pinchout; - case Character.ANIM_SHAKE: - return R.raw.reindeer_shake; - case Character.ANIM_SWIPE_UP: - return R.raw.reindeer_swipeup; - case Character.ANIM_SWIPE_DOWN: - return R.raw.reindeer_swipedown; - case Character.ANIM_SWIPE_LEFT: - return R.raw.reindeer_swipeleft; - case Character.ANIM_SWIPE_RIGHT: - return R.raw.reindeer_swiperight; - case Character.ANIM_TAP: - return R.raw.reindeer_tap2; - } - - return -1; - } - - @Override - public String getCharacterName() { - return "r"; - } - -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Reindeer.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Reindeer.kt new file mode 100644 index 000000000..05c854663 --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Reindeer.kt @@ -0,0 +1,178 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +class Reindeer : Character { + + override val characterName: String + get() = "r" + + override fun getDuration(animationKey: Int): Long { + return durations[animationKey] + } + + override fun getFrameIndices(animationKey: Int): IntArray { + return frameIndices[animationKey] + } + + override fun getFrames(animationKey: Int): IntArray { + return frames[animationKey] + } + + override fun getSoundResource(animationid: Int): Int { + when (animationid) { + Character.ANIM_PINCH_IN -> return R.raw.reindeer_pinchin + Character.ANIM_PINCH_OUT -> return R.raw.reindeer_pinchout + Character.ANIM_SHAKE -> return R.raw.reindeer_shake + Character.ANIM_SWIPE_UP -> return R.raw.reindeer_swipeup + Character.ANIM_SWIPE_DOWN -> return R.raw.reindeer_swipedown + Character.ANIM_SWIPE_LEFT -> return R.raw.reindeer_swipeleft + Character.ANIM_SWIPE_RIGHT -> return R.raw.reindeer_swiperight + Character.ANIM_TAP -> return R.raw.reindeer_tap2 + } + + return -1 + } + + companion object { + + private val durations = longArrayOf(1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000) + + private val frames = arrayOf( + intArrayOf(R.drawable.reindeer_tap0001), // idle + intArrayOf(R.drawable.reindeer_tap0001, R.drawable.reindeer_tap0002, + R.drawable.reindeer_tap0003, R.drawable.reindeer_tap0004, + R.drawable.reindeer_tap0005, R.drawable.reindeer_tap0006, + R.drawable.reindeer_tap0007, R.drawable.reindeer_tap0008, + R.drawable.reindeer_tap0009, R.drawable.reindeer_tap0010, + R.drawable.reindeer_tap0010, R.drawable.reindeer_tap0010, + R.drawable.reindeer_tap0010, R.drawable.reindeer_tap0010, + R.drawable.reindeer_tap0010, R.drawable.reindeer_tap0010, + R.drawable.reindeer_tap0010, R.drawable.reindeer_tap0010, + R.drawable.reindeer_tap0019, R.drawable.reindeer_tap0020, + R.drawable.reindeer_tap0021, R.drawable.reindeer_tap0022, + R.drawable.reindeer_tap0005, R.drawable.reindeer_tap0005), // tap + intArrayOf(R.drawable.reindeer_pinchout0001, R.drawable.reindeer_shake0002, + R.drawable.reindeer_shake0003, R.drawable.reindeer_shake0004, + R.drawable.reindeer_shake0005, R.drawable.reindeer_shake0006, + R.drawable.reindeer_shake0007, R.drawable.reindeer_shake0008, + R.drawable.reindeer_shake0009, R.drawable.reindeer_shake0010, + R.drawable.reindeer_shake0011, R.drawable.reindeer_shake0012, + R.drawable.reindeer_shake0013, R.drawable.reindeer_shake0014, + R.drawable.reindeer_shake0015, R.drawable.reindeer_shake0016, + R.drawable.reindeer_shake0017, R.drawable.reindeer_shake0018, + R.drawable.reindeer_shake0019, R.drawable.reindeer_shake0020, + R.drawable.reindeer_shake0021, R.drawable.reindeer_shake0022, + R.drawable.reindeer_shake0023, R.drawable.reindeer_shake0024), // shake + intArrayOf(R.drawable.reindeer_swipedown0001, R.drawable.reindeer_swipedown0002, + R.drawable.reindeer_swipedown0003, R.drawable.reindeer_swipedown0004, + R.drawable.reindeer_swipedown0005, R.drawable.reindeer_swipedown0006, + R.drawable.reindeer_swipedown0007, R.drawable.reindeer_swipedown0008, + R.drawable.reindeer_swipedown0009, R.drawable.reindeer_swipedown0010, + R.drawable.reindeer_swipedown0011, R.drawable.reindeer_swipedown0012, + R.drawable.reindeer_swipedown0013, R.drawable.reindeer_swipedown0014, + R.drawable.reindeer_swipedown0015, R.drawable.reindeer_swipedown0016, + R.drawable.reindeer_swipedown0017, R.drawable.reindeer_swipedown0018, + R.drawable.reindeer_swipedown0019, R.drawable.reindeer_swipedown0020, + R.drawable.reindeer_swipedown0021, R.drawable.reindeer_swipedown0022, + R.drawable.reindeer_swipedown0023, + R.drawable.reindeer_swipedown0001), // swipe down + intArrayOf(R.drawable.reindeer_swipeup0002, R.drawable.reindeer_swipeup0003, + R.drawable.reindeer_swipeup0004, R.drawable.reindeer_swipeup0005, + R.drawable.reindeer_swipeup0006, R.drawable.reindeer_swipeup0007, + R.drawable.reindeer_swipeup0008, R.drawable.reindeer_swipeup0009, + R.drawable.reindeer_swipeup0010, R.drawable.reindeer_swipeup0011, + R.drawable.reindeer_swipeup0012, R.drawable.reindeer_swipeup0013, + R.drawable.reindeer_swipeup0014, R.drawable.reindeer_swipeup0015, + R.drawable.reindeer_swipeup0016, R.drawable.reindeer_swipeup0017, + R.drawable.reindeer_swipeup0018, R.drawable.reindeer_swipeup0019, + R.drawable.reindeer_swipeup0020, R.drawable.reindeer_swipeup0021, + R.drawable.reindeer_swipeup0022, R.drawable.reindeer_swipeup0023, + R.drawable.reindeer_swipeup0001), // swipe up + intArrayOf(R.drawable.reindeer_swipeleft0001, R.drawable.reindeer_swipeleft0002, + R.drawable.reindeer_swipeleft0003, R.drawable.reindeer_swipeleft0004, + R.drawable.reindeer_swipeleft0005, R.drawable.reindeer_swipeleft0006, + R.drawable.reindeer_swipeleft0007, R.drawable.reindeer_swipeleft0008, + R.drawable.reindeer_swipeleft0009, R.drawable.reindeer_swipeleft0010, + R.drawable.reindeer_swipeleft0011, R.drawable.reindeer_swipeleft0012, + R.drawable.reindeer_swipeleft0013, R.drawable.reindeer_swipeleft0014, + R.drawable.reindeer_swipeleft0015, R.drawable.reindeer_swipeleft0016, + R.drawable.reindeer_swipeleft0017, R.drawable.reindeer_swipeleft0018, + R.drawable.reindeer_swipeleft0019, R.drawable.reindeer_swipeleft0020, + R.drawable.reindeer_swipeleft0021, R.drawable.reindeer_swipeleft0022, + R.drawable.reindeer_swipeleft0023, + R.drawable.reindeer_swipeleft0024), // swipe left + intArrayOf(R.drawable.reindeer_swiperight0002, R.drawable.reindeer_swiperight0003, + R.drawable.reindeer_swiperight0004, R.drawable.reindeer_swiperight0005, + R.drawable.reindeer_swiperight0006, R.drawable.reindeer_swiperight0007, + R.drawable.reindeer_swiperight0008, R.drawable.reindeer_swiperight0009, + R.drawable.reindeer_swiperight0010, R.drawable.reindeer_swiperight0011, + R.drawable.reindeer_swiperight0012, R.drawable.reindeer_swiperight0013, + R.drawable.reindeer_swiperight0014, R.drawable.reindeer_swiperight0015, + R.drawable.reindeer_swiperight0016, R.drawable.reindeer_swiperight0017, + R.drawable.reindeer_swiperight0018, R.drawable.reindeer_swiperight0019, + R.drawable.reindeer_swiperight0020, R.drawable.reindeer_swiperight0021, + R.drawable.reindeer_swiperight0022, R.drawable.reindeer_swiperight0023, + R.drawable.reindeer_swiperight0024), // swipe right + intArrayOf(R.drawable.reindeer_pinchout0001, R.drawable.reindeer_pinchout0002, + R.drawable.reindeer_pinchout0003, R.drawable.reindeer_pinchout0004, + R.drawable.reindeer_pinchout0005, R.drawable.reindeer_pinchout0006, + R.drawable.reindeer_pinchout0007, R.drawable.reindeer_pinchout0008, + R.drawable.reindeer_pinchout0009, R.drawable.reindeer_pinchout0010, + R.drawable.reindeer_pinchout0011, R.drawable.reindeer_pinchout0012, + R.drawable.reindeer_pinchout0013, R.drawable.reindeer_pinchout0014, + R.drawable.reindeer_pinchout0015, R.drawable.reindeer_pinchout0016, + R.drawable.reindeer_pinchout0017, R.drawable.reindeer_pinchout0018, + R.drawable.reindeer_pinchout0019, R.drawable.reindeer_pinchout0020, + R.drawable.reindeer_pinchout0021, R.drawable.reindeer_pinchout0022, + R.drawable.reindeer_pinchout0023, + R.drawable.reindeer_pinchout0024), // pinch in + intArrayOf(R.drawable.reindeer_pinchin0001, R.drawable.reindeer_pinchin0002, + R.drawable.reindeer_pinchin0003, R.drawable.reindeer_pinchin0004, + R.drawable.reindeer_pinchin0005, R.drawable.reindeer_pinchin0006, + R.drawable.reindeer_pinchin0007, R.drawable.reindeer_pinchin0007, + R.drawable.reindeer_pinchin0007, R.drawable.reindeer_pinchin0007, + R.drawable.reindeer_pinchin0007, R.drawable.reindeer_pinchin0007, + R.drawable.reindeer_pinchin0007, R.drawable.reindeer_pinchin0007, + R.drawable.reindeer_pinchin0007, R.drawable.reindeer_pinchin0007, + R.drawable.reindeer_pinchin0007, R.drawable.reindeer_pinchin0018, + R.drawable.reindeer_pinchin0019, R.drawable.reindeer_pinchin0020, + R.drawable.reindeer_pinchin0021, R.drawable.reindeer_pinchin0022, + R.drawable.reindeer_pinchin0023, + R.drawable.reindeer_pinchin0001) // pinch in + ) + + private val frameIndices = arrayOf(intArrayOf(0), // idle + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23), // tap + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23), // shake + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23), // swipe down + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22), // swipe up + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23), // swipe left + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22), // swipe right + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23), // pinch in + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23) // pinch out + ) + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/ResourceOffsets.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/ResourceOffsets.java deleted file mode 100644 index 6fe3960b0..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/ResourceOffsets.java +++ /dev/null @@ -1,922 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -import android.graphics.Point; -import android.support.annotation.DrawableRes; - -import java.util.HashMap; - -/** - * To reduce RAM usage transparent areas were removed from all image frames for this game. This - * class encodes the offsets needed to display all the frames so that they align with the - * transparent regions removed. - */ -public class ResourceOffsets { - - private static HashMap offsets = new HashMap<>(); - private static Point EMPTY = new Point(0,0); - - public static Point ORIG_SIZE = new Point(1280, 1280); - - public static Point getOffsets(@DrawableRes int drawableId) { - Point p = offsets.get(drawableId); - return p == null ? EMPTY : p; - } - - static { - offsets.put(R.drawable.elf_pinchout0006, new Point(0, 0)); - offsets.put(R.drawable.snowman_swiperight0015, new Point(429, 221)); - offsets.put(R.drawable.reindeer_swipedown0018, new Point(365, 709)); - offsets.put(R.drawable.elf_shake0006, new Point(318, 230)); - offsets.put(R.drawable.reindeer_swipeleft0002, new Point(341, 331)); - offsets.put(R.drawable.reindeer_pinchout0024, new Point(342, 337)); - offsets.put(R.drawable.snowman_swipeup0023, new Point(429, 220)); - offsets.put(R.drawable.snowman_pinchout0001, new Point(429, 221)); - offsets.put(R.drawable.snowman_pinchout0022, new Point(334, 310)); - offsets.put(R.drawable.reindeer_swipedown0008, new Point(365, 705)); - offsets.put(R.drawable.santa_pinchin0007, new Point(136, 218)); - offsets.put(R.drawable.snowman_swipedown0021, new Point(429, 250)); - offsets.put(R.drawable.santa_idle0021, new Point(415, 434)); - offsets.put(R.drawable.santa_idle0024, new Point(415, 435)); - offsets.put(R.drawable.santa_pinchout20001, new Point(0, 0)); - offsets.put(R.drawable.reindeer_swipedown0009, new Point(376, 709)); - offsets.put(R.drawable.elf_swipedown0014, new Point(396, 611)); - offsets.put(R.drawable.snowman_pinchin0001, new Point(429, 221)); - offsets.put(R.drawable.snowman_pinchout0005, new Point(360, 434)); - offsets.put(R.drawable.santa_swipeleft0017, new Point(147, 628)); - offsets.put(R.drawable.reindeer_swipeup0013, new Point(210, 37)); - offsets.put(R.drawable.snowman_pinchin0012, new Point(90, 806)); - offsets.put(R.drawable.santa_swipeleft0009, new Point(94, 606)); - offsets.put(R.drawable.elf_pinchout0017, new Point(0, 0)); - offsets.put(R.drawable.snowman_swipeleft0007, new Point(429, 221)); - offsets.put(R.drawable.santa_idle0027, new Point(415, 432)); - offsets.put(R.drawable.snowman_tap0017, new Point(94, 221)); - offsets.put(R.drawable.santa_temp_tap01, new Point(415, 435)); - offsets.put(R.drawable.elf_swipeleft0023, new Point(435, 358)); - offsets.put(R.drawable.reindeer_swipeleft0019, new Point(384, 347)); - offsets.put(R.drawable.snowman_pinchin0009, new Point(90, 422)); - offsets.put(R.drawable.elf_idle0007, new Point(435, 437)); - offsets.put(R.drawable.snowman_idle0002, new Point(429, 220)); - offsets.put(R.drawable.reindeer_tap0008, new Point(342, 337)); - offsets.put(R.drawable.santa_swipe_right20005, new Point(350, 423)); - offsets.put(R.drawable.snowman_pinchout0003, new Point(395, 339)); - offsets.put(R.drawable.reindeer_pinchout0018, new Point(98, 37)); - offsets.put(R.drawable.snowman_swipeleft0004, new Point(429, 221)); - offsets.put(R.drawable.santa_idle0007, new Point(416, 430)); - offsets.put(R.drawable.snowman_swipeup0022, new Point(429, 219)); - offsets.put(R.drawable.santa_shake0005, new Point(229, 475)); - offsets.put(R.drawable.santa_swipeup0016, new Point(253, 221)); - offsets.put(R.drawable.snowman_tap0019, new Point(102, 221)); - offsets.put(R.drawable.santa_swipeup0023, new Point(427, 427)); - offsets.put(R.drawable.reindeer_pinchin0023, new Point(0, 0)); - offsets.put(R.drawable.snowman_swiperight0005, new Point(314, 221)); - offsets.put(R.drawable.elf_shake0016, new Point(285, 309)); - offsets.put(R.drawable.reindeer_swipeup0016, new Point(240, 73)); - offsets.put(R.drawable.reindeer_swipedown0023, new Point(344, 351)); - offsets.put(R.drawable.snowman_swiperight0024, new Point(429, 221)); - offsets.put(R.drawable.reindeer_swipeup0010, new Point(210, 34)); - offsets.put(R.drawable.reindeer_swipedown0007, new Point(375, 595)); - offsets.put(R.drawable.reindeer_pinchin0003, new Point(0, 0)); - offsets.put(R.drawable.santa_shake0010, new Point(241, 468)); - offsets.put(R.drawable.snowman_swipeleft0011, new Point(429, 221)); - offsets.put(R.drawable.elf_tap0018, new Point(435, 440)); - offsets.put(R.drawable.santa_swipeup0001, new Point(415, 435)); - offsets.put(R.drawable.elf_idle0012, new Point(435, 436)); - offsets.put(R.drawable.snowman_swiperight0008, new Point(271, 221)); - offsets.put(R.drawable.elf_idle0002, new Point(435, 440)); - offsets.put(R.drawable.snowman_pinchin0010, new Point(90, 513)); - offsets.put(R.drawable.elf_swiperight0011, new Point(1073, 707)); - offsets.put(R.drawable.santa_shake0003, new Point(279, 476)); - offsets.put(R.drawable.elf_swipeleft0012, new Point(294, 460)); - offsets.put(R.drawable.elf_tap0017, new Point(429, 436)); - offsets.put(R.drawable.elf_pinchin_ball0008, new Point(520, 914)); - offsets.put(R.drawable.snowman_swipeup0003, new Point(429, 182)); - offsets.put(R.drawable.santa_swipeleft0013, new Point(429, 608)); - offsets.put(R.drawable.snowman_pinchout0020, new Point(237, 580)); - offsets.put(R.drawable.reindeer_shake0018, new Point(384, 13)); - offsets.put(R.drawable.snowman_swipeleft0001, new Point(429, 221)); - offsets.put(R.drawable.reindeer_swipedown0005, new Point(381, 451)); - offsets.put(R.drawable.reindeer_shake0021, new Point(384, 206)); - offsets.put(R.drawable.snowman_idle0020, new Point(429, 218)); - offsets.put(R.drawable.reindeer_tap0022, new Point(342, 337)); - offsets.put(R.drawable.snowman_swipedown0020, new Point(429, 279)); - offsets.put(R.drawable.snowman_shake0005, new Point(115, 0)); - offsets.put(R.drawable.snowman_swipeup0012, new Point(429, 21)); - offsets.put(R.drawable.reindeer_tap0013, new Point(342, 337)); - offsets.put(R.drawable.reindeer_pinchin0008, new Point(0, 0)); - offsets.put(R.drawable.santa_shake0013, new Point(363, 426)); - offsets.put(R.drawable.elf_pinchin_ball0001, new Point(435, 440)); - offsets.put(R.drawable.snowman_idle0022, new Point(429, 219)); - offsets.put(R.drawable.reindeer_swipeleft0021, new Point(370, 339)); - offsets.put(R.drawable.santa_pinchin0017, new Point(270, 435)); - offsets.put(R.drawable.santa_idle0014, new Point(416, 430)); - offsets.put(R.drawable.elf_swiperight0020, new Point(252, 504)); - offsets.put(R.drawable.reindeer_tap0024, new Point(342, 337)); - offsets.put(R.drawable.elf_pinchout0015, new Point(0, 0)); - offsets.put(R.drawable.elf_tap0005, new Point(347, 380)); - offsets.put(R.drawable.snowman_pinchin0008, new Point(90, 367)); - offsets.put(R.drawable.snowman_idle0011, new Point(429, 217)); - offsets.put(R.drawable.reindeer_pinchin0018, new Point(0, 0)); - offsets.put(R.drawable.santa_idle0035, new Point(416, 429)); - offsets.put(R.drawable.reindeer_swipeup0015, new Point(218, 46)); - offsets.put(R.drawable.santa_idle0032, new Point(416, 429)); - offsets.put(R.drawable.elf_pinchout0020, new Point(106, 0)); - offsets.put(R.drawable.snowman_swipeup0007, new Point(427, 21)); - offsets.put(R.drawable.snowman_swipedown0013, new Point(429, 442)); - offsets.put(R.drawable.elf_swipedown0002, new Point(435, 440)); - offsets.put(R.drawable.snowman_swipedown0018, new Point(429, 212)); - offsets.put(R.drawable.santa_pinchin0009, new Point(96, 154)); - offsets.put(R.drawable.snowman_pinchin0005, new Point(55, 0)); - offsets.put(R.drawable.santa_idle0017, new Point(415, 432)); - offsets.put(R.drawable.santa_swipeleft0007, new Point(165, 589)); - offsets.put(R.drawable.santa_pinchout20015, new Point(0, 0)); - offsets.put(R.drawable.snowman_idle0014, new Point(429, 217)); - offsets.put(R.drawable.santa_idle0011, new Point(416, 429)); - offsets.put(R.drawable.reindeer_swipeleft0010, new Point(282, 280)); - offsets.put(R.drawable.reindeer_shake0013, new Point(383, 20)); - offsets.put(R.drawable.elf_shake0023, new Point(435, 471)); - offsets.put(R.drawable.snowman_swipeup0008, new Point(429, 21)); - offsets.put(R.drawable.santa_swipedown0007, new Point(429, 635)); - offsets.put(R.drawable.reindeer_swipeleft0003, new Point(338, 311)); - offsets.put(R.drawable.reindeer_pinchin0014, new Point(0, 0)); - offsets.put(R.drawable.santa_pinchout20004, new Point(0, 0)); - offsets.put(R.drawable.elf_swipeup0011, new Point(378, 6)); - offsets.put(R.drawable.reindeer_tap0003, new Point(350, 341)); - offsets.put(R.drawable.santa_swipeleft0004, new Point(314, 530)); - offsets.put(R.drawable.elf_idle0001, new Point(435, 440)); - offsets.put(R.drawable.elf_idle0006, new Point(435, 437)); - offsets.put(R.drawable.elf_shake0002, new Point(319, 369)); - offsets.put(R.drawable.elf_tap0010, new Point(100, 262)); - offsets.put(R.drawable.reindeer_tap0020, new Point(342, 337)); - offsets.put(R.drawable.santa_tap0008, new Point(270, 596)); - offsets.put(R.drawable.elf_idle0014, new Point(435, 436)); - offsets.put(R.drawable.santa_pinchin0015, new Point(215, 347)); - offsets.put(R.drawable.reindeer_swipedown0013, new Point(360, 709)); - offsets.put(R.drawable.reindeer_swipeup0020, new Point(334, 368)); - offsets.put(R.drawable.snowman_swiperight0009, new Point(139, 221)); - offsets.put(R.drawable.elf_pinchin_ball0016, new Point(515, 127)); - offsets.put(R.drawable.reindeer_swiperight0012, new Point(0, 1069)); - offsets.put(R.drawable.santa_pinchout20010, new Point(0, 0)); - offsets.put(R.drawable.snowman_swipedown0024, new Point(400, 266)); - offsets.put(R.drawable.reindeer_swipedown0017, new Point(363, 709)); - offsets.put(R.drawable.reindeer_swipeup0007, new Point(327, 105)); - offsets.put(R.drawable.elf_swipedown0005, new Point(435, 454)); - offsets.put(R.drawable.reindeer_swiperight0008, new Point(205, 660)); - offsets.put(R.drawable.reindeer_pinchin0015, new Point(0, 0)); - offsets.put(R.drawable.snowman_swipedown0001, new Point(429, 221)); - offsets.put(R.drawable.reindeer_shake0016, new Point(383, 17)); - offsets.put(R.drawable.reindeer_shake0008, new Point(384, 23)); - offsets.put(R.drawable.elf_swipeleft0024, new Point(435, 363)); - offsets.put(R.drawable.snowman_pinchout0019, new Point(237, 580)); - offsets.put(R.drawable.santa_shake0015, new Point(332, 421)); - offsets.put(R.drawable.reindeer_swiperight0016, new Point(211, 335)); - offsets.put(R.drawable.santa_shake0014, new Point(367, 422)); - offsets.put(R.drawable.elf_swipeup0003, new Point(386, 360)); - offsets.put(R.drawable.elf_tap0011, new Point(81, 270)); - offsets.put(R.drawable.santa_temp_left01, new Point(415, 435)); - offsets.put(R.drawable.elf_swipedown0018, new Point(435, 469)); - offsets.put(R.drawable.santa_idle0031, new Point(416, 430)); - offsets.put(R.drawable.elf_swipeup0006, new Point(476, 165)); - offsets.put(R.drawable.elf_swiperight0022, new Point(435, 459)); - offsets.put(R.drawable.snowman_swipeleft0003, new Point(429, 221)); - offsets.put(R.drawable.elf_swipeup0005, new Point(475, 262)); - offsets.put(R.drawable.snowman_pinchout0006, new Point(342, 473)); - offsets.put(R.drawable.elf_swipeleft0022, new Point(435, 352)); - offsets.put(R.drawable.elf_idle0021, new Point(435, 438)); - offsets.put(R.drawable.santa_swipeup0003, new Point(423, 402)); - offsets.put(R.drawable.snowman_shake0001, new Point(393, 221)); - offsets.put(R.drawable.reindeer_swipeleft0007, new Point(301, 225)); - offsets.put(R.drawable.snowman_swipeleft0024, new Point(429, 221)); - offsets.put(R.drawable.snowman_tap0013, new Point(79, 221)); - offsets.put(R.drawable.santa_idle0029, new Point(415, 431)); - offsets.put(R.drawable.santa_idle0041, new Point(415, 433)); - offsets.put(R.drawable.snowman_swiperight0006, new Point(139, 221)); - offsets.put(R.drawable.reindeer_swipedown0010, new Point(383, 709)); - offsets.put(R.drawable.santa_shake0023, new Point(351, 426)); - offsets.put(R.drawable.santa_swipedown0021, new Point(0, 159)); - offsets.put(R.drawable.snowman_idle0018, new Point(429, 218)); - offsets.put(R.drawable.reindeer_swipeleft0013, new Point(301, 324)); - offsets.put(R.drawable.reindeer_pinchout0004, new Point(331, 324)); - offsets.put(R.drawable.elf_pinchin_ball0014, new Point(520, 134)); - offsets.put(R.drawable.snowman_pinchin0006, new Point(35, 64)); - offsets.put(R.drawable.santa_swipedown0023, new Point(0, 435)); - offsets.put(R.drawable.santa_shake0021, new Point(344, 421)); - offsets.put(R.drawable.santa_swipe_right20020, new Point(401, 435)); - offsets.put(R.drawable.snowman_shake0010, new Point(100, 0)); - offsets.put(R.drawable.elf_swipedown0012, new Point(396, 611)); - offsets.put(R.drawable.elf_swipedown0009, new Point(400, 535)); - offsets.put(R.drawable.reindeer_pinchout0015, new Point(84, 20)); - offsets.put(R.drawable.reindeer_shake0014, new Point(384, 30)); - offsets.put(R.drawable.elf_swipeleft0013, new Point(269, 460)); - offsets.put(R.drawable.reindeer_shake0002, new Point(357, 301)); - offsets.put(R.drawable.reindeer_shake0001, new Point(342, 337)); - offsets.put(R.drawable.snowman_swipeup0013, new Point(415, 21)); - offsets.put(R.drawable.santa_shake0022, new Point(279, 422)); - offsets.put(R.drawable.santa_shake0017, new Point(377, 420)); - offsets.put(R.drawable.santa_pinchin0005, new Point(215, 347)); - offsets.put(R.drawable.snowman_swipeleft0005, new Point(429, 221)); - offsets.put(R.drawable.elf_swipeup0012, new Point(378, 119)); - offsets.put(R.drawable.santa_tap0011, new Point(270, 443)); - offsets.put(R.drawable.snowman_idle0009, new Point(429, 217)); - offsets.put(R.drawable.santa_tap0012, new Point(269, 443)); - offsets.put(R.drawable.snowman_swipeleft0006, new Point(429, 221)); - offsets.put(R.drawable.snowman_shake0002, new Point(130, 0)); - offsets.put(R.drawable.reindeer_swiperight0018, new Point(363, 338)); - offsets.put(R.drawable.elf_pinchout0014, new Point(0, 0)); - offsets.put(R.drawable.santa_shake0019, new Point(341, 420)); - offsets.put(R.drawable.elf_shake0021, new Point(228, 236)); - offsets.put(R.drawable.snowman_idle0017, new Point(429, 217)); - offsets.put(R.drawable.snowman_swiperight0007, new Point(191, 221)); - offsets.put(R.drawable.santa_swipedown0018, new Point(0, 0)); - offsets.put(R.drawable.snowman_tap0022, new Point(118, 221)); - offsets.put(R.drawable.snowman_swiperight0003, new Point(224, 221)); - offsets.put(R.drawable.elf_swipedown0003, new Point(435, 414)); - offsets.put(R.drawable.snowman_swipeup0005, new Point(429, 70)); - offsets.put(R.drawable.elf_pinchout0012, new Point(0, 0)); - offsets.put(R.drawable.snowman_swipedown0006, new Point(253, 447)); - offsets.put(R.drawable.snowman_pinchin0004, new Point(22, 0)); - offsets.put(R.drawable.snowman_swiperight0001, new Point(429, 221)); - offsets.put(R.drawable.santa_swipedown0010, new Point(429, 635)); - offsets.put(R.drawable.snowman_idle0013, new Point(429, 217)); - offsets.put(R.drawable.reindeer_swiperight0003, new Point(344, 337)); - offsets.put(R.drawable.elf_tap0008, new Point(175, 254)); - offsets.put(R.drawable.snowman_swipeup0011, new Point(429, 21)); - offsets.put(R.drawable.santa_swipedown0006, new Point(429, 635)); - offsets.put(R.drawable.reindeer_pinchin0011, new Point(0, 0)); - offsets.put(R.drawable.santa_idle0036, new Point(416, 429)); - offsets.put(R.drawable.snowman_swiperight0017, new Point(429, 221)); - offsets.put(R.drawable.snowman_swipedown0012, new Point(425, 350)); - offsets.put(R.drawable.santa_swipedown0005, new Point(429, 610)); - offsets.put(R.drawable.elf_tap0020, new Point(435, 440)); - offsets.put(R.drawable.santa_idle0016, new Point(415, 432)); - offsets.put(R.drawable.snowman_shake0017, new Point(72, 0)); - offsets.put(R.drawable.elf_pinchin_ball0024, new Point(520, 518)); - offsets.put(R.drawable.snowman_swipedown0007, new Point(226, 419)); - offsets.put(R.drawable.reindeer_pinchout0021, new Point(183, 142)); - offsets.put(R.drawable.reindeer_pinchin0022, new Point(0, 0)); - offsets.put(R.drawable.santa_swipedown0008, new Point(429, 635)); - offsets.put(R.drawable.elf_tap0015, new Point(382, 398)); - offsets.put(R.drawable.reindeer_pinchout0003, new Point(339, 334)); - offsets.put(R.drawable.reindeer_swipeleft0022, new Point(353, 338)); - offsets.put(R.drawable.elf_shake0011, new Point(343, 183)); - offsets.put(R.drawable.elf_swiperight0002, new Point(423, 441)); - offsets.put(R.drawable.reindeer_swipeup0006, new Point(353, 154)); - offsets.put(R.drawable.elf_tap0016, new Point(412, 422)); - offsets.put(R.drawable.santa_temp_shake01, new Point(415, 435)); - offsets.put(R.drawable.elf_swipeup0021, new Point(435, 480)); - offsets.put(R.drawable.elf_idle0009, new Point(435, 437)); - offsets.put(R.drawable.elf_swipedown0016, new Point(433, 561)); - offsets.put(R.drawable.santa_pinchout20006, new Point(0, 0)); - offsets.put(R.drawable.santa_pinchout20020, new Point(0, 0)); - offsets.put(R.drawable.reindeer_pinchout0007, new Point(276, 255)); - offsets.put(R.drawable.santa_idle0048, new Point(415, 435)); - offsets.put(R.drawable.snowman_idle0003, new Point(429, 219)); - offsets.put(R.drawable.elf_swipeleft0019, new Point(432, 393)); - offsets.put(R.drawable.santa_pinchout20012, new Point(0, 0)); - offsets.put(R.drawable.reindeer_pinchout0016, new Point(82, 17)); - offsets.put(R.drawable.elf_tap0024, new Point(435, 440)); - offsets.put(R.drawable.santa_idle0040, new Point(415, 432)); - offsets.put(R.drawable.elf_swiperight0017, new Point(0, 606)); - offsets.put(R.drawable.snowman_swiperight0011, new Point(330, 221)); - offsets.put(R.drawable.santa_idle0001, new Point(415, 435)); - offsets.put(R.drawable.snowman_tap0004, new Point(245, 227)); - offsets.put(R.drawable.elf_tap0013, new Point(286, 324)); - offsets.put(R.drawable.elf_shake0012, new Point(318, 233)); - offsets.put(R.drawable.elf_pinchout0008, new Point(0, 0)); - offsets.put(R.drawable.santa_pinchin0016, new Point(270, 435)); - offsets.put(R.drawable.snowman_swipedown0016, new Point(422, 13)); - offsets.put(R.drawable.reindeer_pinchin0004, new Point(0, 0)); - offsets.put(R.drawable.santa_swipeup0005, new Point(429, 375)); - offsets.put(R.drawable.snowman_shake0003, new Point(126, 21)); - offsets.put(R.drawable.elf_pinchout0004, new Point(0, 0)); - offsets.put(R.drawable.reindeer_swipedown0004, new Point(364, 401)); - offsets.put(R.drawable.reindeer_pinchout0023, new Point(281, 262)); - offsets.put(R.drawable.santa_swipeleft0018, new Point(216, 579)); - offsets.put(R.drawable.elf_pinchout0018, new Point(0, 0)); - offsets.put(R.drawable.reindeer_shake0004, new Point(383, 13)); - offsets.put(R.drawable.reindeer_pinchin0016, new Point(0, 0)); - offsets.put(R.drawable.santa_swipe_right20001, new Point(415, 435)); - offsets.put(R.drawable.santa_swipe_right20021, new Point(389, 435)); - offsets.put(R.drawable.santa_swipeleft0014, new Point(429, 508)); - offsets.put(R.drawable.elf_shake0018, new Point(279, 233)); - offsets.put(R.drawable.santa_idle0003, new Point(415, 433)); - offsets.put(R.drawable.santa_swipeup0018, new Point(317, 317)); - offsets.put(R.drawable.elf_idle0010, new Point(435, 436)); - offsets.put(R.drawable.snowman_pinchin0024, new Point(401, 220)); - offsets.put(R.drawable.snowman_swiperight0016, new Point(429, 221)); - offsets.put(R.drawable.snowman_pinchin0007, new Point(35, 64)); - offsets.put(R.drawable.snowman_swipeup0010, new Point(429, 21)); - offsets.put(R.drawable.reindeer_pinchin0020, new Point(0, 0)); - offsets.put(R.drawable.elf_swipedown0015, new Point(400, 605)); - offsets.put(R.drawable.elf_tap0014, new Point(337, 366)); - offsets.put(R.drawable.elf_tap0006, new Point(290, 333)); - offsets.put(R.drawable.elf_swiperight0023, new Point(423, 440)); - offsets.put(R.drawable.santa_swipe_right20023, new Point(415, 435)); - offsets.put(R.drawable.snowman_swipeup0024, new Point(429, 221)); - offsets.put(R.drawable.snowman_tap0002, new Point(381, 227)); - offsets.put(R.drawable.santa_swipedown0022, new Point(0, 414)); - offsets.put(R.drawable.santa_swipe_right20017, new Point(415, 385)); - offsets.put(R.drawable.reindeer_swipedown0024, new Point(342, 337)); - offsets.put(R.drawable.elf_pinchin_ball0012, new Point(519, 270)); - offsets.put(R.drawable.reindeer_tap0014, new Point(342, 337)); - offsets.put(R.drawable.santa_idle0008, new Point(416, 430)); - offsets.put(R.drawable.snowman_idle0001, new Point(429, 221)); - offsets.put(R.drawable.reindeer_pinchout0010, new Point(177, 135)); - offsets.put(R.drawable.reindeer_swipeup0019, new Point(349, 266)); - offsets.put(R.drawable.santa_tap0022, new Point(358, 435)); - offsets.put(R.drawable.santa_swipeup0012, new Point(417, 213)); - offsets.put(R.drawable.snowman_idle0019, new Point(429, 218)); - offsets.put(R.drawable.elf_swipedown0023, new Point(435, 460)); - offsets.put(R.drawable.elf_pinchin_ball0025, new Point(476, 280)); - offsets.put(R.drawable.santa_swipe_right20009, new Point(332, 416)); - offsets.put(R.drawable.santa_idle0038, new Point(415, 431)); - offsets.put(R.drawable.snowman_pinchout0021, new Point(285, 423)); - offsets.put(R.drawable.santa_swipeup0022, new Point(420, 438)); - offsets.put(R.drawable.elf_pinchin_ball0007, new Point(497, 828)); - offsets.put(R.drawable.reindeer_shake0023, new Point(342, 346)); - offsets.put(R.drawable.snowman_idle0023, new Point(429, 220)); - offsets.put(R.drawable.snowman_swiperight0012, new Point(399, 221)); - offsets.put(R.drawable.elf_shake0024, new Point(435, 440)); - offsets.put(R.drawable.reindeer_pinchout0017, new Point(86, 22)); - offsets.put(R.drawable.reindeer_swipedown0001, new Point(342, 337)); - offsets.put(R.drawable.snowman_pinchin0021, new Point(182, 191)); - offsets.put(R.drawable.snowman_swipeup0020, new Point(429, 221)); - offsets.put(R.drawable.reindeer_shake0019, new Point(384, 34)); - offsets.put(R.drawable.elf_swipeleft0009, new Point(391, 460)); - offsets.put(R.drawable.elf_pinchout0011, new Point(0, 0)); - offsets.put(R.drawable.snowman_tap0016, new Point(90, 221)); - offsets.put(R.drawable.elf_shake0004, new Point(228, 236)); - offsets.put(R.drawable.snowman_tap0020, new Point(105, 221)); - offsets.put(R.drawable.elf_pinchout0022, new Point(464, 489)); - offsets.put(R.drawable.santa_swipedown0011, new Point(345, 613)); - offsets.put(R.drawable.elf_pinchin_ball0029, new Point(404, 450)); - offsets.put(R.drawable.elf_shake0013, new Point(201, 285)); - offsets.put(R.drawable.santa_swipeup0007, new Point(429, 304)); - offsets.put(R.drawable.snowman_idle0016, new Point(429, 217)); - offsets.put(R.drawable.santa_swipe_right20010, new Point(312, 437)); - offsets.put(R.drawable.reindeer_swipeup0018, new Point(329, 183)); - offsets.put(R.drawable.reindeer_tap0010, new Point(342, 337)); - offsets.put(R.drawable.elf_swipedown0001, new Point(435, 440)); - offsets.put(R.drawable.reindeer_pinchin0024, new Point(0, 0)); - offsets.put(R.drawable.elf_swipeup0020, new Point(404, 450)); - offsets.put(R.drawable.elf_pinchout0023, new Point(459, 480)); - offsets.put(R.drawable.santa_pinchin0018, new Point(235, 505)); - offsets.put(R.drawable.reindeer_pinchin0019, new Point(0, 0)); - offsets.put(R.drawable.santa_shake0006, new Point(245, 474)); - offsets.put(R.drawable.snowman_shake0019, new Point(74, 0)); - offsets.put(R.drawable.santa_idle0019, new Point(415, 434)); - offsets.put(R.drawable.snowman_swipedown0011, new Point(394, 381)); - offsets.put(R.drawable.snowman_pinchin0020, new Point(167, 189)); - offsets.put(R.drawable.santa_idle0043, new Point(415, 434)); - offsets.put(R.drawable.snowman_swipeleft0013, new Point(415, 221)); - offsets.put(R.drawable.reindeer_swipeup0023, new Point(193, 338)); - offsets.put(R.drawable.santa_pinchout20011, new Point(0, 0)); - offsets.put(R.drawable.elf_swiperight0003, new Point(435, 425)); - offsets.put(R.drawable.reindeer_swipedown0014, new Point(343, 709)); - offsets.put(R.drawable.santa_swipeleft0020, new Point(351, 467)); - offsets.put(R.drawable.snowman_swipeleft0023, new Point(429, 221)); - offsets.put(R.drawable.reindeer_swipeup0021, new Point(268, 354)); - offsets.put(R.drawable.snowman_tap0009, new Point(79, 221)); - offsets.put(R.drawable.elf_shake0009, new Point(201, 285)); - offsets.put(R.drawable.santa_swipeleft0003, new Point(374, 516)); - offsets.put(R.drawable.snowman_swipeleft0022, new Point(429, 221)); - offsets.put(R.drawable.elf_pinchout0013, new Point(0, 0)); - offsets.put(R.drawable.santa_tap0015, new Point(270, 412)); - offsets.put(R.drawable.snowman_pinchout0002, new Point(412, 283)); - offsets.put(R.drawable.elf_swipedown0010, new Point(397, 556)); - offsets.put(R.drawable.elf_pinchin_ball0011, new Point(521, 426)); - offsets.put(R.drawable.reindeer_swipedown0012, new Point(378, 709)); - offsets.put(R.drawable.santa_pinchin0002, new Point(358, 435)); - offsets.put(R.drawable.reindeer_tap0004, new Point(346, 339)); - offsets.put(R.drawable.snowman_shake0015, new Point(83, 0)); - offsets.put(R.drawable.santa_shake0016, new Point(322, 420)); - offsets.put(R.drawable.snowman_pinchin0014, new Point(90, 1245)); - offsets.put(R.drawable.reindeer_swiperight0023, new Point(330, 341)); - offsets.put(R.drawable.santa_pinchin0019, new Point(224, 529)); - offsets.put(R.drawable.reindeer_swipeleft0018, new Point(384, 355)); - offsets.put(R.drawable.reindeer_shake0015, new Point(384, 23)); - offsets.put(R.drawable.snowman_pinchin0011, new Point(90, 641)); - offsets.put(R.drawable.santa_swipe_right20011, new Point(412, 394)); - offsets.put(R.drawable.santa_pinchin0004, new Point(270, 435)); - offsets.put(R.drawable.snowman_shake0021, new Point(68, 11)); - offsets.put(R.drawable.reindeer_swipeleft0012, new Point(291, 300)); - offsets.put(R.drawable.elf_idle0018, new Point(435, 437)); - offsets.put(R.drawable.santa_swipeup0006, new Point(429, 334)); - offsets.put(R.drawable.reindeer_pinchout0006, new Point(299, 285)); - offsets.put(R.drawable.santa_pinchin0001, new Point(415, 435)); - offsets.put(R.drawable.santa_swipeup0020, new Point(425, 462)); - offsets.put(R.drawable.elf_swipeleft0007, new Point(362, 460)); - offsets.put(R.drawable.snowman_tap0015, new Point(87, 221)); - offsets.put(R.drawable.elf_swiperight0007, new Point(506, 517)); - offsets.put(R.drawable.elf_swipeup0016, new Point(476, 200)); - offsets.put(R.drawable.elf_swipeleft0020, new Point(435, 389)); - offsets.put(R.drawable.santa_swipedown0009, new Point(429, 635)); - offsets.put(R.drawable.santa_swipe_right20002, new Point(420, 435)); - offsets.put(R.drawable.elf_swipeleft0015, new Point(369, 460)); - offsets.put(R.drawable.elf_swipeleft0002, new Point(414, 441)); - offsets.put(R.drawable.elf_swipeleft0008, new Point(393, 460)); - offsets.put(R.drawable.snowman_pinchout0018, new Point(237, 580)); - offsets.put(R.drawable.santa_tap0002, new Point(358, 435)); - offsets.put(R.drawable.santa_tap0019, new Point(270, 423)); - offsets.put(R.drawable.elf_pinchout0007, new Point(0, 0)); - offsets.put(R.drawable.snowman_swiperight0018, new Point(429, 221)); - offsets.put(R.drawable.snowman_pinchout0014, new Point(237, 580)); - offsets.put(R.drawable.elf_pinchin_ball0006, new Point(487, 762)); - offsets.put(R.drawable.snowman_pinchout0011, new Point(255, 577)); - offsets.put(R.drawable.snowman_swiperight0022, new Point(417, 221)); - offsets.put(R.drawable.reindeer_swiperight0021, new Point(325, 361)); - offsets.put(R.drawable.snowman_idle0007, new Point(429, 217)); - offsets.put(R.drawable.santa_swipedown0013, new Point(266, 0)); - offsets.put(R.drawable.santa_pinchout20002, new Point(0, 0)); - offsets.put(R.drawable.santa_swipeup0019, new Point(422, 428)); - offsets.put(R.drawable.snowman_swipeleft0016, new Point(429, 221)); - offsets.put(R.drawable.elf_swipeup0004, new Point(435, 200)); - offsets.put(R.drawable.santa_swipeleft0006, new Point(209, 565)); - offsets.put(R.drawable.santa_idle0005, new Point(415, 431)); - offsets.put(R.drawable.reindeer_swipeup0014, new Point(210, 37)); - offsets.put(R.drawable.elf_shake0010, new Point(285, 309)); - offsets.put(R.drawable.reindeer_swipeleft0008, new Point(290, 260)); - offsets.put(R.drawable.snowman_swipeup0016, new Point(219, 21)); - offsets.put(R.drawable.reindeer_swipeup0003, new Point(342, 275)); - offsets.put(R.drawable.reindeer_swiperight0009, new Point(121, 685)); - offsets.put(R.drawable.reindeer_swiperight0017, new Point(249, 332)); - offsets.put(R.drawable.elf_swipeup0015, new Point(476, 311)); - offsets.put(R.drawable.elf_swipeup0013, new Point(397, 259)); - offsets.put(R.drawable.santa_shake0024, new Point(355, 435)); - offsets.put(R.drawable.santa_shake0002, new Point(328, 456)); - offsets.put(R.drawable.reindeer_swipeleft0004, new Point(333, 279)); - offsets.put(R.drawable.snowman_shake0016, new Point(76, 0)); - offsets.put(R.drawable.santa_swipedown0014, new Point(262, 0)); - offsets.put(R.drawable.reindeer_swipedown0019, new Point(384, 601)); - offsets.put(R.drawable.elf_pinchin_ball0031, new Point(435, 458)); - offsets.put(R.drawable.santa_idle0046, new Point(415, 435)); - offsets.put(R.drawable.elf_tap0021, new Point(435, 440)); - offsets.put(R.drawable.elf_tap0019, new Point(435, 440)); - offsets.put(R.drawable.elf_pinchin_ball0020, new Point(520, 898)); - offsets.put(R.drawable.santa_tap0005, new Point(270, 509)); - offsets.put(R.drawable.santa_idle0009, new Point(416, 429)); - offsets.put(R.drawable.santa_temp_down01, new Point(415, 435)); - offsets.put(R.drawable.elf_pinchout0019, new Point(50, 0)); - offsets.put(R.drawable.snowman_tap0006, new Point(146, 221)); - offsets.put(R.drawable.elf_swiperight0021, new Point(427, 451)); - offsets.put(R.drawable.santa_swipeup0021, new Point(399, 471)); - offsets.put(R.drawable.elf_idle0019, new Point(435, 438)); - offsets.put(R.drawable.elf_swiperight0010, new Point(888, 568)); - offsets.put(R.drawable.elf_swipeup0001, new Point(435, 440)); - offsets.put(R.drawable.reindeer_swipedown0021, new Point(371, 437)); - offsets.put(R.drawable.snowman_swipeleft0019, new Point(429, 221)); - offsets.put(R.drawable.reindeer_shake0020, new Point(384, 99)); - offsets.put(R.drawable.snowman_tap0008, new Point(79, 221)); - offsets.put(R.drawable.santa_idle0020, new Point(415, 434)); - offsets.put(R.drawable.snowman_pinchout0015, new Point(237, 580)); - offsets.put(R.drawable.snowman_tap0024, new Point(429, 221)); - offsets.put(R.drawable.snowman_swipeup0004, new Point(429, 133)); - offsets.put(R.drawable.reindeer_swipeleft0001, new Point(342, 337)); - offsets.put(R.drawable.snowman_shake0007, new Point(108, 0)); - offsets.put(R.drawable.santa_swipeleft0015, new Point(415, 416)); - offsets.put(R.drawable.elf_tap0012, new Point(221, 272)); - offsets.put(R.drawable.elf_pinchout0003, new Point(250, 0)); - offsets.put(R.drawable.reindeer_shake0022, new Point(342, 357)); - offsets.put(R.drawable.reindeer_shake0005, new Point(384, 13)); - offsets.put(R.drawable.snowman_swipeleft0021, new Point(429, 221)); - offsets.put(R.drawable.reindeer_swipedown0006, new Point(384, 516)); - offsets.put(R.drawable.elf_swiperight0018, new Point(0, 538)); - offsets.put(R.drawable.elf_idle0008, new Point(435, 437)); - offsets.put(R.drawable.reindeer_swipeup0017, new Point(277, 119)); - offsets.put(R.drawable.elf_pinchin_ball0022, new Point(513, 738)); - offsets.put(R.drawable.elf_swipeup0018, new Point(454, 400)); - offsets.put(R.drawable.santa_swipeup0010, new Point(429, 266)); - offsets.put(R.drawable.snowman_pinchout0009, new Point(290, 553)); - offsets.put(R.drawable.elf_pinchin_ball0010, new Point(521, 653)); - offsets.put(R.drawable.snowman_tap0011, new Point(79, 221)); - offsets.put(R.drawable.santa_pinchout20014, new Point(0, 0)); - offsets.put(R.drawable.elf_swipeleft0006, new Point(330, 460)); - offsets.put(R.drawable.elf_swipeleft0004, new Point(372, 441)); - offsets.put(R.drawable.elf_tap0001, new Point(435, 440)); - offsets.put(R.drawable.snowman_swiperight0020, new Point(429, 221)); - offsets.put(R.drawable.reindeer_swiperight0015, new Point(0, 335)); - offsets.put(R.drawable.snowman_shake0008, new Point(110, 0)); - offsets.put(R.drawable.santa_idle0023, new Point(415, 435)); - offsets.put(R.drawable.elf_swipeup0009, new Point(357, 152)); - offsets.put(R.drawable.elf_swipeup0002, new Point(386, 400)); - offsets.put(R.drawable.snowman_swipedown0010, new Point(335, 435)); - offsets.put(R.drawable.santa_swipe_right20015, new Point(415, 353)); - offsets.put(R.drawable.reindeer_swipeleft0023, new Point(344, 337)); - offsets.put(R.drawable.santa_pinchout20003, new Point(0, 0)); - offsets.put(R.drawable.snowman_swiperight0013, new Point(429, 221)); - offsets.put(R.drawable.snowman_swipedown0015, new Point(429, 261)); - offsets.put(R.drawable.snowman_swipeup0014, new Point(346, 21)); - offsets.put(R.drawable.snowman_swipedown0008, new Point(207, 344)); - offsets.put(R.drawable.reindeer_pinchout0012, new Point(124, 69)); - offsets.put(R.drawable.santa_temp_zoom_in01, new Point(415, 435)); - offsets.put(R.drawable.reindeer_pinchin0021, new Point(0, 0)); - offsets.put(R.drawable.santa_tap0017, new Point(270, 423)); - offsets.put(R.drawable.snowman_shake0006, new Point(110, 0)); - offsets.put(R.drawable.reindeer_tap0006, new Point(342, 337)); - offsets.put(R.drawable.elf_idle0024, new Point(435, 440)); - offsets.put(R.drawable.santa_idle0034, new Point(416, 429)); - offsets.put(R.drawable.santa_swipeleft0005, new Point(258, 546)); - offsets.put(R.drawable.elf_pinchin_ball0027, new Point(459, 400)); - offsets.put(R.drawable.reindeer_tap0005, new Point(342, 337)); - offsets.put(R.drawable.elf_swipedown0020, new Point(435, 470)); - offsets.put(R.drawable.elf_idle0011, new Point(435, 436)); - offsets.put(R.drawable.snowman_swipeup0001, new Point(429, 221)); - offsets.put(R.drawable.santa_swipedown0001, new Point(415, 435)); - offsets.put(R.drawable.elf_shake0008, new Point(318, 362)); - offsets.put(R.drawable.reindeer_pinchout0022, new Point(228, 197)); - offsets.put(R.drawable.reindeer_pinchout0014, new Point(92, 30)); - offsets.put(R.drawable.snowman_swipedown0002, new Point(400, 266)); - offsets.put(R.drawable.reindeer_swiperight0001, new Point(342, 337)); - offsets.put(R.drawable.santa_swipedown0019, new Point(0, 0)); - offsets.put(R.drawable.santa_swipeleft0024, new Point(429, 424)); - offsets.put(R.drawable.reindeer_swiperight0005, new Point(354, 337)); - offsets.put(R.drawable.santa_pinchout20023, new Point(0, 0)); - offsets.put(R.drawable.snowman_swipeup0002, new Point(429, 211)); - offsets.put(R.drawable.santa_idle0022, new Point(415, 435)); - offsets.put(R.drawable.elf_swipeleft0010, new Point(317, 460)); - offsets.put(R.drawable.snowman_tap0007, new Point(95, 221)); - offsets.put(R.drawable.santa_swipedown0002, new Point(358, 435)); - offsets.put(R.drawable.snowman_pinchout0016, new Point(237, 580)); - offsets.put(R.drawable.santa_idle0018, new Point(415, 433)); - offsets.put(R.drawable.reindeer_shake0010, new Point(383, 13)); - offsets.put(R.drawable.santa_tap0014, new Point(270, 320)); - offsets.put(R.drawable.santa_shake0020, new Point(386, 420)); - offsets.put(R.drawable.snowman_swipeup0017, new Point(231, 33)); - offsets.put(R.drawable.elf_swipeup0023, new Point(435, 445)); - offsets.put(R.drawable.elf_tap0007, new Point(221, 272)); - offsets.put(R.drawable.snowman_idle0021, new Point(429, 219)); - offsets.put(R.drawable.elf_pinchin_ball0013, new Point(519, 169)); - offsets.put(R.drawable.santa_tap0021, new Point(270, 435)); - offsets.put(R.drawable.elf_pinchin_ball0018, new Point(506, 385)); - offsets.put(R.drawable.santa_pinchin0006, new Point(171, 275)); - offsets.put(R.drawable.reindeer_swipedown0015, new Point(349, 709)); - offsets.put(R.drawable.santa_swipe_right20007, new Point(341, 418)); - offsets.put(R.drawable.reindeer_swiperight0022, new Point(304, 370)); - offsets.put(R.drawable.santa_swipeleft0002, new Point(398, 476)); - offsets.put(R.drawable.santa_swipedown0004, new Point(340, 535)); - offsets.put(R.drawable.elf_idle0023, new Point(435, 440)); - offsets.put(R.drawable.santa_tap0020, new Point(270, 443)); - offsets.put(R.drawable.elf_tap0023, new Point(435, 440)); - offsets.put(R.drawable.reindeer_swipedown0016, new Point(357, 709)); - offsets.put(R.drawable.snowman_swipedown0005, new Point(285, 401)); - offsets.put(R.drawable.reindeer_tap0009, new Point(342, 337)); - offsets.put(R.drawable.snowman_swipeup0021, new Point(429, 220)); - offsets.put(R.drawable.elf_swipedown0006, new Point(435, 475)); - offsets.put(R.drawable.reindeer_swipeleft0011, new Point(284, 285)); - offsets.put(R.drawable.snowman_shake0014, new Point(87, 3)); - offsets.put(R.drawable.snowman_idle0006, new Point(429, 218)); - offsets.put(R.drawable.santa_swipe_right20004, new Point(350, 428)); - offsets.put(R.drawable.reindeer_swipeleft0005, new Point(326, 235)); - offsets.put(R.drawable.snowman_idle0004, new Point(429, 219)); - offsets.put(R.drawable.elf_shake0001, new Point(435, 440)); - offsets.put(R.drawable.santa_pinchout20013, new Point(0, 0)); - offsets.put(R.drawable.reindeer_tap0023, new Point(342, 337)); - offsets.put(R.drawable.elf_swipedown0022, new Point(435, 463)); - offsets.put(R.drawable.elf_swipeup0017, new Point(456, 380)); - offsets.put(R.drawable.snowman_pinchout0013, new Point(237, 580)); - offsets.put(R.drawable.santa_swipeleft0016, new Point(299, 540)); - offsets.put(R.drawable.snowman_pinchout0010, new Point(272, 568)); - offsets.put(R.drawable.snowman_tap0003, new Point(277, 248)); - offsets.put(R.drawable.santa_shake0001, new Point(355, 435)); - offsets.put(R.drawable.elf_swiperight0009, new Point(769, 641)); - offsets.put(R.drawable.santa_swipe_right20016, new Point(415, 370)); - offsets.put(R.drawable.elf_pinchout0016, new Point(0, 0)); - offsets.put(R.drawable.santa_idle0010, new Point(416, 429)); - offsets.put(R.drawable.elf_swiperight0006, new Point(441, 476)); - offsets.put(R.drawable.elf_swipeup0007, new Point(492, 165)); - offsets.put(R.drawable.elf_idle0017, new Point(435, 437)); - offsets.put(R.drawable.santa_swipeleft0008, new Point(127, 618)); - offsets.put(R.drawable.santa_pinchout20021, new Point(0, 0)); - offsets.put(R.drawable.reindeer_pinchin0013, new Point(0, 0)); - offsets.put(R.drawable.santa_idle0013, new Point(416, 429)); - offsets.put(R.drawable.snowman_swipedown0009, new Point(266, 281)); - offsets.put(R.drawable.santa_tap0023, new Point(415, 435)); - offsets.put(R.drawable.snowman_swipedown0014, new Point(429, 411)); - offsets.put(R.drawable.elf_tap0003, new Point(427, 434)); - offsets.put(R.drawable.snowman_pinchin0003, new Point(193, 109)); - offsets.put(R.drawable.santa_swipeleft0012, new Point(429, 558)); - offsets.put(R.drawable.snowman_idle0005, new Point(429, 218)); - offsets.put(R.drawable.snowman_idle0010, new Point(429, 217)); - offsets.put(R.drawable.santa_swipedown0016, new Point(429, 402)); - offsets.put(R.drawable.reindeer_swiperight0010, new Point(61, 1026)); - offsets.put(R.drawable.snowman_pinchout0012, new Point(237, 580)); - offsets.put(R.drawable.elf_idle0005, new Point(435, 438)); - offsets.put(R.drawable.reindeer_tap0002, new Point(346, 339)); - offsets.put(R.drawable.elf_tap0004, new Point(401, 413)); - offsets.put(R.drawable.santa_idle0030, new Point(416, 430)); - offsets.put(R.drawable.santa_swipeup0024, new Point(415, 435)); - offsets.put(R.drawable.elf_pinchin_ball0023, new Point(521, 583)); - offsets.put(R.drawable.reindeer_pinchin0001, new Point(0, 0)); - offsets.put(R.drawable.reindeer_pinchout0009, new Point(212, 177)); - offsets.put(R.drawable.reindeer_pinchout0001, new Point(342, 337)); - offsets.put(R.drawable.santa_swipeleft0022, new Point(398, 448)); - offsets.put(R.drawable.reindeer_swiperight0006, new Point(363, 644)); - offsets.put(R.drawable.snowman_tap0010, new Point(79, 221)); - offsets.put(R.drawable.elf_pinchout0024, new Point(444, 455)); - offsets.put(R.drawable.elf_pinchout0001, new Point(435, 440)); - offsets.put(R.drawable.snowman_swipedown0023, new Point(429, 221)); - offsets.put(R.drawable.santa_swipe_right20003, new Point(347, 435)); - offsets.put(R.drawable.snowman_swipeleft0020, new Point(429, 221)); - offsets.put(R.drawable.reindeer_shake0024, new Point(342, 339)); - offsets.put(R.drawable.snowman_pinchin0022, new Point(226, 197)); - offsets.put(R.drawable.snowman_shake0020, new Point(73, 5)); - offsets.put(R.drawable.santa_tap0013, new Point(270, 412)); - offsets.put(R.drawable.elf_swipeleft0003, new Point(393, 440)); - offsets.put(R.drawable.snowman_shake0024, new Point(382, 216)); - offsets.put(R.drawable.santa_tap0007, new Point(270, 586)); - offsets.put(R.drawable.snowman_shake0013, new Point(88, 0)); - offsets.put(R.drawable.snowman_tap0021, new Point(118, 221)); - offsets.put(R.drawable.elf_swipeup0010, new Point(378, 84)); - offsets.put(R.drawable.elf_swipedown0011, new Point(397, 560)); - offsets.put(R.drawable.snowman_pinchin0023, new Point(299, 207)); - offsets.put(R.drawable.elf_swiperight0019, new Point(83, 515)); - offsets.put(R.drawable.reindeer_swipeup0008, new Point(210, 47)); - offsets.put(R.drawable.snowman_tap0012, new Point(79, 221)); - offsets.put(R.drawable.reindeer_swipeleft0015, new Point(338, 400)); - offsets.put(R.drawable.reindeer_tap0011, new Point(342, 337)); - offsets.put(R.drawable.elf_swiperight0013, new Point(0, 730)); - offsets.put(R.drawable.santa_idle0028, new Point(415, 431)); - offsets.put(R.drawable.snowman_idle0024, new Point(429, 221)); - offsets.put(R.drawable.snowman_pinchin0015, new Point(1280/2, 1280/2)); - offsets.put(R.drawable.santa_pinchin0010, new Point(91, 146)); - offsets.put(R.drawable.snowman_pinchin0002, new Point(374, 193)); - offsets.put(R.drawable.elf_swipeup0014, new Point(468, 315)); - offsets.put(R.drawable.reindeer_swipeleft0020, new Point(384, 342)); - offsets.put(R.drawable.elf_pinchin_ball0003, new Point(460, 584)); - offsets.put(R.drawable.santa_swipeleft0001, new Point(415, 435)); - offsets.put(R.drawable.elf_pinchin_ball0021, new Point(500, 990)); - offsets.put(R.drawable.reindeer_swipeleft0014, new Point(317, 357)); - offsets.put(R.drawable.reindeer_tap0019, new Point(342, 337)); - offsets.put(R.drawable.reindeer_swipeleft0017, new Point(376, 371)); - offsets.put(R.drawable.reindeer_tap0018, new Point(342, 337)); - offsets.put(R.drawable.santa_tap0024, new Point(415, 435)); - offsets.put(R.drawable.snowman_pinchout0017, new Point(237, 580)); - offsets.put(R.drawable.santa_tap0010, new Point(270, 536)); - offsets.put(R.drawable.reindeer_swiperight0019, new Point(384, 389)); - offsets.put(R.drawable.elf_shake0019, new Point(231, 285)); - offsets.put(R.drawable.snowman_pinchin0016, new Point(167, 913)); - offsets.put(R.drawable.elf_swipeleft0001, new Point(435, 440)); - offsets.put(R.drawable.snowman_shake0022, new Point(64, 16)); - offsets.put(R.drawable.elf_pinchout0009, new Point(0, 0)); - offsets.put(R.drawable.santa_shake0012, new Point(355, 435)); - offsets.put(R.drawable.santa_pinchin0013, new Point(136, 219)); - offsets.put(R.drawable.elf_swipeleft0014, new Point(395, 460)); - offsets.put(R.drawable.santa_swipeup0002, new Point(418, 418)); - offsets.put(R.drawable.elf_swipedown0008, new Point(434, 515)); - offsets.put(R.drawable.elf_swipedown0007, new Point(435, 495)); - offsets.put(R.drawable.snowman_tap0001, new Point(429, 221)); - offsets.put(R.drawable.snowman_pinchout0007, new Point(325, 506)); - offsets.put(R.drawable.santa_idle0037, new Point(416, 430)); - offsets.put(R.drawable.santa_swipedown0012, new Point(265, 264)); - offsets.put(R.drawable.santa_idle0015, new Point(415, 431)); - offsets.put(R.drawable.santa_pinchout20019, new Point(0, 0)); - offsets.put(R.drawable.reindeer_swiperight0014, new Point(0, 335)); - offsets.put(R.drawable.reindeer_swipeleft0006, new Point(318, 177)); - offsets.put(R.drawable.santa_swipe_right20022, new Point(415, 435)); - offsets.put(R.drawable.santa_swipedown0020, new Point(0, 0)); - offsets.put(R.drawable.reindeer_tap0001, new Point(342, 337)); - offsets.put(R.drawable.elf_idle0013, new Point(435, 436)); - offsets.put(R.drawable.reindeer_swipeup0024, new Point(342, 337)); - offsets.put(R.drawable.santa_swipeup0013, new Point(312, 193)); - offsets.put(R.drawable.reindeer_pinchout0005, new Point(318, 308)); - offsets.put(R.drawable.santa_shake0008, new Point(255, 477)); - offsets.put(R.drawable.santa_pinchin0011, new Point(96, 154)); - offsets.put(R.drawable.reindeer_swipeleft0016, new Point(353, 389)); - offsets.put(R.drawable.snowman_swipeup0006, new Point(429, 33)); - offsets.put(R.drawable.snowman_shake0012, new Point(91, 0)); - offsets.put(R.drawable.elf_shake0017, new Point(201, 183)); - offsets.put(R.drawable.reindeer_swipedown0020, new Point(384, 510)); - offsets.put(R.drawable.santa_idle0042, new Point(415, 433)); - offsets.put(R.drawable.reindeer_pinchout0002, new Point(342, 337)); - offsets.put(R.drawable.santa_idle0044, new Point(415, 434)); - offsets.put(R.drawable.elf_swiperight0024, new Point(435, 440)); - offsets.put(R.drawable.santa_idle0006, new Point(415, 431)); - offsets.put(R.drawable.reindeer_pinchin0009, new Point(0, 0)); - offsets.put(R.drawable.santa_swipeleft0019, new Point(429, 428)); - offsets.put(R.drawable.reindeer_swipedown0011, new Point(384, 709)); - offsets.put(R.drawable.elf_shake0005, new Point(201, 183)); - offsets.put(R.drawable.snowman_swipeleft0010, new Point(429, 221)); - offsets.put(R.drawable.santa_idle0025, new Point(415, 434)); - offsets.put(R.drawable.reindeer_shake0006, new Point(384, 14)); - offsets.put(R.drawable.santa_tap0006, new Point(270, 557)); - offsets.put(R.drawable.santa_pinchout20008, new Point(0, 0)); - offsets.put(R.drawable.elf_pinchin_ball0002, new Point(447, 512)); - offsets.put(R.drawable.snowman_swipeup0009, new Point(429, 21)); - offsets.put(R.drawable.elf_swiperight0005, new Point(407, 458)); - offsets.put(R.drawable.santa_idle0039, new Point(415, 431)); - offsets.put(R.drawable.elf_swipeup0019, new Point(434, 440)); - offsets.put(R.drawable.elf_swipeleft0011, new Point(295, 460)); - offsets.put(R.drawable.reindeer_pinchout0008, new Point(246, 219)); - offsets.put(R.drawable.snowman_shake0023, new Point(382, 216)); - offsets.put(R.drawable.snowman_swiperight0021, new Point(429, 221)); - offsets.put(R.drawable.santa_pinchout20022, new Point(0, 0)); - offsets.put(R.drawable.elf_pinchin_ball0019, new Point(520, 618)); - offsets.put(R.drawable.snowman_shake0004, new Point(122, 0)); - offsets.put(R.drawable.elf_swipeup0024, new Point(435, 440)); - offsets.put(R.drawable.reindeer_pinchout0011, new Point(148, 99)); - offsets.put(R.drawable.santa_swipe_right20014, new Point(416, 340)); - offsets.put(R.drawable.elf_pinchin_ball0015, new Point(515, 95)); - offsets.put(R.drawable.santa_idle0002, new Point(415, 434)); - offsets.put(R.drawable.santa_pinchout20007, new Point(0, 0)); - offsets.put(R.drawable.santa_pinchin0014, new Point(170, 275)); - offsets.put(R.drawable.santa_swipedown0003, new Point(340, 460)); - offsets.put(R.drawable.snowman_pinchout0024, new Point(429, 221)); - offsets.put(R.drawable.santa_shake0009, new Point(243, 477)); - offsets.put(R.drawable.elf_tap0002, new Point(435, 440)); - offsets.put(R.drawable.santa_swipeleft0023, new Point(429, 429)); - offsets.put(R.drawable.elf_shake0015, new Point(263, 285)); - offsets.put(R.drawable.santa_swipe_right20008, new Point(336, 417)); - offsets.put(R.drawable.reindeer_tap0016, new Point(342, 337)); - offsets.put(R.drawable.elf_shake0020, new Point(324, 362)); - offsets.put(R.drawable.elf_shake0003, new Point(176, 324)); - offsets.put(R.drawable.reindeer_swipeup0011, new Point(210, 34)); - offsets.put(R.drawable.reindeer_tap0015, new Point(342, 337)); - offsets.put(R.drawable.santa_tap0016, new Point(270, 443)); - offsets.put(R.drawable.reindeer_pinchin0012, new Point(0, 0)); - offsets.put(R.drawable.elf_swipeleft0005, new Point(351, 460)); - offsets.put(R.drawable.elf_swipeup0022, new Point(435, 458)); - offsets.put(R.drawable.snowman_swipeleft0009, new Point(429, 221)); - offsets.put(R.drawable.santa_swipeup0014, new Point(311, 178)); - offsets.put(R.drawable.elf_pinchin_ball0026, new Point(467, 340)); - offsets.put(R.drawable.elf_swipedown0017, new Point(435, 470)); - offsets.put(R.drawable.santa_idle0012, new Point(416, 429)); - offsets.put(R.drawable.reindeer_swipedown0003, new Point(352, 366)); - offsets.put(R.drawable.santa_swipeleft0021, new Point(270, 462)); - offsets.put(R.drawable.santa_pinchin0024, new Point(415, 435)); - offsets.put(R.drawable.santa_pinchout20018, new Point(0, 0)); - offsets.put(R.drawable.reindeer_swipeup0022, new Point(221, 344)); - offsets.put(R.drawable.snowman_swiperight0019, new Point(429, 221)); - offsets.put(R.drawable.santa_idle0026, new Point(415, 433)); - offsets.put(R.drawable.reindeer_pinchout0013, new Point(106, 46)); - offsets.put(R.drawable.snowman_swipedown0003, new Point(359, 311)); - offsets.put(R.drawable.elf_swiperight0014, new Point(0, 768)); - offsets.put(R.drawable.snowman_tap0005, new Point(213, 221)); - offsets.put(R.drawable.snowman_swiperight0023, new Point(429, 221)); - offsets.put(R.drawable.reindeer_shake0007, new Point(383, 15)); - offsets.put(R.drawable.elf_swiperight0012, new Point(1280/2, 1280/2)); - offsets.put(R.drawable.snowman_pinchin0018, new Point(167, 370)); - offsets.put(R.drawable.santa_idle0045, new Point(415, 434)); - offsets.put(R.drawable.santa_swipeup0004, new Point(426, 385)); - offsets.put(R.drawable.santa_swipeleft0010, new Point(165, 589)); - offsets.put(R.drawable.elf_swipeleft0021, new Point(435, 375)); - offsets.put(R.drawable.reindeer_swiperight0013, new Point(0, 569)); - offsets.put(R.drawable.reindeer_swiperight0024, new Point(342, 337)); - offsets.put(R.drawable.reindeer_swipeleft0024, new Point(342, 337)); - offsets.put(R.drawable.elf_idle0004, new Point(435, 438)); - offsets.put(R.drawable.snowman_tap0014, new Point(83, 221)); - offsets.put(R.drawable.reindeer_pinchin0005, new Point(0, 0)); - offsets.put(R.drawable.santa_shake0011, new Point(326, 453)); - offsets.put(R.drawable.santa_swipedown0015, new Point(257, 0)); - offsets.put(R.drawable.reindeer_swipeup0012, new Point(210, 35)); - offsets.put(R.drawable.snowman_swipedown0004, new Point(320, 356)); - offsets.put(R.drawable.reindeer_tap0017, new Point(342, 337)); - offsets.put(R.drawable.reindeer_pinchin0002, new Point(0, 0)); - offsets.put(R.drawable.santa_idle0033, new Point(416, 429)); - offsets.put(R.drawable.elf_pinchout0002, new Point(376, 324)); - offsets.put(R.drawable.reindeer_pinchin0006, new Point(0, 0)); - offsets.put(R.drawable.elf_pinchin_ball0009, new Point(500, 990)); - offsets.put(R.drawable.santa_swipeup0015, new Point(267, 203)); - offsets.put(R.drawable.snowman_swipeleft0018, new Point(429, 221)); - offsets.put(R.drawable.reindeer_swipeup0005, new Point(344, 186)); - offsets.put(R.drawable.reindeer_swipeup0001, new Point(342, 337)); - offsets.put(R.drawable.santa_pinchin0012, new Point(111, 178)); - offsets.put(R.drawable.santa_pinchout20009, new Point(0, 0)); - offsets.put(R.drawable.santa_pinchout20016, new Point(0, 0)); - offsets.put(R.drawable.santa_tap0003, new Point(270, 435)); - offsets.put(R.drawable.elf_idle0020, new Point(435, 438)); - offsets.put(R.drawable.elf_swipeleft0018, new Point(435, 441)); - offsets.put(R.drawable.santa_swipedown0024, new Point(0, 435)); - offsets.put(R.drawable.snowman_shake0009, new Point(107, 0)); - offsets.put(R.drawable.santa_pinchout20017, new Point(0, 0)); - offsets.put(R.drawable.elf_idle0003, new Point(435, 439)); - offsets.put(R.drawable.snowman_shake0018, new Point(72, 0)); - offsets.put(R.drawable.elf_swipeup0008, new Point(378, 188)); - offsets.put(R.drawable.reindeer_pinchout0019, new Point(118, 62)); - offsets.put(R.drawable.snowman_swipeup0019, new Point(376, 133)); - offsets.put(R.drawable.elf_swiperight0004, new Point(395, 453)); - offsets.put(R.drawable.elf_shake0014, new Point(318, 362)); - offsets.put(R.drawable.elf_swiperight0015, new Point(0, 572)); - offsets.put(R.drawable.elf_pinchout0010, new Point(0, 0)); - offsets.put(R.drawable.snowman_swipedown0022, new Point(429, 221)); - offsets.put(R.drawable.reindeer_pinchin0017, new Point(0, 0)); - offsets.put(R.drawable.snowman_pinchout0008, new Point(307, 532)); - offsets.put(R.drawable.santa_swipeleft0011, new Point(415, 435)); - offsets.put(R.drawable.elf_swiperight0016, new Point(0, 623)); - offsets.put(R.drawable.reindeer_swiperight0002, new Point(342, 337)); - offsets.put(R.drawable.elf_pinchin_ball0004, new Point(472, 655)); - offsets.put(R.drawable.elf_swipeleft0016, new Point(444, 441)); - offsets.put(R.drawable.snowman_swiperight0002, new Point(139, 221)); - offsets.put(R.drawable.snowman_swiperight0004, new Point(224, 221)); - offsets.put(R.drawable.santa_pinchout20024, new Point(0, 0)); - offsets.put(R.drawable.santa_swipe_right20024, new Point(415, 435)); - offsets.put(R.drawable.santa_pinchin0023, new Point(358, 435)); - offsets.put(R.drawable.reindeer_pinchout0020, new Point(147, 97)); - offsets.put(R.drawable.santa_swipeup0008, new Point(429, 283)); - offsets.put(R.drawable.elf_pinchin_ball0030, new Point(435, 480)); - offsets.put(R.drawable.snowman_swipeup0015, new Point(253, 21)); - offsets.put(R.drawable.santa_swipedown0017, new Point(0, 0)); - offsets.put(R.drawable.elf_pinchin_ball0032, new Point(435, 445)); - offsets.put(R.drawable.snowman_swipedown0017, new Point(429, 129)); - offsets.put(R.drawable.santa_pinchout20005, new Point(0, 0)); - offsets.put(R.drawable.snowman_swipeleft0014, new Point(429, 221)); - offsets.put(R.drawable.reindeer_swiperight0011, new Point(26, 1021)); - offsets.put(R.drawable.reindeer_shake0009, new Point(384, 15)); - offsets.put(R.drawable.snowman_idle0012, new Point(429, 217)); - offsets.put(R.drawable.reindeer_swiperight0007, new Point(313, 629)); - offsets.put(R.drawable.snowman_idle0015, new Point(429, 217)); - offsets.put(R.drawable.santa_tap0004, new Point(270, 443)); - offsets.put(R.drawable.reindeer_pinchin0007, new Point(0, 0)); - offsets.put(R.drawable.santa_pinchin0021, new Point(270, 435)); - offsets.put(R.drawable.santa_swipe_right20012, new Point(426, 350)); - offsets.put(R.drawable.elf_swiperight0001, new Point(435, 440)); - offsets.put(R.drawable.snowman_pinchin0019, new Point(167, 234)); - offsets.put(R.drawable.reindeer_shake0017, new Point(384, 14)); - offsets.put(R.drawable.santa_swipe_right20006, new Point(346, 420)); - offsets.put(R.drawable.snowman_pinchout0023, new Point(382, 243)); - offsets.put(R.drawable.elf_shake0022, new Point(336, 324)); - offsets.put(R.drawable.santa_swipe_right20018, new Point(415, 389)); - offsets.put(R.drawable.snowman_swiperight0010, new Point(235, 221)); - offsets.put(R.drawable.santa_swipe_right20013, new Point(420, 336)); - offsets.put(R.drawable.snowman_swipeleft0015, new Point(429, 221)); - offsets.put(R.drawable.elf_idle0022, new Point(435, 439)); - offsets.put(R.drawable.santa_shake0007, new Point(257, 475)); - offsets.put(R.drawable.elf_swiperight0008, new Point(611, 565)); - offsets.put(R.drawable.santa_pinchin0020, new Point(235, 505)); - offsets.put(R.drawable.snowman_swipeleft0017, new Point(429, 221)); - offsets.put(R.drawable.elf_swipeleft0017, new Point(422, 440)); - offsets.put(R.drawable.santa_pinchin0003, new Point(268, 435)); - offsets.put(R.drawable.snowman_pinchout0004, new Point(377, 390)); - offsets.put(R.drawable.santa_tap0001, new Point(415, 435)); - offsets.put(R.drawable.santa_tap0018, new Point(270, 404)); - offsets.put(R.drawable.snowman_swipedown0019, new Point(429, 262)); - offsets.put(R.drawable.santa_idle0004, new Point(415, 432)); - offsets.put(R.drawable.reindeer_swipeup0004, new Point(342, 197)); - offsets.put(R.drawable.reindeer_swiperight0020, new Point(383, 352)); - offsets.put(R.drawable.santa_pinchin0022, new Point(270, 435)); - offsets.put(R.drawable.snowman_swipeup0018, new Point(214, 71)); - offsets.put(R.drawable.reindeer_swipeup0002, new Point(342, 321)); - offsets.put(R.drawable.elf_tap0022, new Point(435, 440)); - offsets.put(R.drawable.reindeer_swipeleft0009, new Point(284, 276)); - offsets.put(R.drawable.santa_idle0047, new Point(415, 435)); - offsets.put(R.drawable.snowman_swiperight0014, new Point(428, 221)); - offsets.put(R.drawable.reindeer_shake0012, new Point(384, 14)); - offsets.put(R.drawable.elf_pinchout0021, new Point(184, 0)); - offsets.put(R.drawable.snowman_pinchin0017, new Point(167, 596)); - offsets.put(R.drawable.santa_swipe_right20019, new Point(415, 435)); - offsets.put(R.drawable.reindeer_shake0011, new Point(383, 13)); - offsets.put(R.drawable.santa_tap0009, new Point(269, 567)); - offsets.put(R.drawable.elf_pinchin_ball0005, new Point(462, 727)); - offsets.put(R.drawable.snowman_pinchin0013, new Point(90, 1008)); - offsets.put(R.drawable.santa_swipeup0011, new Point(429, 221)); - offsets.put(R.drawable.reindeer_pinchin0010, new Point(0, 0)); - offsets.put(R.drawable.elf_swipedown0019, new Point(435, 474)); - offsets.put(R.drawable.snowman_tap0018, new Point(98, 221)); - offsets.put(R.drawable.elf_shake0007, new Point(244, 285)); - offsets.put(R.drawable.elf_idle0015, new Point(435, 436)); - offsets.put(R.drawable.santa_pinchin0008, new Point(111, 178)); - offsets.put(R.drawable.snowman_idle0008, new Point(429, 217)); - offsets.put(R.drawable.elf_swipedown0024, new Point(435, 440)); - offsets.put(R.drawable.reindeer_swipedown0022, new Point(354, 384)); - offsets.put(R.drawable.reindeer_tap0007, new Point(342, 337)); - offsets.put(R.drawable.elf_swipedown0013, new Point(397, 628)); - offsets.put(R.drawable.elf_pinchin_ball0028, new Point(434, 440)); - offsets.put(R.drawable.snowman_swipeleft0008, new Point(429, 221)); - offsets.put(R.drawable.snowman_tap0023, new Point(169, 221)); - offsets.put(R.drawable.reindeer_tap0012, new Point(342, 337)); - offsets.put(R.drawable.elf_tap0009, new Point(132, 248)); - offsets.put(R.drawable.elf_swipedown0004, new Point(435, 434)); - offsets.put(R.drawable.santa_shake0004, new Point(204, 478)); - offsets.put(R.drawable.reindeer_swipedown0002, new Point(344, 344)); - offsets.put(R.drawable.elf_pinchout0005, new Point(0, 0)); - offsets.put(R.drawable.snowman_swipeleft0002, new Point(429, 221)); - offsets.put(R.drawable.elf_swipedown0021, new Point(435, 467)); - offsets.put(R.drawable.reindeer_tap0021, new Point(342, 337)); - offsets.put(R.drawable.snowman_shake0011, new Point(95, 0)); - offsets.put(R.drawable.elf_pinchin_ball0017, new Point(520, 222)); - offsets.put(R.drawable.santa_shake0018, new Point(393, 420)); - offsets.put(R.drawable.reindeer_swiperight0004, new Point(348, 337)); - offsets.put(R.drawable.snowman_swipeleft0012, new Point(429, 221)); - offsets.put(R.drawable.reindeer_swipeup0009, new Point(210, 38)); - offsets.put(R.drawable.reindeer_shake0003, new Point(384, 193)); - offsets.put(R.drawable.elf_idle0016, new Point(435, 437)); - offsets.put(R.drawable.santa_swipeup0017, new Point(274, 245)); - offsets.put(R.drawable.santa_swipeup0009, new Point(429, 271)); - - } - -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/ResourceOffsets.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/ResourceOffsets.kt new file mode 100644 index 000000000..30d2e9eef --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/ResourceOffsets.kt @@ -0,0 +1,810 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +import android.annotation.SuppressLint +import android.graphics.Point +import androidx.annotation.DrawableRes +import java.util.HashMap + +class ResourceOffsets { + + companion object { + + @SuppressLint("UseSparseArrays") + private val offsets = HashMap() + + init { + offsets[R.drawable.elf_pinchout_0006] = Point(0, 0) + offsets[R.drawable.snowman_swiperight0015] = Point(429, 221) + offsets[R.drawable.reindeer_swipedown0018] = Point(365, 709) + offsets[R.drawable.elf_shake_0006] = Point(318, 230) + offsets[R.drawable.reindeer_swipeleft0002] = Point(341, 331) + offsets[R.drawable.reindeer_pinchout0024] = Point(342, 337) + offsets[R.drawable.snowman_swipeup0023] = Point(429, 220) + offsets[R.drawable.snowman_pinchout0001] = Point(429, 221) + offsets[R.drawable.snowman_pinchout0022] = Point(334, 310) + offsets[R.drawable.reindeer_swipedown0008] = Point(365, 705) + offsets[R.drawable.santa_pinchin0007] = Point(136, 218) + offsets[R.drawable.snowman_swipedown0021] = Point(429, 250) + offsets[R.drawable.santa_idle0021] = Point(415, 434) + offsets[R.drawable.santa_pinchout20001] = Point(0, 0) + offsets[R.drawable.reindeer_swipedown0009] = Point(376, 709) + offsets[R.drawable.snowman_pinchin0001] = Point(429, 221) + offsets[R.drawable.snowman_pinchout0005] = Point(360, 434) + offsets[R.drawable.santa_swipeleft0017] = Point(147, 628) + offsets[R.drawable.reindeer_swipeup0013] = Point(210, 37) + offsets[R.drawable.snowman_pinchin0012] = Point(90, 806) + offsets[R.drawable.santa_swipeleft0009] = Point(94, 606) + offsets[R.drawable.snowman_swipeleft0007] = Point(429, 221) + offsets[R.drawable.santa_idle0027] = Point(415, 432) + offsets[R.drawable.snowman_tap0017] = Point(94, 221) + offsets[R.drawable.santa_temp_tap01] = Point(415, 435) + offsets[R.drawable.elf_swipeleft_0023] = Point(435, 358) + offsets[R.drawable.reindeer_swipeleft0019] = Point(384, 347) + offsets[R.drawable.snowman_pinchin0009] = Point(90, 422) + offsets[R.drawable.elf_idle_0007] = Point(435, 437) + offsets[R.drawable.snowman_idle0002] = Point(429, 220) + offsets[R.drawable.reindeer_tap0008] = Point(342, 337) + offsets[R.drawable.santa_swipe_right20005] = Point(350, 423) + offsets[R.drawable.snowman_pinchout0003] = Point(395, 339) + offsets[R.drawable.reindeer_pinchout0018] = Point(98, 37) + offsets[R.drawable.snowman_swipeleft0004] = Point(429, 221) + offsets[R.drawable.santa_idle0007] = Point(416, 430) + offsets[R.drawable.snowman_swipeup0022] = Point(429, 219) + offsets[R.drawable.santa_shake0005] = Point(229, 475) + offsets[R.drawable.santa_swipeup0016] = Point(253, 221) + offsets[R.drawable.snowman_tap0019] = Point(102, 221) + offsets[R.drawable.santa_swipeup0023] = Point(427, 427) + offsets[R.drawable.reindeer_pinchin0023] = Point(0, 0) + offsets[R.drawable.snowman_swiperight0005] = Point(314, 221) + offsets[R.drawable.elf_shake_0016] = Point(285, 309) + offsets[R.drawable.reindeer_swipeup0016] = Point(240, 73) + offsets[R.drawable.reindeer_swipedown0023] = Point(344, 351) + offsets[R.drawable.reindeer_swipeup0010] = Point(210, 34) + offsets[R.drawable.reindeer_swipedown0007] = Point(375, 595) + offsets[R.drawable.reindeer_pinchin0003] = Point(0, 0) + offsets[R.drawable.santa_shake0010] = Point(241, 468) + offsets[R.drawable.snowman_swipeleft0011] = Point(429, 221) + offsets[R.drawable.elf_tap_0018] = Point(435, 440) + offsets[R.drawable.santa_swipeup0001] = Point(415, 435) + offsets[R.drawable.elf_idle_0012] = Point(435, 436) + offsets[R.drawable.snowman_swiperight0008] = Point(271, 221) + offsets[R.drawable.elf_idle_0002] = Point(435, 440) + offsets[R.drawable.snowman_pinchin0010] = Point(90, 513) + offsets[R.drawable.elf_swiperight_0011] = Point(1073, 707) + offsets[R.drawable.santa_shake0003] = Point(279, 476) + offsets[R.drawable.elf_swipeleft_0012] = Point(294, 460) + offsets[R.drawable.elf_tap_0017] = Point(429, 436) + offsets[R.drawable.elf_pinchin_0008] = Point(520, 914) + offsets[R.drawable.snowman_swipeup0003] = Point(429, 182) + offsets[R.drawable.santa_swipeleft0013] = Point(429, 608) + offsets[R.drawable.snowman_pinchout0020] = Point(237, 580) + offsets[R.drawable.reindeer_shake0018] = Point(384, 13) + offsets[R.drawable.snowman_swipeleft0001] = Point(429, 221) + offsets[R.drawable.reindeer_swipedown0005] = Point(381, 451) + offsets[R.drawable.reindeer_shake0021] = Point(384, 206) + offsets[R.drawable.snowman_idle0020] = Point(429, 218) + offsets[R.drawable.reindeer_tap0022] = Point(342, 337) + offsets[R.drawable.snowman_swipedown0020] = Point(429, 279) + offsets[R.drawable.snowman_shake0005] = Point(115, 0) + offsets[R.drawable.snowman_swipeup0012] = Point(429, 21) + offsets[R.drawable.santa_shake0013] = Point(363, 426) + offsets[R.drawable.elf_pinchin_0001] = Point(435, 440) + offsets[R.drawable.snowman_idle0022] = Point(429, 219) + offsets[R.drawable.reindeer_swipeleft0021] = Point(370, 339) + offsets[R.drawable.santa_pinchin0017] = Point(270, 435) + offsets[R.drawable.elf_swiperight_0020] = Point(252, 504) + offsets[R.drawable.elf_tap_0005] = Point(347, 380) + offsets[R.drawable.snowman_pinchin0008] = Point(90, 367) + offsets[R.drawable.snowman_idle0011] = Point(429, 217) + offsets[R.drawable.reindeer_pinchin0018] = Point(0, 0) + offsets[R.drawable.reindeer_swipeup0015] = Point(218, 46) + offsets[R.drawable.santa_idle0032] = Point(416, 429) + offsets[R.drawable.elf_pinchout_0020] = Point(106, 0) + offsets[R.drawable.snowman_swipeup0007] = Point(427, 21) + offsets[R.drawable.snowman_swipedown0013] = Point(429, 442) + offsets[R.drawable.snowman_swipedown0018] = Point(429, 212) + offsets[R.drawable.santa_pinchin0009] = Point(96, 154) + offsets[R.drawable.snowman_pinchin0005] = Point(55, 0) + offsets[R.drawable.santa_idle0017] = Point(415, 432) + offsets[R.drawable.santa_swipeleft0007] = Point(165, 589) + offsets[R.drawable.santa_idle0011] = Point(416, 429) + offsets[R.drawable.reindeer_swipeleft0010] = Point(282, 280) + offsets[R.drawable.reindeer_shake0013] = Point(383, 20) + offsets[R.drawable.elf_shake_0023] = Point(435, 471) + offsets[R.drawable.snowman_swipeup0008] = Point(429, 21) + offsets[R.drawable.santa_swipedown0007] = Point(429, 635) + offsets[R.drawable.reindeer_swipeleft0003] = Point(338, 311) + offsets[R.drawable.santa_pinchout20004] = Point(0, 0) + offsets[R.drawable.elf_swipeup_0011] = Point(378, 6) + offsets[R.drawable.reindeer_tap0003] = Point(350, 341) + offsets[R.drawable.santa_swipeleft0004] = Point(314, 530) + offsets[R.drawable.elf_idle_0001] = Point(435, 440) + offsets[R.drawable.elf_idle_0006] = Point(435, 437) + offsets[R.drawable.elf_shake_0002] = Point(319, 369) + offsets[R.drawable.elf_tap_0010] = Point(100, 262) + offsets[R.drawable.reindeer_tap0020] = Point(342, 337) + offsets[R.drawable.santa_tap0008] = Point(270, 596) + offsets[R.drawable.reindeer_swipedown0013] = Point(360, 709) + offsets[R.drawable.reindeer_swipeup0020] = Point(334, 368) + offsets[R.drawable.snowman_swiperight0009] = Point(139, 221) + offsets[R.drawable.elf_pinchin_0016] = Point(515, 127) + offsets[R.drawable.reindeer_swiperight0012] = Point(0, 1069) + offsets[R.drawable.reindeer_swipedown0017] = Point(363, 709) + offsets[R.drawable.reindeer_swipeup0007] = Point(327, 105) + offsets[R.drawable.elf_swipedown_0005] = Point(435, 454) + offsets[R.drawable.reindeer_swiperight0008] = Point(205, 660) + offsets[R.drawable.reindeer_shake0016] = Point(383, 17) + offsets[R.drawable.reindeer_shake0008] = Point(384, 23) + offsets[R.drawable.elf_swipeleft_0024] = Point(435, 363) + offsets[R.drawable.santa_shake0015] = Point(332, 421) + offsets[R.drawable.reindeer_swiperight0016] = Point(211, 335) + offsets[R.drawable.santa_shake0014] = Point(367, 422) + offsets[R.drawable.elf_swipeup_0003] = Point(386, 360) + offsets[R.drawable.elf_tap_0011] = Point(81, 270) + offsets[R.drawable.santa_temp_left01] = Point(415, 435) + offsets[R.drawable.elf_swipedown_0018] = Point(435, 469) + offsets[R.drawable.santa_idle0031] = Point(416, 430) + offsets[R.drawable.elf_swipeup_0006] = Point(476, 165) + offsets[R.drawable.elf_swiperight_0022] = Point(435, 459) + offsets[R.drawable.snowman_swipeleft0003] = Point(429, 221) + offsets[R.drawable.elf_swipeup_0005] = Point(475, 262) + offsets[R.drawable.snowman_pinchout0006] = Point(342, 473) + offsets[R.drawable.elf_swipeleft_0022] = Point(435, 352) + offsets[R.drawable.elf_idle_0021] = Point(435, 438) + offsets[R.drawable.santa_swipeup0003] = Point(423, 402) + offsets[R.drawable.snowman_shake0001] = Point(393, 221) + offsets[R.drawable.reindeer_swipeleft0007] = Point(301, 225) + offsets[R.drawable.snowman_swipeleft0024] = Point(429, 221) + offsets[R.drawable.snowman_tap0013] = Point(79, 221) + offsets[R.drawable.santa_idle0029] = Point(415, 431) + offsets[R.drawable.santa_idle0041] = Point(415, 433) + offsets[R.drawable.snowman_swiperight0006] = Point(139, 221) + offsets[R.drawable.reindeer_swipedown0010] = Point(383, 709) + offsets[R.drawable.santa_shake0023] = Point(351, 426) + offsets[R.drawable.santa_swipedown0021] = Point(0, 159) + offsets[R.drawable.snowman_idle0018] = Point(429, 218) + offsets[R.drawable.reindeer_swipeleft0013] = Point(301, 324) + offsets[R.drawable.reindeer_pinchout0004] = Point(331, 324) + offsets[R.drawable.elf_pinchin_0014] = Point(520, 134) + offsets[R.drawable.snowman_pinchin0006] = Point(35, 64) + offsets[R.drawable.santa_swipedown0023] = Point(0, 435) + offsets[R.drawable.santa_shake0021] = Point(344, 421) + offsets[R.drawable.santa_swipe_right20020] = Point(401, 435) + offsets[R.drawable.snowman_shake0010] = Point(100, 0) + offsets[R.drawable.elf_swipedown_0012] = Point(396, 611) + offsets[R.drawable.elf_swipedown_0009] = Point(400, 535) + offsets[R.drawable.reindeer_pinchout0015] = Point(84, 20) + offsets[R.drawable.reindeer_shake0014] = Point(384, 30) + offsets[R.drawable.elf_swipeleft_0013] = Point(269, 460) + offsets[R.drawable.reindeer_shake0002] = Point(357, 301) + offsets[R.drawable.snowman_swipeup0013] = Point(415, 21) + offsets[R.drawable.santa_shake0022] = Point(279, 422) + offsets[R.drawable.santa_shake0017] = Point(377, 420) + offsets[R.drawable.santa_pinchin0005] = Point(215, 347) + offsets[R.drawable.snowman_swipeleft0005] = Point(429, 221) + offsets[R.drawable.elf_swipeup_0012] = Point(378, 119) + offsets[R.drawable.santa_tap0011] = Point(270, 443) + offsets[R.drawable.snowman_idle0009] = Point(429, 217) + offsets[R.drawable.santa_tap0012] = Point(269, 443) + offsets[R.drawable.snowman_swipeleft0006] = Point(429, 221) + offsets[R.drawable.snowman_shake0002] = Point(130, 0) + offsets[R.drawable.reindeer_swiperight0018] = Point(363, 338) + offsets[R.drawable.santa_shake0019] = Point(341, 420) + offsets[R.drawable.elf_shake_0021] = Point(228, 236) + offsets[R.drawable.snowman_idle0017] = Point(429, 217) + offsets[R.drawable.snowman_swiperight0007] = Point(191, 221) + offsets[R.drawable.santa_swipedown0018] = Point(0, 0) + offsets[R.drawable.snowman_tap0022] = Point(118, 221) + offsets[R.drawable.snowman_swiperight0003] = Point(224, 221) + offsets[R.drawable.elf_swipedown_0003] = Point(435, 414) + offsets[R.drawable.snowman_swipeup0005] = Point(429, 70) + offsets[R.drawable.snowman_swipedown0006] = Point(253, 447) + offsets[R.drawable.snowman_pinchin0004] = Point(22, 0) + offsets[R.drawable.snowman_swiperight0001] = Point(429, 221) + offsets[R.drawable.santa_swipedown0010] = Point(429, 635) + offsets[R.drawable.reindeer_swiperight0003] = Point(344, 337) + offsets[R.drawable.elf_tap_0008] = Point(175, 254) + offsets[R.drawable.snowman_swipeup0011] = Point(429, 21) + offsets[R.drawable.santa_swipedown0006] = Point(429, 635) + offsets[R.drawable.santa_idle0036] = Point(416, 429) + offsets[R.drawable.snowman_swiperight0017] = Point(429, 221) + offsets[R.drawable.snowman_swipedown0012] = Point(425, 350) + offsets[R.drawable.santa_swipedown0005] = Point(429, 610) + offsets[R.drawable.santa_idle0016] = Point(415, 432) + offsets[R.drawable.snowman_shake0017] = Point(72, 0) + offsets[R.drawable.elf_pinchin_0024] = Point(520, 518) + offsets[R.drawable.snowman_swipedown0007] = Point(226, 419) + offsets[R.drawable.reindeer_pinchout0021] = Point(183, 142) + offsets[R.drawable.reindeer_pinchin0022] = Point(0, 0) + offsets[R.drawable.santa_swipedown0008] = Point(429, 635) + offsets[R.drawable.elf_tap_0015] = Point(382, 398) + offsets[R.drawable.reindeer_pinchout0003] = Point(339, 334) + offsets[R.drawable.reindeer_swipeleft0022] = Point(353, 338) + offsets[R.drawable.elf_shake_0011] = Point(343, 183) + offsets[R.drawable.elf_swiperight_0002] = Point(423, 441) + offsets[R.drawable.reindeer_swipeup0006] = Point(353, 154) + offsets[R.drawable.elf_tap_0016] = Point(412, 422) + offsets[R.drawable.santa_temp_shake01] = Point(415, 435) + offsets[R.drawable.elf_swipeup_0021] = Point(435, 480) + offsets[R.drawable.elf_idle_0009] = Point(435, 437) + offsets[R.drawable.elf_swipedown_0016] = Point(433, 561) + offsets[R.drawable.santa_pinchout20006] = Point(0, 0) + offsets[R.drawable.santa_pinchout20020] = Point(0, 0) + offsets[R.drawable.reindeer_pinchout0007] = Point(276, 255) + offsets[R.drawable.snowman_idle0003] = Point(429, 219) + offsets[R.drawable.elf_swipeleft_0019] = Point(432, 393) + offsets[R.drawable.reindeer_pinchout0016] = Point(82, 17) + offsets[R.drawable.santa_idle0040] = Point(415, 432) + offsets[R.drawable.elf_swiperight_0017] = Point(0, 606) + offsets[R.drawable.snowman_swiperight0011] = Point(330, 221) + offsets[R.drawable.santa_idle0001] = Point(415, 435) + offsets[R.drawable.snowman_tap0004] = Point(245, 227) + offsets[R.drawable.elf_tap_0013] = Point(286, 324) + offsets[R.drawable.elf_shake_0012] = Point(318, 233) + offsets[R.drawable.snowman_swipedown0016] = Point(422, 13) + offsets[R.drawable.reindeer_pinchin0004] = Point(0, 0) + offsets[R.drawable.santa_swipeup0005] = Point(429, 375) + offsets[R.drawable.snowman_shake0003] = Point(126, 21) + offsets[R.drawable.elf_pinchout_0004] = Point(0, 0) + offsets[R.drawable.reindeer_swipedown0004] = Point(364, 401) + offsets[R.drawable.reindeer_pinchout0023] = Point(281, 262) + offsets[R.drawable.santa_swipeleft0018] = Point(216, 579) + offsets[R.drawable.reindeer_shake0004] = Point(383, 13) + offsets[R.drawable.santa_swipe_right20001] = Point(415, 435) + offsets[R.drawable.santa_swipe_right20021] = Point(389, 435) + offsets[R.drawable.santa_swipeleft0014] = Point(429, 508) + offsets[R.drawable.elf_shake_0018] = Point(279, 233) + offsets[R.drawable.santa_idle0003] = Point(415, 433) + offsets[R.drawable.santa_swipeup0018] = Point(317, 317) + offsets[R.drawable.elf_idle_0010] = Point(435, 436) + offsets[R.drawable.snowman_pinchin0024] = Point(401, 220) + offsets[R.drawable.snowman_swiperight0016] = Point(429, 221) + offsets[R.drawable.snowman_pinchin0007] = Point(35, 64) + offsets[R.drawable.reindeer_pinchin0020] = Point(0, 0) + offsets[R.drawable.elf_swipedown_0015] = Point(400, 605) + offsets[R.drawable.elf_tap_0014] = Point(337, 366) + offsets[R.drawable.elf_tap_0006] = Point(290, 333) + offsets[R.drawable.elf_swiperight_0023] = Point(423, 440) + offsets[R.drawable.santa_swipe_right20023] = Point(415, 435) + offsets[R.drawable.snowman_tap0002] = Point(381, 227) + offsets[R.drawable.santa_swipedown0022] = Point(0, 414) + offsets[R.drawable.santa_swipe_right20017] = Point(415, 385) + offsets[R.drawable.elf_pinchin_0012] = Point(519, 270) + offsets[R.drawable.santa_idle0008] = Point(416, 430) + offsets[R.drawable.snowman_idle0001] = Point(429, 221) + offsets[R.drawable.reindeer_pinchout0010] = Point(177, 135) + offsets[R.drawable.reindeer_swipeup0019] = Point(349, 266) + offsets[R.drawable.santa_tap0022] = Point(358, 435) + offsets[R.drawable.santa_swipeup0012] = Point(417, 213) + offsets[R.drawable.snowman_idle0019] = Point(429, 218) + offsets[R.drawable.elf_swipedown_0023] = Point(435, 460) + offsets[R.drawable.elf_pinchin_0025] = Point(476, 280) + offsets[R.drawable.santa_swipe_right20009] = Point(332, 416) + offsets[R.drawable.santa_idle0038] = Point(415, 431) + offsets[R.drawable.snowman_pinchout0021] = Point(285, 423) + offsets[R.drawable.santa_swipeup0022] = Point(420, 438) + offsets[R.drawable.elf_pinchin_0007] = Point(497, 828) + offsets[R.drawable.reindeer_shake0023] = Point(342, 346) + offsets[R.drawable.snowman_idle0023] = Point(429, 220) + offsets[R.drawable.snowman_swiperight0012] = Point(399, 221) + offsets[R.drawable.reindeer_pinchout0017] = Point(86, 22) + offsets[R.drawable.reindeer_swipedown0001] = Point(342, 337) + offsets[R.drawable.snowman_pinchin0021] = Point(182, 191) + offsets[R.drawable.snowman_swipeup0020] = Point(429, 221) + offsets[R.drawable.reindeer_shake0019] = Point(384, 34) + offsets[R.drawable.elf_swipeleft_0009] = Point(391, 460) + offsets[R.drawable.snowman_tap0016] = Point(90, 221) + offsets[R.drawable.elf_shake_0004] = Point(228, 236) + offsets[R.drawable.snowman_tap0020] = Point(105, 221) + offsets[R.drawable.elf_pinchout_0022] = Point(464, 489) + offsets[R.drawable.santa_swipedown0011] = Point(345, 613) + offsets[R.drawable.elf_pinchin_0029] = Point(404, 450) + offsets[R.drawable.elf_shake_0013] = Point(201, 285) + offsets[R.drawable.santa_swipeup0007] = Point(429, 304) + offsets[R.drawable.snowman_idle0016] = Point(429, 217) + offsets[R.drawable.santa_swipe_right20010] = Point(312, 437) + offsets[R.drawable.reindeer_swipeup0018] = Point(329, 183) + offsets[R.drawable.reindeer_tap0010] = Point(342, 337) + offsets[R.drawable.elf_swipedown_0001] = Point(435, 440) + offsets[R.drawable.elf_swipeup_0020] = Point(404, 450) + offsets[R.drawable.elf_pinchout_0023] = Point(459, 480) + offsets[R.drawable.santa_pinchin0018] = Point(235, 505) + offsets[R.drawable.reindeer_pinchin0019] = Point(0, 0) + offsets[R.drawable.santa_shake0006] = Point(245, 474) + offsets[R.drawable.snowman_shake0019] = Point(74, 0) + offsets[R.drawable.santa_idle0019] = Point(415, 434) + offsets[R.drawable.snowman_swipedown0011] = Point(394, 381) + offsets[R.drawable.snowman_pinchin0020] = Point(167, 189) + offsets[R.drawable.santa_idle0043] = Point(415, 434) + offsets[R.drawable.snowman_swipeleft0013] = Point(415, 221) + offsets[R.drawable.reindeer_swipeup0023] = Point(193, 338) + offsets[R.drawable.elf_swiperight_0003] = Point(435, 425) + offsets[R.drawable.reindeer_swipedown0014] = Point(343, 709) + offsets[R.drawable.santa_swipeleft0020] = Point(351, 467) + offsets[R.drawable.snowman_swipeleft0023] = Point(429, 221) + offsets[R.drawable.reindeer_swipeup0021] = Point(268, 354) + offsets[R.drawable.snowman_tap0009] = Point(79, 221) + offsets[R.drawable.elf_shake_0009] = Point(201, 285) + offsets[R.drawable.santa_swipeleft0003] = Point(374, 516) + offsets[R.drawable.snowman_swipeleft0022] = Point(429, 221) + offsets[R.drawable.santa_tap0015] = Point(270, 412) + offsets[R.drawable.snowman_pinchout0002] = Point(412, 283) + offsets[R.drawable.elf_swipedown_0010] = Point(397, 556) + offsets[R.drawable.elf_pinchin_0011] = Point(521, 426) + offsets[R.drawable.reindeer_swipedown0012] = Point(378, 709) + offsets[R.drawable.santa_pinchin0002] = Point(358, 435) + offsets[R.drawable.reindeer_tap0004] = Point(346, 339) + offsets[R.drawable.snowman_shake0015] = Point(83, 0) + offsets[R.drawable.santa_shake0016] = Point(322, 420) + offsets[R.drawable.snowman_pinchin0014] = Point(90, 1245) + offsets[R.drawable.reindeer_swiperight0023] = Point(330, 341) + offsets[R.drawable.santa_pinchin0019] = Point(224, 529) + offsets[R.drawable.reindeer_swipeleft0018] = Point(384, 355) + offsets[R.drawable.reindeer_shake0015] = Point(384, 23) + offsets[R.drawable.snowman_pinchin0011] = Point(90, 641) + offsets[R.drawable.santa_swipe_right20011] = Point(412, 394) + offsets[R.drawable.santa_pinchin0004] = Point(270, 435) + offsets[R.drawable.snowman_shake0021] = Point(68, 11) + offsets[R.drawable.reindeer_swipeleft0012] = Point(291, 300) + offsets[R.drawable.santa_swipeup0006] = Point(429, 334) + offsets[R.drawable.reindeer_pinchout0006] = Point(299, 285) + offsets[R.drawable.santa_pinchin0001] = Point(415, 435) + offsets[R.drawable.santa_swipeup0020] = Point(425, 462) + offsets[R.drawable.elf_swipeleft_0007] = Point(362, 460) + offsets[R.drawable.snowman_tap0015] = Point(87, 221) + offsets[R.drawable.elf_swiperight_0007] = Point(506, 517) + offsets[R.drawable.elf_swipeup_0016] = Point(476, 200) + offsets[R.drawable.elf_swipeleft_0020] = Point(435, 389) + offsets[R.drawable.santa_swipedown0009] = Point(429, 635) + offsets[R.drawable.santa_swipe_right20002] = Point(420, 435) + offsets[R.drawable.elf_swipeleft_0015] = Point(369, 460) + offsets[R.drawable.elf_swipeleft_0002] = Point(414, 441) + offsets[R.drawable.elf_swipeleft_0008] = Point(393, 460) + offsets[R.drawable.santa_tap0019] = Point(270, 423) + offsets[R.drawable.elf_pinchout_0007] = Point(0, 0) + offsets[R.drawable.snowman_swiperight0018] = Point(429, 221) + offsets[R.drawable.elf_pinchin_0006] = Point(487, 762) + offsets[R.drawable.snowman_pinchout0011] = Point(255, 577) + offsets[R.drawable.snowman_swiperight0022] = Point(417, 221) + offsets[R.drawable.reindeer_swiperight0021] = Point(325, 361) + offsets[R.drawable.snowman_idle0007] = Point(429, 217) + offsets[R.drawable.santa_swipedown0013] = Point(266, 0) + offsets[R.drawable.santa_pinchout20002] = Point(0, 0) + offsets[R.drawable.santa_swipeup0019] = Point(422, 428) + offsets[R.drawable.snowman_swipeleft0016] = Point(429, 221) + offsets[R.drawable.elf_swipeup_0004] = Point(435, 200) + offsets[R.drawable.santa_swipeleft0006] = Point(209, 565) + offsets[R.drawable.santa_idle0005] = Point(415, 431) + offsets[R.drawable.reindeer_swipeup0014] = Point(210, 37) + offsets[R.drawable.elf_shake_0010] = Point(285, 309) + offsets[R.drawable.reindeer_swipeleft0008] = Point(290, 260) + offsets[R.drawable.snowman_swipeup0016] = Point(219, 21) + offsets[R.drawable.reindeer_swipeup0003] = Point(342, 275) + offsets[R.drawable.reindeer_swiperight0009] = Point(121, 685) + offsets[R.drawable.reindeer_swiperight0017] = Point(249, 332) + offsets[R.drawable.elf_swipeup_0015] = Point(476, 311) + offsets[R.drawable.elf_swipeup_0013] = Point(397, 259) + offsets[R.drawable.santa_shake0024] = Point(355, 435) + offsets[R.drawable.santa_shake0002] = Point(328, 456) + offsets[R.drawable.reindeer_swipeleft0004] = Point(333, 279) + offsets[R.drawable.snowman_shake0016] = Point(76, 0) + offsets[R.drawable.santa_swipedown0014] = Point(262, 0) + offsets[R.drawable.reindeer_swipedown0019] = Point(384, 601) + offsets[R.drawable.elf_pinchin_0031] = Point(435, 458) + offsets[R.drawable.santa_idle0046] = Point(415, 435) + offsets[R.drawable.elf_pinchin_0020] = Point(520, 898) + offsets[R.drawable.santa_tap0005] = Point(270, 509) + offsets[R.drawable.santa_idle0009] = Point(416, 429) + offsets[R.drawable.santa_temp_down01] = Point(415, 435) + offsets[R.drawable.elf_pinchout_0019] = Point(50, 0) + offsets[R.drawable.snowman_tap0006] = Point(146, 221) + offsets[R.drawable.elf_swiperight_0021] = Point(427, 451) + offsets[R.drawable.santa_swipeup0021] = Point(399, 471) + offsets[R.drawable.elf_idle_0019] = Point(435, 438) + offsets[R.drawable.elf_swiperight_0010] = Point(888, 568) + offsets[R.drawable.reindeer_swipedown0021] = Point(371, 437) + offsets[R.drawable.snowman_swipeleft0019] = Point(429, 221) + offsets[R.drawable.reindeer_shake0020] = Point(384, 99) + offsets[R.drawable.snowman_tap0008] = Point(79, 221) + offsets[R.drawable.santa_idle0020] = Point(415, 434) + offsets[R.drawable.snowman_tap0024] = Point(429, 221) + offsets[R.drawable.snowman_swipeup0004] = Point(429, 133) + offsets[R.drawable.reindeer_swipeleft0001] = Point(342, 337) + offsets[R.drawable.snowman_shake0007] = Point(108, 0) + offsets[R.drawable.santa_swipeleft0015] = Point(415, 416) + offsets[R.drawable.elf_tap_0012] = Point(221, 272) + offsets[R.drawable.elf_pinchout_0003] = Point(250, 0) + offsets[R.drawable.reindeer_shake0022] = Point(342, 357) + offsets[R.drawable.reindeer_shake0005] = Point(384, 13) + offsets[R.drawable.snowman_swipeleft0021] = Point(429, 221) + offsets[R.drawable.reindeer_swipedown0006] = Point(384, 516) + offsets[R.drawable.elf_swiperight_0018] = Point(0, 538) + offsets[R.drawable.elf_idle_0008] = Point(435, 437) + offsets[R.drawable.reindeer_swipeup0017] = Point(277, 119) + offsets[R.drawable.elf_pinchin_0022] = Point(513, 738) + offsets[R.drawable.elf_swipeup_0018] = Point(454, 400) + offsets[R.drawable.santa_swipeup0010] = Point(429, 266) + offsets[R.drawable.snowman_pinchout0009] = Point(290, 553) + offsets[R.drawable.elf_pinchin_0010] = Point(521, 653) + offsets[R.drawable.snowman_tap0011] = Point(79, 221) + offsets[R.drawable.elf_swipeleft_0006] = Point(330, 460) + offsets[R.drawable.elf_swipeleft_0004] = Point(372, 441) + offsets[R.drawable.snowman_swiperight0020] = Point(429, 221) + offsets[R.drawable.reindeer_swiperight0015] = Point(0, 335) + offsets[R.drawable.snowman_shake0008] = Point(110, 0) + offsets[R.drawable.elf_swipeup_0009] = Point(357, 152) + offsets[R.drawable.elf_swipeup_0002] = Point(386, 400) + offsets[R.drawable.snowman_swipedown0010] = Point(335, 435) + offsets[R.drawable.santa_swipe_right20015] = Point(415, 353) + offsets[R.drawable.reindeer_swipeleft0023] = Point(344, 337) + offsets[R.drawable.santa_pinchout20003] = Point(0, 0) + offsets[R.drawable.snowman_swiperight0013] = Point(429, 221) + offsets[R.drawable.snowman_swipedown0015] = Point(429, 261) + offsets[R.drawable.snowman_swipeup0014] = Point(346, 21) + offsets[R.drawable.snowman_swipedown0008] = Point(207, 344) + offsets[R.drawable.reindeer_pinchout0012] = Point(124, 69) + offsets[R.drawable.santa_temp_zoom_in01] = Point(415, 435) + offsets[R.drawable.reindeer_pinchin0021] = Point(0, 0) + offsets[R.drawable.santa_tap0017] = Point(270, 423) + offsets[R.drawable.snowman_shake0006] = Point(110, 0) + offsets[R.drawable.reindeer_tap0006] = Point(342, 337) + offsets[R.drawable.elf_idle_0024] = Point(435, 440) + offsets[R.drawable.santa_swipeleft0005] = Point(258, 546) + offsets[R.drawable.elf_pinchin_0027] = Point(459, 400) + offsets[R.drawable.reindeer_tap0005] = Point(342, 337) + offsets[R.drawable.elf_swipedown_0020] = Point(435, 470) + offsets[R.drawable.elf_idle_0011] = Point(435, 436) + offsets[R.drawable.santa_swipedown0001] = Point(415, 435) + offsets[R.drawable.elf_shake_0008] = Point(318, 362) + offsets[R.drawable.reindeer_pinchout0022] = Point(228, 197) + offsets[R.drawable.reindeer_pinchout0014] = Point(92, 30) + offsets[R.drawable.snowman_swipedown0002] = Point(400, 266) + offsets[R.drawable.reindeer_swiperight0001] = Point(342, 337) + offsets[R.drawable.santa_swipedown0019] = Point(0, 0) + offsets[R.drawable.santa_swipeleft0024] = Point(429, 424) + offsets[R.drawable.reindeer_swiperight0005] = Point(354, 337) + offsets[R.drawable.santa_pinchout20023] = Point(0, 0) + offsets[R.drawable.snowman_swipeup0002] = Point(429, 211) + offsets[R.drawable.santa_idle0022] = Point(415, 435) + offsets[R.drawable.elf_swipeleft_0010] = Point(317, 460) + offsets[R.drawable.snowman_tap0007] = Point(95, 221) + offsets[R.drawable.santa_swipedown0002] = Point(358, 435) + offsets[R.drawable.santa_idle0018] = Point(415, 433) + offsets[R.drawable.reindeer_shake0010] = Point(383, 13) + offsets[R.drawable.santa_tap0014] = Point(270, 320) + offsets[R.drawable.santa_shake0020] = Point(386, 420) + offsets[R.drawable.snowman_swipeup0017] = Point(231, 33) + offsets[R.drawable.elf_swipeup_0023] = Point(435, 445) + offsets[R.drawable.elf_tap_0007] = Point(221, 272) + offsets[R.drawable.snowman_idle0021] = Point(429, 219) + offsets[R.drawable.elf_pinchin_0013] = Point(519, 169) + offsets[R.drawable.elf_pinchin_0018] = Point(506, 385) + offsets[R.drawable.santa_pinchin0006] = Point(171, 275) + offsets[R.drawable.reindeer_swipedown0015] = Point(349, 709) + offsets[R.drawable.santa_swipe_right20007] = Point(341, 418) + offsets[R.drawable.reindeer_swiperight0022] = Point(304, 370) + offsets[R.drawable.santa_swipeleft0002] = Point(398, 476) + offsets[R.drawable.santa_swipedown0004] = Point(340, 535) + offsets[R.drawable.reindeer_swipedown0016] = Point(357, 709) + offsets[R.drawable.snowman_swipedown0005] = Point(285, 401) + offsets[R.drawable.reindeer_tap0009] = Point(342, 337) + offsets[R.drawable.snowman_swipeup0021] = Point(429, 220) + offsets[R.drawable.elf_swipedown_0006] = Point(435, 475) + offsets[R.drawable.reindeer_swipeleft0011] = Point(284, 285) + offsets[R.drawable.snowman_shake0014] = Point(87, 3) + offsets[R.drawable.snowman_idle0006] = Point(429, 218) + offsets[R.drawable.santa_swipe_right20004] = Point(350, 428) + offsets[R.drawable.reindeer_swipeleft0005] = Point(326, 235) + offsets[R.drawable.snowman_idle0004] = Point(429, 219) + offsets[R.drawable.elf_shake_0001] = Point(435, 440) + offsets[R.drawable.elf_swipedown_0022] = Point(435, 463) + offsets[R.drawable.elf_swipeup_0017] = Point(456, 380) + offsets[R.drawable.snowman_pinchout0013] = Point(237, 580) + offsets[R.drawable.santa_swipeleft0016] = Point(299, 540) + offsets[R.drawable.snowman_pinchout0010] = Point(272, 568) + offsets[R.drawable.snowman_tap0003] = Point(277, 248) + offsets[R.drawable.santa_shake0001] = Point(355, 435) + offsets[R.drawable.elf_swiperight_0009] = Point(769, 641) + offsets[R.drawable.santa_swipe_right20016] = Point(415, 370) + offsets[R.drawable.santa_idle0010] = Point(416, 429) + offsets[R.drawable.elf_swiperight_0006] = Point(441, 476) + offsets[R.drawable.elf_swipeup_0007] = Point(492, 165) + offsets[R.drawable.elf_idle_0017] = Point(435, 437) + offsets[R.drawable.santa_swipeleft0008] = Point(127, 618) + offsets[R.drawable.santa_pinchout20021] = Point(0, 0) + offsets[R.drawable.santa_idle0013] = Point(416, 429) + offsets[R.drawable.snowman_swipedown0009] = Point(266, 281) + offsets[R.drawable.snowman_swipedown0014] = Point(429, 411) + offsets[R.drawable.elf_tap_0003] = Point(427, 434) + offsets[R.drawable.snowman_pinchin0003] = Point(193, 109) + offsets[R.drawable.santa_swipeleft0012] = Point(429, 558) + offsets[R.drawable.snowman_idle0005] = Point(429, 218) + offsets[R.drawable.snowman_idle0010] = Point(429, 217) + offsets[R.drawable.santa_swipedown0016] = Point(429, 402) + offsets[R.drawable.reindeer_swiperight0010] = Point(61, 1026) + offsets[R.drawable.snowman_pinchout0012] = Point(237, 580) + offsets[R.drawable.elf_idle_0005] = Point(435, 438) + offsets[R.drawable.reindeer_tap0002] = Point(346, 339) + offsets[R.drawable.elf_tap_0004] = Point(401, 413) + offsets[R.drawable.santa_idle0030] = Point(416, 430) + offsets[R.drawable.elf_pinchin_0023] = Point(521, 583) + offsets[R.drawable.reindeer_pinchin0001] = Point(0, 0) + offsets[R.drawable.reindeer_pinchout0009] = Point(212, 177) + offsets[R.drawable.reindeer_pinchout0001] = Point(342, 337) + offsets[R.drawable.santa_swipeleft0022] = Point(398, 448) + offsets[R.drawable.reindeer_swiperight0006] = Point(363, 644) + offsets[R.drawable.snowman_tap0010] = Point(79, 221) + offsets[R.drawable.elf_pinchout_0024] = Point(444, 455) + offsets[R.drawable.elf_pinchout_0001] = Point(435, 440) + offsets[R.drawable.santa_swipe_right20003] = Point(347, 435) + offsets[R.drawable.snowman_swipeleft0020] = Point(429, 221) + offsets[R.drawable.reindeer_shake0024] = Point(342, 339) + offsets[R.drawable.snowman_pinchin0022] = Point(226, 197) + offsets[R.drawable.snowman_shake0020] = Point(73, 5) + offsets[R.drawable.santa_tap0013] = Point(270, 412) + offsets[R.drawable.elf_swipeleft_0003] = Point(393, 440) + offsets[R.drawable.snowman_shake0024] = Point(382, 216) + offsets[R.drawable.santa_tap0007] = Point(270, 586) + offsets[R.drawable.snowman_shake0013] = Point(88, 0) + offsets[R.drawable.snowman_tap0021] = Point(118, 221) + offsets[R.drawable.elf_swipeup_0010] = Point(378, 84) + offsets[R.drawable.elf_swipedown_0011] = Point(397, 560) + offsets[R.drawable.snowman_pinchin0023] = Point(299, 207) + offsets[R.drawable.elf_swiperight_0019] = Point(83, 515) + offsets[R.drawable.reindeer_swipeup0008] = Point(210, 47) + offsets[R.drawable.snowman_tap0012] = Point(79, 221) + offsets[R.drawable.reindeer_swipeleft0015] = Point(338, 400) + offsets[R.drawable.elf_swiperight_0013] = Point(0, 730) + offsets[R.drawable.santa_idle0028] = Point(415, 431) + offsets[R.drawable.santa_pinchin0010] = Point(91, 146) + offsets[R.drawable.snowman_pinchin0002] = Point(374, 193) + offsets[R.drawable.elf_swipeup_0014] = Point(468, 315) + offsets[R.drawable.reindeer_swipeleft0020] = Point(384, 342) + offsets[R.drawable.elf_pinchin_0003] = Point(460, 584) + offsets[R.drawable.elf_pinchin_0021] = Point(500, 990) + offsets[R.drawable.reindeer_swipeleft0014] = Point(317, 357) + offsets[R.drawable.reindeer_tap0019] = Point(342, 337) + offsets[R.drawable.reindeer_swipeleft0017] = Point(376, 371) + offsets[R.drawable.santa_tap0010] = Point(270, 536) + offsets[R.drawable.reindeer_swiperight0019] = Point(384, 389) + offsets[R.drawable.elf_shake_0019] = Point(231, 285) + offsets[R.drawable.snowman_pinchin0016] = Point(167, 913) + offsets[R.drawable.elf_swipeleft_0001] = Point(435, 440) + offsets[R.drawable.snowman_shake0022] = Point(64, 16) + offsets[R.drawable.santa_shake0012] = Point(355, 435) + offsets[R.drawable.santa_pinchin0013] = Point(136, 219) + offsets[R.drawable.elf_swipeleft_0014] = Point(395, 460) + offsets[R.drawable.santa_swipeup0002] = Point(418, 418) + offsets[R.drawable.elf_swipedown_0008] = Point(434, 515) + offsets[R.drawable.elf_swipedown_0007] = Point(435, 495) + offsets[R.drawable.snowman_tap0001] = Point(429, 221) + offsets[R.drawable.snowman_pinchout0007] = Point(325, 506) + offsets[R.drawable.santa_idle0037] = Point(416, 430) + offsets[R.drawable.santa_swipedown0012] = Point(265, 264) + offsets[R.drawable.santa_idle0015] = Point(415, 431) + offsets[R.drawable.santa_pinchout20019] = Point(0, 0) + offsets[R.drawable.reindeer_swiperight0014] = Point(0, 335) + offsets[R.drawable.reindeer_swipeleft0006] = Point(318, 177) + offsets[R.drawable.santa_swipe_right20022] = Point(415, 435) + offsets[R.drawable.santa_swipedown0020] = Point(0, 0) + offsets[R.drawable.reindeer_tap0001] = Point(342, 337) + offsets[R.drawable.santa_swipeup0013] = Point(312, 193) + offsets[R.drawable.reindeer_pinchout0005] = Point(318, 308) + offsets[R.drawable.santa_shake0008] = Point(255, 477) + offsets[R.drawable.reindeer_swipeleft0016] = Point(353, 389) + offsets[R.drawable.snowman_swipeup0006] = Point(429, 33) + offsets[R.drawable.snowman_shake0012] = Point(91, 0) + offsets[R.drawable.elf_shake_0017] = Point(201, 183) + offsets[R.drawable.reindeer_swipedown0020] = Point(384, 510) + offsets[R.drawable.santa_idle0042] = Point(415, 433) + offsets[R.drawable.reindeer_pinchout0002] = Point(342, 337) + offsets[R.drawable.santa_idle0044] = Point(415, 434) + offsets[R.drawable.santa_idle0006] = Point(415, 431) + offsets[R.drawable.santa_swipeleft0019] = Point(429, 428) + offsets[R.drawable.reindeer_swipedown0011] = Point(384, 709) + offsets[R.drawable.elf_shake_0005] = Point(201, 183) + offsets[R.drawable.snowman_swipeleft0010] = Point(429, 221) + offsets[R.drawable.reindeer_shake0006] = Point(384, 14) + offsets[R.drawable.santa_tap0006] = Point(270, 557) + offsets[R.drawable.elf_pinchin_0002] = Point(447, 512) + offsets[R.drawable.elf_swiperight_0005] = Point(407, 458) + offsets[R.drawable.santa_idle0039] = Point(415, 431) + offsets[R.drawable.elf_swipeup_0019] = Point(434, 440) + offsets[R.drawable.elf_swipeleft_0011] = Point(295, 460) + offsets[R.drawable.reindeer_pinchout0008] = Point(246, 219) + offsets[R.drawable.snowman_shake0023] = Point(382, 216) + offsets[R.drawable.snowman_swiperight0021] = Point(429, 221) + offsets[R.drawable.elf_pinchin_0019] = Point(520, 618) + offsets[R.drawable.snowman_shake0004] = Point(122, 0) + offsets[R.drawable.reindeer_pinchout0011] = Point(148, 99) + offsets[R.drawable.santa_swipe_right20014] = Point(416, 340) + offsets[R.drawable.elf_pinchin_0015] = Point(515, 95) + offsets[R.drawable.santa_idle0002] = Point(415, 434) + offsets[R.drawable.santa_pinchout20007] = Point(0, 0) + offsets[R.drawable.santa_pinchin0014] = Point(170, 275) + offsets[R.drawable.santa_swipedown0003] = Point(340, 460) + offsets[R.drawable.snowman_pinchout0024] = Point(429, 221) + offsets[R.drawable.santa_shake0009] = Point(243, 477) + offsets[R.drawable.elf_tap_0002] = Point(435, 440) + offsets[R.drawable.santa_swipeleft0023] = Point(429, 429) + offsets[R.drawable.elf_shake_0015] = Point(263, 285) + offsets[R.drawable.santa_swipe_right20008] = Point(336, 417) + offsets[R.drawable.elf_shake_0020] = Point(324, 362) + offsets[R.drawable.elf_shake_0003] = Point(176, 324) + offsets[R.drawable.reindeer_swipeup0011] = Point(210, 34) + offsets[R.drawable.santa_tap0016] = Point(270, 443) + offsets[R.drawable.elf_swipeleft_0005] = Point(351, 460) + offsets[R.drawable.elf_swipeup_0022] = Point(435, 458) + offsets[R.drawable.snowman_swipeleft0009] = Point(429, 221) + offsets[R.drawable.santa_swipeup0014] = Point(311, 178) + offsets[R.drawable.elf_pinchin_0026] = Point(467, 340) + offsets[R.drawable.elf_swipedown_0017] = Point(435, 470) + offsets[R.drawable.santa_idle0012] = Point(416, 429) + offsets[R.drawable.reindeer_swipedown0003] = Point(352, 366) + offsets[R.drawable.santa_swipeleft0021] = Point(270, 462) + offsets[R.drawable.santa_pinchout20018] = Point(0, 0) + offsets[R.drawable.reindeer_swipeup0022] = Point(221, 344) + offsets[R.drawable.snowman_swiperight0019] = Point(429, 221) + offsets[R.drawable.reindeer_pinchout0013] = Point(106, 46) + offsets[R.drawable.snowman_swipedown0003] = Point(359, 311) + offsets[R.drawable.elf_swiperight_0014] = Point(0, 768) + offsets[R.drawable.snowman_tap0005] = Point(213, 221) + offsets[R.drawable.snowman_swiperight0023] = Point(429, 221) + offsets[R.drawable.reindeer_shake0007] = Point(383, 15) + offsets[R.drawable.elf_swiperight_0012] = Point(1280 / 2, 1280 / 2) + offsets[R.drawable.snowman_pinchin0018] = Point(167, 370) + offsets[R.drawable.santa_idle0045] = Point(415, 434) + offsets[R.drawable.santa_swipeup0004] = Point(426, 385) + offsets[R.drawable.elf_swipeleft_0021] = Point(435, 375) + offsets[R.drawable.reindeer_swiperight0013] = Point(0, 569) + offsets[R.drawable.reindeer_swiperight0024] = Point(342, 337) + offsets[R.drawable.reindeer_swipeleft0024] = Point(342, 337) + offsets[R.drawable.elf_idle_0004] = Point(435, 438) + offsets[R.drawable.snowman_tap0014] = Point(83, 221) + offsets[R.drawable.reindeer_pinchin0005] = Point(0, 0) + offsets[R.drawable.santa_shake0011] = Point(326, 453) + offsets[R.drawable.santa_swipedown0015] = Point(257, 0) + offsets[R.drawable.reindeer_swipeup0012] = Point(210, 35) + offsets[R.drawable.snowman_swipedown0004] = Point(320, 356) + offsets[R.drawable.reindeer_pinchin0002] = Point(0, 0) + offsets[R.drawable.santa_idle0033] = Point(416, 429) + offsets[R.drawable.elf_pinchout_0002] = Point(376, 324) + offsets[R.drawable.reindeer_pinchin0006] = Point(0, 0) + offsets[R.drawable.elf_pinchin_0009] = Point(500, 990) + offsets[R.drawable.santa_swipeup0015] = Point(267, 203) + offsets[R.drawable.snowman_swipeleft0018] = Point(429, 221) + offsets[R.drawable.reindeer_swipeup0005] = Point(344, 186) + offsets[R.drawable.reindeer_swipeup0001] = Point(342, 337) + offsets[R.drawable.santa_tap0003] = Point(270, 435) + offsets[R.drawable.elf_idle_0020] = Point(435, 438) + offsets[R.drawable.elf_swipeleft_0018] = Point(435, 441) + offsets[R.drawable.santa_swipedown0024] = Point(0, 435) + offsets[R.drawable.snowman_shake0009] = Point(107, 0) + offsets[R.drawable.santa_pinchout20017] = Point(0, 0) + offsets[R.drawable.elf_idle_0003] = Point(435, 439) + offsets[R.drawable.snowman_shake0018] = Point(72, 0) + offsets[R.drawable.elf_swipeup_0008] = Point(378, 188) + offsets[R.drawable.reindeer_pinchout0019] = Point(118, 62) + offsets[R.drawable.snowman_swipeup0019] = Point(376, 133) + offsets[R.drawable.elf_swiperight_0004] = Point(395, 453) + offsets[R.drawable.elf_shake_0014] = Point(318, 362) + offsets[R.drawable.elf_swiperight_0015] = Point(0, 572) + offsets[R.drawable.snowman_pinchout0008] = Point(307, 532) + offsets[R.drawable.elf_swiperight_0016] = Point(0, 623) + offsets[R.drawable.reindeer_swiperight0002] = Point(342, 337) + offsets[R.drawable.elf_pinchin_0004] = Point(472, 655) + offsets[R.drawable.elf_swipeleft_0016] = Point(444, 441) + offsets[R.drawable.snowman_swiperight0002] = Point(139, 221) + offsets[R.drawable.snowman_swiperight0004] = Point(224, 221) + offsets[R.drawable.santa_swipe_right20024] = Point(415, 435) + offsets[R.drawable.reindeer_pinchout0020] = Point(147, 97) + offsets[R.drawable.santa_swipeup0008] = Point(429, 283) + offsets[R.drawable.elf_pinchin_0030] = Point(435, 480) + offsets[R.drawable.snowman_swipeup0015] = Point(253, 21) + offsets[R.drawable.santa_swipedown0017] = Point(0, 0) + offsets[R.drawable.elf_pinchin_0032] = Point(435, 445) + offsets[R.drawable.snowman_swipedown0017] = Point(429, 129) + offsets[R.drawable.santa_pinchout20005] = Point(0, 0) + offsets[R.drawable.snowman_swipeleft0014] = Point(429, 221) + offsets[R.drawable.reindeer_swiperight0011] = Point(26, 1021) + offsets[R.drawable.reindeer_shake0009] = Point(384, 15) + offsets[R.drawable.reindeer_swiperight0007] = Point(313, 629) + offsets[R.drawable.santa_tap0004] = Point(270, 443) + offsets[R.drawable.reindeer_pinchin0007] = Point(0, 0) + offsets[R.drawable.santa_swipe_right20012] = Point(426, 350) + offsets[R.drawable.snowman_pinchin0019] = Point(167, 234) + offsets[R.drawable.reindeer_shake0017] = Point(384, 14) + offsets[R.drawable.santa_swipe_right20006] = Point(346, 420) + offsets[R.drawable.snowman_pinchout0023] = Point(382, 243) + offsets[R.drawable.elf_shake_0022] = Point(336, 324) + offsets[R.drawable.santa_swipe_right20018] = Point(415, 389) + offsets[R.drawable.snowman_swiperight0010] = Point(235, 221) + offsets[R.drawable.santa_swipe_right20013] = Point(420, 336) + offsets[R.drawable.snowman_swipeleft0015] = Point(429, 221) + offsets[R.drawable.elf_idle_0022] = Point(435, 439) + offsets[R.drawable.santa_shake0007] = Point(257, 475) + offsets[R.drawable.elf_swiperight_0008] = Point(611, 565) + offsets[R.drawable.santa_pinchin0020] = Point(235, 505) + offsets[R.drawable.snowman_swipeleft0017] = Point(429, 221) + offsets[R.drawable.elf_swipeleft_0017] = Point(422, 440) + offsets[R.drawable.santa_pinchin0003] = Point(268, 435) + offsets[R.drawable.snowman_pinchout0004] = Point(377, 390) + offsets[R.drawable.santa_tap0018] = Point(270, 404) + offsets[R.drawable.snowman_swipedown0019] = Point(429, 262) + offsets[R.drawable.santa_idle0004] = Point(415, 432) + offsets[R.drawable.reindeer_swipeup0004] = Point(342, 197) + offsets[R.drawable.reindeer_swiperight0020] = Point(383, 352) + offsets[R.drawable.santa_pinchin0022] = Point(270, 435) + offsets[R.drawable.snowman_swipeup0018] = Point(214, 71) + offsets[R.drawable.reindeer_swipeup0002] = Point(342, 321) + offsets[R.drawable.reindeer_swipeleft0009] = Point(284, 276) + offsets[R.drawable.santa_idle0047] = Point(415, 435) + offsets[R.drawable.snowman_swiperight0014] = Point(428, 221) + offsets[R.drawable.reindeer_shake0012] = Point(384, 14) + offsets[R.drawable.elf_pinchout_0021] = Point(184, 0) + offsets[R.drawable.snowman_pinchin0017] = Point(167, 596) + offsets[R.drawable.santa_swipe_right20019] = Point(415, 435) + offsets[R.drawable.reindeer_shake0011] = Point(383, 13) + offsets[R.drawable.santa_tap0009] = Point(269, 567) + offsets[R.drawable.elf_pinchin_0005] = Point(462, 727) + offsets[R.drawable.snowman_pinchin0013] = Point(90, 1008) + offsets[R.drawable.santa_swipeup0011] = Point(429, 221) + offsets[R.drawable.elf_swipedown_0019] = Point(435, 474) + offsets[R.drawable.snowman_tap0018] = Point(98, 221) + offsets[R.drawable.elf_shake_0007] = Point(244, 285) + offsets[R.drawable.elf_idle_0015] = Point(435, 436) + offsets[R.drawable.santa_pinchin0008] = Point(111, 178) + offsets[R.drawable.snowman_idle0008] = Point(429, 217) + offsets[R.drawable.reindeer_swipedown0022] = Point(354, 384) + offsets[R.drawable.reindeer_tap0007] = Point(342, 337) + offsets[R.drawable.elf_swipedown_0013] = Point(397, 628) + offsets[R.drawable.elf_pinchin_0028] = Point(434, 440) + offsets[R.drawable.snowman_swipeleft0008] = Point(429, 221) + offsets[R.drawable.snowman_tap0023] = Point(169, 221) + offsets[R.drawable.elf_tap_0009] = Point(132, 248) + offsets[R.drawable.elf_swipedown_0004] = Point(435, 434) + offsets[R.drawable.santa_shake0004] = Point(204, 478) + offsets[R.drawable.reindeer_swipedown0002] = Point(344, 344) + offsets[R.drawable.elf_pinchout_0005] = Point(0, 0) + offsets[R.drawable.snowman_swipeleft0002] = Point(429, 221) + offsets[R.drawable.elf_swipedown_0021] = Point(435, 467) + offsets[R.drawable.reindeer_tap0021] = Point(342, 337) + offsets[R.drawable.snowman_shake0011] = Point(95, 0) + offsets[R.drawable.elf_pinchin_0017] = Point(520, 222) + offsets[R.drawable.santa_shake0018] = Point(393, 420) + offsets[R.drawable.reindeer_swiperight0004] = Point(348, 337) + offsets[R.drawable.snowman_swipeleft0012] = Point(429, 221) + offsets[R.drawable.reindeer_swipeup0009] = Point(210, 38) + offsets[R.drawable.reindeer_shake0003] = Point(384, 193) + offsets[R.drawable.santa_swipeup0017] = Point(274, 245) + offsets[R.drawable.santa_swipeup0009] = Point(429, 271) + } + + @JvmField + var ORIG_SIZE = Point(1280, 1280) + + @JvmStatic + fun getOffsets(@DrawableRes drawableId: Int): Point { + val p = offsets[drawableId] + return p ?: EMPTY + } + + private val EMPTY = Point(0, 0) + } +} \ No newline at end of file diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/RetryableAsyncTask.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/RetryableAsyncTask.java deleted file mode 100644 index 5155fe33c..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/RetryableAsyncTask.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.google.android.apps.santatracker.dasherdancer; - -import android.os.AsyncTask; -import android.util.Log; - -/** - * Async task that supports a full retry operation. - */ -public abstract class RetryableAsyncTask extends AsyncTask { - - private static final String TAG = "RetryableAT"; - - abstract boolean shouldRetry(); - - abstract void onPrepareForRetry(); - - C retrySelf(A[] params) { - if (shouldRetry()) { - onPrepareForRetry(); - return doInBackground(params); - } else { - Log.d(TAG, "Should not retry, canceling task"); - - cancel(true); - return null; - } - } - -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/RetryableAsyncTask.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/RetryableAsyncTask.kt new file mode 100644 index 000000000..1d6c9a8d5 --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/RetryableAsyncTask.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.dasherdancer + +import android.os.AsyncTask +import com.google.android.apps.santatracker.util.SantaLog + +/** Async task that supports a full retry operation. */ +abstract class RetryableAsyncTask : AsyncTask() { + + internal abstract fun shouldRetry(): Boolean + + internal abstract fun onPrepareForRetry() + + internal fun retrySelf(params: Array): C? { + return if (shouldRetry()) { + onPrepareForRetry() + doInBackground(*params) + } else { + SantaLog.d(TAG, "Should not retry, canceling task") + + cancel(true) + null + } + } + + companion object { + + private const val TAG = "RetryableAT" + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Santa.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Santa.java deleted file mode 100644 index 428d7d42c..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Santa.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -import java.lang.*; - -public class Santa implements Character { - - private static final long[] sDurations = new long[]{ - 2400, 1000, 1000, 1000, 1000, - 1000, 1000, 1000, 1000 - }; - - private static final int[][] sFrames = new int[][]{ - {R.drawable.santa_idle0001, - R.drawable.santa_idle0002, R.drawable.santa_idle0003, - R.drawable.santa_idle0004, R.drawable.santa_idle0005, - R.drawable.santa_idle0006, R.drawable.santa_idle0007, - R.drawable.santa_idle0008, - R.drawable.santa_idle0009, - R.drawable.santa_idle0010, // index is 9 - R.drawable.santa_idle0035, R.drawable.santa_idle0036, - R.drawable.santa_idle0037, R.drawable.santa_idle0038},//idle - {R.drawable.santa_tap0001, R.drawable.santa_tap0002, R.drawable.santa_tap0003, - R.drawable.santa_tap0004, R.drawable.santa_tap0005, R.drawable.santa_tap0006, - R.drawable.santa_tap0007, R.drawable.santa_tap0008, R.drawable.santa_tap0009, - R.drawable.santa_tap0010, R.drawable.santa_tap0011, R.drawable.santa_tap0012, - R.drawable.santa_tap0013, R.drawable.santa_tap0014, R.drawable.santa_tap0015, - R.drawable.santa_tap0016, R.drawable.santa_tap0017, R.drawable.santa_tap0018, - R.drawable.santa_tap0019, R.drawable.santa_tap0020, R.drawable.santa_tap0021, - R.drawable.santa_tap0022, R.drawable.santa_tap0023, R.drawable.santa_tap0024},//tap - {R.drawable.santa_shake0001, - R.drawable.santa_shake0002, - R.drawable.santa_shake0003, - R.drawable.santa_shake0004, - R.drawable.santa_shake0005, - R.drawable.santa_shake0006, - R.drawable.santa_shake0007, - R.drawable.santa_shake0008, - R.drawable.santa_shake0009, - R.drawable.santa_shake0010, - R.drawable.santa_shake0011, - R.drawable.santa_shake0012, - R.drawable.santa_shake0013, - R.drawable.santa_shake0014, - R.drawable.santa_shake0015, - R.drawable.santa_shake0016, - R.drawable.santa_shake0017, - R.drawable.santa_shake0018, - R.drawable.santa_shake0019, - R.drawable.santa_shake0020, - R.drawable.santa_shake0021, - R.drawable.santa_shake0022, - R.drawable.santa_shake0023, - R.drawable.santa_shake0024, - R.drawable.santa_idle0001},//shake - {R.drawable.santa_swipedown0001, - R.drawable.santa_swipedown0002, - R.drawable.santa_swipedown0003, - R.drawable.santa_swipedown0004, - R.drawable.santa_swipedown0005, - R.drawable.santa_swipedown0006, - R.drawable.santa_swipedown0007, - R.drawable.santa_swipedown0008, - R.drawable.santa_swipedown0009, - R.drawable.santa_swipedown0010, - R.drawable.santa_swipedown0011, - R.drawable.santa_swipedown0012, - R.drawable.santa_swipedown0013, - R.drawable.santa_swipedown0014, - R.drawable.santa_swipedown0015, - R.drawable.santa_swipedown0016, - R.drawable.santa_swipedown0017, - R.drawable.santa_swipedown0018, - R.drawable.santa_swipedown0019, - R.drawable.santa_swipedown0020, - R.drawable.santa_swipedown0021, - R.drawable.santa_swipedown0022, - R.drawable.santa_swipedown0023, - R.drawable.santa_swipedown0024, - R.drawable.santa_idle0001},//swipe down - {R.drawable.santa_swipeup0002, - R.drawable.santa_swipeup0003, - R.drawable.santa_swipeup0004, - R.drawable.santa_swipeup0005, - R.drawable.santa_swipeup0006, - R.drawable.santa_swipeup0007, - R.drawable.santa_swipeup0008, - R.drawable.santa_swipeup0009, - R.drawable.santa_swipeup0010, - R.drawable.santa_swipeup0011, - R.drawable.santa_swipeup0012, - R.drawable.santa_swipeup0013, - R.drawable.santa_swipeup0014, - R.drawable.santa_swipeup0015, - R.drawable.santa_swipeup0016, - R.drawable.santa_swipeup0017, - R.drawable.santa_swipeup0018, - R.drawable.santa_swipeup0019, - R.drawable.santa_swipeup0020, - R.drawable.santa_swipeup0021, - R.drawable.santa_swipeup0022, - R.drawable.santa_swipeup0023, - R.drawable.santa_swipeup0024, - R.drawable.santa_idle0001},//swipe up - {R.drawable.santa_swipeleft0001, - R.drawable.santa_swipeleft0002, - R.drawable.santa_swipeleft0003, - R.drawable.santa_swipeleft0004, - R.drawable.santa_swipeleft0005, - R.drawable.santa_swipeleft0006, - R.drawable.santa_swipeleft0007, - R.drawable.santa_swipeleft0008, - R.drawable.santa_swipeleft0009, - R.drawable.santa_swipeleft0010, - R.drawable.santa_swipeleft0011, - R.drawable.santa_swipeleft0012, - R.drawable.santa_swipeleft0013, - R.drawable.santa_swipeleft0014, - R.drawable.santa_swipeleft0015, - R.drawable.santa_swipeleft0016, - R.drawable.santa_swipeleft0017, - R.drawable.santa_swipeleft0018, - R.drawable.santa_swipeleft0019, - R.drawable.santa_swipeleft0020, - R.drawable.santa_swipeleft0021, - R.drawable.santa_swipeleft0022, - R.drawable.santa_swipeleft0023, - R.drawable.santa_swipeleft0024, - R.drawable.santa_idle0001},//swipe left - {R.drawable.santa_swipe_right20002, - R.drawable.santa_swipe_right20003, - R.drawable.santa_swipe_right20004, - R.drawable.santa_swipe_right20005, - R.drawable.santa_swipe_right20006, - R.drawable.santa_swipe_right20007, - R.drawable.santa_swipe_right20008, - R.drawable.santa_swipe_right20009, - R.drawable.santa_swipe_right20010, - R.drawable.santa_swipe_right20011, - R.drawable.santa_swipe_right20012, - R.drawable.santa_swipe_right20013, - R.drawable.santa_swipe_right20014, - R.drawable.santa_swipe_right20015, - R.drawable.santa_swipe_right20016, - R.drawable.santa_swipe_right20017, - R.drawable.santa_swipe_right20018, - R.drawable.santa_swipe_right20019, - R.drawable.santa_swipe_right20020, - R.drawable.santa_swipe_right20021, - R.drawable.santa_swipe_right20022, - R.drawable.santa_swipe_right20023, - R.drawable.santa_swipe_right20024, - R.drawable.santa_idle0001},//swipe right - {R.drawable.santa_pinchout20001, - R.drawable.santa_pinchout20002, - R.drawable.santa_pinchout20003, - R.drawable.santa_pinchout20004, - R.drawable.santa_pinchout20005, - R.drawable.santa_pinchout20006, - R.drawable.santa_pinchout20007, - R.drawable.santa_pinchout20008, - R.drawable.santa_pinchout20009, - R.drawable.santa_pinchout20010, - R.drawable.santa_pinchout20011, - R.drawable.santa_pinchout20012, - R.drawable.santa_pinchout20013, - R.drawable.santa_pinchout20014, - R.drawable.santa_pinchout20015, - R.drawable.santa_pinchout20016, - R.drawable.santa_pinchout20017, - R.drawable.santa_pinchout20018, - R.drawable.santa_pinchout20019, - R.drawable.santa_pinchout20020, - R.drawable.santa_pinchout20021, - R.drawable.santa_pinchout20022, - R.drawable.santa_pinchout20023, - R.drawable.santa_pinchout20024, - R.drawable.santa_idle0001},//pinch in - {R.drawable.santa_pinchin0001, - R.drawable.santa_pinchin0002, - R.drawable.santa_pinchin0003, - R.drawable.santa_pinchin0004, - R.drawable.santa_pinchin0005, - R.drawable.santa_pinchin0006, - R.drawable.santa_pinchin0007, - R.drawable.santa_pinchin0008, - R.drawable.santa_pinchin0009, - R.drawable.santa_pinchin0010, - R.drawable.santa_pinchin0011, - R.drawable.santa_pinchin0012, - R.drawable.santa_pinchin0013, - R.drawable.santa_pinchin0014, - R.drawable.santa_pinchin0015, - R.drawable.santa_pinchin0016, - R.drawable.santa_pinchin0017, - R.drawable.santa_pinchin0018, - R.drawable.santa_pinchin0019, - R.drawable.santa_pinchin0020, - R.drawable.santa_pinchin0021, - R.drawable.santa_pinchin0022, - R.drawable.santa_pinchin0023, - R.drawable.santa_pinchin0024, - R.drawable.santa_idle0001}//pinch out - }; - - private static final int[][] sFrameIndices = new int[][]{ - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 8, 7, 6, 5, 4, - 3, 2, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, - 11, 12, 13, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0},//idle - {0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23},//tap - {0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24},//shake - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23, 24},//swipe down - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22, 23},//swipe up - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23,24},//swipe left - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//swipe right - {0, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24},//pinch in - {0, 1, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24}//pinch out - }; - - @Override - public long getDuration(int animationKey) { - return sDurations[animationKey]; - } - - @Override - public int[] getFrameIndices(int animationKey) { - return sFrameIndices[animationKey]; - } - - @Override - public int[] getFrames(int animationKey) { - return sFrames[animationKey]; - } - - @Override - public int getSoundResource(int animationid) { - switch (animationid) { - case Character.ANIM_PINCH_IN: - return R.raw.santa_pinchin; - case Character.ANIM_PINCH_OUT: - return R.raw.santa_pinchout; - case Character.ANIM_SHAKE: - return R.raw.santa_shake; - case Character.ANIM_SWIPE_UP: - return R.raw.santa_swipeup; - case Character.ANIM_SWIPE_LEFT: - return R.raw.santa_swipeleft; - case Character.ANIM_SWIPE_RIGHT: - return R.raw.santa_swiperight; - case Character.ANIM_SWIPE_DOWN: - return R.raw.santa_swipedown; - case Character.ANIM_TAP: - return R.raw.santa_tap; - } - - return -1; - } - - @Override - public String getCharacterName() { - return "s"; - } - -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Santa.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Santa.kt new file mode 100644 index 000000000..c8c3736c3 --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Santa.kt @@ -0,0 +1,202 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +class Santa : Character { + + override val characterName: String + get() = "s" + + override fun getDuration(animationKey: Int): Long { + return durations[animationKey] + } + + override fun getFrameIndices(animationKey: Int): IntArray { + return frameIndices[animationKey] + } + + override fun getFrames(animationKey: Int): IntArray { + return frames[animationKey] + } + + override fun getSoundResource(animationid: Int): Int { + when (animationid) { + Character.ANIM_PINCH_IN -> return R.raw.santa_pinchin + Character.ANIM_PINCH_OUT -> return R.raw.santa_pinchout + Character.ANIM_SHAKE -> return R.raw.santa_shake + Character.ANIM_SWIPE_UP -> return R.raw.santa_swipeup + Character.ANIM_SWIPE_LEFT -> return R.raw.santa_swipeleft + Character.ANIM_SWIPE_RIGHT -> return R.raw.santa_swiperight + Character.ANIM_SWIPE_DOWN -> return R.raw.santa_swipedown + Character.ANIM_TAP -> return R.raw.santa_tap + } + + return -1 + } + + companion object { + + private val durations = longArrayOf(2400, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000) + + private val frames = arrayOf( + intArrayOf( + R.drawable.santa_idle0001, R.drawable.santa_idle0002, + R.drawable.santa_idle0003, R.drawable.santa_idle0004, + R.drawable.santa_idle0005, R.drawable.santa_idle0006, + R.drawable.santa_idle0007, R.drawable.santa_idle0008, + R.drawable.santa_idle0009, R.drawable.santa_idle0010, // index is 9 + R.drawable.santa_idle0012, R.drawable.santa_idle0036, + R.drawable.santa_idle0037, R.drawable.santa_idle0038), // idle + intArrayOf(R.drawable.santa_pinchin0001, R.drawable.santa_pinchin0002, + R.drawable.santa_tap0003, R.drawable.santa_tap0004, + R.drawable.santa_tap0005, R.drawable.santa_tap0006, + R.drawable.santa_tap0007, R.drawable.santa_tap0008, + R.drawable.santa_tap0009, R.drawable.santa_tap0010, + R.drawable.santa_tap0011, R.drawable.santa_tap0012, + R.drawable.santa_tap0013, R.drawable.santa_tap0014, + R.drawable.santa_tap0015, R.drawable.santa_tap0016, + R.drawable.santa_tap0017, R.drawable.santa_tap0018, + R.drawable.santa_tap0019, R.drawable.santa_tap0016, + R.drawable.santa_tap0003, R.drawable.santa_tap0022, + R.drawable.santa_pinchin0001, R.drawable.santa_pinchin0001), // tap + intArrayOf(R.drawable.santa_shake0001, R.drawable.santa_shake0002, + R.drawable.santa_shake0003, R.drawable.santa_shake0004, + R.drawable.santa_shake0005, R.drawable.santa_shake0006, + R.drawable.santa_shake0007, R.drawable.santa_shake0008, + R.drawable.santa_shake0009, R.drawable.santa_shake0010, + R.drawable.santa_shake0011, R.drawable.santa_shake0012, + R.drawable.santa_shake0013, R.drawable.santa_shake0014, + R.drawable.santa_shake0015, R.drawable.santa_shake0016, + R.drawable.santa_shake0017, R.drawable.santa_shake0018, + R.drawable.santa_shake0019, R.drawable.santa_shake0020, + R.drawable.santa_shake0021, R.drawable.santa_shake0022, + R.drawable.santa_shake0023, R.drawable.santa_shake0024, + R.drawable.santa_idle0001), // shake + intArrayOf(R.drawable.santa_swipedown0001, R.drawable.santa_swipedown0002, + R.drawable.santa_swipedown0003, R.drawable.santa_swipedown0004, + R.drawable.santa_swipedown0005, R.drawable.santa_swipedown0006, + R.drawable.santa_swipedown0007, R.drawable.santa_swipedown0008, + R.drawable.santa_swipedown0009, R.drawable.santa_swipedown0010, + R.drawable.santa_swipedown0011, R.drawable.santa_swipedown0012, + R.drawable.santa_swipedown0013, R.drawable.santa_swipedown0014, + R.drawable.santa_swipedown0015, R.drawable.santa_swipedown0016, + R.drawable.santa_swipedown0017, R.drawable.santa_swipedown0018, + R.drawable.santa_swipedown0019, R.drawable.santa_swipedown0020, + R.drawable.santa_swipedown0021, R.drawable.santa_swipedown0022, + R.drawable.santa_swipedown0023, R.drawable.santa_swipedown0024, + R.drawable.santa_idle0001), // swipe down + intArrayOf(R.drawable.santa_swipeup0002, R.drawable.santa_swipeup0003, + R.drawable.santa_swipeup0004, R.drawable.santa_swipeup0005, + R.drawable.santa_swipeup0006, R.drawable.santa_swipeup0007, + R.drawable.santa_swipeup0008, R.drawable.santa_swipeup0009, + R.drawable.santa_swipeup0010, R.drawable.santa_swipeup0011, + R.drawable.santa_swipeup0012, R.drawable.santa_swipeup0013, + R.drawable.santa_swipeup0014, R.drawable.santa_swipeup0015, + R.drawable.santa_swipeup0016, R.drawable.santa_swipeup0017, + R.drawable.santa_swipeup0018, R.drawable.santa_swipeup0019, + R.drawable.santa_swipeup0020, R.drawable.santa_swipeup0021, + R.drawable.santa_swipeup0022, R.drawable.santa_swipeup0023, + R.drawable.santa_swipeup0001, + R.drawable.santa_idle0001), // swipe up + intArrayOf(R.drawable.santa_pinchin0001, R.drawable.santa_swipeleft0002, + R.drawable.santa_swipeleft0003, R.drawable.santa_swipeleft0004, + R.drawable.santa_swipeleft0005, R.drawable.santa_swipeleft0006, + R.drawable.santa_swipeleft0007, R.drawable.santa_swipeleft0008, + R.drawable.santa_swipeleft0009, R.drawable.santa_swipeleft0007, + R.drawable.santa_pinchin0001, R.drawable.santa_swipeleft0012, + R.drawable.santa_swipeleft0013, R.drawable.santa_swipeleft0014, + R.drawable.santa_swipeleft0015, R.drawable.santa_swipeleft0016, + R.drawable.santa_swipeleft0017, R.drawable.santa_swipeleft0018, + R.drawable.santa_swipeleft0019, R.drawable.santa_swipeleft0020, + R.drawable.santa_swipeleft0021, R.drawable.santa_swipeleft0022, + R.drawable.santa_swipeleft0023, R.drawable.santa_swipeleft0024, + R.drawable.santa_idle0001), // swipe left + intArrayOf(R.drawable.santa_swipe_right20002, + R.drawable.santa_swipe_right20003, + R.drawable.santa_swipe_right20004, + R.drawable.santa_swipe_right20005, + R.drawable.santa_swipe_right20006, + R.drawable.santa_swipe_right20007, + R.drawable.santa_swipe_right20008, + R.drawable.santa_swipe_right20009, + R.drawable.santa_swipe_right20010, + R.drawable.santa_swipe_right20011, + R.drawable.santa_swipe_right20012, + R.drawable.santa_swipe_right20013, + R.drawable.santa_swipe_right20014, + R.drawable.santa_swipe_right20015, + R.drawable.santa_swipe_right20016, + R.drawable.santa_swipe_right20017, + R.drawable.santa_swipe_right20018, + R.drawable.santa_swipe_right20019, + R.drawable.santa_swipe_right20020, + R.drawable.santa_swipe_right20021, + R.drawable.santa_swipe_right20022, + R.drawable.santa_swipe_right20023, + R.drawable.santa_swipe_right20024, + R.drawable.santa_idle0001), // swipe right + intArrayOf(R.drawable.santa_pinchout20001, R.drawable.santa_pinchout20002, + R.drawable.santa_pinchout20003, R.drawable.santa_pinchout20004, + R.drawable.santa_pinchout20005, R.drawable.santa_pinchout20006, + R.drawable.santa_pinchout20007, R.drawable.santa_pinchout20007, + R.drawable.santa_pinchout20007, R.drawable.santa_pinchout20007, + R.drawable.santa_pinchout20007, R.drawable.santa_pinchout20007, + R.drawable.santa_pinchout20007, R.drawable.santa_pinchout20007, + R.drawable.santa_pinchout20007, R.drawable.santa_pinchout20007, + R.drawable.santa_pinchout20017, R.drawable.santa_pinchout20018, + R.drawable.santa_pinchout20019, R.drawable.santa_pinchout20020, + R.drawable.santa_pinchout20021, R.drawable.santa_pinchout20001, + R.drawable.santa_pinchout20023, R.drawable.santa_pinchout20023, + R.drawable.santa_idle0001), // pinch in + intArrayOf(R.drawable.santa_pinchin0001, R.drawable.santa_pinchin0002, + R.drawable.santa_pinchin0003, R.drawable.santa_pinchin0004, + R.drawable.santa_pinchin0005, R.drawable.santa_pinchin0006, + R.drawable.santa_pinchin0007, R.drawable.santa_pinchin0008, + R.drawable.santa_pinchin0009, R.drawable.santa_pinchin0010, + R.drawable.santa_pinchin0009, R.drawable.santa_pinchin0008, + R.drawable.santa_pinchin0013, R.drawable.santa_pinchin0014, + R.drawable.santa_pinchin0005, R.drawable.santa_pinchin0004, + R.drawable.santa_pinchin0017, R.drawable.santa_pinchin0018, + R.drawable.santa_pinchin0019, R.drawable.santa_pinchin0020, + R.drawable.santa_pinchin0017, R.drawable.santa_pinchin0022, + R.drawable.santa_pinchin0002, R.drawable.santa_pinchin0001, + R.drawable.santa_idle0001) // pinch out + ) + + private val frameIndices = + arrayOf(intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, + 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 8, 7, 6, 5, 4, 3, 2, 1, + 0, 0), // idle + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // tap + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24), // shake + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24), // swipe down + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // swipe up + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24), // swipe left + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // swipe right + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24), // pinch in + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24) // pinch out + ) + } +} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Snowman.java b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Snowman.java deleted file mode 100644 index 436d32a43..000000000 --- a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Snowman.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright (C) 2016 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.apps.santatracker.dasherdancer; - -public class Snowman implements Character { - - private static final long[] sDurations = new long[]{ - 1000, 1000, 1000, 960, 1000, - 1000, 1000, 1000, 1000 - }; - - private static final int[][] sFrames = new int[][]{ - { - R.drawable.snowman_idle0001, R.drawable.snowman_idle0002, R.drawable.snowman_idle0003, R.drawable.snowman_idle0004, - R.drawable.snowman_idle0005, R.drawable.snowman_idle0006, R.drawable.snowman_idle0007, R.drawable.snowman_idle0008, - R.drawable.snowman_idle0009, R.drawable.snowman_idle0010, R.drawable.snowman_idle0011, R.drawable.snowman_idle0012, - R.drawable.snowman_idle0013, R.drawable.snowman_idle0014, R.drawable.snowman_idle0015, R.drawable.snowman_idle0016, - R.drawable.snowman_idle0017, R.drawable.snowman_idle0018, R.drawable.snowman_idle0019, R.drawable.snowman_idle0020, - R.drawable.snowman_idle0021, R.drawable.snowman_idle0022, R.drawable.snowman_idle0023, R.drawable.snowman_idle0024}, //idle - {R.drawable.snowman_tap0001, R.drawable.snowman_tap0002, R.drawable.snowman_tap0003, R.drawable.snowman_tap0004, - R.drawable.snowman_tap0005, R.drawable.snowman_tap0006, R.drawable.snowman_tap0007, R.drawable.snowman_tap0008, - R.drawable.snowman_tap0009, R.drawable.snowman_tap0010, R.drawable.snowman_tap0011, R.drawable.snowman_tap0012, - R.drawable.snowman_tap0013, R.drawable.snowman_tap0014, R.drawable.snowman_tap0015, R.drawable.snowman_tap0016, - R.drawable.snowman_tap0017, R.drawable.snowman_tap0018, R.drawable.snowman_tap0019, R.drawable.snowman_tap0020, - R.drawable.snowman_tap0021, R.drawable.snowman_tap0022, R.drawable.snowman_tap0023, R.drawable.snowman_tap0024},//tap - {R.drawable.snowman_shake0001, R.drawable.snowman_shake0002, R.drawable.snowman_shake0003, R.drawable.snowman_shake0004, - R.drawable.snowman_shake0005, R.drawable.snowman_shake0006, R.drawable.snowman_shake0007, R.drawable.snowman_shake0008, - R.drawable.snowman_shake0009, R.drawable.snowman_shake0010, R.drawable.snowman_shake0011, R.drawable.snowman_shake0012, - R.drawable.snowman_shake0013, R.drawable.snowman_shake0014, R.drawable.snowman_shake0015, R.drawable.snowman_shake0016, - R.drawable.snowman_shake0017, R.drawable.snowman_shake0018, R.drawable.snowman_shake0019, R.drawable.snowman_shake0020, - R.drawable.snowman_shake0021, R.drawable.snowman_shake0022, R.drawable.snowman_shake0023, R.drawable.snowman_shake0024},//shake - {R.drawable.snowman_swipedown0001, - R.drawable.snowman_swipedown0002, - R.drawable.snowman_swipedown0003, - R.drawable.snowman_swipedown0004, - R.drawable.snowman_swipedown0005, - R.drawable.snowman_swipedown0006, - R.drawable.snowman_swipedown0007, - R.drawable.snowman_swipedown0008, - R.drawable.snowman_swipedown0009, - R.drawable.snowman_swipedown0010, - R.drawable.snowman_swipedown0011, - R.drawable.snowman_swipedown0012, - R.drawable.snowman_swipedown0013, - R.drawable.snowman_swipedown0014, - R.drawable.snowman_swipedown0015, - R.drawable.snowman_swipedown0016, - R.drawable.snowman_swipedown0017, - R.drawable.snowman_swipedown0018, - R.drawable.snowman_swipedown0019, - R.drawable.snowman_swipedown0020, - R.drawable.snowman_swipedown0021, - R.drawable.snowman_swipedown0022, - R.drawable.snowman_swipedown0023},//swipe down - {R.drawable.snowman_swipeup0002, - R.drawable.snowman_swipeup0003, - R.drawable.snowman_swipeup0004, - R.drawable.snowman_swipeup0005, - R.drawable.snowman_swipeup0006, - R.drawable.snowman_swipeup0007, - R.drawable.snowman_swipeup0008, - R.drawable.snowman_swipeup0009, - R.drawable.snowman_swipeup0010, - R.drawable.snowman_swipeup0011, - R.drawable.snowman_swipeup0012, - R.drawable.snowman_swipeup0013, - R.drawable.snowman_swipeup0014, - R.drawable.snowman_swipeup0015, - R.drawable.snowman_swipeup0016, - R.drawable.snowman_swipeup0017, - R.drawable.snowman_swipeup0018, - R.drawable.snowman_swipeup0019, - R.drawable.snowman_swipeup0020, - R.drawable.snowman_swipeup0021, - R.drawable.snowman_swipeup0022, - R.drawable.snowman_swipeup0023, - R.drawable.snowman_swipeup0024},//swipe up - {R.drawable.snowman_swipeleft0001, - R.drawable.snowman_swipeleft0002, - R.drawable.snowman_swipeleft0003, - R.drawable.snowman_swipeleft0004, - R.drawable.snowman_swipeleft0005, - R.drawable.snowman_swipeleft0006, - R.drawable.snowman_swipeleft0007, - R.drawable.snowman_swipeleft0008, - R.drawable.snowman_swipeleft0009, - R.drawable.snowman_swipeleft0010, - R.drawable.snowman_swipeleft0011, - R.drawable.snowman_swipeleft0012, - R.drawable.snowman_swipeleft0013, - R.drawable.snowman_swipeleft0014, - R.drawable.snowman_swipeleft0015, - R.drawable.snowman_swipeleft0016, - R.drawable.snowman_swipeleft0017, - R.drawable.snowman_swipeleft0018, - R.drawable.snowman_swipeleft0019, - R.drawable.snowman_swipeleft0020, - R.drawable.snowman_swipeleft0021, - R.drawable.snowman_swipeleft0022, - R.drawable.snowman_swipeleft0023, - R.drawable.snowman_swipeleft0024},//swipe left - {R.drawable.snowman_swiperight0002, - R.drawable.snowman_swiperight0003, - R.drawable.snowman_swiperight0004, - R.drawable.snowman_swiperight0005, - R.drawable.snowman_swiperight0006, - R.drawable.snowman_swiperight0007, - R.drawable.snowman_swiperight0008, - R.drawable.snowman_swiperight0009, - R.drawable.snowman_swiperight0010, - R.drawable.snowman_swiperight0011, - R.drawable.snowman_swiperight0012, - R.drawable.snowman_swiperight0013, - R.drawable.snowman_swiperight0014, - R.drawable.snowman_swiperight0015, - R.drawable.snowman_swiperight0016, - R.drawable.snowman_swiperight0017, - R.drawable.snowman_swiperight0018, - R.drawable.snowman_swiperight0019, - R.drawable.snowman_swiperight0020, - R.drawable.snowman_swiperight0021, - R.drawable.snowman_swiperight0022, - R.drawable.snowman_swiperight0023, - R.drawable.snowman_swiperight0024},//swipe right - {R.drawable.snowman_pinchin0001, R.drawable.snowman_pinchin0002, R.drawable.snowman_pinchin0003, R.drawable.snowman_pinchin0004, - R.drawable.snowman_pinchin0005, R.drawable.snowman_pinchin0006, R.drawable.snowman_pinchin0007, R.drawable.snowman_pinchin0008, - R.drawable.snowman_pinchin0009, R.drawable.snowman_pinchin0010, R.drawable.snowman_pinchin0011, R.drawable.snowman_pinchin0012, - R.drawable.snowman_pinchin0013, R.drawable.snowman_pinchin0014, R.drawable.snowman_pinchin0015, R.drawable.snowman_pinchin0016, - R.drawable.snowman_pinchin0017, R.drawable.snowman_pinchin0018, R.drawable.snowman_pinchin0019, R.drawable.snowman_pinchin0020, - R.drawable.snowman_pinchin0021, R.drawable.snowman_pinchin0022, R.drawable.snowman_pinchin0023, R.drawable.snowman_pinchin0024},//pinch out - {R.drawable.snowman_pinchout0001, - R.drawable.snowman_pinchout0002, - R.drawable.snowman_pinchout0003, - R.drawable.snowman_pinchout0004, - R.drawable.snowman_pinchout0005, - R.drawable.snowman_pinchout0006, - R.drawable.snowman_pinchout0007, - R.drawable.snowman_pinchout0008, - R.drawable.snowman_pinchout0009, - R.drawable.snowman_pinchout0010, - R.drawable.snowman_pinchout0011, - R.drawable.snowman_pinchout0012, - R.drawable.snowman_pinchout0013, - R.drawable.snowman_pinchout0014, - R.drawable.snowman_pinchout0015, - R.drawable.snowman_pinchout0016, - R.drawable.snowman_pinchout0017, - R.drawable.snowman_pinchout0018, - R.drawable.snowman_pinchout0019, - R.drawable.snowman_pinchout0020, - R.drawable.snowman_pinchout0021, - R.drawable.snowman_pinchout0022, - R.drawable.snowman_pinchout0023, - R.drawable.snowman_pinchout0024}//pinch in - }; - - private static final int[][] sFrameIndices = new int[][]{ - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//idle - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//tap - {0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23},//shake - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22},//swipe down - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22},//swipe up - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23},//swipe left - {0,1,2,3,4,5,6,7, - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22},//swipe right - {0, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23},//pinch in - {0, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23}//pinch out - }; - - @Override - public long getDuration(int animationKey) { - return sDurations[animationKey]; - } - - @Override - public int[] getFrameIndices(int animationKey) { - return sFrameIndices[animationKey]; - } - - @Override - public int[] getFrames(int animationKey) { - return sFrames[animationKey]; - } - - @Override - public int getSoundResource(int animationid) { - switch (animationid) { - case Character.ANIM_PINCH_IN: - return R.raw.snowman_pinchin; - case Character.ANIM_PINCH_OUT: - return R.raw.snowman_pinchout; - case Character.ANIM_SHAKE: - return R.raw.snowman_shake; - case Character.ANIM_SWIPE_UP: - return R.raw.snowman_swipeup; - case Character.ANIM_SWIPE_DOWN: - return R.raw.snowman_swipedown; - case Character.ANIM_SWIPE_LEFT: - return R.raw.snowman_swipeleft; - case Character.ANIM_SWIPE_RIGHT: - return R.raw.snowman_swiperight; - case Character.ANIM_TAP: - return R.raw.snowman_tap; - } - - return -1; - } - - @Override - public String getCharacterName() { - return "t"; - } - -} diff --git a/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Snowman.kt b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Snowman.kt new file mode 100644 index 000000000..8bb2766fc --- /dev/null +++ b/dasherdancer/src/main/java/com/google/android/apps/santatracker/dasherdancer/Snowman.kt @@ -0,0 +1,202 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.dasherdancer + +class Snowman : Character { + + override val characterName: String + get() = "t" + + override fun getDuration(animationKey: Int): Long { + return durations[animationKey] + } + + override fun getFrameIndices(animationKey: Int): IntArray { + return frameIndices[animationKey] + } + + override fun getFrames(animationKey: Int): IntArray { + return frames[animationKey] + } + + override fun getSoundResource(animationid: Int): Int { + when (animationid) { + Character.ANIM_PINCH_IN -> return R.raw.snowman_pinchin + Character.ANIM_PINCH_OUT -> return R.raw.snowman_pinchout + Character.ANIM_SHAKE -> return R.raw.snowman_shake + Character.ANIM_SWIPE_UP -> return R.raw.snowman_swipeup + Character.ANIM_SWIPE_DOWN -> return R.raw.snowman_swipedown + Character.ANIM_SWIPE_LEFT -> return R.raw.snowman_swipeleft + Character.ANIM_SWIPE_RIGHT -> return R.raw.snowman_swiperight + Character.ANIM_TAP -> return R.raw.snowman_tap + } + + return -1 + } + + companion object { + + private val durations = longArrayOf(1000, 1000, 1000, 960, 1000, 1000, 1000, 1000, 1000) + + private val frames = arrayOf( + intArrayOf(R.drawable.snowman_idle0001, R.drawable.snowman_idle0002, + R.drawable.snowman_idle0003, R.drawable.snowman_idle0004, + R.drawable.snowman_idle0005, R.drawable.snowman_idle0006, + R.drawable.snowman_idle0007, R.drawable.snowman_idle0008, + R.drawable.snowman_idle0009, R.drawable.snowman_idle0010, + R.drawable.snowman_idle0011, R.drawable.snowman_idle0011, + R.drawable.snowman_idle0011, R.drawable.snowman_idle0010, + R.drawable.snowman_idle0009, R.drawable.snowman_idle0016, + R.drawable.snowman_idle0017, R.drawable.snowman_idle0018, + R.drawable.snowman_idle0019, R.drawable.snowman_idle0020, + R.drawable.snowman_idle0021, R.drawable.snowman_idle0022, + R.drawable.snowman_idle0023, R.drawable.snowman_idle0001), // idle + intArrayOf(R.drawable.snowman_tap0001, R.drawable.snowman_tap0002, + R.drawable.snowman_tap0003, R.drawable.snowman_tap0004, + R.drawable.snowman_tap0005, R.drawable.snowman_tap0006, + R.drawable.snowman_tap0007, R.drawable.snowman_tap0008, + R.drawable.snowman_tap0009, R.drawable.snowman_tap0010, + R.drawable.snowman_tap0011, R.drawable.snowman_tap0012, + R.drawable.snowman_tap0013, R.drawable.snowman_tap0014, + R.drawable.snowman_tap0015, R.drawable.snowman_tap0016, + R.drawable.snowman_tap0017, R.drawable.snowman_tap0018, + R.drawable.snowman_tap0019, R.drawable.snowman_tap0020, + R.drawable.snowman_tap0021, R.drawable.snowman_tap0022, + R.drawable.snowman_tap0023, R.drawable.snowman_tap0024), // tap + intArrayOf(R.drawable.snowman_shake0001, R.drawable.snowman_shake0002, + R.drawable.snowman_shake0003, R.drawable.snowman_shake0004, + R.drawable.snowman_shake0005, R.drawable.snowman_shake0006, + R.drawable.snowman_shake0007, R.drawable.snowman_shake0008, + R.drawable.snowman_shake0009, R.drawable.snowman_shake0010, + R.drawable.snowman_shake0011, R.drawable.snowman_shake0012, + R.drawable.snowman_shake0013, R.drawable.snowman_shake0014, + R.drawable.snowman_shake0015, R.drawable.snowman_shake0016, + R.drawable.snowman_shake0017, R.drawable.snowman_shake0018, + R.drawable.snowman_shake0019, R.drawable.snowman_shake0020, + R.drawable.snowman_shake0021, R.drawable.snowman_shake0022, + R.drawable.snowman_shake0023, + R.drawable.snowman_shake0024), // shake + intArrayOf(R.drawable.snowman_idle0001, R.drawable.snowman_swipedown0002, + R.drawable.snowman_swipedown0003, R.drawable.snowman_swipedown0004, + R.drawable.snowman_swipedown0005, R.drawable.snowman_swipedown0006, + R.drawable.snowman_swipedown0007, R.drawable.snowman_swipedown0008, + R.drawable.snowman_swipedown0009, R.drawable.snowman_swipedown0010, + R.drawable.snowman_swipedown0011, R.drawable.snowman_swipedown0012, + R.drawable.snowman_swipedown0013, R.drawable.snowman_swipedown0014, + R.drawable.snowman_swipedown0015, R.drawable.snowman_swipedown0016, + R.drawable.snowman_swipedown0017, R.drawable.snowman_swipedown0018, + R.drawable.snowman_swipedown0019, R.drawable.snowman_swipedown0020, + R.drawable.snowman_swipedown0021, R.drawable.snowman_idle0001, + R.drawable.snowman_idle0001), // swipe down + intArrayOf(R.drawable.snowman_swipeup0002, R.drawable.snowman_swipeup0003, + R.drawable.snowman_swipeup0004, R.drawable.snowman_swipeup0005, + R.drawable.snowman_swipeup0006, R.drawable.snowman_swipeup0007, + R.drawable.snowman_swipeup0008, R.drawable.snowman_swipeup0008, + R.drawable.snowman_swipeup0008, R.drawable.snowman_swipeup0011, + R.drawable.snowman_swipeup0012, R.drawable.snowman_swipeup0013, + R.drawable.snowman_swipeup0014, R.drawable.snowman_swipeup0015, + R.drawable.snowman_swipeup0016, R.drawable.snowman_swipeup0017, + R.drawable.snowman_swipeup0018, R.drawable.snowman_swipeup0019, + R.drawable.snowman_swipeup0020, R.drawable.snowman_swipeup0021, + R.drawable.snowman_swipeup0022, R.drawable.snowman_swipeup0023, + R.drawable.snowman_idle0001), // swipe up + intArrayOf(R.drawable.snowman_swipeleft0001, + R.drawable.snowman_swipeleft0002, R.drawable.snowman_swipeleft0003, + R.drawable.snowman_swipeleft0004, R.drawable.snowman_swipeleft0005, + R.drawable.snowman_swipeleft0006, R.drawable.snowman_swipeleft0007, + R.drawable.snowman_swipeleft0008, R.drawable.snowman_swipeleft0009, + R.drawable.snowman_swipeleft0010, R.drawable.snowman_swipeleft0011, + R.drawable.snowman_swipeleft0012, R.drawable.snowman_swipeleft0013, + R.drawable.snowman_swipeleft0014, R.drawable.snowman_swipeleft0015, + R.drawable.snowman_swipeleft0016, R.drawable.snowman_swipeleft0017, + R.drawable.snowman_swipeleft0018, R.drawable.snowman_swipeleft0019, + R.drawable.snowman_swipeleft0020, R.drawable.snowman_swipeleft0021, + R.drawable.snowman_swipeleft0022, R.drawable.snowman_swipeleft0023, + R.drawable.snowman_swipeleft0024), // swipe left + intArrayOf(R.drawable.snowman_swiperight0002, + R.drawable.snowman_swiperight0003, + R.drawable.snowman_swiperight0004, + R.drawable.snowman_swiperight0005, + R.drawable.snowman_swiperight0006, + R.drawable.snowman_swiperight0007, + R.drawable.snowman_swiperight0008, + R.drawable.snowman_swiperight0009, + R.drawable.snowman_swiperight0010, + R.drawable.snowman_swiperight0011, + R.drawable.snowman_swiperight0012, + R.drawable.snowman_swiperight0013, + R.drawable.snowman_swiperight0014, + R.drawable.snowman_swiperight0015, + R.drawable.snowman_swiperight0016, + R.drawable.snowman_swiperight0017, + R.drawable.snowman_swiperight0018, + R.drawable.snowman_swiperight0019, + R.drawable.snowman_swiperight0020, + R.drawable.snowman_swiperight0021, + R.drawable.snowman_swiperight0022, + R.drawable.snowman_swiperight0023, + R.drawable.snowman_swiperight0001), // swipe right + intArrayOf(R.drawable.snowman_pinchin0001, R.drawable.snowman_pinchin0002, + R.drawable.snowman_pinchin0003, R.drawable.snowman_pinchin0004, + R.drawable.snowman_pinchin0005, R.drawable.snowman_pinchin0006, + R.drawable.snowman_pinchin0007, R.drawable.snowman_pinchin0008, + R.drawable.snowman_pinchin0009, R.drawable.snowman_pinchin0010, + R.drawable.snowman_pinchin0011, R.drawable.snowman_pinchin0012, + R.drawable.snowman_pinchin0013, R.drawable.snowman_pinchin0014, + R.drawable.snowman_pinchin0014, R.drawable.snowman_pinchin0016, + R.drawable.snowman_pinchin0017, R.drawable.snowman_pinchin0018, + R.drawable.snowman_pinchin0019, R.drawable.snowman_pinchin0020, + R.drawable.snowman_pinchin0021, R.drawable.snowman_pinchin0022, + R.drawable.snowman_pinchin0023, + R.drawable.snowman_pinchin0024), // pinch out + intArrayOf(R.drawable.snowman_pinchout0001, R.drawable.snowman_pinchout0002, + R.drawable.snowman_pinchout0003, R.drawable.snowman_pinchout0004, + R.drawable.snowman_pinchout0005, R.drawable.snowman_pinchout0006, + R.drawable.snowman_pinchout0007, R.drawable.snowman_pinchout0008, + R.drawable.snowman_pinchout0009, R.drawable.snowman_pinchout0010, + R.drawable.snowman_pinchout0011, R.drawable.snowman_pinchout0012, + R.drawable.snowman_pinchout0013, R.drawable.snowman_pinchout0013, + R.drawable.snowman_pinchout0013, R.drawable.snowman_pinchout0013, + R.drawable.snowman_pinchout0013, R.drawable.snowman_pinchout0013, + R.drawable.snowman_pinchout0013, R.drawable.snowman_pinchout0020, + R.drawable.snowman_pinchout0021, R.drawable.snowman_pinchout0022, + R.drawable.snowman_pinchout0023, + R.drawable.snowman_pinchout0024) // pinch in + ) + + private val frameIndices = + arrayOf(intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // idle + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // tap + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // shake + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22), // swipe down + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22), // swipe up + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // swipe left + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22), // swipe right + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23), // pinch in + intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23) // pinch out + ) + } +} diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer.png b/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer.png deleted file mode 100644 index 1d3025f60..000000000 Binary files a/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer.webp b/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer.webp new file mode 100644 index 000000000..49d9a760e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer.webp differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer_p.png b/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer_p.png deleted file mode 100644 index 83b08e228..000000000 Binary files a/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer_p.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer_p.webp b/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer_p.webp new file mode 100644 index 000000000..e41f5de70 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-hdpi/btn_nav_drawer_p.webp differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_select_character.png b/dasherdancer/src/main/res/drawable-hdpi/btn_select_character.png deleted file mode 100644 index 2096884d1..000000000 Binary files a/dasherdancer/src/main/res/drawable-hdpi/btn_select_character.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_select_character.webp b/dasherdancer/src/main/res/drawable-hdpi/btn_select_character.webp new file mode 100644 index 000000000..73d7aa8e8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-hdpi/btn_select_character.webp differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_select_character_pressed.png b/dasherdancer/src/main/res/drawable-hdpi/btn_select_character_pressed.png deleted file mode 100644 index 242373190..000000000 Binary files a/dasherdancer/src/main/res/drawable-hdpi/btn_select_character_pressed.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_select_character_pressed.webp b/dasherdancer/src/main/res/drawable-hdpi/btn_select_character_pressed.webp new file mode 100644 index 000000000..5ed2f609d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-hdpi/btn_select_character_pressed.webp differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_x_out.png b/dasherdancer/src/main/res/drawable-hdpi/btn_x_out.png deleted file mode 100644 index 855e3f9a1..000000000 Binary files a/dasherdancer/src/main/res/drawable-hdpi/btn_x_out.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_x_out.webp b/dasherdancer/src/main/res/drawable-hdpi/btn_x_out.webp new file mode 100644 index 000000000..b9d36771f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-hdpi/btn_x_out.webp differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_x_out_pressed.png b/dasherdancer/src/main/res/drawable-hdpi/btn_x_out_pressed.png deleted file mode 100644 index e3bc0aa24..000000000 Binary files a/dasherdancer/src/main/res/drawable-hdpi/btn_x_out_pressed.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/btn_x_out_pressed.webp b/dasherdancer/src/main/res/drawable-hdpi/btn_x_out_pressed.webp new file mode 100644 index 000000000..8b96a739a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-hdpi/btn_x_out_pressed.webp differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/ic_launcher.png b/dasherdancer/src/main/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index 81b9be3d0..000000000 Binary files a/dasherdancer/src/main/res/drawable-hdpi/ic_launcher.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_left.png b/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_left.png deleted file mode 100644 index 02ed25381..000000000 Binary files a/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_left.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_left.webp b/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_left.webp new file mode 100644 index 000000000..ff40c2f53 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_left.webp differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_right.png b/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_right.png deleted file mode 100644 index b103b4254..000000000 Binary files a/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_right.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_right.webp b/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_right.webp new file mode 100644 index 000000000..411d36695 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-hdpi/icn_arrow_right.webp differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/img_mint_loading_spinner.png b/dasherdancer/src/main/res/drawable-hdpi/img_mint_loading_spinner.png deleted file mode 100644 index 57b3bb83d..000000000 Binary files a/dasherdancer/src/main/res/drawable-hdpi/img_mint_loading_spinner.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-hdpi/img_mint_loading_spinner.webp b/dasherdancer/src/main/res/drawable-hdpi/img_mint_loading_spinner.webp new file mode 100644 index 000000000..33e2d127a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-hdpi/img_mint_loading_spinner.webp differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer.png b/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer.png deleted file mode 100644 index 82a9ff4a0..000000000 Binary files a/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer.webp b/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer.webp new file mode 100644 index 000000000..86a289616 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer.webp differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer_p.png b/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer_p.png deleted file mode 100644 index a20b3ed09..000000000 Binary files a/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer_p.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer_p.webp b/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer_p.webp new file mode 100644 index 000000000..d26fb3ce4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-mdpi/btn_nav_drawer_p.webp differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_select_character.png b/dasherdancer/src/main/res/drawable-mdpi/btn_select_character.png deleted file mode 100644 index a781313c8..000000000 Binary files a/dasherdancer/src/main/res/drawable-mdpi/btn_select_character.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_select_character.webp b/dasherdancer/src/main/res/drawable-mdpi/btn_select_character.webp new file mode 100644 index 000000000..eedcfb366 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-mdpi/btn_select_character.webp differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_select_character_pressed.png b/dasherdancer/src/main/res/drawable-mdpi/btn_select_character_pressed.png deleted file mode 100644 index 3cca47b3e..000000000 Binary files a/dasherdancer/src/main/res/drawable-mdpi/btn_select_character_pressed.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_select_character_pressed.webp b/dasherdancer/src/main/res/drawable-mdpi/btn_select_character_pressed.webp new file mode 100644 index 000000000..d125dd5d4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-mdpi/btn_select_character_pressed.webp differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_x_out.png b/dasherdancer/src/main/res/drawable-mdpi/btn_x_out.png deleted file mode 100644 index d9390095e..000000000 Binary files a/dasherdancer/src/main/res/drawable-mdpi/btn_x_out.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_x_out.webp b/dasherdancer/src/main/res/drawable-mdpi/btn_x_out.webp new file mode 100644 index 000000000..03a439d4a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-mdpi/btn_x_out.webp differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_x_out_pressed.png b/dasherdancer/src/main/res/drawable-mdpi/btn_x_out_pressed.png deleted file mode 100644 index 21aa3f789..000000000 Binary files a/dasherdancer/src/main/res/drawable-mdpi/btn_x_out_pressed.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/btn_x_out_pressed.webp b/dasherdancer/src/main/res/drawable-mdpi/btn_x_out_pressed.webp new file mode 100644 index 000000000..8ca6e5d29 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-mdpi/btn_x_out_pressed.webp differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/ic_launcher.png b/dasherdancer/src/main/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index 32c863e73..000000000 Binary files a/dasherdancer/src/main/res/drawable-mdpi/ic_launcher.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_left.png b/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_left.png deleted file mode 100644 index e2e8a3b38..000000000 Binary files a/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_left.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_left.webp b/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_left.webp new file mode 100644 index 000000000..19f0de4dc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_left.webp differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_right.png b/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_right.png deleted file mode 100644 index 713ccd03e..000000000 Binary files a/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_right.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_right.webp b/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_right.webp new file mode 100644 index 000000000..074fc7f09 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-mdpi/icn_arrow_right.webp differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/img_mint_loading_spinner.png b/dasherdancer/src/main/res/drawable-mdpi/img_mint_loading_spinner.png deleted file mode 100644 index e9da7ea44..000000000 Binary files a/dasherdancer/src/main/res/drawable-mdpi/img_mint_loading_spinner.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-mdpi/img_mint_loading_spinner.webp b/dasherdancer/src/main/res/drawable-mdpi/img_mint_loading_spinner.webp new file mode 100644 index 000000000..c68957b41 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-mdpi/img_mint_loading_spinner.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf.webp b/dasherdancer/src/main/res/drawable-nodpi/elf.webp new file mode 100644 index 000000000..25448744b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0001.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0001.png deleted file mode 100644 index 94f95aecf..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0002.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0002.png deleted file mode 100644 index 412dfe295..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0003.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0003.png deleted file mode 100644 index cf9e02a5b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0004.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0004.png deleted file mode 100644 index 620a0aa44..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0005.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0005.png deleted file mode 100644 index b51da9fd5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0006.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0006.png deleted file mode 100644 index c6e933880..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0007.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0007.png deleted file mode 100644 index ee4245d31..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0008.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0008.png deleted file mode 100644 index 883d3b586..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0009.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0009.png deleted file mode 100644 index 1a1270206..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0010.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0010.png deleted file mode 100644 index 5c0b7e84e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0011.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0011.png deleted file mode 100644 index 90e40dcb0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0012.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0012.png deleted file mode 100644 index 07695b481..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0013.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0013.png deleted file mode 100644 index 90e40dcb0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0014.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0014.png deleted file mode 100644 index 5c0b7e84e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0015.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0015.png deleted file mode 100644 index 7bfbfcb5a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0016.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0016.png deleted file mode 100644 index 1a1270206..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0017.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0017.png deleted file mode 100644 index 66e8e0c53..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0018.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0018.png deleted file mode 100644 index ee4245d31..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0019.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0019.png deleted file mode 100644 index 2f203cbe3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0020.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0020.png deleted file mode 100644 index 5c75cf597..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0021.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0021.png deleted file mode 100644 index 4fa74bc7e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0022.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0022.png deleted file mode 100644 index 5c74674e2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0023.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0023.png deleted file mode 100644 index 412dfe295..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0024.png b/dasherdancer/src/main/res/drawable-nodpi/elf_idle0024.png deleted file mode 100644 index 8a83611f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_idle0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0001.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0001.webp new file mode 100644 index 000000000..9033e0742 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0002.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0002.webp new file mode 100644 index 000000000..b661da28f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0003.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0003.webp new file mode 100644 index 000000000..d8d54b385 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0004.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0004.webp new file mode 100644 index 000000000..882f2862e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0005.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0005.webp new file mode 100644 index 000000000..02f724535 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0006.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0006.webp new file mode 100644 index 000000000..efed03d5d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0007.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0007.webp new file mode 100644 index 000000000..bea73e7dd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0008.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0008.webp new file mode 100644 index 000000000..d77484279 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0009.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0009.webp new file mode 100644 index 000000000..b3824e469 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0010.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0010.webp new file mode 100644 index 000000000..9a06bdac6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0011.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0011.webp new file mode 100644 index 000000000..bbf5dfa6a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0012.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0012.webp new file mode 100644 index 000000000..cc63dab01 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0013.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0013.webp new file mode 100644 index 000000000..bbf5dfa6a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0014.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0014.webp new file mode 100644 index 000000000..9a06bdac6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0015.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0015.webp new file mode 100644 index 000000000..ddce570dd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0016.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0016.webp new file mode 100644 index 000000000..cdf734941 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0017.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0017.webp new file mode 100644 index 000000000..7688fe006 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0018.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0018.webp new file mode 100644 index 000000000..33162e0e7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0019.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0019.webp new file mode 100644 index 000000000..f0620f2d7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0020.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0020.webp new file mode 100644 index 000000000..d6a9068c8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0021.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0021.webp new file mode 100644 index 000000000..8efeb3636 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0022.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0022.webp new file mode 100644 index 000000000..6ca49ad19 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0023.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0023.webp new file mode 100644 index 000000000..23d77baf2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0024.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0024.webp new file mode 100644 index 000000000..fd2f21c7d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_idle_0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0001.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0001.webp new file mode 100644 index 000000000..0a0d522d9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0002.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0002.webp new file mode 100644 index 000000000..458668865 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0003.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0003.webp new file mode 100644 index 000000000..37095b709 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0004.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0004.webp new file mode 100644 index 000000000..91ed89424 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0005.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0005.webp new file mode 100644 index 000000000..94d417989 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0006.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0006.webp new file mode 100644 index 000000000..e6a739f95 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0007.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0007.webp new file mode 100644 index 000000000..7ba7c2b99 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0008.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0008.webp new file mode 100644 index 000000000..b241c4545 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0009.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0009.webp new file mode 100644 index 000000000..fbb3e9adc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0010.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0010.webp new file mode 100644 index 000000000..4e2877f72 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0011.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0011.webp new file mode 100644 index 000000000..1656d275f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0012.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0012.webp new file mode 100644 index 000000000..fba3242cd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0013.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0013.webp new file mode 100644 index 000000000..63705c219 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0014.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0014.webp new file mode 100644 index 000000000..16c3f6220 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0015.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0015.webp new file mode 100644 index 000000000..127f332a2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0016.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0016.webp new file mode 100644 index 000000000..ce8289d89 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0017.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0017.webp new file mode 100644 index 000000000..84a216be2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0018.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0018.webp new file mode 100644 index 000000000..90ffb565d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0019.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0019.webp new file mode 100644 index 000000000..299ddd53d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0020.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0020.webp new file mode 100644 index 000000000..c39e2f83d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0021.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0021.webp new file mode 100644 index 000000000..85f432ab8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0022.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0022.webp new file mode 100644 index 000000000..6d96e498f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0023.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0023.webp new file mode 100644 index 000000000..70f637e2e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0024.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0024.webp new file mode 100644 index 000000000..91d37df23 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0025.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0025.webp new file mode 100644 index 000000000..30fa9bdc2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0025.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0026.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0026.webp new file mode 100644 index 000000000..1ef5394cd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0026.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0027.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0027.webp new file mode 100644 index 000000000..94f6b4261 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0027.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0028.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0028.webp new file mode 100644 index 000000000..ca6546b7b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0028.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0029.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0029.webp new file mode 100644 index 000000000..bfdc5ef80 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0029.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0030.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0030.webp new file mode 100644 index 000000000..2ac4e947a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0030.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0031.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0031.webp new file mode 100644 index 000000000..620e3c59a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0031.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0032.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0032.webp new file mode 100644 index 000000000..73b52340f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_0032.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0001.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0001.png deleted file mode 100644 index 80a5c5837..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0002.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0002.png deleted file mode 100644 index 15d15f762..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0003.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0003.png deleted file mode 100644 index 3c6168006..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0004.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0004.png deleted file mode 100644 index 2ba8e4fde..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0005.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0005.png deleted file mode 100644 index 3fa93bb24..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0006.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0006.png deleted file mode 100644 index d84f537be..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0007.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0007.png deleted file mode 100644 index 32e0375b0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0008.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0008.png index a8c173a42..feadb2bf1 100644 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0008.png and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0008.png differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0009.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0009.png deleted file mode 100644 index 44cd5b441..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0010.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0010.png deleted file mode 100644 index 8cbd83128..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0011.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0011.png deleted file mode 100644 index 3550486b6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0012.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0012.png deleted file mode 100644 index 849d221ec..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0013.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0013.png deleted file mode 100644 index 8015878a1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0014.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0014.png deleted file mode 100644 index 11537b3d0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0015.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0015.png deleted file mode 100644 index c19b764ce..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0016.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0016.png deleted file mode 100644 index 9d27f7eac..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0017.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0017.png deleted file mode 100644 index 5b3f5762e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0018.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0018.png deleted file mode 100644 index 205d82532..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0019.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0019.png deleted file mode 100644 index 9e3e83989..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0021.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0021.png deleted file mode 100644 index 2a5f2d74e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0022.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0022.png deleted file mode 100644 index cc484c86e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0023.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0023.png deleted file mode 100644 index 4dd50f2fc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0024.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0024.png deleted file mode 100644 index 3d3ea7d53..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0025.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0025.png deleted file mode 100644 index bbcc71487..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0025.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0026.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0026.png deleted file mode 100644 index 69fb85970..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0026.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0027.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0027.png deleted file mode 100644 index f4de473fa..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0027.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0028.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0028.png deleted file mode 100644 index 5ed5575c0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0028.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0029.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0029.png deleted file mode 100644 index 092d542d5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0029.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0030.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0030.png deleted file mode 100644 index e4c9c1140..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0030.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0031.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0031.png deleted file mode 100644 index 84fc59117..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0031.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0032.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0032.png deleted file mode 100644 index 81f86d9b8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchin_ball0032.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0001.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0001.png deleted file mode 100644 index 6d25b2cac..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0002.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0002.png deleted file mode 100644 index 800f33621..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0003.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0003.png deleted file mode 100644 index c2e27669b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0004.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0004.png deleted file mode 100644 index 29bd14df8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0005.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0005.png deleted file mode 100644 index 010e09741..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0006.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0006.png deleted file mode 100644 index c53e31c7c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0007.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0007.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0008.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0008.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0009.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0009.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0010.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0010.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0011.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0011.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0012.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0012.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0013.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0013.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0014.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0014.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0015.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0015.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0016.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0016.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0017.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0017.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0018.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0018.png deleted file mode 100644 index 74480b7b1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0019.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0019.png deleted file mode 100644 index 9cc241ab7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0020.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0020.png deleted file mode 100644 index adc450730..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0021.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0021.png deleted file mode 100644 index 8d4debf29..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0022.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0022.png deleted file mode 100644 index d7ec46d7b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0023.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0023.png deleted file mode 100644 index edeff0123..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0024.png b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0024.png deleted file mode 100644 index e382bbbc7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0001.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0001.webp new file mode 100644 index 000000000..4e4f012b3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0002.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0002.webp new file mode 100644 index 000000000..fe68d2c2d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0003.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0003.webp new file mode 100644 index 000000000..beb6fd8f2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0004.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0004.webp new file mode 100644 index 000000000..14880d972 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0005.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0005.webp new file mode 100644 index 000000000..8f4bfcf47 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0006.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0006.webp new file mode 100644 index 000000000..197a7afc7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0007.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0007.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0008.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0008.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0009.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0009.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0010.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0010.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0011.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0011.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0012.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0012.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0013.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0013.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0014.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0014.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0015.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0015.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0016.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0016.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0017.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0017.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0018.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0018.webp new file mode 100644 index 000000000..72d4f4d75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0019.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0019.webp new file mode 100644 index 000000000..101a1edb7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0020.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0020.webp new file mode 100644 index 000000000..55249e8f6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0021.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0021.webp new file mode 100644 index 000000000..290b6542a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0022.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0022.webp new file mode 100644 index 000000000..f64346336 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0023.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0023.webp new file mode 100644 index 000000000..be6853fa5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0024.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0024.webp new file mode 100644 index 000000000..c613835ba Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_pinchout_0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0001.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0001.png deleted file mode 100644 index 5b4a94851..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0002.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0002.png deleted file mode 100644 index a3f2f9d06..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0003.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0003.png deleted file mode 100644 index fdbd52bc7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0004.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0004.png deleted file mode 100644 index db8d53c29..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0005.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0005.png deleted file mode 100644 index 28d1c80be..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0006.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0006.png deleted file mode 100644 index 9c9cf74ab..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0007.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0007.png deleted file mode 100644 index 2b2215568..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0008.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0008.png deleted file mode 100644 index fe940deca..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0009.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0009.png deleted file mode 100644 index aecc2ad63..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0010.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0010.png deleted file mode 100644 index bfe288c47..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0011.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0011.png deleted file mode 100644 index 85dce3d2e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0012.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0012.png deleted file mode 100644 index 02b67ca83..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0013.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0013.png deleted file mode 100644 index 6a803c330..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0014.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0014.png deleted file mode 100644 index 753499c0a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0015.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0015.png deleted file mode 100644 index d83366615..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0016.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0016.png deleted file mode 100644 index 321438892..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0017.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0017.png deleted file mode 100644 index fd2479b7b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0018.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0018.png deleted file mode 100644 index 8e0281ed2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0019.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0019.png deleted file mode 100644 index 483b3036d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0020.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0020.png deleted file mode 100644 index e5085bdba..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0021.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0021.png deleted file mode 100644 index cef9c1354..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0022.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0022.png deleted file mode 100644 index 672378eac..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0023.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0023.png deleted file mode 100644 index 7aca2229a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0024.png b/dasherdancer/src/main/res/drawable-nodpi/elf_shake0024.png deleted file mode 100644 index 5b4a94851..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_shake0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0001.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0001.webp new file mode 100644 index 000000000..7b8bb488d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0002.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0002.webp new file mode 100644 index 000000000..5ee588b8b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0003.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0003.webp new file mode 100644 index 000000000..dedea5062 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0004.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0004.webp new file mode 100644 index 000000000..3499fab42 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0005.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0005.webp new file mode 100644 index 000000000..1d4180e71 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0006.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0006.webp new file mode 100644 index 000000000..e21eecb49 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0007.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0007.webp new file mode 100644 index 000000000..d4a5664a8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0008.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0008.webp new file mode 100644 index 000000000..efd8ec368 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0009.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0009.webp new file mode 100644 index 000000000..f0bdf9e9e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0010.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0010.webp new file mode 100644 index 000000000..f4d8ab631 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0011.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0011.webp new file mode 100644 index 000000000..483e6b182 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0012.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0012.webp new file mode 100644 index 000000000..80c5d6f89 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0013.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0013.webp new file mode 100644 index 000000000..ade8e5eaf Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0014.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0014.webp new file mode 100644 index 000000000..59c528e7a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0015.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0015.webp new file mode 100644 index 000000000..7a5882a7c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0016.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0016.webp new file mode 100644 index 000000000..f4733665b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0017.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0017.webp new file mode 100644 index 000000000..bb50c36dc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0018.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0018.webp new file mode 100644 index 000000000..1b10ba730 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0019.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0019.webp new file mode 100644 index 000000000..1fdab6b75 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0020.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0020.webp new file mode 100644 index 000000000..07ad0d194 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0021.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0021.webp new file mode 100644 index 000000000..78276e24e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0022.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0022.webp new file mode 100644 index 000000000..6c6f0c88b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0023.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0023.webp new file mode 100644 index 000000000..89dfe4b9f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0024.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0024.webp new file mode 100644 index 000000000..7b8bb488d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_shake_0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0001.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0001.png deleted file mode 100644 index b0fd67ccd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0002.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0002.png deleted file mode 100644 index b0fd67ccd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0003.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0003.png deleted file mode 100644 index dfb22a254..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0004.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0004.png deleted file mode 100644 index 26e45cb0b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0005.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0005.png deleted file mode 100644 index 4df528e5e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0006.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0006.png deleted file mode 100644 index dbf0b8d89..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0007.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0007.png deleted file mode 100644 index 4fd2af759..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0008.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0008.png deleted file mode 100644 index 0a8a85cd2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0009.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0009.png index ec4325210..e8b6fa141 100644 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0009.png and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0009.png differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0010.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0010.png deleted file mode 100644 index 79c800f36..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0011.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0011.png deleted file mode 100644 index d8be60ec6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0012.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0012.png deleted file mode 100644 index 30874db6a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0013.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0013.png deleted file mode 100644 index 8645683d5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0014.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0014.png deleted file mode 100644 index 30874db6a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0015.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0015.png deleted file mode 100644 index ee9787e97..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0016.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0016.png deleted file mode 100644 index e36ebc46e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0016.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0016.webp new file mode 100644 index 000000000..14291b735 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0017.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0017.png deleted file mode 100644 index 7db8b0f99..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0018.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0018.png deleted file mode 100644 index 76e4be217..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0019.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0019.png deleted file mode 100644 index 8d776a382..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0020.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0020.png deleted file mode 100644 index 3b2f1d7f4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0021.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0021.png deleted file mode 100644 index 3156a8e58..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0022.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0022.png deleted file mode 100644 index f65a9b9f9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0023.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0023.png deleted file mode 100644 index 6554688fc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0024.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0024.png deleted file mode 100644 index b0fd67ccd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0001.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0001.webp new file mode 100644 index 000000000..1b2232370 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0002.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0002.webp new file mode 100644 index 000000000..1b2232370 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0003.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0003.webp new file mode 100644 index 000000000..33adc4cb7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0004.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0004.webp new file mode 100644 index 000000000..c67aec5bf Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0005.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0005.webp new file mode 100644 index 000000000..d9e72ab1f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0006.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0006.webp new file mode 100644 index 000000000..47accbaf4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0007.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0007.webp new file mode 100644 index 000000000..908752de8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0008.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0008.webp new file mode 100644 index 000000000..b5db1bc0a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0009.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0009.webp new file mode 100644 index 000000000..878e25e47 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0010.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0010.webp new file mode 100644 index 000000000..ba0654ebc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0011.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0011.webp new file mode 100644 index 000000000..98cb02d88 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0012.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0012.webp new file mode 100644 index 000000000..fd799799d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0013.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0013.webp new file mode 100644 index 000000000..2847e06da Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0014.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0014.webp new file mode 100644 index 000000000..fd799799d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0015.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0015.webp new file mode 100644 index 000000000..962a6d4fb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0016.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0016.webp new file mode 100644 index 000000000..88f8aebe7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0017.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0017.webp new file mode 100644 index 000000000..5de05e422 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0018.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0018.webp new file mode 100644 index 000000000..37fecb301 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0019.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0019.webp new file mode 100644 index 000000000..d78e9ab71 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0020.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0020.webp new file mode 100644 index 000000000..4ef6b0ae3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0021.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0021.webp new file mode 100644 index 000000000..087159a70 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0022.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0022.webp new file mode 100644 index 000000000..cbfbf3b5c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0023.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0023.webp new file mode 100644 index 000000000..d78bc60be Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0024.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0024.webp new file mode 100644 index 000000000..1b2232370 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipedown_0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0001.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0001.png deleted file mode 100644 index f06559b9d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0002.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0002.png deleted file mode 100644 index 0131c1ffb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0003.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0003.png deleted file mode 100644 index b42068432..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0004.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0004.png deleted file mode 100644 index a0d795250..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0005.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0005.png deleted file mode 100644 index c2bbc4216..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0006.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0006.png deleted file mode 100644 index a5837a1ba..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0007.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0007.png deleted file mode 100644 index eb5c49577..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0008.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0008.png deleted file mode 100644 index 112f593a2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0009.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0009.png deleted file mode 100644 index 26a108729..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0009.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0009.webp new file mode 100644 index 000000000..2b75d0fa7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0010.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0010.png deleted file mode 100644 index 086615b38..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0011.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0011.png deleted file mode 100644 index 57dcb2b88..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0012.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0012.png deleted file mode 100644 index bac1ca7e1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0013.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0013.png deleted file mode 100644 index 7a1d49a0d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0015.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0015.png deleted file mode 100644 index 9861bc8bc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0015.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0015.webp new file mode 100644 index 000000000..cb2bc6ccd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0016.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0016.png deleted file mode 100644 index 5d6b31d37..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0017.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0017.png deleted file mode 100644 index 9674e671a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0018.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0018.png deleted file mode 100644 index c7ae94d19..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0019.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0019.png deleted file mode 100644 index 1ec399f0e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0020.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0020.png deleted file mode 100644 index 1a2d595b4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0021.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0021.png deleted file mode 100644 index b2becf4fe..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0022.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0022.png deleted file mode 100644 index 4bc4a6ec5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0023.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0023.png deleted file mode 100644 index 588081709..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0024.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0024.png deleted file mode 100644 index 6fcaaa144..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0001.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0001.webp new file mode 100644 index 000000000..872db7607 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0002.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0002.webp new file mode 100644 index 000000000..25e0c0bf1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0003.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0003.webp new file mode 100644 index 000000000..606345bc5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0004.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0004.webp new file mode 100644 index 000000000..30e8ff2b1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0005.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0005.webp new file mode 100644 index 000000000..52c57d250 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0006.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0006.webp new file mode 100644 index 000000000..1da31dfc1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0007.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0007.webp new file mode 100644 index 000000000..f11393da3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0008.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0008.webp new file mode 100644 index 000000000..5f50f5acf Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0009.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0009.webp new file mode 100644 index 000000000..865a0cd55 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0010.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0010.webp new file mode 100644 index 000000000..9eeee300a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0011.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0011.webp new file mode 100644 index 000000000..1599e832a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0012.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0012.webp new file mode 100644 index 000000000..bf8956de3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0013.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0013.webp new file mode 100644 index 000000000..e868a926a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0014.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0014.webp new file mode 100644 index 000000000..ceb74ba6b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0015.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0015.webp new file mode 100644 index 000000000..212a13c52 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0016.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0016.webp new file mode 100644 index 000000000..03b39dfb4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0017.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0017.webp new file mode 100644 index 000000000..1b7cd256e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0018.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0018.webp new file mode 100644 index 000000000..011d68752 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0019.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0019.webp new file mode 100644 index 000000000..58ae5d320 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0020.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0020.webp new file mode 100644 index 000000000..ad04e7b53 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0021.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0021.webp new file mode 100644 index 000000000..627cc8519 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0022.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0022.webp new file mode 100644 index 000000000..e86002f05 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0023.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0023.webp new file mode 100644 index 000000000..7bce48d7f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0024.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0024.webp new file mode 100644 index 000000000..70258dc12 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeleft_0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0001.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0001.png deleted file mode 100644 index b0fd67ccd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0002.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0002.png deleted file mode 100644 index 8993eea29..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0003.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0003.png deleted file mode 100644 index 29f0aae38..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0004.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0004.png deleted file mode 100644 index 45eb903d4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0005.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0005.png deleted file mode 100644 index b369630db..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0006.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0006.png deleted file mode 100644 index 61a4152f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0007.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0007.png deleted file mode 100644 index 64cb16ea1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0008.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0008.png deleted file mode 100644 index 6f960429a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0009.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0009.png deleted file mode 100644 index bc06f7e48..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0010.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0010.png deleted file mode 100644 index b34f08de5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0011.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0011.png deleted file mode 100644 index a6a25e2ca..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0012.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0012.png deleted file mode 100644 index ac576dd6e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0013.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0013.png deleted file mode 100644 index 0c449831f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0014.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0014.png deleted file mode 100644 index 0398ba227..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0015.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0015.png deleted file mode 100644 index de32f8d06..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0016.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0016.png deleted file mode 100644 index 7769a5323..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0017.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0017.png deleted file mode 100644 index 662943263..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0018.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0018.png deleted file mode 100644 index e855e0cef..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0019.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0019.png deleted file mode 100644 index f7b3a465b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0020.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0020.png deleted file mode 100644 index aa92d8935..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0021.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0021.png deleted file mode 100644 index f56d1fe0a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0022.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0022.png deleted file mode 100644 index b8385e1ae..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0023.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0023.png deleted file mode 100644 index db4186a4f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0024.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0024.png deleted file mode 100644 index b0fd67ccd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0001.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0001.webp new file mode 100644 index 000000000..1b2232370 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0002.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0002.webp new file mode 100644 index 000000000..c9d784f9a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0003.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0003.webp new file mode 100644 index 000000000..9c0a2132f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0004.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0004.webp new file mode 100644 index 000000000..73098ec4f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0005.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0005.webp new file mode 100644 index 000000000..b31335618 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0006.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0006.webp new file mode 100644 index 000000000..9a730b96c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0007.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0007.webp new file mode 100644 index 000000000..9175e9f45 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0008.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0008.webp new file mode 100644 index 000000000..aacee9e03 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0009.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0009.webp new file mode 100644 index 000000000..3259011a0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0010.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0010.webp new file mode 100644 index 000000000..b3245db41 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0011.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0011.webp new file mode 100644 index 000000000..e3d310304 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0012.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0012.webp new file mode 100644 index 000000000..9652d2750 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0013.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0013.webp new file mode 100644 index 000000000..b410164bb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0014.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0014.webp new file mode 100644 index 000000000..83d3fda69 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0015.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0015.webp new file mode 100644 index 000000000..1f358d296 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0016.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0016.webp new file mode 100644 index 000000000..e68248602 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0017.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0017.webp new file mode 100644 index 000000000..f51a01860 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0018.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0018.webp new file mode 100644 index 000000000..967bcb37f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0019.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0019.webp new file mode 100644 index 000000000..276c00e88 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0020.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0020.webp new file mode 100644 index 000000000..8e2b0f405 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0021.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0021.webp new file mode 100644 index 000000000..ba2213ae2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0022.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0022.webp new file mode 100644 index 000000000..a3504e23e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0023.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0023.webp new file mode 100644 index 000000000..b28994740 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0024.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0024.webp new file mode 100644 index 000000000..1b2232370 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swiperight_0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0001.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0001.png deleted file mode 100644 index b0fd67ccd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0002.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0002.png deleted file mode 100644 index faa4acf3a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0003.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0003.png deleted file mode 100644 index 419187e05..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0004.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0004.png deleted file mode 100644 index f31a4fb78..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0005.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0005.png deleted file mode 100644 index 460cc03a4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0006.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0006.png deleted file mode 100644 index 5b0d6b602..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0007.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0007.png deleted file mode 100644 index 32ff349fb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0008.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0008.png deleted file mode 100644 index 6e80367be..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0009.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0009.png deleted file mode 100644 index 5789a4428..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0010.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0010.png deleted file mode 100644 index fd280dcb4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0011.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0011.png deleted file mode 100644 index bc1af4aee..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0012.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0012.png deleted file mode 100644 index e7e7a0ea9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0013.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0013.png deleted file mode 100644 index ac6552846..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0014.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0014.png deleted file mode 100644 index f708e30ce..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0015.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0015.png deleted file mode 100644 index 64b4df555..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0016.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0016.png deleted file mode 100644 index 2fe52ed16..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0017.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0017.png deleted file mode 100644 index 46cf70a1d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0018.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0018.png deleted file mode 100644 index 4129bd521..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0019.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0019.png deleted file mode 100644 index e25c5cc55..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0020.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0020.png deleted file mode 100644 index e8278edba..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0021.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0021.png deleted file mode 100644 index 566f24bb9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0022.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0022.png deleted file mode 100644 index 4689b8d5e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0023.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0023.png deleted file mode 100644 index 9eb5ebd5f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0024.png b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0024.png deleted file mode 100644 index b0fd67ccd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0001.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0001.webp new file mode 100644 index 000000000..1b2232370 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0002.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0002.webp new file mode 100644 index 000000000..a3df898dc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0003.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0003.webp new file mode 100644 index 000000000..b424d3bc3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0004.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0004.webp new file mode 100644 index 000000000..308d48e0c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0005.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0005.webp new file mode 100644 index 000000000..5dc48743c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0006.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0006.webp new file mode 100644 index 000000000..e2071f99a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0007.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0007.webp new file mode 100644 index 000000000..e44dce9b0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0008.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0008.webp new file mode 100644 index 000000000..3a349f27b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0009.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0009.webp new file mode 100644 index 000000000..7f22d29a6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0010.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0010.webp new file mode 100644 index 000000000..ee26b5c66 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0011.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0011.webp new file mode 100644 index 000000000..09baac38f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0012.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0012.webp new file mode 100644 index 000000000..2f0f4ef9f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0013.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0013.webp new file mode 100644 index 000000000..f7563d6a0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0014.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0014.webp new file mode 100644 index 000000000..cfd8aea53 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0015.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0015.webp new file mode 100644 index 000000000..d5ca2fbc1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0016.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0016.webp new file mode 100644 index 000000000..48f43ff78 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0017.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0017.webp new file mode 100644 index 000000000..a33bae044 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0018.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0018.webp new file mode 100644 index 000000000..50a2d60ef Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0019.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0019.webp new file mode 100644 index 000000000..4af9470dc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0020.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0020.webp new file mode 100644 index 000000000..1ec082ae0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0021.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0021.webp new file mode 100644 index 000000000..ab3d06985 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0022.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0022.webp new file mode 100644 index 000000000..620e3c59a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0023.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0023.webp new file mode 100644 index 000000000..73b52340f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0024.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0024.webp new file mode 100644 index 000000000..1b2232370 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_swipeup_0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0001.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0001.png deleted file mode 100644 index 8a83611f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0002.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0002.png deleted file mode 100644 index 2f692e781..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0003.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0003.png deleted file mode 100644 index 854652627..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0004.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0004.png deleted file mode 100644 index c8ebdbf72..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0005.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0005.png deleted file mode 100644 index f8b92f62e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0006.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0006.png deleted file mode 100644 index 597b0ba81..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0007.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0007.png deleted file mode 100644 index fb70ff1b7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0008.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0008.png deleted file mode 100644 index 94f7f75f7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0009.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0009.png deleted file mode 100644 index 2619feb4c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0010.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0010.png deleted file mode 100644 index 1bfc96a39..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0011.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0011.png deleted file mode 100644 index d7f31df4d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0012.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0012.png deleted file mode 100644 index 4f1ee3bb0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0013.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0013.png deleted file mode 100644 index 0dc9c8ce5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0014.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0014.png deleted file mode 100644 index bc83db46d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0015.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0015.png deleted file mode 100644 index 57859c090..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0016.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0016.png deleted file mode 100644 index dd254f35e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0017.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0017.png deleted file mode 100644 index 333d82db7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0018.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0018.png deleted file mode 100644 index 611f7dce0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0019.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0019.png deleted file mode 100644 index 8a83611f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0020.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0020.png deleted file mode 100644 index 8a83611f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0021.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0021.png deleted file mode 100644 index 8a83611f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0022.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0022.png deleted file mode 100644 index 8a83611f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0023.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0023.png deleted file mode 100644 index 8a83611f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0024.png b/dasherdancer/src/main/res/drawable-nodpi/elf_tap0024.png deleted file mode 100644 index 8a83611f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/elf_tap0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0001.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0001.webp new file mode 100644 index 000000000..fb1212da9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0002.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0002.webp new file mode 100644 index 000000000..6a5d627a5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0003.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0003.webp new file mode 100644 index 000000000..3d05805e5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0004.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0004.webp new file mode 100644 index 000000000..d787db708 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0005.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0005.webp new file mode 100644 index 000000000..16955c05b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0006.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0006.webp new file mode 100644 index 000000000..560f53410 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0007.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0007.webp new file mode 100644 index 000000000..9bad83d67 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0008.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0008.webp new file mode 100644 index 000000000..9e20193fc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0009.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0009.webp new file mode 100644 index 000000000..1168cfa9d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0010.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0010.webp new file mode 100644 index 000000000..e0c7d9f95 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0011.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0011.webp new file mode 100644 index 000000000..d106f5f1b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0012.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0012.webp new file mode 100644 index 000000000..640e72320 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0013.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0013.webp new file mode 100644 index 000000000..0df6ace89 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0014.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0014.webp new file mode 100644 index 000000000..01459bc59 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0015.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0015.webp new file mode 100644 index 000000000..36570c119 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0016.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0016.webp new file mode 100644 index 000000000..62292f3d0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0017.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0017.webp new file mode 100644 index 000000000..05b2de0be Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0018.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0018.webp new file mode 100644 index 000000000..9943a324e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0019.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0019.webp new file mode 100644 index 000000000..fb1212da9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0020.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0020.webp new file mode 100644 index 000000000..fb1212da9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0021.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0021.webp new file mode 100644 index 000000000..fb1212da9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0022.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0022.webp new file mode 100644 index 000000000..fb1212da9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0023.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0023.webp new file mode 100644 index 000000000..fb1212da9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0024.webp b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0024.webp new file mode 100644 index 000000000..fb1212da9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/elf_tap_0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer.png deleted file mode 100644 index 6b48f637b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer.webp new file mode 100644 index 000000000..f7f4a38ac Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0001.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0001.png deleted file mode 100644 index 5d4cad829..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0001.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0001.webp new file mode 100644 index 000000000..4e6095427 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0002.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0002.png deleted file mode 100644 index 3356fa97d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0002.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0002.webp new file mode 100644 index 000000000..eb1586e4a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0003.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0003.png deleted file mode 100644 index 480e878ff..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0003.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0003.webp new file mode 100644 index 000000000..2ceaebca0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0004.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0004.png deleted file mode 100644 index a78bd7c7a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0004.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0004.webp new file mode 100644 index 000000000..ebc26e002 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0005.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0005.png deleted file mode 100644 index 5cb1cc55b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0005.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0005.webp new file mode 100644 index 000000000..a69efce2d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0006.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0006.png deleted file mode 100644 index 29ba172ab..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0006.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0006.webp new file mode 100644 index 000000000..216adbee5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0007.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0007.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0007.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0007.webp new file mode 100644 index 000000000..b462438c3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0008.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0008.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0009.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0009.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0010.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0010.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0011.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0011.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0012.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0012.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0013.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0013.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0014.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0014.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0015.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0015.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0016.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0016.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0017.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0017.png deleted file mode 100644 index 90d5dbbe1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0018.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0018.png deleted file mode 100644 index 680647af0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0018.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0018.webp new file mode 100644 index 000000000..10e33fdc4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0019.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0019.png deleted file mode 100644 index 12bda1ca5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0019.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0019.webp new file mode 100644 index 000000000..14cbf9c39 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0020.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0020.png deleted file mode 100644 index 707b01f0a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0020.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0020.webp new file mode 100644 index 000000000..7e616c173 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0021.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0021.png deleted file mode 100644 index 8ff63c7c9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0021.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0021.webp new file mode 100644 index 000000000..01729be99 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0022.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0022.png deleted file mode 100644 index 596454dab..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0022.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0022.webp new file mode 100644 index 000000000..28606f001 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0023.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0023.png deleted file mode 100644 index 7d7513ac1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0023.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0023.webp new file mode 100644 index 000000000..8bde5b5af Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0024.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0024.png deleted file mode 100644 index 5d4cad829..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchin0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0001.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0001.png deleted file mode 100644 index 784f02415..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0001.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0001.webp new file mode 100644 index 000000000..11042d205 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0002.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0002.png deleted file mode 100644 index 16197997d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0002.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0002.webp new file mode 100644 index 000000000..d376a9e21 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0003.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0003.png deleted file mode 100644 index bbeefade8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0003.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0003.webp new file mode 100644 index 000000000..ae5c38c8c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0004.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0004.png deleted file mode 100644 index f3ace0568..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0004.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0004.webp new file mode 100644 index 000000000..7489fd3c6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0005.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0005.png deleted file mode 100644 index abbb3fbbf..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0005.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0005.webp new file mode 100644 index 000000000..db14714b2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0006.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0006.png deleted file mode 100644 index f7c3fdf27..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0006.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0006.webp new file mode 100644 index 000000000..d28f0bad6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0007.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0007.png deleted file mode 100644 index 6579580f9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0007.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0007.webp new file mode 100644 index 000000000..a986227e3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0008.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0008.png deleted file mode 100644 index c506d911b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0008.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0008.webp new file mode 100644 index 000000000..a1e50d28e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0009.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0009.png deleted file mode 100644 index b28269911..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0009.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0009.webp new file mode 100644 index 000000000..7f6d5c2f6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0010.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0010.png deleted file mode 100644 index 4ac6cee0f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0010.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0010.webp new file mode 100644 index 000000000..2f21bb7fb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0011.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0011.png deleted file mode 100644 index 7a8bbbc40..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0011.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0011.webp new file mode 100644 index 000000000..36a52d6d7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0012.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0012.png deleted file mode 100644 index 6d3ddeac5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0012.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0012.webp new file mode 100644 index 000000000..7db3f2fd6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0013.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0013.png deleted file mode 100644 index 99befae30..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0013.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0013.webp new file mode 100644 index 000000000..36848aec6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0014.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0014.png deleted file mode 100644 index 0ce8255a7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0014.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0014.webp new file mode 100644 index 000000000..320d586af Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0015.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0015.png deleted file mode 100644 index a775650bb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0015.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0015.webp new file mode 100644 index 000000000..f713e6d6f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0016.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0016.png deleted file mode 100644 index bfa4e593b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0016.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0016.webp new file mode 100644 index 000000000..4569bed01 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0017.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0017.png deleted file mode 100644 index b06ac7382..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0017.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0017.webp new file mode 100644 index 000000000..a0a7b8b59 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0018.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0018.png deleted file mode 100644 index aad3b7772..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0018.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0018.webp new file mode 100644 index 000000000..23fe5c4f3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0019.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0019.png deleted file mode 100644 index bdd811f42..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0019.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0019.webp new file mode 100644 index 000000000..61f4a0db9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0020.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0020.png deleted file mode 100644 index b352ee2a5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0020.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0020.webp new file mode 100644 index 000000000..88b868128 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0021.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0021.png deleted file mode 100644 index b06df2506..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0021.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0021.webp new file mode 100644 index 000000000..c149d97cd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0022.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0022.png deleted file mode 100644 index e6a580914..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0022.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0022.webp new file mode 100644 index 000000000..aa4e4582f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0023.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0023.png deleted file mode 100644 index 74f9e1190..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0023.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0023.webp new file mode 100644 index 000000000..929e874b8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0024.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0024.png deleted file mode 100644 index 0a660cf58..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0024.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0024.webp new file mode 100644 index 000000000..ebb6a1123 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_pinchout0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0001.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0001.png deleted file mode 100644 index 784f02415..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0002.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0002.png deleted file mode 100644 index 8d64fabf6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0002.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0002.webp new file mode 100644 index 000000000..f6e7953b9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0003.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0003.png deleted file mode 100644 index e1e2008a1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0003.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0003.webp new file mode 100644 index 000000000..5eab30e7c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0004.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0004.png deleted file mode 100644 index f1e46c6be..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0004.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0004.webp new file mode 100644 index 000000000..3327fac29 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0005.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0005.png deleted file mode 100644 index 1b25232a0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0005.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0005.webp new file mode 100644 index 000000000..43eb0f645 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0006.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0006.png deleted file mode 100644 index 8ed921916..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0006.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0006.webp new file mode 100644 index 000000000..b7bc99d8f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0007.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0007.png deleted file mode 100644 index e8073fe28..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0007.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0007.webp new file mode 100644 index 000000000..890dc021b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0008.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0008.png deleted file mode 100644 index 6401bcea2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0008.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0008.webp new file mode 100644 index 000000000..ea8382378 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0009.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0009.png deleted file mode 100644 index a3f5d53b4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0009.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0009.webp new file mode 100644 index 000000000..875ab24ce Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0010.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0010.png deleted file mode 100644 index 52f758fc1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0010.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0010.webp new file mode 100644 index 000000000..51c6ce8ff Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0011.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0011.png deleted file mode 100644 index 605ddc173..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0011.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0011.webp new file mode 100644 index 000000000..d33d9ecdd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0012.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0012.png deleted file mode 100644 index f55daef1f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0012.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0012.webp new file mode 100644 index 000000000..c0b5b31ca Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0013.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0013.png deleted file mode 100644 index 94871905c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0013.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0013.webp new file mode 100644 index 000000000..05fe7dd1b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0014.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0014.png deleted file mode 100644 index 8af4928fc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0014.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0014.webp new file mode 100644 index 000000000..86ed3f92f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0015.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0015.png deleted file mode 100644 index f359287ec..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0015.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0015.webp new file mode 100644 index 000000000..dc07f2c5b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0016.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0016.png deleted file mode 100644 index ee2d73a63..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0016.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0016.webp new file mode 100644 index 000000000..67325aa1a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0017.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0017.png deleted file mode 100644 index 86993ba10..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0017.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0017.webp new file mode 100644 index 000000000..ff80596b7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0018.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0018.png deleted file mode 100644 index e7948415c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0018.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0018.webp new file mode 100644 index 000000000..deec14226 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0019.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0019.png deleted file mode 100644 index 14ca97314..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0019.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0019.webp new file mode 100644 index 000000000..309769577 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0020.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0020.png deleted file mode 100644 index 6aab48a1f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0020.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0020.webp new file mode 100644 index 000000000..ea26e8cdf Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0021.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0021.png deleted file mode 100644 index de5eee9c4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0021.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0021.webp new file mode 100644 index 000000000..58c7f99e0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0022.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0022.png deleted file mode 100644 index b2275c982..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0022.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0022.webp new file mode 100644 index 000000000..183e74ef9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0023.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0023.png deleted file mode 100644 index e46aa534c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0023.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0023.webp new file mode 100644 index 000000000..f72b79000 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0024.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0024.png deleted file mode 100644 index e62227ecb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0024.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0024.webp new file mode 100644 index 000000000..5b83392f0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_shake0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0001.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0001.png deleted file mode 100644 index 99d732f1d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0001.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0001.webp new file mode 100644 index 000000000..ab5c078da Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0002.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0002.png deleted file mode 100644 index c6b696d64..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0002.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0002.webp new file mode 100644 index 000000000..03d3f1959 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0003.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0003.png deleted file mode 100644 index b5eb97148..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0003.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0003.webp new file mode 100644 index 000000000..6e64c58d6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0004.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0004.png deleted file mode 100644 index f98d39c48..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0004.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0004.webp new file mode 100644 index 000000000..a583dd937 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0005.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0005.png deleted file mode 100644 index 7f5b0083c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0005.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0005.webp new file mode 100644 index 000000000..3b0e9b6be Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0006.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0006.png deleted file mode 100644 index ec8ffe517..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0006.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0006.webp new file mode 100644 index 000000000..71c1f4ff7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0007.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0007.png deleted file mode 100644 index 2d12d9076..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0007.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0007.webp new file mode 100644 index 000000000..c45694f34 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0008.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0008.png deleted file mode 100644 index 4ed596c40..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0008.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0008.webp new file mode 100644 index 000000000..0aebad959 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0009.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0009.png deleted file mode 100644 index c4d245b08..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0009.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0009.webp new file mode 100644 index 000000000..42e95a11d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0010.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0010.png deleted file mode 100644 index 0fa8eadc8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0010.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0010.webp new file mode 100644 index 000000000..bce0b40ed Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0011.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0011.png deleted file mode 100644 index cd816dcd7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0011.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0011.webp new file mode 100644 index 000000000..877b2f42e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0012.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0012.png deleted file mode 100644 index 0c988d687..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0012.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0012.webp new file mode 100644 index 000000000..84d305230 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0013.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0013.png deleted file mode 100644 index d1c64f7dc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0013.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0013.webp new file mode 100644 index 000000000..b401eee86 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0014.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0014.png deleted file mode 100644 index 19ec638e5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0014.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0014.webp new file mode 100644 index 000000000..f33bccec5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0015.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0015.png deleted file mode 100644 index 88cf06a2f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0015.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0015.webp new file mode 100644 index 000000000..48832c3c5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0016.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0016.png deleted file mode 100644 index 6932f0706..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0016.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0016.webp new file mode 100644 index 000000000..ed35a566e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0017.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0017.png deleted file mode 100644 index 228111c04..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0017.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0017.webp new file mode 100644 index 000000000..30352840a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0018.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0018.png deleted file mode 100644 index 3a2d06b43..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0018.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0018.webp new file mode 100644 index 000000000..b47220f5e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0019.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0019.png deleted file mode 100644 index b97f62c49..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0019.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0019.webp new file mode 100644 index 000000000..d21f5858d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0020.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0020.png deleted file mode 100644 index b0581c5dc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0020.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0020.webp new file mode 100644 index 000000000..e1ce8bd0b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0021.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0021.png deleted file mode 100644 index 2f6b5fef6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0021.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0021.webp new file mode 100644 index 000000000..d633a8708 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0022.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0022.png deleted file mode 100644 index b2a681bc3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0022.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0022.webp new file mode 100644 index 000000000..195abc356 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0023.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0023.png deleted file mode 100644 index 60c6c96d6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0023.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0023.webp new file mode 100644 index 000000000..c587f5781 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0024.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0024.png deleted file mode 100644 index 99d732f1d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipedown0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0001.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0001.png deleted file mode 100644 index 43bbb47c0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0001.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0001.webp new file mode 100644 index 000000000..0cfcb07aa Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0002.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0002.png deleted file mode 100644 index 46b3c813e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0002.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0002.webp new file mode 100644 index 000000000..bc1436f19 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0003.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0003.png deleted file mode 100644 index cdcd4dc04..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0003.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0003.webp new file mode 100644 index 000000000..4432f5585 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0004.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0004.png deleted file mode 100644 index 788e8db3c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0004.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0004.webp new file mode 100644 index 000000000..f27520474 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0005.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0005.png deleted file mode 100644 index efff0bf16..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0005.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0005.webp new file mode 100644 index 000000000..cba5f0480 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0006.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0006.png deleted file mode 100644 index e31ecd9b8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0006.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0006.webp new file mode 100644 index 000000000..c2aad9a55 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0007.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0007.png deleted file mode 100644 index 2ecc6c4cf..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0007.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0007.webp new file mode 100644 index 000000000..3d72a3af2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0008.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0008.png deleted file mode 100644 index 5e8650b6b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0008.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0008.webp new file mode 100644 index 000000000..45c929847 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0009.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0009.png deleted file mode 100644 index 0c6da43c8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0009.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0009.webp new file mode 100644 index 000000000..fb909c790 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0010.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0010.png deleted file mode 100644 index 1cfe26ba6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0010.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0010.webp new file mode 100644 index 000000000..839ae9402 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0011.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0011.png deleted file mode 100644 index a0d58b1be..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0011.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0011.webp new file mode 100644 index 000000000..0538cd93d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0012.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0012.png deleted file mode 100644 index 1eca1ce52..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0012.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0012.webp new file mode 100644 index 000000000..3d1b042fa Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0013.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0013.png deleted file mode 100644 index 483f487e5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0013.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0013.webp new file mode 100644 index 000000000..53abd3a08 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0014.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0014.png deleted file mode 100644 index 70c6eb3e1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0014.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0014.webp new file mode 100644 index 000000000..00efa1778 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0015.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0015.png deleted file mode 100644 index b0767ad75..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0015.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0015.webp new file mode 100644 index 000000000..e4f4db277 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0016.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0016.png deleted file mode 100644 index 5ca1d4ee1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0016.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0016.webp new file mode 100644 index 000000000..dec61327c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0017.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0017.png deleted file mode 100644 index 76dcc8a23..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0017.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0017.webp new file mode 100644 index 000000000..7210fbba1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0018.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0018.png deleted file mode 100644 index 54afb1fac..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0018.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0018.webp new file mode 100644 index 000000000..f94e56532 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0019.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0019.png deleted file mode 100644 index 6b698277f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0019.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0019.webp new file mode 100644 index 000000000..1528a2aed Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0020.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0020.png deleted file mode 100644 index dc56dbb5f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0020.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0020.webp new file mode 100644 index 000000000..30b2c15d2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0021.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0021.png deleted file mode 100644 index fbe5f1426..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0021.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0021.webp new file mode 100644 index 000000000..5bd2b0dca Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0022.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0022.png deleted file mode 100644 index 7b6d5683c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0022.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0022.webp new file mode 100644 index 000000000..3d601c03f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0023.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0023.png deleted file mode 100644 index 0fce46f06..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0023.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0023.webp new file mode 100644 index 000000000..ac75784cd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0024.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0024.png deleted file mode 100644 index e0116e686..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0024.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0024.webp new file mode 100644 index 000000000..aababc884 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeleft0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0001.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0001.png deleted file mode 100644 index 61f04a2aa..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0001.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0001.webp new file mode 100644 index 000000000..53d5d41d4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0002.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0002.png deleted file mode 100644 index c93c5bb1a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0002.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0002.webp new file mode 100644 index 000000000..50ce7329e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0003.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0003.png deleted file mode 100644 index bf052a21f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0003.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0003.webp new file mode 100644 index 000000000..45deea0bc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0004.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0004.png deleted file mode 100644 index e7365b7e3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0004.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0004.webp new file mode 100644 index 000000000..efb2956a1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0005.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0005.png deleted file mode 100644 index 5e038a0ac..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0005.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0005.webp new file mode 100644 index 000000000..f56da473a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0006.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0006.png deleted file mode 100644 index eb8b5f7f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0006.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0006.webp new file mode 100644 index 000000000..bdfa7a14e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0007.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0007.png deleted file mode 100644 index 666553e12..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0007.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0007.webp new file mode 100644 index 000000000..5063ff21b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0008.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0008.png deleted file mode 100644 index 50f3da53d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0008.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0008.webp new file mode 100644 index 000000000..128094425 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0009.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0009.png deleted file mode 100644 index c70f1394a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0009.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0009.webp new file mode 100644 index 000000000..12e885f9b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0010.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0010.png deleted file mode 100644 index 0c20589ce..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0010.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0010.webp new file mode 100644 index 000000000..11337c6d5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0011.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0011.png deleted file mode 100644 index acacc104d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0011.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0011.webp new file mode 100644 index 000000000..bd2c01509 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0012.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0012.png deleted file mode 100644 index 51a7ff712..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0012.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0012.webp new file mode 100644 index 000000000..17ceeec9c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0013.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0013.png deleted file mode 100644 index d70004240..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0013.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0013.webp new file mode 100644 index 000000000..1d9a3be20 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0014.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0014.png deleted file mode 100644 index 78f8ea98d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0014.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0014.webp new file mode 100644 index 000000000..f06084b30 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0015.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0015.png deleted file mode 100644 index 8bad379ef..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0015.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0015.webp new file mode 100644 index 000000000..cad966448 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0016.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0016.png deleted file mode 100644 index c4f426bd6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0016.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0016.webp new file mode 100644 index 000000000..901cad6fe Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0017.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0017.png deleted file mode 100644 index 0dbbfcfc1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0017.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0017.webp new file mode 100644 index 000000000..37940046d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0018.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0018.png deleted file mode 100644 index 4d327a806..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0018.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0018.webp new file mode 100644 index 000000000..0645963cb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0019.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0019.png deleted file mode 100644 index b0cac4496..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0019.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0019.webp new file mode 100644 index 000000000..1f7aa4819 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0020.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0020.png deleted file mode 100644 index edb73c9bd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0020.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0020.webp new file mode 100644 index 000000000..a8824edbd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0021.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0021.png deleted file mode 100644 index 036b1573e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0021.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0021.webp new file mode 100644 index 000000000..ea8cbb5b3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0022.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0022.png deleted file mode 100644 index a724ae8af..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0022.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0022.webp new file mode 100644 index 000000000..e79945bfa Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0023.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0023.png deleted file mode 100644 index 669f86734..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0023.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0023.webp new file mode 100644 index 000000000..7c9d4b6e8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0024.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0024.png deleted file mode 100644 index 1f10ab2b8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0024.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0024.webp new file mode 100644 index 000000000..d4718bf3b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swiperight0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0001.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0001.png deleted file mode 100644 index ff2acfb36..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0001.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0001.webp new file mode 100644 index 000000000..96988ee49 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0002.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0002.png deleted file mode 100644 index 47fdf6615..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0002.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0002.webp new file mode 100644 index 000000000..04b62fe42 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0003.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0003.png deleted file mode 100644 index 3b1a6f029..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0003.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0003.webp new file mode 100644 index 000000000..e44bb45a5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0004.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0004.png deleted file mode 100644 index 410ba89d2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0004.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0004.webp new file mode 100644 index 000000000..0b14f532f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0005.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0005.png deleted file mode 100644 index 44177d633..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0005.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0005.webp new file mode 100644 index 000000000..f06ead9e3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0006.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0006.png deleted file mode 100644 index b360fab9c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0006.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0006.webp new file mode 100644 index 000000000..3c681bcaa Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0007.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0007.png deleted file mode 100644 index e94d8d901..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0007.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0007.webp new file mode 100644 index 000000000..1f921e69a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0008.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0008.png deleted file mode 100644 index 55727cd20..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0008.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0008.webp new file mode 100644 index 000000000..bb9d7211f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0009.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0009.png deleted file mode 100644 index b53bebf97..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0009.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0009.webp new file mode 100644 index 000000000..95500e288 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0010.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0010.png deleted file mode 100644 index 1c95ccadd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0010.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0010.webp new file mode 100644 index 000000000..20d777dcf Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0011.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0011.png deleted file mode 100644 index ac19b013e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0011.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0011.webp new file mode 100644 index 000000000..bd47f3214 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0012.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0012.png deleted file mode 100644 index b380ac6f6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0012.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0012.webp new file mode 100644 index 000000000..ba4c0d5f8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0013.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0013.png deleted file mode 100644 index 5803b61a2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0013.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0013.webp new file mode 100644 index 000000000..4c655220d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0014.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0014.png deleted file mode 100644 index 3c32b7169..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0014.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0014.webp new file mode 100644 index 000000000..580258c30 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0015.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0015.png deleted file mode 100644 index aa5d5b283..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0015.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0015.webp new file mode 100644 index 000000000..a8f4d26c6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0016.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0016.png deleted file mode 100644 index 274878412..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0016.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0016.webp new file mode 100644 index 000000000..67f52ff26 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0017.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0017.png deleted file mode 100644 index c630a4a5a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0017.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0017.webp new file mode 100644 index 000000000..5732be634 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0018.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0018.png deleted file mode 100644 index dcbadb862..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0018.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0018.webp new file mode 100644 index 000000000..4d5a365b3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0019.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0019.png deleted file mode 100644 index 2583ea212..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0019.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0019.webp new file mode 100644 index 000000000..254ad5a0e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0020.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0020.png deleted file mode 100644 index f9caf963a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0020.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0020.webp new file mode 100644 index 000000000..14a87c01b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0021.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0021.png deleted file mode 100644 index a541f2de8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0021.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0021.webp new file mode 100644 index 000000000..702103924 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0022.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0022.png deleted file mode 100644 index 8bc1a40d3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0022.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0022.webp new file mode 100644 index 000000000..d5cb07858 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0023.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0023.png deleted file mode 100644 index 3b6550aad..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0023.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0023.webp new file mode 100644 index 000000000..c5302c042 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0024.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0024.png deleted file mode 100644 index ff2acfb36..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_swipeup0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0001.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0001.png deleted file mode 100644 index 60daa3838..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0001.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0001.webp new file mode 100644 index 000000000..6f741b3c6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0002.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0002.png deleted file mode 100644 index 2d58d9ae5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0002.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0002.webp new file mode 100644 index 000000000..5f2622f92 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0003.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0003.png deleted file mode 100644 index 22a54a845..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0003.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0003.webp new file mode 100644 index 000000000..426566f88 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0004.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0004.png deleted file mode 100644 index 9400ded12..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0004.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0004.webp new file mode 100644 index 000000000..e0090ed0f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0005.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0005.png deleted file mode 100644 index f86447ecb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0005.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0005.webp new file mode 100644 index 000000000..81eb11c4b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0006.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0006.png deleted file mode 100644 index c56f60f92..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0006.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0006.webp new file mode 100644 index 000000000..0ab69e312 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0007.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0007.png deleted file mode 100644 index bdac81883..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0007.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0007.webp new file mode 100644 index 000000000..64e12877f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0008.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0008.png deleted file mode 100644 index dd5f57904..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0008.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0008.webp new file mode 100644 index 000000000..2f0af550c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0009.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0009.png deleted file mode 100644 index b6c18af33..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0009.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0009.webp new file mode 100644 index 000000000..38268050f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0010.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0010.png deleted file mode 100644 index ffbc11112..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0010.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0010.webp new file mode 100644 index 000000000..c09015288 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0011.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0011.png deleted file mode 100644 index ffbc11112..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0012.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0012.png deleted file mode 100644 index ffbc11112..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0013.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0013.png deleted file mode 100644 index ffbc11112..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0014.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0014.png deleted file mode 100644 index ffbc11112..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0015.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0015.png deleted file mode 100644 index ffbc11112..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0016.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0016.png deleted file mode 100644 index ffbc11112..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0017.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0017.png deleted file mode 100644 index ffbc11112..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0018.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0018.png deleted file mode 100644 index ffbc11112..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0019.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0019.png deleted file mode 100644 index 80cd8e223..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0019.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0019.webp new file mode 100644 index 000000000..56d1fb356 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0020.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0020.png deleted file mode 100644 index 8a255ee1f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0020.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0020.webp new file mode 100644 index 000000000..296bfa135 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0021.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0021.png deleted file mode 100644 index 25eb24120..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0021.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0021.webp new file mode 100644 index 000000000..987c68528 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0022.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0022.png deleted file mode 100644 index b488259f6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0022.webp b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0022.webp new file mode 100644 index 000000000..63e39a1e2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0023.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0023.png deleted file mode 100644 index f86447ecb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0024.png b/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0024.png deleted file mode 100644 index f86447ecb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/reindeer_tap0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa.png b/dasherdancer/src/main/res/drawable-nodpi/santa.png deleted file mode 100644 index b05646944..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa.webp b/dasherdancer/src/main/res/drawable-nodpi/santa.webp new file mode 100644 index 000000000..e541a459a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0001.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0001.png deleted file mode 100644 index bfb074b0f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0001.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0001.webp new file mode 100644 index 000000000..bcd03bfd8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0002.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0002.png deleted file mode 100644 index 8b5aa8235..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0002.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0002.webp new file mode 100644 index 000000000..b4d257613 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0003.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0003.png deleted file mode 100644 index fe8ac4f4d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0003.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0003.webp new file mode 100644 index 000000000..e216490cd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0004.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0004.png deleted file mode 100644 index 3edbc97c5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0004.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0004.webp new file mode 100644 index 000000000..864cd6c60 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0005.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0005.png deleted file mode 100644 index 6abb852e6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0005.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0005.webp new file mode 100644 index 000000000..c9636698c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0006.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0006.png deleted file mode 100644 index 3bf6d5270..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0006.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0006.webp new file mode 100644 index 000000000..d5473b4df Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0007.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0007.png deleted file mode 100644 index 1dbf8f30b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0007.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0007.webp new file mode 100644 index 000000000..42c680d20 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0008.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0008.png deleted file mode 100644 index da5abeacc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0008.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0008.webp new file mode 100644 index 000000000..4475575cc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0009.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0009.png deleted file mode 100644 index 41c68436c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0009.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0009.webp new file mode 100644 index 000000000..afb2df216 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0010.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0010.png deleted file mode 100644 index 44bae0589..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0010.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0010.webp new file mode 100644 index 000000000..73396640b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0011.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0011.png deleted file mode 100644 index d4560d0ea..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0011.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0011.webp new file mode 100644 index 000000000..6f5c63870 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0012.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0012.png deleted file mode 100644 index c2f874e7b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0012.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0012.webp new file mode 100644 index 000000000..50eb55b03 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0013.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0013.png deleted file mode 100644 index aea9c39ae..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0013.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0013.webp new file mode 100644 index 000000000..f7f6bdedb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0014.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0014.png deleted file mode 100644 index da5abeacc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0015.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0015.png deleted file mode 100644 index 7d43baa1f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0015.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0015.webp new file mode 100644 index 000000000..fc28c3be0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0016.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0016.png deleted file mode 100644 index 1bd2b3aac..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0016.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0016.webp new file mode 100644 index 000000000..9062cb8ee Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0017.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0017.png deleted file mode 100644 index 878c787e4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0017.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0017.webp new file mode 100644 index 000000000..4f4a07ccd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0018.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0018.png deleted file mode 100644 index 11a274d56..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0018.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0018.webp new file mode 100644 index 000000000..31fc40c32 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0019.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0019.png deleted file mode 100644 index 2d073197a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0019.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0019.webp new file mode 100644 index 000000000..3305957cb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0020.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0020.png deleted file mode 100644 index cfad5b9aa..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0020.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0020.webp new file mode 100644 index 000000000..b36fd6dcd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0021.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0021.png deleted file mode 100644 index 5bf934280..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0021.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0021.webp new file mode 100644 index 000000000..c19b63469 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0022.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0022.png deleted file mode 100644 index b5cdbb670..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0022.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0022.webp new file mode 100644 index 000000000..1ac468b4b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0023.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0023.png deleted file mode 100644 index bfb074b0f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0024.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0024.png deleted file mode 100644 index bfb074b0f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0025.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0025.png deleted file mode 100644 index 8b5aa8235..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0025.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0026.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0026.png deleted file mode 100644 index fe8ac4f4d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0026.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0027.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0027.png deleted file mode 100644 index 7e97cfd20..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0027.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0027.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0027.webp new file mode 100644 index 000000000..e71a4235c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0027.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0028.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0028.png deleted file mode 100644 index 22eceaf88..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0028.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0028.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0028.webp new file mode 100644 index 000000000..4184f698f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0028.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0029.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0029.png deleted file mode 100644 index 882b1f0f3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0029.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0029.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0029.webp new file mode 100644 index 000000000..7ffef8f38 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0029.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0030.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0030.png deleted file mode 100644 index 11073c725..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0030.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0030.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0030.webp new file mode 100644 index 000000000..57707ac49 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0030.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0031.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0031.png deleted file mode 100644 index 1ba1d987b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0031.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0031.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0031.webp new file mode 100644 index 000000000..e312fe35d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0031.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0032.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0032.png deleted file mode 100644 index 87e79d70f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0032.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0032.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0032.webp new file mode 100644 index 000000000..f79ab5ac8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0032.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0033.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0033.png deleted file mode 100644 index 924fec05a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0033.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0033.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0033.webp new file mode 100644 index 000000000..87e19f73b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0033.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0034.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0034.png deleted file mode 100644 index d4560d0ea..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0034.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0035.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0035.png deleted file mode 100644 index c2f874e7b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0035.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0036.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0036.png deleted file mode 100644 index b18cdac62..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0036.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0036.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0036.webp new file mode 100644 index 000000000..31d89c3f5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0036.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0037.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0037.png deleted file mode 100644 index a1bddba42..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0037.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0037.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0037.webp new file mode 100644 index 000000000..0f41c1214 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0037.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0038.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0038.png deleted file mode 100644 index 9840eec9f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0038.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0038.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0038.webp new file mode 100644 index 000000000..9c5bd54a1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0038.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0039.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0039.png deleted file mode 100644 index 57531a97c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0039.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0039.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0039.webp new file mode 100644 index 000000000..def6c84a2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0039.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0040.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0040.png deleted file mode 100644 index a8f0eb9cc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0040.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0040.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0040.webp new file mode 100644 index 000000000..f8d4a38aa Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0040.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0041.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0041.png deleted file mode 100644 index 9fa4616b0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0041.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0041.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0041.webp new file mode 100644 index 000000000..3c9129802 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0041.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0042.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0042.png deleted file mode 100644 index a9d4d3cc1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0042.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0042.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0042.webp new file mode 100644 index 000000000..14cfbb788 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0042.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0043.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0043.png deleted file mode 100644 index 44213ee01..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0043.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0043.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0043.webp new file mode 100644 index 000000000..c41388c6e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0043.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0044.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0044.png deleted file mode 100644 index a09c00118..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0044.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0044.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0044.webp new file mode 100644 index 000000000..e3fb21fbe Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0044.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0045.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0045.png deleted file mode 100644 index fb7b432d3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0045.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0045.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0045.webp new file mode 100644 index 000000000..041cba21b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0045.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0046.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0046.png deleted file mode 100644 index 75bac3198..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0046.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0046.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0046.webp new file mode 100644 index 000000000..d0e6b2124 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0046.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0047.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0047.png deleted file mode 100644 index 3afcd7d11..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0047.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0047.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0047.webp new file mode 100644 index 000000000..1edc29d39 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0047.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0048.png b/dasherdancer/src/main/res/drawable-nodpi/santa_idle0048.png deleted file mode 100644 index bfb074b0f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_idle0048.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0001.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0001.png deleted file mode 100644 index 27eb6a522..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0001.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0001.webp new file mode 100644 index 000000000..bbdb4bea6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0002.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0002.png deleted file mode 100644 index f58b525a3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0002.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0002.webp new file mode 100644 index 000000000..ead9e098e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0003.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0003.png deleted file mode 100644 index 2df8a66fb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0003.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0003.webp new file mode 100644 index 000000000..38b2ba77c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0004.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0004.png deleted file mode 100644 index 65d9796a0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0004.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0004.webp new file mode 100644 index 000000000..cf1c5952d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0005.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0005.png deleted file mode 100644 index f2c3fe53e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0005.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0005.webp new file mode 100644 index 000000000..f15014b9f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0006.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0006.png deleted file mode 100644 index 7abe331ba..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0006.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0006.webp new file mode 100644 index 000000000..af77a6b0d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0007.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0007.png deleted file mode 100644 index 59f4dede0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0007.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0007.webp new file mode 100644 index 000000000..ac154bb0e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0008.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0008.png deleted file mode 100644 index 975f28065..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0008.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0008.webp new file mode 100644 index 000000000..c0f22cc6d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0009.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0009.png deleted file mode 100644 index e41791b09..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0009.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0009.webp new file mode 100644 index 000000000..44e84ffe6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0010.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0010.png deleted file mode 100644 index 37287cea7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0010.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0010.webp new file mode 100644 index 000000000..fa4275dae Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0011.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0011.png deleted file mode 100644 index e41791b09..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0012.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0012.png deleted file mode 100644 index 975f28065..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0013.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0013.png deleted file mode 100644 index 311199f31..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0013.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0013.webp new file mode 100644 index 000000000..e32da0016 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0014.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0014.png deleted file mode 100644 index 356014435..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0014.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0014.webp new file mode 100644 index 000000000..e2a7539b3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0015.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0015.png deleted file mode 100644 index f2c3fe53e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0016.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0016.png deleted file mode 100644 index 65d9796a0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0017.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0017.png deleted file mode 100644 index 7824e3452..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0017.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0017.webp new file mode 100644 index 000000000..1e9827f3b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0018.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0018.png deleted file mode 100644 index 0c437f9a0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0018.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0018.webp new file mode 100644 index 000000000..2fd6f9c91 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0019.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0019.png deleted file mode 100644 index 752a60e5f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0019.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0019.webp new file mode 100644 index 000000000..ce73be336 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0020.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0020.png deleted file mode 100644 index cbd64c18d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0020.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0020.webp new file mode 100644 index 000000000..c3f993bed Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0021.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0021.png deleted file mode 100644 index 7824e3452..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0022.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0022.png deleted file mode 100644 index ad8c620cf..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0022.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0022.webp new file mode 100644 index 000000000..456bdcdef Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0023.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0023.png deleted file mode 100644 index f58b525a3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0024.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0024.png deleted file mode 100644 index 27eb6a522..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchin0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20001.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20001.png deleted file mode 100644 index a55be8392..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20001.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20001.webp new file mode 100644 index 000000000..3af26a5c9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20002.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20002.png deleted file mode 100644 index 7dcd141e8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20002.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20002.webp new file mode 100644 index 000000000..99ab7ffbc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20003.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20003.png deleted file mode 100644 index dc8a7b794..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20003.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20003.webp new file mode 100644 index 000000000..3a8c0a972 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20004.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20004.png deleted file mode 100644 index 7525f124a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20004.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20004.webp new file mode 100644 index 000000000..bcbd7834c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20005.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20005.png deleted file mode 100644 index 61d56da13..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20005.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20005.webp new file mode 100644 index 000000000..f479f5544 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20006.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20006.png deleted file mode 100644 index 1909dcbe5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20006.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20006.webp new file mode 100644 index 000000000..dccd4140f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20007.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20007.png deleted file mode 100644 index aee9edf69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20007.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20007.webp new file mode 100644 index 000000000..4edb399e4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20008.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20008.png deleted file mode 100644 index aee9edf69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20009.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20009.png deleted file mode 100644 index aee9edf69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20010.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20010.png deleted file mode 100644 index aee9edf69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20011.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20011.png deleted file mode 100644 index aee9edf69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20012.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20012.png deleted file mode 100644 index aee9edf69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20013.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20013.png deleted file mode 100644 index aee9edf69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20014.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20014.png deleted file mode 100644 index aee9edf69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20015.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20015.png deleted file mode 100644 index aee9edf69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20016.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20016.png deleted file mode 100644 index aee9edf69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20017.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20017.png deleted file mode 100644 index a1a947ab5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20017.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20017.webp new file mode 100644 index 000000000..45ecbeaee Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20018.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20018.png deleted file mode 100644 index 458c8b824..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20018.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20018.webp new file mode 100644 index 000000000..6e300dc63 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20019.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20019.png deleted file mode 100644 index da82308b7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20019.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20019.webp new file mode 100644 index 000000000..291bab2b6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20020.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20020.png deleted file mode 100644 index 0fda3dad3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20020.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20020.webp new file mode 100644 index 000000000..e6e828a19 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20021.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20021.png deleted file mode 100644 index 0c5e64e11..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20021.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20021.webp new file mode 100644 index 000000000..8eec8a7b7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20022.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20022.png deleted file mode 100644 index a55be8392..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20023.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20023.png deleted file mode 100644 index 9161eabb9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20023.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20023.webp new file mode 100644 index 000000000..1df06fa68 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20024.png b/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20024.png deleted file mode 100644 index 9161eabb9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_pinchout20024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0001.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0001.png deleted file mode 100644 index 50f9af05f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0001.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0001.webp new file mode 100644 index 000000000..5e914807b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0002.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0002.png deleted file mode 100644 index 98b0d43f5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0002.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0002.webp new file mode 100644 index 000000000..944a1459c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0003.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0003.png deleted file mode 100644 index 9cf08c45e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0003.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0003.webp new file mode 100644 index 000000000..afd65dcef Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0004.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0004.png deleted file mode 100644 index c1d040a69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0004.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0004.webp new file mode 100644 index 000000000..7e5f761c9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0005.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0005.png deleted file mode 100644 index b722b86e9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0005.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0005.webp new file mode 100644 index 000000000..3def2c8ce Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0006.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0006.png deleted file mode 100644 index 649e153b7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0006.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0006.webp new file mode 100644 index 000000000..c3921e69a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0007.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0007.png deleted file mode 100644 index 1b0749bc3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0007.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0007.webp new file mode 100644 index 000000000..2c32551c8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0008.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0008.png deleted file mode 100644 index 40830e5fe..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0008.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0008.webp new file mode 100644 index 000000000..dcad572cb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0009.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0009.png deleted file mode 100644 index cacb48dff..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0009.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0009.webp new file mode 100644 index 000000000..b421230f5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0010.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0010.png deleted file mode 100644 index 12b0f569d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0010.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0010.webp new file mode 100644 index 000000000..e61438d13 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0011.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0011.png deleted file mode 100644 index 83cc89f8c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0011.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0011.webp new file mode 100644 index 000000000..86c97cc68 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0012.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0012.png deleted file mode 100644 index 72c637ee5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0012.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0012.webp new file mode 100644 index 000000000..3fd53250d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0013.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0013.png deleted file mode 100644 index 36660d947..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0013.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0013.webp new file mode 100644 index 000000000..94f51e440 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0014.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0014.png deleted file mode 100644 index 05daf15db..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0014.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0014.webp new file mode 100644 index 000000000..0bf5aed8d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0015.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0015.png deleted file mode 100644 index fdfe39e1b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0015.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0015.webp new file mode 100644 index 000000000..48b4e977e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0016.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0016.png deleted file mode 100644 index 73501c350..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0016.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0016.webp new file mode 100644 index 000000000..b28e7d796 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0017.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0017.png deleted file mode 100644 index 78488e76e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0017.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0017.webp new file mode 100644 index 000000000..da9db85de Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0018.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0018.png deleted file mode 100644 index 8be870e9b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0018.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0018.webp new file mode 100644 index 000000000..13c697ba3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0019.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0019.png deleted file mode 100644 index 5f8d9e4b5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0019.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0019.webp new file mode 100644 index 000000000..2bd4afffc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0020.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0020.png deleted file mode 100644 index ccb49b095..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0020.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0020.webp new file mode 100644 index 000000000..ccb54c653 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0021.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0021.png deleted file mode 100644 index 46ef5d376..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0021.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0021.webp new file mode 100644 index 000000000..c10972370 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0022.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0022.png deleted file mode 100644 index 2da4e5d89..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0022.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0022.webp new file mode 100644 index 000000000..446e84046 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0023.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0023.png deleted file mode 100644 index 6ad211a65..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0023.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0023.webp new file mode 100644 index 000000000..252abb7c4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0024.png b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0024.png deleted file mode 100644 index c7392e893..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_shake0024.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0024.webp new file mode 100644 index 000000000..a447e9a28 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_shake0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20001.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20001.png deleted file mode 100644 index 9fcbb5f4d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20001.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20001.webp new file mode 100644 index 000000000..ba4f97703 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20002.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20002.png deleted file mode 100644 index 5b73ced1c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20002.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20002.webp new file mode 100644 index 000000000..517449bd8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20003.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20003.png deleted file mode 100644 index b5e539dac..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20003.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20003.webp new file mode 100644 index 000000000..8b9531dcd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20004.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20004.png deleted file mode 100644 index d1a1ac1fb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20004.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20004.webp new file mode 100644 index 000000000..40d1e87c6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20005.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20005.png deleted file mode 100644 index 4d6ae75e3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20005.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20005.webp new file mode 100644 index 000000000..edab5d640 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20006.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20006.png deleted file mode 100644 index 0f6480570..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20006.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20006.webp new file mode 100644 index 000000000..0ad0de26e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20007.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20007.png deleted file mode 100644 index 10e1b643b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20007.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20007.webp new file mode 100644 index 000000000..a1d2290cb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20008.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20008.png deleted file mode 100644 index b8cf633b2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20008.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20008.webp new file mode 100644 index 000000000..7fb7dd01f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20009.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20009.png deleted file mode 100644 index 03c112002..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20009.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20009.webp new file mode 100644 index 000000000..a09b4dcc3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20010.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20010.png deleted file mode 100644 index 8631ebb24..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20010.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20010.webp new file mode 100644 index 000000000..10e2324f4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20011.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20011.png deleted file mode 100644 index 1c48bbd0f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20011.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20011.webp new file mode 100644 index 000000000..aa81994ca Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20012.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20012.png deleted file mode 100644 index a44bb40e8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20012.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20012.webp new file mode 100644 index 000000000..aa91a7204 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20013.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20013.png deleted file mode 100644 index e6d0e0039..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20013.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20013.webp new file mode 100644 index 000000000..01df4af23 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20014.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20014.png deleted file mode 100644 index 50a3af0e1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20014.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20014.webp new file mode 100644 index 000000000..f59c0a8cb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20015.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20015.png deleted file mode 100644 index f51eb8d81..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20015.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20015.webp new file mode 100644 index 000000000..ce4e01eb0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20016.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20016.png deleted file mode 100644 index 0c8072a06..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20016.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20016.webp new file mode 100644 index 000000000..ec3832119 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20017.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20017.png deleted file mode 100644 index c9541257c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20017.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20017.webp new file mode 100644 index 000000000..d1504d34f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20018.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20018.png deleted file mode 100644 index 61e2b88ce..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20018.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20018.webp new file mode 100644 index 000000000..fafc22683 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20019.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20019.png deleted file mode 100644 index 2b1dd6af0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20019.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20019.webp new file mode 100644 index 000000000..c7213cb89 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20020.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20020.png deleted file mode 100644 index fdfa6fdeb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20020.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20020.webp new file mode 100644 index 000000000..2137aca6b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20021.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20021.png deleted file mode 100644 index 8b203339e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20021.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20021.webp new file mode 100644 index 000000000..57cb28d92 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20022.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20022.png deleted file mode 100644 index fc2bcc581..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20022.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20022.webp new file mode 100644 index 000000000..002d96043 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20023.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20023.png deleted file mode 100644 index b9d0b0616..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20023.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20023.webp new file mode 100644 index 000000000..7c18caf0d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20024.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20024.png deleted file mode 100644 index 997b8bf03..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20024.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20024.webp new file mode 100644 index 000000000..cea4b6ee4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipe_right20024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0001.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0001.png deleted file mode 100644 index 06ec147d2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0001.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0001.webp new file mode 100644 index 000000000..72c215e12 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0002.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0002.png deleted file mode 100644 index 7ea2044cd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0002.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0002.webp new file mode 100644 index 000000000..dc0bcb93c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0003.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0003.png deleted file mode 100644 index c9ed9b8e6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0003.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0003.webp new file mode 100644 index 000000000..11b1d2d3c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0004.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0004.png deleted file mode 100644 index be955a4af..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0004.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0004.webp new file mode 100644 index 000000000..c327d5f6a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0005.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0005.png deleted file mode 100644 index 8c8d03ea3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0005.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0005.webp new file mode 100644 index 000000000..baad2a901 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0006.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0006.png deleted file mode 100644 index 844c65eb5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0006.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0006.webp new file mode 100644 index 000000000..7b09a87ad Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0007.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0007.png deleted file mode 100644 index f14901245..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0007.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0007.webp new file mode 100644 index 000000000..459d868e5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0008.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0008.png deleted file mode 100644 index 0bcd253c4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0008.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0008.webp new file mode 100644 index 000000000..5697c3c68 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0009.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0009.png deleted file mode 100644 index d093c3fcf..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0009.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0009.webp new file mode 100644 index 000000000..0cc95e067 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0010.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0010.png deleted file mode 100644 index 19d3fbe19..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0010.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0010.webp new file mode 100644 index 000000000..31bf5abe5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0011.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0011.png deleted file mode 100644 index 44a6d85b6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0011.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0011.webp new file mode 100644 index 000000000..9f77631b2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0012.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0012.png deleted file mode 100644 index bb3a5c3db..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0012.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0012.webp new file mode 100644 index 000000000..e8b933971 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0013.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0013.png deleted file mode 100644 index c77a42607..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0013.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0013.webp new file mode 100644 index 000000000..9015b18a3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0014.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0014.png deleted file mode 100644 index 572df483c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0014.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0014.webp new file mode 100644 index 000000000..afa5f9a05 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0015.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0015.png deleted file mode 100644 index 38531fe7e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0015.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0015.webp new file mode 100644 index 000000000..fa39ead7e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0016.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0016.png deleted file mode 100644 index 6d47e6920..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0016.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0016.webp new file mode 100644 index 000000000..cc73e440f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0017.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0017.png deleted file mode 100644 index a385f2dea..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0017.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0017.webp new file mode 100644 index 000000000..e3098c071 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0018.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0018.png deleted file mode 100644 index 282938ab4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0018.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0018.webp new file mode 100644 index 000000000..a6b8bc11c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0019.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0019.png deleted file mode 100644 index c717e1b20..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0019.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0019.webp new file mode 100644 index 000000000..425f48411 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0020.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0020.png deleted file mode 100644 index 92099b2aa..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0020.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0020.webp new file mode 100644 index 000000000..38de5b55e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0021.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0021.png deleted file mode 100644 index 9ba924804..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0021.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0021.webp new file mode 100644 index 000000000..b24bea8b2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0022.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0022.png deleted file mode 100644 index a1ccb0fab..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0022.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0022.webp new file mode 100644 index 000000000..06b53bba6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0023.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0023.png deleted file mode 100644 index 63cb7f4cf..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0023.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0023.webp new file mode 100644 index 000000000..6abda4db2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0024.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0024.png deleted file mode 100644 index 89c6dfd20..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0024.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0024.webp new file mode 100644 index 000000000..c97ed998c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipedown0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0001.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0001.png deleted file mode 100644 index 27eb6a522..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0002.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0002.png deleted file mode 100644 index 973100411..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0002.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0002.webp new file mode 100644 index 000000000..040f0c0be Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0003.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0003.png deleted file mode 100644 index 814a1bf95..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0003.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0003.webp new file mode 100644 index 000000000..02e3c2dcb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0004.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0004.png deleted file mode 100644 index e36555876..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0004.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0004.webp new file mode 100644 index 000000000..cde4358f1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0005.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0005.png deleted file mode 100644 index f1fa32652..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0005.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0005.webp new file mode 100644 index 000000000..5f8e306ee Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0006.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0006.png deleted file mode 100644 index 62ec78241..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0006.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0006.webp new file mode 100644 index 000000000..840925046 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0007.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0007.png deleted file mode 100644 index a8e0bbc70..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0007.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0007.webp new file mode 100644 index 000000000..8dbd34b3d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0008.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0008.png deleted file mode 100644 index 104f38353..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0008.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0008.webp new file mode 100644 index 000000000..d02f66e7a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0009.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0009.png deleted file mode 100644 index 5cc955aef..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0009.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0009.webp new file mode 100644 index 000000000..68e33c1bc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0010.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0010.png deleted file mode 100644 index a8e0bbc70..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0011.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0011.png deleted file mode 100644 index 27eb6a522..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0012.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0012.png deleted file mode 100644 index 7c9007abb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0012.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0012.webp new file mode 100644 index 000000000..8fd15779a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0013.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0013.png deleted file mode 100644 index 1f8118e4f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0013.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0013.webp new file mode 100644 index 000000000..3fabc9f51 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0014.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0014.png deleted file mode 100644 index 578ab964a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0014.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0014.webp new file mode 100644 index 000000000..9a892b18e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0015.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0015.png deleted file mode 100644 index 334627e2e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0015.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0015.webp new file mode 100644 index 000000000..b55c9d23a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0016.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0016.png deleted file mode 100644 index 1e911c305..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0016.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0016.webp new file mode 100644 index 000000000..6f477daf6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0017.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0017.png deleted file mode 100644 index a19228138..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0017.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0017.webp new file mode 100644 index 000000000..9b766177f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0018.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0018.png deleted file mode 100644 index aad9e90fa..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0018.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0018.webp new file mode 100644 index 000000000..8f581d8ca Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0019.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0019.png deleted file mode 100644 index 7e90eb31f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0019.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0019.webp new file mode 100644 index 000000000..cf8d40453 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0020.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0020.png deleted file mode 100644 index 34fddd029..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0020.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0020.webp new file mode 100644 index 000000000..62494d068 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0021.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0021.png deleted file mode 100644 index 3ecb2c48a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0021.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0021.webp new file mode 100644 index 000000000..bc69eac18 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0022.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0022.png deleted file mode 100644 index fe0113704..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0022.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0022.webp new file mode 100644 index 000000000..988d9f565 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0023.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0023.png deleted file mode 100644 index e452c22a0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0023.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0023.webp new file mode 100644 index 000000000..db2218943 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0024.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0024.png deleted file mode 100644 index 2d1cd260c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0024.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0024.webp new file mode 100644 index 000000000..94e2451b1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeleft0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0001.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0001.png deleted file mode 100644 index bb358b4dd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0001.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0001.webp new file mode 100644 index 000000000..a49ad54a1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0002.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0002.png deleted file mode 100644 index 23f6ad695..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0002.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0002.webp new file mode 100644 index 000000000..c4732a897 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0003.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0003.png deleted file mode 100644 index 9a01b59a4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0003.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0003.webp new file mode 100644 index 000000000..86c63064c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0004.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0004.png deleted file mode 100644 index 3085dee90..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0004.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0004.webp new file mode 100644 index 000000000..9cc080d8b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0005.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0005.png deleted file mode 100644 index e31cad11c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0005.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0005.webp new file mode 100644 index 000000000..9000c4090 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0006.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0006.png deleted file mode 100644 index 14c01a807..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0006.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0006.webp new file mode 100644 index 000000000..fc1328e5e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0007.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0007.png deleted file mode 100644 index d89c3d81b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0007.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0007.webp new file mode 100644 index 000000000..5a3049c8b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0008.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0008.png deleted file mode 100644 index 7730f513c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0008.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0008.webp new file mode 100644 index 000000000..aa9d58f95 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0009.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0009.png deleted file mode 100644 index 978847c8a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0009.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0009.webp new file mode 100644 index 000000000..da4bcdb81 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0010.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0010.png deleted file mode 100644 index 158087844..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0010.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0010.webp new file mode 100644 index 000000000..d41f64aea Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0011.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0011.png deleted file mode 100644 index d8d8fa060..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0011.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0011.webp new file mode 100644 index 000000000..72f57609b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0012.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0012.png deleted file mode 100644 index 5be51fd8c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0012.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0012.webp new file mode 100644 index 000000000..57d295881 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0013.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0013.png deleted file mode 100644 index 6c1857302..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0013.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0013.webp new file mode 100644 index 000000000..b68e82eda Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0014.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0014.png deleted file mode 100644 index 06320ee0d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0014.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0014.webp new file mode 100644 index 000000000..1cb31917a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0015.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0015.png deleted file mode 100644 index a45f5da0c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0015.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0015.webp new file mode 100644 index 000000000..e17d1ca15 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0016.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0016.png deleted file mode 100644 index 56c5f9e2f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0016.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0016.webp new file mode 100644 index 000000000..c8380cbe0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0017.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0017.png deleted file mode 100644 index df42bbf58..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0017.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0017.webp new file mode 100644 index 000000000..4d908f2ec Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0018.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0018.png deleted file mode 100644 index b5326579e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0018.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0018.webp new file mode 100644 index 000000000..1440d0f10 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0019.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0019.png deleted file mode 100644 index b80ebf2a0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0019.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0019.webp new file mode 100644 index 000000000..2736f0faf Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0020.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0020.png deleted file mode 100644 index 1fc24e789..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0020.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0020.webp new file mode 100644 index 000000000..6fa2f82e0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0021.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0021.png deleted file mode 100644 index a51d37b8a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0021.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0021.webp new file mode 100644 index 000000000..d7e5a823a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0022.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0022.png deleted file mode 100644 index c5dc64adf..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0022.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0022.webp new file mode 100644 index 000000000..bb36460ab Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0023.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0023.png deleted file mode 100644 index 87fb96a74..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0023.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0023.webp new file mode 100644 index 000000000..37ef00f3d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0024.png b/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0024.png deleted file mode 100644 index bb358b4dd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_swipeup0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0001.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0001.png deleted file mode 100644 index 27eb6a522..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0002.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0002.png deleted file mode 100644 index f58b525a3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0003.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0003.png deleted file mode 100644 index 6b7f489ee..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0003.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0003.webp new file mode 100644 index 000000000..396afa5f0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0004.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0004.png deleted file mode 100644 index 38a74f9d1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0004.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0004.webp new file mode 100644 index 000000000..28bbae915 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0005.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0005.png deleted file mode 100644 index e63149f85..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0005.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0005.webp new file mode 100644 index 000000000..692b05cbf Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0006.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0006.png deleted file mode 100644 index 57c2ae73c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0006.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0006.webp new file mode 100644 index 000000000..48f8cfa70 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0007.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0007.png deleted file mode 100644 index 20404e3e4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0007.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0007.webp new file mode 100644 index 000000000..a2a40b11e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0008.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0008.png deleted file mode 100644 index 84ba5c006..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0008.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0008.webp new file mode 100644 index 000000000..fa03252a2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0009.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0009.png deleted file mode 100644 index ce3a71b88..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0009.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0009.webp new file mode 100644 index 000000000..9fa6f783a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0010.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0010.png deleted file mode 100644 index 31b462a1e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0010.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0010.webp new file mode 100644 index 000000000..38dd854f9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0011.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0011.png deleted file mode 100644 index b3eedb129..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0011.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0011.webp new file mode 100644 index 000000000..e7c523de6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0012.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0012.png deleted file mode 100644 index 5a955c0b4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0012.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0012.webp new file mode 100644 index 000000000..ef111523f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0013.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0013.png deleted file mode 100644 index cd55a3aa6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0013.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0013.webp new file mode 100644 index 000000000..059388051 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0014.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0014.png deleted file mode 100644 index 0a6ecc665..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0014.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0014.webp new file mode 100644 index 000000000..9317b0d8c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0015.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0015.png deleted file mode 100644 index f0d6c085f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0015.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0015.webp new file mode 100644 index 000000000..6dd578a6f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0016.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0016.png deleted file mode 100644 index 5d305e645..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0016.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0016.webp new file mode 100644 index 000000000..3e0d13865 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0017.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0017.png deleted file mode 100644 index a53674d13..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0017.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0017.webp new file mode 100644 index 000000000..fdeeebd09 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0018.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0018.png deleted file mode 100644 index 5bf27686c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0018.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0018.webp new file mode 100644 index 000000000..a498dba8a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0019.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0019.png deleted file mode 100644 index 26ff714ff..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0019.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0019.webp new file mode 100644 index 000000000..9aa366264 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0020.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0020.png deleted file mode 100644 index 5d305e645..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0021.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0021.png deleted file mode 100644 index 6b7f489ee..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0022.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0022.png deleted file mode 100644 index f7982abbb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0022.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0022.webp new file mode 100644 index 000000000..09fb2324f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0023.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0023.png deleted file mode 100644 index 27eb6a522..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0024.png b/dasherdancer/src/main/res/drawable-nodpi/santa_tap0024.png deleted file mode 100644 index 27eb6a522..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_tap0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_down01.png b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_down01.png deleted file mode 100644 index a79f7db96..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_down01.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_down01.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_down01.webp new file mode 100644 index 000000000..9ed2580aa Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_down01.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_left01.png b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_left01.png deleted file mode 100644 index 0c04c3288..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_left01.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_left01.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_left01.webp new file mode 100644 index 000000000..e8822d26b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_left01.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_shake01.png b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_shake01.png deleted file mode 100644 index 6189272de..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_shake01.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_shake01.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_shake01.webp new file mode 100644 index 000000000..06050d8dd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_shake01.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_tap01.png b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_tap01.png deleted file mode 100644 index 273b5e60e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_tap01.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_tap01.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_tap01.webp new file mode 100644 index 000000000..1782c39b8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_tap01.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_zoom_in01.png b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_zoom_in01.png deleted file mode 100644 index ed3754214..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_zoom_in01.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/santa_temp_zoom_in01.webp b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_zoom_in01.webp new file mode 100644 index 000000000..264f9a6b2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/santa_temp_zoom_in01.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman.webp new file mode 100644 index 000000000..ab40ad051 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0001.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0001.png deleted file mode 100644 index 1d3987069..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0001.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0001.webp new file mode 100644 index 000000000..5fb9b02f7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0002.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0002.png deleted file mode 100644 index 5e0c7236d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0002.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0002.webp new file mode 100644 index 000000000..8695cc7de Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0003.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0003.png deleted file mode 100644 index 5fd6911b7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0003.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0003.webp new file mode 100644 index 000000000..db38a2634 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0004.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0004.png deleted file mode 100644 index 7f082922e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0004.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0004.webp new file mode 100644 index 000000000..5ed6e503b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0005.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0005.png deleted file mode 100644 index 22d8cb860..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0005.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0005.webp new file mode 100644 index 000000000..9012e9992 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0006.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0006.png deleted file mode 100644 index 12b31aced..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0006.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0006.webp new file mode 100644 index 000000000..40da3dfe5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0007.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0007.png deleted file mode 100644 index 6ac94e979..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0007.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0007.webp new file mode 100644 index 000000000..04b853819 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0008.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0008.png deleted file mode 100644 index 474601a54..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0008.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0008.webp new file mode 100644 index 000000000..c836286dc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0009.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0009.png deleted file mode 100644 index c6dabc4a5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0009.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0009.webp new file mode 100644 index 000000000..e6679932a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0010.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0010.png deleted file mode 100644 index 98de221f9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0010.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0010.webp new file mode 100644 index 000000000..39ae9cc5b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0011.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0011.png deleted file mode 100644 index 3289ce734..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0011.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0011.webp new file mode 100644 index 000000000..ed9b3c1e1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0012.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0012.png deleted file mode 100644 index 3289ce734..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0013.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0013.png deleted file mode 100644 index 3289ce734..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0014.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0014.png deleted file mode 100644 index 98de221f9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0015.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0015.png deleted file mode 100644 index c6dabc4a5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0016.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0016.png deleted file mode 100644 index eed113255..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0016.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0016.webp new file mode 100644 index 000000000..27ca4e1f8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0017.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0017.png deleted file mode 100644 index 23b9790a2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0017.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0017.webp new file mode 100644 index 000000000..d4564f752 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0018.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0018.png deleted file mode 100644 index 6947ec9db..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0018.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0018.webp new file mode 100644 index 000000000..a2fc77554 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0019.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0019.png deleted file mode 100644 index 229bee2de..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0019.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0019.webp new file mode 100644 index 000000000..d31149a83 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0020.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0020.png deleted file mode 100644 index 7c4569266..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0020.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0020.webp new file mode 100644 index 000000000..e443bcee6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0021.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0021.png deleted file mode 100644 index f0d01873a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0021.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0021.webp new file mode 100644 index 000000000..53d7ac09c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0022.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0022.png deleted file mode 100644 index 486eb938e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0022.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0022.webp new file mode 100644 index 000000000..dca755f6f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0023.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0023.png deleted file mode 100644 index 608282335..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0023.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0023.webp new file mode 100644 index 000000000..18348bf44 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0024.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0024.png deleted file mode 100644 index 1d3987069..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_idle0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0001.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0001.png deleted file mode 100644 index b65d4f57b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0001.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0001.webp new file mode 100644 index 000000000..4ada92b4b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0002.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0002.png deleted file mode 100644 index 58b1f84c7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0002.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0002.webp new file mode 100644 index 000000000..639fc1c26 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0003.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0003.png deleted file mode 100644 index 1d3183774..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0003.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0003.webp new file mode 100644 index 000000000..c0f4e1519 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0004.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0004.png deleted file mode 100644 index f2b4fe1cf..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0004.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0004.webp new file mode 100644 index 000000000..2bea13689 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0005.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0005.png deleted file mode 100644 index 4bd7a161b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0005.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0005.webp new file mode 100644 index 000000000..de3dc03a7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0006.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0006.png deleted file mode 100644 index 2699c0c6a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0006.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0006.webp new file mode 100644 index 000000000..f6ca2779c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0007.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0007.png deleted file mode 100644 index c13e7f25a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0007.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0007.webp new file mode 100644 index 000000000..0fdb245ec Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0008.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0008.png deleted file mode 100644 index 20d504d55..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0008.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0008.webp new file mode 100644 index 000000000..fba2651b8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0009.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0009.png deleted file mode 100644 index 4cfea1faf..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0009.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0009.webp new file mode 100644 index 000000000..3cf9e6c54 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0010.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0010.png deleted file mode 100644 index 1239f44aa..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0010.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0010.webp new file mode 100644 index 000000000..a34b60543 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0011.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0011.png deleted file mode 100644 index 85232cd73..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0011.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0011.webp new file mode 100644 index 000000000..73c132e81 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0012.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0012.png deleted file mode 100644 index 1d391970e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0012.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0012.webp new file mode 100644 index 000000000..de6a1d2e5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0013.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0013.png deleted file mode 100644 index 2f748fcd7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0013.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0013.webp new file mode 100644 index 000000000..61bf9b2f2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0014.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0014.png deleted file mode 100644 index 048d04204..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0014.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0014.webp new file mode 100644 index 000000000..846f625ca Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0015.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0015.png deleted file mode 100644 index ac576dd6e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0016.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0016.png deleted file mode 100644 index 584777ae8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0016.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0016.webp new file mode 100644 index 000000000..3eb22dbd5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0017.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0017.png deleted file mode 100644 index 8d7b11eda..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0017.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0017.webp new file mode 100644 index 000000000..894bceff4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0018.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0018.png deleted file mode 100644 index b63ca2bd3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0018.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0018.webp new file mode 100644 index 000000000..6863d6ce8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0019.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0019.png deleted file mode 100644 index 5ae211e94..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0019.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0019.webp new file mode 100644 index 000000000..34d9b17f7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0020.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0020.png deleted file mode 100644 index ad97fe43f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0020.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0020.webp new file mode 100644 index 000000000..06a2582f5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0021.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0021.png deleted file mode 100644 index dc8ccaf66..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0021.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0021.webp new file mode 100644 index 000000000..00b6af8da Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0022.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0022.png deleted file mode 100644 index c8de7729c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0022.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0022.webp new file mode 100644 index 000000000..b2437b33e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0023.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0023.png deleted file mode 100644 index 8ef10cdf6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0023.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0023.webp new file mode 100644 index 000000000..3a5c25a61 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0024.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0024.png deleted file mode 100644 index 09f6aa1b2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0024.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0024.webp new file mode 100644 index 000000000..df041b4e8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchin0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0001.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0001.png deleted file mode 100644 index 2e00c5bd2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0001.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0001.webp new file mode 100644 index 000000000..3523df5b3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0002.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0002.png deleted file mode 100644 index 96881ef08..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0002.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0002.webp new file mode 100644 index 000000000..e20233efc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0003.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0003.png deleted file mode 100644 index 52010c4d9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0003.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0003.webp new file mode 100644 index 000000000..2594388a8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0004.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0004.png deleted file mode 100644 index 1e0f9f859..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0004.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0004.webp new file mode 100644 index 000000000..286885ff2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0005.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0005.png deleted file mode 100644 index 2bdf8e8df..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0005.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0005.webp new file mode 100644 index 000000000..226d72a8e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0006.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0006.png deleted file mode 100644 index 7cf21d804..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0006.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0006.webp new file mode 100644 index 000000000..ee1b67582 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0007.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0007.png deleted file mode 100644 index 0b446ac4b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0007.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0007.webp new file mode 100644 index 000000000..9f6023829 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0008.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0008.png deleted file mode 100644 index d1d481899..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0008.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0008.webp new file mode 100644 index 000000000..fd24a0a62 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0009.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0009.png deleted file mode 100644 index 14c582643..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0009.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0009.webp new file mode 100644 index 000000000..dd6a6c56c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0010.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0010.png deleted file mode 100644 index 43fd8ed8d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0010.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0010.webp new file mode 100644 index 000000000..fea19d2d2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0011.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0011.png deleted file mode 100644 index 0b7adde5a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0011.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0011.webp new file mode 100644 index 000000000..2b5c8f261 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0012.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0012.png deleted file mode 100644 index de5da306d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0012.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0012.webp new file mode 100644 index 000000000..2eec58e3f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0013.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0013.png deleted file mode 100644 index 5d8106dbc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0013.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0013.webp new file mode 100644 index 000000000..5f975564d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0014.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0014.png deleted file mode 100644 index 5d8106dbc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0015.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0015.png deleted file mode 100644 index 5d8106dbc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0016.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0016.png deleted file mode 100644 index 5d8106dbc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0017.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0017.png deleted file mode 100644 index 5d8106dbc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0018.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0018.png deleted file mode 100644 index 5d8106dbc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0019.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0019.png deleted file mode 100644 index 5d8106dbc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0020.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0020.png deleted file mode 100644 index 7cd9f68f2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0020.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0020.webp new file mode 100644 index 000000000..2c2cc0e87 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0021.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0021.png deleted file mode 100644 index 435a512b9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0021.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0021.webp new file mode 100644 index 000000000..e5d4d1bf9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0022.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0022.png deleted file mode 100644 index 6bdaa33de..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0022.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0022.webp new file mode 100644 index 000000000..36221e258 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0023.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0023.png deleted file mode 100644 index 74f0822d4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0023.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0023.webp new file mode 100644 index 000000000..25d0bdbe2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0024.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0024.png deleted file mode 100644 index c9b2c0b69..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0024.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0024.webp new file mode 100644 index 000000000..9d9d468bd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_pinchout0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0001.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0001.png deleted file mode 100644 index c4154de4c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0001.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0001.webp new file mode 100644 index 000000000..f9c30f3ba Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0002.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0002.png deleted file mode 100644 index 7256dfa8d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0002.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0002.webp new file mode 100644 index 000000000..1f5f49e2e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0003.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0003.png deleted file mode 100644 index 350a889dd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0003.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0003.webp new file mode 100644 index 000000000..d5e9449d2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0004.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0004.png deleted file mode 100644 index a35704b17..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0004.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0004.webp new file mode 100644 index 000000000..50ea6af0c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0005.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0005.png deleted file mode 100644 index 62b6e1214..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0005.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0005.webp new file mode 100644 index 000000000..50f57fa45 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0006.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0006.png deleted file mode 100644 index c7e7688d5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0006.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0006.webp new file mode 100644 index 000000000..2d1bc5a19 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0007.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0007.png deleted file mode 100644 index 85afa2e0a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0007.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0007.webp new file mode 100644 index 000000000..e035d8897 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0008.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0008.png deleted file mode 100644 index a7c6eca9f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0008.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0008.webp new file mode 100644 index 000000000..a996ad0ac Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0009.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0009.png deleted file mode 100644 index 595ec03b8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0009.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0009.webp new file mode 100644 index 000000000..f16d4a833 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0010.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0010.png deleted file mode 100644 index 856d815b4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0010.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0010.webp new file mode 100644 index 000000000..aaa5e3e16 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0011.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0011.png deleted file mode 100644 index bf04496fd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0011.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0011.webp new file mode 100644 index 000000000..9200abe36 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0012.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0012.png deleted file mode 100644 index 29b2d9ee1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0012.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0012.webp new file mode 100644 index 000000000..92fd18b1e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0013.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0013.png deleted file mode 100644 index afcd11258..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0013.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0013.webp new file mode 100644 index 000000000..efc878d4f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0014.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0014.png deleted file mode 100644 index badd9c1c0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0014.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0014.webp new file mode 100644 index 000000000..e1931c7c0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0015.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0015.png deleted file mode 100644 index cedcf4de0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0015.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0015.webp new file mode 100644 index 000000000..caf7d3557 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0016.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0016.png deleted file mode 100644 index effdf9f1f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0016.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0016.webp new file mode 100644 index 000000000..9021e7b42 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0017.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0017.png deleted file mode 100644 index 4800cd38a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0017.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0017.webp new file mode 100644 index 000000000..ab5801339 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0018.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0018.png deleted file mode 100644 index 104b1e0ff..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0018.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0018.webp new file mode 100644 index 000000000..952b47353 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0019.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0019.png deleted file mode 100644 index 3bfd9130f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0019.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0019.webp new file mode 100644 index 000000000..1ff8cdd2e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0020.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0020.png deleted file mode 100644 index 6edc315a0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0020.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0020.webp new file mode 100644 index 000000000..3166efaff Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0021.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0021.png deleted file mode 100644 index 63c93f3eb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0021.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0021.webp new file mode 100644 index 000000000..6470de35c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0022.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0022.png deleted file mode 100644 index bdbb386d6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0022.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0022.webp new file mode 100644 index 000000000..45407f6b6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0023.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0023.png deleted file mode 100644 index b7434a433..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0023.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0023.webp new file mode 100644 index 000000000..64da1261a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0024.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0024.png deleted file mode 100644 index 49a10aab1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0024.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0024.webp new file mode 100644 index 000000000..722ab07b1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_shake0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0001.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0001.png deleted file mode 100644 index 1d3987069..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0002.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0002.png deleted file mode 100644 index cd37eec21..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0002.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0002.webp new file mode 100644 index 000000000..c7c34efdc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0003.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0003.png deleted file mode 100644 index 5743045cb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0003.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0003.webp new file mode 100644 index 000000000..bc077ecaf Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0004.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0004.png deleted file mode 100644 index e5e1095dc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0004.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0004.webp new file mode 100644 index 000000000..be4137e38 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0005.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0005.png deleted file mode 100644 index 0f6784358..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0005.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0005.webp new file mode 100644 index 000000000..9e48a1433 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0006.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0006.png deleted file mode 100644 index 7cbca825e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0006.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0006.webp new file mode 100644 index 000000000..79754b897 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0007.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0007.png deleted file mode 100644 index bd84dfb8b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0007.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0007.webp new file mode 100644 index 000000000..609a1efef Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0008.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0008.png deleted file mode 100644 index e427d5e88..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0008.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0008.webp new file mode 100644 index 000000000..9f8bc7350 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0009.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0009.png deleted file mode 100644 index e8710ab06..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0009.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0009.webp new file mode 100644 index 000000000..d736f2466 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0010.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0010.png deleted file mode 100644 index 964cd6ce4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0010.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0010.webp new file mode 100644 index 000000000..794e305d1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0011.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0011.png deleted file mode 100644 index 8a24ef392..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0011.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0011.webp new file mode 100644 index 000000000..51e4bdc59 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0012.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0012.png deleted file mode 100644 index 4adfda3fd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0012.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0012.webp new file mode 100644 index 000000000..87c7d7322 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0013.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0013.png deleted file mode 100644 index 9e7348ad4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0013.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0013.webp new file mode 100644 index 000000000..850845023 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0014.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0014.png deleted file mode 100644 index 21b98c8cc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0014.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0014.webp new file mode 100644 index 000000000..717c4e291 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0015.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0015.png deleted file mode 100644 index 394e0d7cd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0015.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0015.webp new file mode 100644 index 000000000..535ef8b58 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0016.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0016.png deleted file mode 100644 index f7952ffc0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0016.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0016.webp new file mode 100644 index 000000000..c3b814976 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0017.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0017.png deleted file mode 100644 index 9d08a8255..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0017.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0017.webp new file mode 100644 index 000000000..7e0588f60 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0018.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0018.png deleted file mode 100644 index 08f7b7899..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0018.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0018.webp new file mode 100644 index 000000000..8f571c65c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0019.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0019.png deleted file mode 100644 index eac4e4040..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0019.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0019.webp new file mode 100644 index 000000000..669ecdab9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0020.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0020.png deleted file mode 100644 index 0aeaf72bc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0020.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0020.webp new file mode 100644 index 000000000..0f1532906 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0021.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0021.png deleted file mode 100644 index b14b4511a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0021.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0021.webp new file mode 100644 index 000000000..de90b7359 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0022.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0022.png deleted file mode 100644 index 1d3987069..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0023.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0023.png deleted file mode 100644 index 1d3987069..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0024.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0024.png deleted file mode 100644 index cd37eec21..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipedown0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0001.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0001.png deleted file mode 100644 index 9b7f85894..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0001.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0001.webp new file mode 100644 index 000000000..fa4351adc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0002.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0002.png deleted file mode 100644 index dbc337fe5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0002.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0002.webp new file mode 100644 index 000000000..0cd186cb2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0003.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0003.png deleted file mode 100644 index e657d2903..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0003.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0003.webp new file mode 100644 index 000000000..373e33a2d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0004.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0004.png deleted file mode 100644 index b15914714..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0004.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0004.webp new file mode 100644 index 000000000..850652d6d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0005.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0005.png deleted file mode 100644 index 1e3bedd52..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0005.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0005.webp new file mode 100644 index 000000000..ff87b519a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0006.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0006.png deleted file mode 100644 index 7b8aabda2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0006.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0006.webp new file mode 100644 index 000000000..97b6b230e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0007.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0007.png deleted file mode 100644 index 0dbec439e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0007.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0007.webp new file mode 100644 index 000000000..f4b08c92e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0008.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0008.png deleted file mode 100644 index e7b90c2ef..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0008.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0008.webp new file mode 100644 index 000000000..e416fe150 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0009.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0009.png deleted file mode 100644 index 7d25f1bb5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0009.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0009.webp new file mode 100644 index 000000000..fcc0fb3dc Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0010.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0010.png deleted file mode 100644 index 18f6c7536..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0010.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0010.webp new file mode 100644 index 000000000..6cc5a6e55 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0011.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0011.png deleted file mode 100644 index 0b81dbc67..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0011.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0011.webp new file mode 100644 index 000000000..cc861e82e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0012.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0012.png deleted file mode 100644 index 907979322..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0012.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0012.webp new file mode 100644 index 000000000..49776ede2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0013.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0013.png deleted file mode 100644 index 763274575..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0013.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0013.webp new file mode 100644 index 000000000..9a48ee23c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0014.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0014.png deleted file mode 100644 index 728dbb141..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0014.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0014.webp new file mode 100644 index 000000000..c1113ab0d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0015.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0015.png deleted file mode 100644 index f43273163..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0015.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0015.webp new file mode 100644 index 000000000..54bd1d82f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0016.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0016.png deleted file mode 100644 index 89f3c4db5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0016.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0016.webp new file mode 100644 index 000000000..7503cfd10 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0017.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0017.png deleted file mode 100644 index 1b9f41a56..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0017.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0017.webp new file mode 100644 index 000000000..265d96d0f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0018.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0018.png deleted file mode 100644 index 1dd8b48f5..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0018.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0018.webp new file mode 100644 index 000000000..12ccc03ca Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0019.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0019.png deleted file mode 100644 index aa8a9a3a1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0019.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0019.webp new file mode 100644 index 000000000..eb9769e3e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0020.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0020.png deleted file mode 100644 index 26622996e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0020.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0020.webp new file mode 100644 index 000000000..33ed5da1c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0021.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0021.png deleted file mode 100644 index 39ad103da..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0021.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0021.webp new file mode 100644 index 000000000..5fae1714b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0022.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0022.png deleted file mode 100644 index 7abd36583..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0022.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0022.webp new file mode 100644 index 000000000..c4cadc944 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0023.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0023.png deleted file mode 100644 index eddb0ee8c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0023.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0023.webp new file mode 100644 index 000000000..42790f0fd Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0024.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0024.png deleted file mode 100644 index 84292efb3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0024.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0024.webp new file mode 100644 index 000000000..6a04a6f43 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeleft0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0001.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0001.png deleted file mode 100644 index 4db4543cd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0001.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0001.webp new file mode 100644 index 000000000..b7aa6c20b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0002.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0002.png deleted file mode 100644 index c2e29ee6c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0002.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0002.webp new file mode 100644 index 000000000..3518705d8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0003.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0003.png deleted file mode 100644 index cbfd2e48d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0003.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0003.webp new file mode 100644 index 000000000..236601418 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0004.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0004.png deleted file mode 100644 index 18295dde2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0004.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0004.webp new file mode 100644 index 000000000..c6b46067f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0005.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0005.png deleted file mode 100644 index 8f4478a73..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0005.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0005.webp new file mode 100644 index 000000000..0942694fe Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0006.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0006.png deleted file mode 100644 index 2cd023026..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0006.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0006.webp new file mode 100644 index 000000000..e415d598f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0007.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0007.png deleted file mode 100644 index 6615863d1..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0007.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0007.webp new file mode 100644 index 000000000..8773eee24 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0008.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0008.png deleted file mode 100644 index 66108e150..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0008.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0008.webp new file mode 100644 index 000000000..db9b3fa43 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0009.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0009.png deleted file mode 100644 index a760331e9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0009.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0009.webp new file mode 100644 index 000000000..31f254784 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0010.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0010.png deleted file mode 100644 index 2b3019fdf..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0010.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0010.webp new file mode 100644 index 000000000..1b6586451 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0011.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0011.png deleted file mode 100644 index c90844ca6..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0011.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0011.webp new file mode 100644 index 000000000..d04224ee7 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0012.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0012.png deleted file mode 100644 index 3b71d5f24..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0012.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0012.webp new file mode 100644 index 000000000..2cd6a6c46 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0013.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0013.png deleted file mode 100644 index ab404dde9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0013.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0013.webp new file mode 100644 index 000000000..0331a8a59 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0014.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0014.png deleted file mode 100644 index 4f53fba79..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0014.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0014.webp new file mode 100644 index 000000000..d5d5d3a93 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0015.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0015.png deleted file mode 100644 index d1faa4584..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0015.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0015.webp new file mode 100644 index 000000000..e43bea08a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0016.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0016.png deleted file mode 100644 index 97a1b7e64..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0016.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0016.webp new file mode 100644 index 000000000..9761419aa Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0017.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0017.png deleted file mode 100644 index 941d943a8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0017.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0017.webp new file mode 100644 index 000000000..e0bdae3a2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0018.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0018.png deleted file mode 100644 index d6494b982..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0018.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0018.webp new file mode 100644 index 000000000..a8c433374 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0019.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0019.png deleted file mode 100644 index ec24cfa51..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0019.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0019.webp new file mode 100644 index 000000000..b05424cc5 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0020.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0020.png deleted file mode 100644 index 1bdae5156..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0020.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0020.webp new file mode 100644 index 000000000..fb0b5586c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0021.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0021.png deleted file mode 100644 index 6d8a347bb..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0021.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0021.webp new file mode 100644 index 000000000..8d96f6fd8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0022.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0022.png deleted file mode 100644 index 742c0102e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0022.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0022.webp new file mode 100644 index 000000000..2141b4002 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0023.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0023.png deleted file mode 100644 index 8c1be9b75..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0023.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0023.webp new file mode 100644 index 000000000..fa7a16265 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0024.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0024.png deleted file mode 100644 index 4db4543cd..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swiperight0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0001.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0001.png deleted file mode 100644 index 1d3987069..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0002.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0002.png deleted file mode 100644 index 8f63bdca0..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0002.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0002.webp new file mode 100644 index 000000000..78b0fe3c6 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0003.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0003.png deleted file mode 100644 index 94214d660..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0003.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0003.webp new file mode 100644 index 000000000..a0bd5e148 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0004.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0004.png deleted file mode 100644 index 0e081017c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0004.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0004.webp new file mode 100644 index 000000000..24a46641f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0005.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0005.png deleted file mode 100644 index f86cd0844..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0005.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0005.webp new file mode 100644 index 000000000..732615523 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0006.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0006.png deleted file mode 100644 index 3d5dd5fe8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0006.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0006.webp new file mode 100644 index 000000000..450fd9859 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0007.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0007.png deleted file mode 100644 index a684bcf2e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0007.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0007.webp new file mode 100644 index 000000000..4048112c3 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0008.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0008.png deleted file mode 100644 index 6addfe0a3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0008.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0008.webp new file mode 100644 index 000000000..a27be3e4a Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0009.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0009.png deleted file mode 100644 index 6addfe0a3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0010.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0010.png deleted file mode 100644 index 6addfe0a3..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0011.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0011.png deleted file mode 100644 index bde75b83d..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0011.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0011.webp new file mode 100644 index 000000000..630f8a823 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0012.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0012.png deleted file mode 100644 index 4a1906f40..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0012.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0012.webp new file mode 100644 index 000000000..3ab9c0d21 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0013.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0013.png deleted file mode 100644 index 77843d46b..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0013.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0013.webp new file mode 100644 index 000000000..bfa1e4166 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0014.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0014.png deleted file mode 100644 index 3efa8149a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0014.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0014.webp new file mode 100644 index 000000000..5d33ddaef Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0015.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0015.png deleted file mode 100644 index 9d31686fc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0015.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0015.webp new file mode 100644 index 000000000..d2b5e00b1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0016.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0016.png deleted file mode 100644 index 2baea85d9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0016.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0016.webp new file mode 100644 index 000000000..f74e3f163 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0017.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0017.png deleted file mode 100644 index 2d55dbc9e..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0017.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0017.webp new file mode 100644 index 000000000..997f50767 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0018.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0018.png deleted file mode 100644 index c10291f25..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0018.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0018.webp new file mode 100644 index 000000000..e187a028c Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0019.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0019.png deleted file mode 100644 index 0f5c2544f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0019.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0019.webp new file mode 100644 index 000000000..359d8fc58 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0020.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0020.png deleted file mode 100644 index 4f5d51f6f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0020.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0020.webp new file mode 100644 index 000000000..84f34ac0f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0021.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0021.png deleted file mode 100644 index fcde4be21..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0021.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0021.webp new file mode 100644 index 000000000..82c0d301f Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0022.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0022.png deleted file mode 100644 index f81981d18..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0022.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0022.webp new file mode 100644 index 000000000..566dfe200 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0023.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0023.png deleted file mode 100644 index 99272ee12..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0023.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0023.webp new file mode 100644 index 000000000..46d46dba8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0024.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0024.png deleted file mode 100644 index 1d3987069..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_swipeup0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0001.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0001.png deleted file mode 100644 index 80b4b82ce..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0001.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0001.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0001.webp new file mode 100644 index 000000000..1ed4a5fe1 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0001.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0002.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0002.png deleted file mode 100644 index 446465d79..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0002.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0002.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0002.webp new file mode 100644 index 000000000..cac64b3c4 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0002.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0003.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0003.png deleted file mode 100644 index c39466ba8..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0003.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0003.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0003.webp new file mode 100644 index 000000000..f11b0b534 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0003.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0004.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0004.png deleted file mode 100644 index f07d134fe..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0004.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0004.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0004.webp new file mode 100644 index 000000000..5519a680d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0004.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0005.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0005.png deleted file mode 100644 index 62d506096..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0005.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0005.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0005.webp new file mode 100644 index 000000000..6c9bcb497 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0005.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0006.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0006.png deleted file mode 100644 index 0b399f173..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0006.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0006.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0006.webp new file mode 100644 index 000000000..425feab8d Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0006.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0007.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0007.png deleted file mode 100644 index ce61d84ae..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0007.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0007.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0007.webp new file mode 100644 index 000000000..76a48e9ca Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0007.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0008.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0008.png deleted file mode 100644 index a2bde4207..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0008.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0008.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0008.webp new file mode 100644 index 000000000..de6d1f2e2 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0008.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0009.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0009.png deleted file mode 100644 index 166b7d69f..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0009.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0009.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0009.webp new file mode 100644 index 000000000..54cdb9912 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0009.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0010.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0010.png deleted file mode 100644 index dbe56831c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0010.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0010.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0010.webp new file mode 100644 index 000000000..f9307cfbb Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0010.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0011.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0011.png deleted file mode 100644 index 478aa5e08..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0011.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0011.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0011.webp new file mode 100644 index 000000000..0322f2388 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0011.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0012.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0012.png deleted file mode 100644 index 7e9a46bba..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0012.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0012.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0012.webp new file mode 100644 index 000000000..64e18a9b8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0012.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0013.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0013.png deleted file mode 100644 index 8f0688617..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0013.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0013.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0013.webp new file mode 100644 index 000000000..abd9b59af Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0013.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0014.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0014.png deleted file mode 100644 index 610068a5a..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0014.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0014.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0014.webp new file mode 100644 index 000000000..6c1eef165 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0014.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0015.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0015.png deleted file mode 100644 index 7b08196fc..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0015.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0015.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0015.webp new file mode 100644 index 000000000..3239787b0 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0015.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0016.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0016.png deleted file mode 100644 index 2fbe13019..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0016.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0016.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0016.webp new file mode 100644 index 000000000..7b3dbd6e9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0016.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0017.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0017.png deleted file mode 100644 index 03760142c..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0017.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0017.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0017.webp new file mode 100644 index 000000000..f5efeb67e Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0017.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0018.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0018.png deleted file mode 100644 index 31737cea2..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0018.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0018.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0018.webp new file mode 100644 index 000000000..7b8379d13 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0018.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0019.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0019.png deleted file mode 100644 index eef6f3ed7..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0019.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0019.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0019.webp new file mode 100644 index 000000000..cf77e8cd9 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0019.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0020.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0020.png deleted file mode 100644 index 8723e1522..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0020.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0020.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0020.webp new file mode 100644 index 000000000..80abde9d8 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0020.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0021.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0021.png deleted file mode 100644 index a1275eea9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0021.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0021.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0021.webp new file mode 100644 index 000000000..e7a5c3752 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0021.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0022.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0022.png deleted file mode 100644 index f8358d217..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0022.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0022.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0022.webp new file mode 100644 index 000000000..7be3e7849 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0022.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0023.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0023.png deleted file mode 100644 index 4ac803fb4..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0023.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0023.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0023.webp new file mode 100644 index 000000000..4a1c3d99b Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0023.webp differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0024.png b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0024.png deleted file mode 100644 index 3b88a60b9..000000000 Binary files a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0024.png and /dev/null differ diff --git a/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0024.webp b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0024.webp new file mode 100644 index 000000000..5577f8b71 Binary files /dev/null and b/dasherdancer/src/main/res/drawable-nodpi/snowman_tap0024.webp differ diff --git a/dasherdancer/src/main/res/drawable-v21/dasher_ripple.xml b/dasherdancer/src/main/res/drawable-v21/dasher_ripple.xml index 2fa9183a8..6d9a22028 100644 --- a/dasherdancer/src/main/res/drawable-v21/dasher_ripple.xml +++ b/dasherdancer/src/main/res/drawable-v21/dasher_ripple.xml @@ -1,12 +1,12 @@ - + tools:context="com.google.android.apps.santatracker.dasherdancer.DasherDancerActivity"> - - - - + android:id="@+id/character_pager" + android:layout_width="match_parent" + android:layout_height="match_parent" /> - - - + + + - - - + android:layout_gravity="right" + android:adjustViewBounds="true" + android:background="@null" + android:onClick="onChangeClick" + android:scaleType="center" + android:src="@drawable/btn_select_character_pressable" /> + + + + + + + + + + + + diff --git a/dasherdancer/src/main/res/values-hdpi/dasher_dancer_values.xml b/dasherdancer/src/main/res/values-hdpi/dasher_dancer_values.xml index ce3ebd1c2..2bf893538 100644 --- a/dasherdancer/src/main/res/values-hdpi/dasher_dancer_values.xml +++ b/dasherdancer/src/main/res/values-hdpi/dasher_dancer_values.xml @@ -1,12 +1,12 @@ - - - Dasher Dancer - diff --git a/dasherdancer/src/main/res/values/strings_analytics.xml b/dasherdancer/src/main/res/values/strings_analytics.xml index 9213f448e..0c9c11639 100644 --- a/dasherdancer/src/main/res/values/strings_analytics.xml +++ b/dasherdancer/src/main/res/values/strings_analytics.xml @@ -1,21 +1,19 @@ - - + --> Dasher Dancer Dasher Dancer Characters Changed diff --git a/docs/village.png b/docs/village.png new file mode 100644 index 000000000..5d011c526 Binary files /dev/null and b/docs/village.png differ diff --git a/doodles-lib/build.gradle b/doodles-lib/build.gradle new file mode 100644 index 000000000..93876fcb5 --- /dev/null +++ b/doodles-lib/build.gradle @@ -0,0 +1,38 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://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. + */ + +apply plugin: 'com.android.library' + +android { + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.tools + + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + } +} + +dependencies { + implementation project(":common") + + implementation rootProject.ext.appCompat + implementation rootProject.ext.firebaseConfig + implementation rootProject.ext.firebaseCore + implementation rootProject.ext.firebaseAppinvite + + api fileTree(dir: 'libs', include: ['*.jar']) +} diff --git a/doodles-lib/src/main/AndroidManifest.xml b/doodles-lib/src/main/AndroidManifest.xml new file mode 100644 index 000000000..aeea6a59d --- /dev/null +++ b/doodles-lib/src/main/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/BaseDoodleActivity.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/BaseDoodleActivity.java new file mode 100644 index 000000000..f61405edc --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/BaseDoodleActivity.java @@ -0,0 +1,96 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles; + +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.DOODLE_LAUNCHED; + +import android.app.Fragment; +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.os.Bundle; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleDebugLogger; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogTimer; +import com.google.android.apps.santatracker.doodles.shared.views.GameFragment; +import com.google.android.apps.santatracker.games.OnDemandActivity; +import com.google.android.apps.santatracker.invites.AppInvitesFragment; +import com.google.android.apps.santatracker.util.MeasurementManager; +import com.google.firebase.analytics.FirebaseAnalytics; + +/** Base activity for doodle games */ +public abstract class BaseDoodleActivity extends OnDemandActivity { + + private AppInvitesFragment appInvitesFragment; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_view); + + // Setup Analytics + FirebaseAnalytics analytics = FirebaseAnalytics.getInstance(this); + int stringResource = getAnalyticsStringResource(); + MeasurementManager.recordScreenView(analytics, getString(stringResource)); + + appInvitesFragment = AppInvitesFragment.getInstance(this); + + // Setup Logging + DoodleDebugLogger logger = new DoodleDebugLogger(); + String gameType = getGameType(); + + // Setup Fragment + Fragment fragment = makeFragment(logger); + + // Log fragment returned + logger.logGameLaunchEvent(this, gameType, DOODLE_LAUNCHED); + DoodleLogTimer.getInstance().reset(); + + FragmentManager fragmentManager = getFragmentManager(); + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.add(R.id.activity_wrapper, fragment, "menu"); + fragmentTransaction.commit(); + } + + protected abstract String getGameType(); + + protected abstract int getAnalyticsStringResource(); + + protected abstract Fragment makeFragment(DoodleDebugLogger logger); + + @Override + public void onBackPressed() { + // Get the current game fragment + final Fragment fragment = getFragmentManager().findFragmentById(R.id.activity_wrapper); + + if (fragment instanceof GameFragment) { + GameFragment gameFragment = (GameFragment) fragment; + + // Pause the game, or go back to the home screen if the game is paused already + if (gameFragment.isGamePaused() + || !gameFragment.isFinishedLoading() + || gameFragment.isGameOver()) { + super.onBackPressed(); + } else { + gameFragment.onBackPressed(); + } + } else { + super.onBackPressed(); + } + } + + public AppInvitesFragment getAppInvitesFragment() { + return appInvitesFragment; + } +} diff --git a/doodles/src/main/java/com/google/android/apps/santatracker/doodles/Config.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/Config.java similarity index 81% rename from doodles/src/main/java/com/google/android/apps/santatracker/doodles/Config.java rename to doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/Config.java index 2167fe198..816547b68 100644 --- a/doodles/src/main/java/com/google/android/apps/santatracker/doodles/Config.java +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/Config.java @@ -1,11 +1,11 @@ /* - * Copyright (C) 2016 Google Inc. All Rights Reserved. + * Copyright 2019. Google LLC * * 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 + * https://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, @@ -17,12 +17,10 @@ import com.google.firebase.remoteconfig.FirebaseRemoteConfig; -/** - * Get Firebase Remote config values easily. - */ +/** Get Firebase Remote config values easily. */ public class Config { - /** Density of swimming obstacles **/ + /** Density of swimming obstacles */ public final double SWIMMING_OBSTACLE_DENSITY; public Config() { @@ -30,5 +28,4 @@ public Config() { SWIMMING_OBSTACLE_DENSITY = config.getDouble("SwimmingObstacleDensity"); } - } diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/AndroidUtils.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/AndroidUtils.java new file mode 100644 index 000000000..ffa734455 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/AndroidUtils.java @@ -0,0 +1,178 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +import android.app.Activity; +import android.content.Context; +import android.content.ContextWrapper; +import android.content.Intent; +import android.content.res.Resources; +import android.graphics.Point; +import android.os.Bundle; +import android.os.Environment; +import android.text.Html; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.WindowManager; +import com.google.android.apps.santatracker.util.SantaLog; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** Utility functions to make it easier to interact with Android APIs. */ +public final class AndroidUtils { + private static final String TAG = AndroidUtils.class.getSimpleName(); + + private AndroidUtils() { + // Don't instantiate this class. + } + + public static Activity getActivityFromContext(Context context) { + while (context instanceof ContextWrapper) { + if (context instanceof Activity) { + return (Activity) context; + } + context = ((ContextWrapper) context).getBaseContext(); + } + return null; + } + + public static void allowScreenToTurnOff(Context context) { + getActivityFromContext(context) + .getWindow() + .clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + + public static void forceScreenToStayOn(Context context) { + getActivityFromContext(context) + .getWindow() + .addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + + public static Point getScreenSize() { + DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics(); + return new Point(displayMetrics.widthPixels, displayMetrics.heightPixels); + } + + public static float dipToPixels(float dipValue) { + DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); + return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics); + } + + public static float pixelsToDips(float pixelValue) { + DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); + float dip = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, metrics); + return pixelValue / dip; + } + + public static boolean isExternalStorageWritable() { + String state = Environment.getExternalStorageState(); + return Environment.MEDIA_MOUNTED.equals(state); + } + + public static boolean isExternalStorageReadable() { + String state = Environment.getExternalStorageState(); + return Environment.MEDIA_MOUNTED.equals(state) + || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state); + } + + /** Handles loading text from our resources, including interpreting and tags. */ + public static CharSequence getText(Resources res, int id, Object... formatArgs) { + try { + return Html.fromHtml(res.getString(id, formatArgs)); + } catch (java.util.MissingFormatArgumentException e) { + SantaLog.e(TAG, "unable to format string id: " + id, e); + } + return ""; + } + + /** + * Re-orients a coordinate system based on default device rotation. Implementation based on: + * http://goo.gl/kRajPd + * + * @param displayRotation Display rotation, from Display.getRotation() + * @param eventValues Event values gathered from the raw sensor event. + * @return The adjusted event values, with display rotation taken into account. + */ + public static float[] getAdjustedAccelerometerValues(int displayRotation, float[] eventValues) { + float[] adjustedValues = new float[3]; + final int axisSwap[][] = { + {1, -1, 0, 1}, // ROTATION_0 + {-1, -1, 1, 0}, // ROTATION_90 + {-1, 1, 0, 1}, // ROTATION_180 + {1, 1, 1, 0} // ROTATION_270 + }; + + final int[] axisFactors = axisSwap[displayRotation]; + adjustedValues[0] = ((float) axisFactors[0]) * eventValues[axisFactors[2]]; + adjustedValues[1] = ((float) axisFactors[1]) * eventValues[axisFactors[3]]; + adjustedValues[2] = eventValues[2]; + + return adjustedValues; + } + + /** + * Reads all bytes from an input stream into a byte array. Does not close the stream. + * + * @param in the input stream to read from + * @return a byte array containing all the bytes from the stream + * @throws IOException if an I/O error occurs + */ + public static byte[] toByteArray(InputStream in) throws IOException { + // Presize the ByteArrayOutputStream since we know how large it will need + // to be, unless that value is less than the default ByteArrayOutputStream + // size (32). + ByteArrayOutputStream out = new ByteArrayOutputStream(Math.max(32, in.available())); + copy(in, out); + return out.toByteArray(); + } + + /** + * Copies all bytes from the input stream to the output stream. Does not close or flush either + * stream. + * + * @param from the input stream to read from + * @param to the output stream to write to + * @return the number of bytes copied + * @throws IOException if an I/O error occurs + */ + private static long copy(InputStream from, OutputStream to) throws IOException { + byte[] buf = new byte[8192]; + long total = 0; + while (true) { + int r = from.read(buf); + if (r == -1) { + break; + } + to.write(buf, 0, r); + total += r; + } + return total; + } + + public static void finishActivity(Context context) { + getActivityFromContext(context).finish(); + } + + public static void finishActivityWithResult(Context context, int resultCode, Bundle extras) { + Activity activity = getActivityFromContext(context); + Intent intent = activity.getIntent(); + intent.putExtras(extras); + activity.setResult(resultCode, intent); + activity.finish(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/BitmapCache.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/BitmapCache.java new file mode 100644 index 000000000..302eff661 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/BitmapCache.java @@ -0,0 +1,51 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +import android.graphics.Bitmap; +import android.util.Pair; +import java.util.HashMap; + +/** + * Cache of bitmaps (and sampleSizes), mapped by resource ID and frame number. + * + *

+ * + *

Note: This cache must be manually cleared in order to free up memory. This is under the + * assumption that any bitmaps currently used by the app should be in the cache. + */ +public class BitmapCache { + public static final String TAG = BitmapCache.class.getSimpleName(); + + private HashMap> bitmapCache = new HashMap<>(); + + private static String bitmapCacheKey(int id, int frameNumber) { + return id + ":" + frameNumber; + } + + public Pair getBitmapFromCache(int id, int frame) { + Pair pair = bitmapCache.get(bitmapCacheKey(id, frame)); + return pair; + } + + public void putBitmapInCache(Bitmap bitmap, int id, int frame, int sampleSize) { + bitmapCache.put(bitmapCacheKey(id, frame), new Pair(bitmap, sampleSize)); + } + + public void clear() { + bitmapCache.clear(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/CallbackProcess.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/CallbackProcess.java new file mode 100644 index 000000000..4178c80f0 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/CallbackProcess.java @@ -0,0 +1,34 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +/** A process which should be run once and then be finished. */ +public abstract class CallbackProcess extends Process { + private boolean didRun = false; + + @Override + public void update(float deltaMs) { + if (!didRun) { + updateLogic(deltaMs); + didRun = true; + } + } + + @Override + public boolean isFinished() { + return didRun; + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/ColoredRectangleActor.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/ColoredRectangleActor.java new file mode 100644 index 000000000..0ebeb0cd1 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/ColoredRectangleActor.java @@ -0,0 +1,219 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared; + +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Paint.Cap; +import android.graphics.Paint.Style; +import com.google.android.apps.santatracker.doodles.shared.actor.Actor; +import com.google.android.apps.santatracker.doodles.shared.physics.Util; +import java.util.HashMap; +import java.util.Map; +import org.json.JSONException; +import org.json.JSONObject; + +/** An actor class which represents an arbitrarily-colored rectangle. */ +public class ColoredRectangleActor extends Actor implements Touchable { + /* Default color is black*/ + public static final String UNSPECIFIED = "unspecified"; + + /* Golf colors */ + public static final String TEE_GREEN = "tee"; + public static final String FAIRWAY_GREEN = "fairway"; + + /* Swimming colors */ + public static final String DISTANCE_30M = "30m"; + public static final String DISTANCE_50M = "50m"; + public static final String DISTANCE_100M = "100m"; + public static final String DISTANCE_LEVEL_LENGTH = "level length"; + public static final String DISTANCE_PR = "pr"; + public static final String STARTING_BLOCK = "start"; + + public static final String DIMENS_X_KEY = "dimens x"; + public static final String DIMENS_Y_KEY = "dimens y"; + + public static final Map TYPE_TO_COLOR_MAP; + + static { + TYPE_TO_COLOR_MAP = new HashMap<>(); + /* Golf */ + TYPE_TO_COLOR_MAP.put(TEE_GREEN, Constants.LIGHT_GREEN); + TYPE_TO_COLOR_MAP.put(FAIRWAY_GREEN, Constants.DARK_GREEN); + /* Swimming */ + TYPE_TO_COLOR_MAP.put(DISTANCE_30M, 0x44cd7f32); + TYPE_TO_COLOR_MAP.put(DISTANCE_50M, 0x44c0c0c0); + TYPE_TO_COLOR_MAP.put(DISTANCE_100M, 0x44ffd700); + TYPE_TO_COLOR_MAP.put(DISTANCE_LEVEL_LENGTH, 0x44ffffff); + TYPE_TO_COLOR_MAP.put(DISTANCE_PR, 0x4400cc00); + TYPE_TO_COLOR_MAP.put(STARTING_BLOCK, 0xff4993a4); + TYPE_TO_COLOR_MAP.put(UNSPECIFIED, 0xff000000); + } + + public String type; + public Vector2D dimens; + private Direction selectedDirection; + private Paint paint; + private Paint midpointPaint; + private Vector2D upMidpoint = Vector2D.get(); + private Vector2D downMidpoint = Vector2D.get(); + private Vector2D leftMidpoint = Vector2D.get(); + private Vector2D rightMidpoint = Vector2D.get(); + + public ColoredRectangleActor(Vector2D position, Vector2D dimens) { + this(position, dimens, UNSPECIFIED); + } + + public ColoredRectangleActor(Vector2D position, Vector2D dimens, String type) { + super(position, Vector2D.get()); + + this.dimens = dimens; + this.type = type; + this.zIndex = -1; + + if (type.equals(FAIRWAY_GREEN)) { + this.zIndex = -2; + } + + selectedDirection = Direction.NONE; + paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(TYPE_TO_COLOR_MAP.get(type)); + paint.setStyle(Style.FILL); + + midpointPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + midpointPaint.setColor(Color.WHITE); + + updateExtents(); + } + + public static ColoredRectangleActor fromJSON(JSONObject json) throws JSONException { + String type = json.getString(Actor.TYPE_KEY); + Vector2D position = + Vector2D.get((float) json.optDouble(X_KEY, 0), (float) json.optDouble(Y_KEY, 0)); + Vector2D dimens = + Vector2D.get( + (float) json.optDouble(DIMENS_X_KEY, 0), + (float) json.optDouble(DIMENS_Y_KEY, 0)); + return new ColoredRectangleActor(position, dimens, type); + } + + @Override + public void draw(Canvas canvas) { + canvas.drawRect( + position.x, position.y, position.x + dimens.x, position.y + dimens.y, paint); + } + + public void setStyle(Style style) { + paint.setStyle(style); + } + + public void setStrokeWidth(float width) { + paint.setStrokeWidth(width); + paint.setStrokeCap(Cap.ROUND); + } + + public void setColor(int color) { + paint.setColor(color); + } + + @Override + public String getType() { + return type; + } + + @Override + public boolean canHandleTouchAt(Vector2D worldCoords, float cameraScale) { + Vector2D lowerRight = Vector2D.get(position).add(dimens); + boolean retVal = + Util.pointIsWithinBounds(position, lowerRight, worldCoords) + || worldCoords.distanceTo(upMidpoint) < Constants.SELECTION_RADIUS + || worldCoords.distanceTo(downMidpoint) < Constants.SELECTION_RADIUS + || worldCoords.distanceTo(leftMidpoint) < Constants.SELECTION_RADIUS + || worldCoords.distanceTo(rightMidpoint) < Constants.SELECTION_RADIUS; + + lowerRight.release(); + return retVal; + } + + @Override + public void startTouchAt(Vector2D worldCoords, float cameraScale) { + if (worldCoords.distanceTo(upMidpoint) < Constants.SELECTION_RADIUS) { + selectedDirection = Direction.UP; + } else if (worldCoords.distanceTo(downMidpoint) < Constants.SELECTION_RADIUS) { + selectedDirection = Direction.DOWN; + } else if (worldCoords.distanceTo(leftMidpoint) < Constants.SELECTION_RADIUS) { + selectedDirection = Direction.LEFT; + } else if (worldCoords.distanceTo(rightMidpoint) < Constants.SELECTION_RADIUS) { + selectedDirection = Direction.RIGHT; + } else { + selectedDirection = Direction.NONE; + } + } + + @Override + public boolean handleMoveEvent(Vector2D delta) { + if (selectedDirection == Direction.NONE) { + position.subtract(delta); + } else if (selectedDirection == Direction.UP) { + position.y -= delta.y; + dimens.y += delta.y; + } else if (selectedDirection == Direction.DOWN) { + dimens.y -= delta.y; + } else if (selectedDirection == Direction.LEFT) { + position.x -= delta.x; + dimens.x += delta.x; + } else { + // Direction.RIGHT + dimens.x -= delta.x; + } + updateExtents(); + return true; + } + + @Override + public boolean handleLongPress() { + return false; + } + + @Override + public JSONObject toJSON() throws JSONException { + JSONObject json = new JSONObject(); + json.put(TYPE_KEY, getType()); + json.put(X_KEY, position.x); + json.put(Y_KEY, position.y); + json.put(DIMENS_X_KEY, dimens.x); + json.put(DIMENS_Y_KEY, dimens.y); + return json; + } + + private void updateExtents() { + upMidpoint.set(position).add(dimens.x / 2, 0); + downMidpoint.set(position).add(dimens.x / 2, dimens.y); + leftMidpoint.set(position).add(0, dimens.y / 2); + rightMidpoint.set(position).add(dimens.x, dimens.y / 2); + } + + /** A direction used to pull the boundaries of the colored rectangle. */ + private enum Direction { + NONE, + UP, + DOWN, + LEFT, + RIGHT, + } +} diff --git a/doodles/src/main/java/com/google/android/apps/santatracker/doodles/tilt/Constants.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Constants.java similarity index 76% rename from doodles/src/main/java/com/google/android/apps/santatracker/doodles/tilt/Constants.java rename to doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Constants.java index 2da86a591..e51115a8a 100644 --- a/doodles/src/main/java/com/google/android/apps/santatracker/doodles/tilt/Constants.java +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Constants.java @@ -1,11 +1,11 @@ /* - * Copyright (C) 2016 Google Inc. All Rights Reserved. + * Copyright 2019. Google LLC * * 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 + * https://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, @@ -13,16 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.google.android.apps.santatracker.doodles.tilt; +package com.google.android.apps.santatracker.doodles.shared; -/** - * Constants from deleted games that were unsafe to delete. - */ +/** Constants from deleted games that were unsafe to delete. */ public class Constants { public static final float SELECTION_RADIUS = 70; public static final int DARK_GREEN = 0xff9b953d; public static final int LIGHT_GREEN = 0xffb1af4b; public static final float GRAVITY = 4000.0f; - } diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Debug.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Debug.java new file mode 100644 index 000000000..dbdf061ea --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Debug.java @@ -0,0 +1,64 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +import android.content.res.Resources; +import com.google.android.apps.santatracker.doodles.shared.actor.Actor; +import com.google.android.apps.santatracker.doodles.shared.actor.SpriteActor; +import com.google.android.apps.santatracker.doodles.shared.animation.AnimatedSprite; +import com.google.android.apps.santatracker.doodles.shared.animation.Sprites; + +/** Debug flags (collected in one place). */ +public class Debug { + // Draw positions of things as they move around. Tennis only for now. + public static final boolean DRAW_POSITIONS = false; + + // Draw the targets that the players hit towards. Tennis only for now. + public static final boolean DRAW_TARGETS = false; + + // Draw the location of each hit. Tennis only for now. + public static final boolean MARK_HITS = false; + + // Play without user input. Tennis only for now. + public static final boolean AUTO_PLAY = false; + + // Slow down or speed up everything (scales deltaMs). + public static final float SPEED_MULTIPLIER = 1f; + + // Skip frames (slows game down without affecting deltaMs). + public static final float FRAME_SKIP = 0; + + public static final boolean SHOW_SECONDARY_MENU_ICONS = false; + + public static final boolean DRAW_COLLISION_BOUNDS = false; + + // Return a SpriteActor of an "X" marker, centered over (x, y). For marking positions for + // debugging. + public static SpriteActor makeDebugMarkerX(Resources resources, float x, float y) { + AnimatedSprite sprite = AnimatedSprite.fromFrames(resources, Sprites.debug_marker); + return new SpriteActor( + sprite, + Vector2D.get(x - sprite.frameWidth / 2, y - sprite.frameHeight / 2), + Vector2D.get(0, 0)); + } + + // Return a tiny rectangle actor, centered over (x, y). For marking positions for debugging. + public static Actor makeDebugMarkerPoint(float x, float y) { + float size = 3; + return new ColoredRectangleActor( + Vector2D.get(x - size / 2, y - size / 2), Vector2D.get(size, size), "fairway"); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/EventBus.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/EventBus.java new file mode 100644 index 000000000..4b71d3447 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/EventBus.java @@ -0,0 +1,117 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** A simple event bus for passing events between objects. */ +public class EventBus { + public static final int VIBRATE = 0; + public static final int SCORE_CHANGED = 1; + public static final int SHAKE_SCREEN = 2; + public static final int BRONZE = 3; + public static final int SILVER = 4; + public static final int GOLD = 5; + public static final int SWIMMING_DIVE = 6; + public static final int GAME_STATE_CHANGED = 7; + public static final int PLAY_SOUND = 8; + public static final int PAUSE_SOUND = 9; + public static final int MUTE_SOUNDS = 10; + public static final int GAME_OVER = 11; + public static final int GAME_LOADED = 12; + private static EventBus instance; + private final Object lock = new Object(); + // Listeners for specific events. + private Map> specificListeners; + // Listeners for all events. + private Set globalListeners; + + private EventBus() { + globalListeners = new HashSet<>(); + specificListeners = new HashMap<>(); + } + + public static EventBus getInstance() { + if (instance == null) { + instance = new EventBus(); + } + return instance; + } + + /** Register for a specific event. Listener will only be called for events of that type. */ + public void register(EventBusListener listener, int type) { + synchronized (lock) { + if (!specificListeners.containsKey(type)) { + specificListeners.put(type, new HashSet()); + } + specificListeners.get(type).add(listener); + } + } + + /** Register for all events. Listener will be called for events of any type. */ + public void register(EventBusListener listener) { + synchronized (lock) { + globalListeners.add(listener); + } + } + + /** Send an event without data. */ + public void sendEvent(int type) { + sendEvent(type, null); + } + + /** Send an event with data. Type of the data is up to the caller. */ + public void sendEvent(int type, Object data) { + synchronized (lock) { + try { + Set listeners = specificListeners.get(type); + if (listeners != null) { + for (EventBusListener listener : listeners) { + listener.onEventReceived(type, data); + } + } + for (EventBusListener listener : globalListeners) { + listener.onEventReceived(type, data); + } + } catch (ClassCastException e) { + // This was happening when 2 games were running at the same time (which shouldn't be + // possible, but was happening in monkey testing). Game A's listener would try + // casting + // the data arg to the expected type for Game A, but this would fail if Game B sent + // a data + // of a different type. + // + // Ignore this and continue running. + } + } + } + + /** Removes all the listeners from this EventBus. */ + public void clearListeners() { + synchronized (lock) { + specificListeners.clear(); + globalListeners.clear(); + } + } + + /** Interface for objects which want to listen to the event bus. */ + public interface EventBusListener { + void onEventReceived(int type, Object data); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/ExternalStoragePermissions.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/ExternalStoragePermissions.java new file mode 100644 index 000000000..60f885827 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/ExternalStoragePermissions.java @@ -0,0 +1,28 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +/** Contains data about whether or not external storage is readable or writable. */ +public class ExternalStoragePermissions { + + public boolean isExternalStorageReadable() { + return AndroidUtils.isExternalStorageReadable(); + } + + public boolean isExternalStorageWritable() { + return AndroidUtils.isExternalStorageWritable(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/GameLoop.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/GameLoop.java new file mode 100644 index 000000000..b1617d96a --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/GameLoop.java @@ -0,0 +1,26 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +/** Interface to handle the updating of game logic. */ +public interface GameLoop { + + /** + * @param deltaMs Milliseconds since the last time update was called. Will be capped to avoid + * big jumps. + */ + void update(float deltaMs); +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/GameType.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/GameType.java new file mode 100644 index 000000000..0f42ee6ec --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/GameType.java @@ -0,0 +1,26 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +/** + * Enum for all the different game types we have. Used by each type to get their proper history + * content. + */ +public enum GameType { + SWIMMING, + WATER_POLO, + PURSUIT, +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/HistoryManager.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/HistoryManager.java new file mode 100644 index 000000000..27ed4ca80 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/HistoryManager.java @@ -0,0 +1,302 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +import android.content.Context; +import android.os.AsyncTask; +import com.google.android.apps.santatracker.util.SantaLog; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Maintains the history and stats of what the user has accomplished. + * + *

+ * + *

Note that this class handles the serializing into JSON instead of each game. This was done to + * make it easier to make a game picker that showed your status on each game. Since there are + * canonical types it would then know how to read them. We add a setArbitraryData and + * getArbitaryData for any game that wants to put other kind of information in. + */ +public class HistoryManager { + public static final String BEST_PLACE_KEY = "place"; + public static final String BEST_STAR_COUNT_KEY = "stars"; + public static final String BEST_TIME_MILLISECONDS_KEY = "time"; + public static final String BEST_SCORE_KEY = "score"; + public static final String BEST_DISTANCE_METERS_KEY = "distance"; + public static final String ARBITRARY_DATA_KEY = "arb"; + private static final String TAG = HistoryManager.class.getSimpleName(); + private static final String FILENAME = "history.json"; + + private final Context context; + private volatile JSONObject history; + private HistoryListener listener; + + /** Creates a history manager. HistoryListener can be null. */ + public HistoryManager(Context context, HistoryListener listener) { + this.context = context; + this.listener = listener; + // While history is loading from disk, we ignore any changes clients might ask for. + history = null; + load(); + } + + public void setListener(HistoryListener listener) { + this.listener = listener; + } + + /** Gets the json object for a particular game type. */ + private JSONObject getGameObject(GameType gameType) throws JSONException { + if (history == null) { + throw new JSONException("null history"); + } + JSONObject gameObject = history.optJSONObject(gameType.toString()); + if (gameObject == null) { + gameObject = new JSONObject(); + } + return gameObject; + } + + /** + * Set the best place (1st, 2nd, 3rd) for a game type. NOTE: It's expected for the client to + * figure out if it is the best place. + */ + public void setBestPlace(GameType gameType, int place) { + try { + JSONObject gameObject = getGameObject(gameType); + gameObject.put(BEST_PLACE_KEY, place); + history.put(gameType.toString(), gameObject); + } catch (JSONException e) { + SantaLog.e(TAG, "error setting place", e); + } + } + + /** ********************** Setters **************************** */ + + /** + * Set the best star count for a game type. NOTE: It's expected for the client to figure out if + * it is the best star count. + */ + public void setBestStarCount(GameType gameType, int count) { + try { + JSONObject gameObject = getGameObject(gameType); + gameObject.put(BEST_STAR_COUNT_KEY, count); + history.put(gameType.toString(), gameObject); + } catch (JSONException e) { + SantaLog.e(TAG, "error setting place", e); + } + } + + /** + * Set the best time for a game type. NOTE: it's expected for the client to figure out if it is + * the best time since some will want bigger and some will want smaller numbers. + */ + public void setBestTime(GameType gameType, long timeInMilliseconds) { + try { + JSONObject gameObject = getGameObject(gameType); + gameObject.put(BEST_TIME_MILLISECONDS_KEY, timeInMilliseconds); + history.put(gameType.toString(), gameObject); + } catch (JSONException e) { + SantaLog.e(TAG, "error setting time", e); + } + } + + /** + * Set the best score for a game type. NOTE: it's expected for the client to figure out if it is + * the best score since some will want bigger and some will want smaller numbers. + */ + public void setBestScore(GameType gameType, double score) { + try { + JSONObject gameObject = getGameObject(gameType); + gameObject.put(BEST_SCORE_KEY, score); + history.put(gameType.toString(), gameObject); + } catch (JSONException e) { + SantaLog.e(TAG, "error setting score", e); + } + } + + /** + * Set the best distance for a game type. NOTE: it's expected for the client to figure out if it + * is the best distance since some will want bigger and some will want smaller numbers. + */ + public void setBestDistance(GameType gameType, double distanceInMeters) { + try { + JSONObject gameObject = getGameObject(gameType); + gameObject.put(BEST_DISTANCE_METERS_KEY, distanceInMeters); + history.put(gameType.toString(), gameObject); + } catch (JSONException e) { + SantaLog.e(TAG, "error setting distance", e); + } + } + + /** Sets an arbitrary jsonObject a game might want. */ + public void setArbitraryData(GameType gameType, JSONObject data) { + try { + JSONObject gameObject = getGameObject(gameType); + gameObject.put(ARBITRARY_DATA_KEY, data); + history.put(gameType.toString(), gameObject); + } catch (JSONException e) { + SantaLog.e(TAG, "error setting distance", e); + } + } + + /** Returns the best place so far. Null if no value has been given yet. */ + public Integer getBestPlace(GameType gameType) { + try { + JSONObject gameObject = getGameObject(gameType); + return gameObject.getInt(BEST_PLACE_KEY); + } catch (JSONException e) { + return null; + } + } + + /** ********************** Getters **************************** */ + + /** Returns the best star count so far. Null if no value has been given yet. */ + public Integer getBestStarCount(GameType gameType) { + try { + JSONObject gameObject = getGameObject(gameType); + return gameObject.getInt(BEST_STAR_COUNT_KEY); + } catch (JSONException e) { + return null; + } + } + + /** Returns the best time so far. Null if no value has been given yet. */ + public Long getBestTime(GameType gameType) { + try { + JSONObject gameObject = getGameObject(gameType); + return gameObject.getLong(BEST_TIME_MILLISECONDS_KEY); + } catch (JSONException e) { + return null; + } + } + + /** Returns the best score so far. Null if no value has been given yet. */ + public Double getBestScore(GameType gameType) { + try { + JSONObject gameObject = getGameObject(gameType); + return gameObject.getDouble(BEST_SCORE_KEY); + } catch (JSONException e) { + return null; + } + } + + /** Returns the best distance so far. Null if no value has been given yet. */ + public Double getBestDistance(GameType gameType) { + try { + JSONObject gameObject = getGameObject(gameType); + return gameObject.getDouble(BEST_DISTANCE_METERS_KEY); + } catch (JSONException e) { + return null; + } + } + + /** Returns arbitrary JSONObject a game might want. Null if no value has been given yet. */ + public JSONObject getArbitraryData(GameType gameType) { + try { + JSONObject gameObject = getGameObject(gameType); + return gameObject.getJSONObject(ARBITRARY_DATA_KEY); + } catch (JSONException e) { + return null; + } + } + + /** Saves the file in the background. */ + public void save() { + new AsyncTask() { + @Override + protected Void doInBackground(Void... params) { + try { + FileOutputStream outputStream = + context.openFileOutput(FILENAME, Context.MODE_PRIVATE); + byte[] bytes = history.toString().getBytes(); + outputStream.write(bytes); + outputStream.close(); + SantaLog.i(TAG, "Saved: " + history); + } catch (IOException e) { + SantaLog.w(TAG, "Couldn't save JSON at: " + FILENAME); + } catch (Exception e) { + SantaLog.w(TAG, "Crazy exception happened", e); + } + return null; + } + + @Override + protected void onPostExecute(Void result) { + if (listener != null) { + listener.onFinishedSaving(); + } + } + }.execute(); + } + + /** ******************** File Management ************************* */ + + /** + * Loads the history object from file. Then merges with any changes that might have occured + * while we waited for it to load. + */ + private void load() { + new AsyncTask() { + @Override + protected Void doInBackground(Void... params) { + try { + File file = new File(context.getFilesDir(), FILENAME); + int length = (int) file.length(); + if (length <= 0) { + history = new JSONObject(); + return null; + } + + byte[] bytes = new byte[length]; + FileInputStream inputStream = new FileInputStream(file); + inputStream.read(bytes); + inputStream.close(); + + history = new JSONObject(new String(bytes, "UTF-8")); + SantaLog.i(TAG, "Loaded: " + history); + } catch (JSONException e) { + SantaLog.w(TAG, "Couldn't create JSON for: " + FILENAME); + } catch (UnsupportedEncodingException e) { + SantaLog.d(TAG, "Couldn't decode: " + FILENAME); + } catch (IOException e) { + SantaLog.w(TAG, "Couldn't read history: " + FILENAME); + } + return null; + } + + @Override + protected void onPostExecute(Void result) { + if (listener != null) { + listener.onFinishedLoading(); + } + } + }.execute(); + } + + /** Listener for when the history is loaded. */ + public static interface HistoryListener { + public void onFinishedLoading(); + + public void onFinishedSaving(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/LogicRefreshThread.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/LogicRefreshThread.java new file mode 100644 index 000000000..f3b3b4a5c --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/LogicRefreshThread.java @@ -0,0 +1,100 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +import android.os.ConditionVariable; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; + +/** Thread subclass which handles refreshing the game logic. */ +public class LogicRefreshThread extends Thread { + private static final int REFRESH_MODEL = 0; + + // Wait at least this long between updates. + // Update at 120 FPS so that stutters due to draw-loop synchronization are less noticeable. + private static final int MODEL_INTERVAL_MS = 1000 / 60; + private final ConditionVariable handlerCreatedCV = new ConditionVariable(); + private Handler handler; + // Toggled in start/stop, and used in handleMessage to conditionally schedule the next refresh. + private volatile boolean running; + + private GameLoop gameLoop; + private long lastTick; + private int framesSkippedSinceLastUpdate = 0; + + public LogicRefreshThread() { + setPriority(Thread.MAX_PRIORITY); + } + + @Override + public void run() { + Looper.prepare(); + + handler = + new Handler() { + @Override + public void handleMessage(Message msg) { + if (running && gameLoop != null) { + if (msg.what == REFRESH_MODEL) { + float deltaMs = System.currentTimeMillis() - lastTick; + // Cap deltaMs. Better for game to appear to slow down than have + // skips/jumps. + deltaMs = Math.min(100, deltaMs); + deltaMs *= Debug.SPEED_MULTIPLIER; + lastTick = System.currentTimeMillis(); + + framesSkippedSinceLastUpdate++; + if (framesSkippedSinceLastUpdate >= Debug.FRAME_SKIP) { + framesSkippedSinceLastUpdate = 0; + if (running && gameLoop != null) { + gameLoop.update(deltaMs); + } + } + + // Wait different amounts of time depending on how much time the + // game loop took. + // Wait at least 1ms to avoid a mysterious memory leak. + long timeToUpdate = System.currentTimeMillis() - lastTick; + sendEmptyMessageDelayed( + REFRESH_MODEL, + Math.max(1, MODEL_INTERVAL_MS - timeToUpdate)); + } + } + } + }; + handlerCreatedCV.open(); + + Looper.loop(); + } + + public void startHandler(GameLoop gameLoop) { + this.gameLoop = gameLoop; + running = true; + lastTick = System.currentTimeMillis(); + + handlerCreatedCV.block(); + handler.sendEmptyMessage(REFRESH_MODEL); + } + + public void stopHandler() { + running = false; + gameLoop = null; + + handlerCreatedCV.block(); + handler.removeMessages(REFRESH_MODEL); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Process.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Process.java new file mode 100644 index 000000000..13dc90125 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Process.java @@ -0,0 +1,50 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +/** + * A generic class for running some piece of code. This class is most useful when used inside of a + * process chain, which allows you explicitly define portions of code which should be run in serial + * (generally inside of the update loop). + */ +public abstract class Process { + + public Process() {} + + /** + * The outer update function for this process. Note that, when implementing the logic for the + * process, updateLogic() should generally be overridden instead of update(). + * + * @param deltaMs + */ + public void update(float deltaMs) { + if (!isFinished()) { + updateLogic(deltaMs); + } + } + + public ProcessChain then(Process other) { + return new ProcessChain(this).then(other); + } + + public ProcessChain then(ProcessChain pc) { + return new ProcessChain(this).then(pc); + } + + public abstract void updateLogic(float deltaMs); + + public abstract boolean isFinished(); +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/ProcessChain.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/ProcessChain.java new file mode 100644 index 000000000..2c048bd96 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/ProcessChain.java @@ -0,0 +1,94 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.locks.ReentrantLock; + +/** + * A chain of processes, which are executed in the order in which they are added. When a process is + * finished, it is removed from the chain and the next process in line is executed. + */ +public class ProcessChain { + private final ReentrantLock lock = new ReentrantLock(); + private Queue processes; + + public ProcessChain(Process p) { + processes = new LinkedList<>(); + processes.add(p); + } + + public static void updateChains(List processChains, float deltaMs) { + // Remove finished chains. + for (int i = processChains.size() - 1; i >= 0; i--) { + ProcessChain chain = processChains.get(i); + if (chain.isFinished()) { + processChains.remove(i); + } + } + // Update still-running chains. + for (int i = 0; i < processChains.size(); i++) { + processChains.get(i).update(deltaMs); + } + } + + public ProcessChain then(Process p) { + lock.lock(); + try { + processes.add(p); + } finally { + lock.unlock(); + } + return this; + } + + public ProcessChain then(ProcessChain pc) { + lock.lock(); + try { + processes.addAll(pc.processes); + } finally { + lock.unlock(); + } + return this; + } + + public void update(float deltaMs) { + lock.lock(); + try { + final Process activeProcess = processes.peek(); + if (activeProcess != null) { + activeProcess.update(deltaMs); + + if (activeProcess.isFinished()) { + processes.remove(); + } + } + } finally { + lock.unlock(); + } + } + + public boolean isFinished() { + lock.lock(); + try { + return processes.isEmpty(); + } finally { + lock.unlock(); + } + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Touchable.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Touchable.java new file mode 100644 index 000000000..26c0c40c6 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Touchable.java @@ -0,0 +1,38 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +/** An actor which can be touched in the level editor. */ +public interface Touchable { + boolean canHandleTouchAt(Vector2D worldCoords, float cameraScale); + + void startTouchAt(Vector2D worldCoords, float cameraScale); + + /** + * Handle a move event internally. + * + * @param delta the movement vector + * @return true if the move event has been handled, false otherwise. + */ + boolean handleMoveEvent(Vector2D delta); + + /** + * Handle a long press internally. + * + * @return true if the long press has been handled, false otherwise. + */ + boolean handleLongPress(); +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/UIRefreshHandler.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/UIRefreshHandler.java new file mode 100644 index 000000000..8921d0fcd --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/UIRefreshHandler.java @@ -0,0 +1,64 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +import android.os.Handler; +import android.os.Message; +import android.view.View; + +/** Handler subclass which handles refreshing the UI. */ +public class UIRefreshHandler extends Handler { + private static final int REFRESH_UI_MESSAGE = 0; + // Refresh the UI at a higher rate so that we can keep the drawing pipeline filled. + private static final int UI_INTERVAL_MS = 1000 / 120; + + // Toggled in start/stop, and used in handleMessage to conditionally schedule the next refresh. + private volatile boolean running; + + private View view; + + public UIRefreshHandler() {} + + public void start(View view) { + running = true; + this.view = view; + sendEmptyMessage(REFRESH_UI_MESSAGE); + } + + public void stop() { + running = false; + view = null; + removeMessages(REFRESH_UI_MESSAGE); + } + + @Override + public void handleMessage(Message msg) { + if (running) { + if (msg.what == REFRESH_UI_MESSAGE) { + long timeBeforeDraw = System.currentTimeMillis(); + if (view != null) { + // invalidate + view.invalidate(); + } + // Wait different amounts of time depending on how much time the draw took. + // Wait at least 1ms to avoid a mysterious memory leak. + long timeToDraw = System.currentTimeMillis() - timeBeforeDraw; + sendEmptyMessageDelayed( + REFRESH_UI_MESSAGE, Math.max(1, UI_INTERVAL_MS - timeToDraw)); + } + } + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/UIUtil.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/UIUtil.java new file mode 100644 index 000000000..94be469c9 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/UIUtil.java @@ -0,0 +1,161 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.PropertyValuesHolder; +import android.animation.TimeInterpolator; +import android.animation.ValueAnimator; +import android.animation.ValueAnimator.AnimatorUpdateListener; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.widget.TextView; + +/** Utility class for working with Android views. */ +public final class UIUtil { + + private UIUtil() { + // Don't instantiate this class. + } + + /** Shortcut to create a ValuesAnimator with the given configuration. */ + public static ValueAnimator animator( + long durationMillis, + TimeInterpolator interpolator, + AnimatorUpdateListener listener, + PropertyValuesHolder... propertyValuesHolders) { + ValueAnimator tween = ValueAnimator.ofPropertyValuesHolder(propertyValuesHolders); + tween.setDuration(durationMillis); + tween.setInterpolator(interpolator); + tween.addUpdateListener(listener); + return tween; + } + + /** Shortcut for making a PropertyValuesHolder for floats. */ + public static PropertyValuesHolder floatValue(String name, float start, float end) { + return PropertyValuesHolder.ofFloat(name, start, end); + } + + public static void fadeOutAndHide( + final View v, long durationMs, float startAlpha, final Runnable onFinishRunnable) { + + if (v.getVisibility() != View.VISIBLE) { + return; // Already hidden. + } + ValueAnimator fadeOut = + animator( + durationMs, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + v.setAlpha((float) valueAnimator.getAnimatedValue("alpha")); + } + }, + floatValue("alpha", startAlpha, 0)); + fadeOut.addListener( + new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + v.setVisibility(View.INVISIBLE); + if (onFinishRunnable != null) { + onFinishRunnable.run(); + } + } + }); + fadeOut.start(); + } + + public static void fadeOutAndHide(final View v, long durationMs, float startAlpha) { + fadeOutAndHide(v, durationMs, startAlpha, null); + } + + public static void fadeOutAndHide(final View v, long durationMs) { + fadeOutAndHide(v, durationMs, 1); + } + + public static void showAndFadeIn(final View v, long durationMs, float endAlpha) { + if (v.getVisibility() == View.VISIBLE) { + return; // Already visible. + } + v.setAlpha(0); + v.setVisibility(View.VISIBLE); + + ValueAnimator fadeIn = + animator( + durationMs, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + v.setAlpha((float) valueAnimator.getAnimatedValue("alpha")); + } + }, + floatValue("alpha", 0, endAlpha)); + fadeIn.start(); + } + + public static void showAndFadeIn(final View v, long durationMs) { + showAndFadeIn(v, durationMs, 1); + } + + public static void fitToBounds(TextView textView, float widthPx, float heightPx) { + textView.measure(0, 0); + float currentWidthPx = textView.getMeasuredWidth(); + float currentHeightPx = textView.getMeasuredHeight(); + float textSize = textView.getTextSize(); + + float scale = Math.min(widthPx / currentWidthPx, heightPx / currentHeightPx); + textView.setTextSize(textSize * scale); + } + + /** + * Translates in Y from startPercent to endPercent (expecting 0 for 0%, 1 for 100%). Hides at + * the end based on hideOnEnd. + */ + public static void panUpAndHide( + final View v, + float startPercent, + float endPercent, + long durationMs, + boolean hideOnEnd) { + if (v.getVisibility() != View.VISIBLE) { + return; // Already hidden. + } + ValueAnimator panUp = + animator( + durationMs, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + v.setY(((float) valueAnimator.getAnimatedValue()) * v.getHeight()); + } + }, + floatValue("translateY", startPercent, endPercent)); + if (hideOnEnd) { + panUp.addListener( + new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + v.setVisibility(View.INVISIBLE); + } + }); + } + panUp.start(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Vector2D.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Vector2D.java new file mode 100644 index 000000000..8e585cd73 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/Vector2D.java @@ -0,0 +1,142 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +import java.util.Stack; + +/** A basic 2D vector, with convenience functions to interact with it. */ +public class Vector2D { + private static final int MAX_POOL_SIZE = 50; + private static final Stack vectorPool = new Stack<>(); + + public float x; + public float y; + + private Vector2D(float x, float y) { + this.x = x; + this.y = y; + } + + public static Vector2D get() { + return get(0, 0); + } + + public static synchronized Vector2D get(float x, float y) { + if (!vectorPool.isEmpty()) { + Vector2D v = vectorPool.pop(); + v.set(x, y); + return v; + } else { + return new Vector2D(x, y); + } + } + + public static Vector2D get(Vector2D other) { + return get(other.x, other.y); + } + + public static float getLength(float x, float y) { + return (float) Math.sqrt(x * x + y * y); + } + + /** + * Release this vector back into the vector pool. Note that, once this has been called, the + * vector object may be re-used, and there is no guarantee that the released object will act as + * expected. + */ + public void release() { + if (vectorPool.size() < MAX_POOL_SIZE) { + vectorPool.push(this); + } + } + + public Vector2D normalize() { + float length = getLength(); + if (length == 0) { + set(0, 0); + } else { + set(x / length, y / length); + } + return this; + } + + public Vector2D toNormal() { + return set(y, -x).normalize(); + } + + public float getLength() { + return getLength(x, y); + } + + public Vector2D add(Vector2D rhs) { + set(this.x + rhs.x, this.y + rhs.y); + return this; + } + + public Vector2D add(float x, float y) { + set(this.x + x, this.y + y); + return this; + } + + public Vector2D subtract(Vector2D rhs) { + set(this.x - rhs.x, this.y - rhs.y); + return this; + } + + public Vector2D subtract(float x, float y) { + set(this.x - x, this.y - y); + return this; + } + + public Vector2D scale(float factor) { + set(this.x * factor, this.y * factor); + return this; + } + + public float dot(Vector2D rhs) { + return x * rhs.x + y * rhs.y; + } + + public Vector2D rotate(float radians) { + double cos = Math.cos(radians); + double sin = Math.sin(radians); + set((float) (x * cos - y * sin), (float) (x * sin + y * cos)); + return this; + } + + public Vector2D set(Vector2D other) { + x = other.x; + y = other.y; + return this; + } + + public Vector2D set(float x, float y) { + this.x = x; + this.y = y; + return this; + } + + @Override + public String toString() { + return "(" + x + ", " + y + ")"; + } + + public float distanceTo(Vector2D other) { + float dx = x - other.x; + float dy = y - other.y; + return (float) Math.sqrt(dx * dx + dy * dy); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/WaitProcess.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/WaitProcess.java new file mode 100644 index 000000000..fd60a82fb --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/WaitProcess.java @@ -0,0 +1,37 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared; + +/** A process which just waits for the specified amount of time. */ +public class WaitProcess extends Process { + private long elapsedMs; + private long durationMs; + + public WaitProcess(long durationMs) { + this.durationMs = durationMs; + this.elapsedMs = 0; + } + + @Override + public void updateLogic(float deltaMs) { + elapsedMs += deltaMs; + } + + @Override + public boolean isFinished() { + return elapsedMs >= durationMs; + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/Actor.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/Actor.java new file mode 100644 index 000000000..7778fa703 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/Actor.java @@ -0,0 +1,105 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.actor; + +import android.graphics.Canvas; +import com.google.android.apps.santatracker.doodles.shared.Vector2D; +import org.json.JSONException; +import org.json.JSONObject; + +/** Base class for different characters on the screen. */ +public abstract class Actor implements Comparable { + public static final float INFINITE_MASS = 0.0f; + public static final String TYPE = "Actor"; + public static final String TYPE_KEY = "type"; + public static final String X_KEY = "x"; + public static final String Y_KEY = "y"; + + public Vector2D positionBeforeFrame; + // Assumes (0, 0) is upper-left corner of screen, with +y down and +x right. + public Vector2D position; + public Vector2D velocity; + + // Doesn't do anything yet (except for TextActors) + public float scale = 1.0f; + + // The rotation of the actor in radians. Positive means clockwise, negative means anticlockwise. + public float rotation = 0.0f; + + // Doesn't do anything yet (except for in tennis) + public boolean hidden = false; + + // Specify z-index so that actors can be sorted before drawing. Higher is in front, lower in + // back. + public int zIndex = 0; + + // 0: transparent, 1: opaque. + public float alpha = 1; + + // Bounciness. + public float restitution = 1.0f; + public float inverseMass = INFINITE_MASS; + + public Actor() { + this(Vector2D.get(0, 0), Vector2D.get(0, 0)); + } + + public Actor(Vector2D position, Vector2D velocity) { + this.position = position; + this.positionBeforeFrame = Vector2D.get(position); + this.velocity = velocity; + } + + public void update(float deltaMs) { + positionBeforeFrame.set(this.position); + float deltaSeconds = deltaMs / 1000.0f; + this.position.x += velocity.x * deltaSeconds; + this.position.y += velocity.y * deltaSeconds; + } + + public void draw(Canvas canvas) { + // Nothing to do for base class implementation. + } + + @Override + public int compareTo(Actor another) { + int zDiff = zIndex - another.zIndex; + if (zDiff != 0) { + return zDiff; + } else { + // As a fallback, compare the y positions. Obstacles with smaller y values (i.e., higher + // on + // the screen) should come first. + float positionDiff = position.y - another.position.y; + if (positionDiff > 0) { + return 1; + } else if (positionDiff < 0) { + return -1; + } else { + return 0; + } + } + } + + public JSONObject toJSON() throws JSONException { + return null; + } + + public String getType() { + return TYPE; + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/ActorHelper.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/ActorHelper.java new file mode 100644 index 000000000..843cbd19a --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/ActorHelper.java @@ -0,0 +1,30 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.actor; + +/** A collection of helper functions for Actor. */ +public class ActorHelper { + public static float distanceBetween(Actor a, Actor b) { + return distanceBetween(a.position.x, a.position.y, b.position.x, b.position.y); + } + + public static float distanceBetween(float x1, float y1, float x2, float y2) { + float dx = x1 - x2; + float dy = y1 - y2; + return (float) Math.sqrt(dx * dx + dy * dy); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/Camera.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/Camera.java new file mode 100644 index 000000000..022e26f8b --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/Camera.java @@ -0,0 +1,169 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.actor; + +import static com.google.android.apps.santatracker.doodles.shared.animation.Interpolator.EASE_IN_AND_OUT; + +import com.google.android.apps.santatracker.doodles.shared.Vector2D; +import com.google.android.apps.santatracker.doodles.shared.animation.Tween; + +/** + * A camera class to contain the scale, translation, and rotation of the world. Note that the camera + * is defined to be positioned at the top-left corner of the screen. + */ +public class Camera extends Actor { + + public int screenWidth; + public int screenHeight; + + public Camera(int screenWidth, int screenHeight) { + this.position = Vector2D.get(); + scale = 1.0f; + + this.screenWidth = screenWidth; + this.screenHeight = screenHeight; + } + + /** + * Get the world coordinates for the screen coordinates specified. + * + * @param x The x value in screen space. + * @param y The y value in screen space. + */ + public Vector2D getWorldCoords(float x, float y) { + return Vector2D.get(xToWorld(x), yToWorld(y)); + } + + public float xToWorld(float x) { + return position.x + x / scale; + } + + public float yToWorld(float y) { + return position.y + y / scale; + } + + /** + * Converts a length from screen scale to world space. + * + * @param dimension: the length in screen space. + * @return the length in world space. + */ + public float toWorldScale(float dimension) { + return dimension / scale; + } + + /** + * Move the center of the camera's viewport to the specified position. + * + * @param position The position to center the camera on. + */ + public void focusOn(Vector2D position) { + this.position.set(getPositionToFocusOn(position, scale)); + } + + /** + * Get the camera position needed to focus on the specified position at the specified scale. + * + * @param position The position to center on. + * @param scale The scale at which to focus. + */ + private Vector2D getPositionToFocusOn(Vector2D position, float scale) { + return Vector2D.get(position) + .subtract((screenWidth / 2) / scale, (screenHeight / 2) / scale); + } + + /** + * Move the camer immediately so that it can see the bounding box specified by the min and max + * position vectors. + * + * @param levelMinPosition The desired minimum visible portion of the level. + * @param levelMaxPosition The desired maximum visible portion of the level. + */ + public void moveImmediatelyTo(Vector2D levelMinPosition, Vector2D levelMaxPosition) { + Vector2D levelDimens = Vector2D.get(levelMaxPosition).subtract(levelMinPosition); + + float pannedScale = Math.min(screenWidth / levelDimens.x, screenHeight / levelDimens.y); + Vector2D screenDimensInWorldCoords = + Vector2D.get(screenWidth, screenHeight).scale(1 / pannedScale); + + // pannedPosition = levelMinPosition - (screenDimensInWorldCoords - levelDimens) / 2 + Vector2D pannedPosition = + Vector2D.get(levelMinPosition) + .subtract( + (screenDimensInWorldCoords.x - levelDimens.x) * 0.5f, + (screenDimensInWorldCoords.y - levelDimens.y) * 0.5f); + + position.set(pannedPosition); + scale = pannedScale; + + screenDimensInWorldCoords.release(); + levelDimens.release(); + pannedPosition.release(); + } + + /** + * Pan to the specified position over the specified duration. + * + * @param levelMinPosition The desired minimum visible portion of the level. + * @param levelMaxPosition The desired maximum visible portion of the level. + * @param duration How many seconds the pan should take. + * @return The tween to pan the camera. + */ + public Tween panTo( + final Vector2D levelMinPosition, final Vector2D levelMaxPosition, float duration) { + + final Vector2D startMin = Vector2D.get(position); + final Vector2D startMax = getMaxVisiblePosition(); + + Tween panTween = + new Tween(duration) { + @Override + protected void updateValues(float percentDone) { + + float xMin = + EASE_IN_AND_OUT.getValue( + percentDone, startMin.x, levelMinPosition.x); + float xMax = + EASE_IN_AND_OUT.getValue( + percentDone, startMax.x, levelMaxPosition.x); + float yMin = + EASE_IN_AND_OUT.getValue( + percentDone, startMin.y, levelMinPosition.y); + float yMax = + EASE_IN_AND_OUT.getValue( + percentDone, startMax.y, levelMaxPosition.y); + + Vector2D min = Vector2D.get(xMin, yMin); + Vector2D max = Vector2D.get(xMax, yMax); + moveImmediatelyTo(min, max); + min.release(); + max.release(); + } + + @Override + protected void onFinish() { + startMin.release(); + startMax.release(); + } + }; + return panTween; + } + + private Vector2D getMaxVisiblePosition() { + return Vector2D.get(position.x + screenWidth / scale, position.y + screenHeight / scale); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/CameraShake.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/CameraShake.java new file mode 100644 index 000000000..791c61cf2 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/CameraShake.java @@ -0,0 +1,56 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.actor; + +/** + * Tracks a vibration which reduces over time, suitable for screen shake effects. (Use position as + * the camera's offset when rendering) + */ +public class CameraShake extends Actor { + + private float frequency = 0; + private float magnitude = 0; + private float falloff = 0; + private float msTillNextShake = 0; + + public void shake(float frequency, float magnitude, float falloff) { + this.frequency = frequency; + this.magnitude = magnitude; + this.falloff = falloff; + msTillNextShake = 1000 / frequency; + } + + @Override + public void update(float deltaMs) { + if (magnitude == 0) { + return; + } + + msTillNextShake -= deltaMs; + if (msTillNextShake < 0) { + msTillNextShake = 1000 / frequency; + magnitude *= falloff; + // Tiny amounts of shake take too long to fall off, and they look bad, so just quickly + // kill the shake once it falls below a low threshold. + if (this.magnitude < 2) { + this.magnitude = 0; + } + } + position.x = (float) ((Math.random() - 0.5) * magnitude); + position.y = (float) ((Math.random() - 0.5) * magnitude); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/FakeButtonActor.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/FakeButtonActor.java new file mode 100644 index 000000000..4e5c99f9b --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/FakeButtonActor.java @@ -0,0 +1,76 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.actor; + +import android.graphics.Canvas; +import com.google.android.apps.santatracker.doodles.shared.animation.AnimatedSprite; + +/** + * An actor that looks like a button, but doesn't actually have any logic to detect or respond to + * clicks. We use this to provide a UI affordance to the user. Even though all our games allow you + * to click anywhere on the screen, having something that looks like a button helps the users to + * know how to play the game. + */ +public class FakeButtonActor extends Actor { + + public final AnimatedSprite sprite; // Public so you can get to frameWidth/frameHeight. + private final int lastFrameIndex; + + /** + * The sprite for the button should conform to the following: 1. The last frame of the animation + * will be the "idle" state of the button. 2. When the button is pressed, the animation will be + * played through, starting from frame 0 and ending back on the last frame. 3. The FPS of the + * sprite should be set to give the button press animation the desired duration. + */ + public FakeButtonActor(AnimatedSprite sprite) { + super(); + this.sprite = sprite; + sprite.setLoop(false); + lastFrameIndex = sprite.getNumFrames() - 1; + sprite.setFrameIndex(lastFrameIndex); + } + + public void press() { + sprite.setFrameIndex(0); + } + + public void pressAndHold() { + sprite.setFrameIndex(0); + sprite.setPaused(true); + } + + public void release() { + sprite.setPaused(false); + } + + @Override + public void update(float deltaMs) { + super.update(deltaMs); + sprite.update(deltaMs); + sprite.setPosition(position.x, position.y); + sprite.setRotation(rotation); + sprite.setHidden(hidden); + sprite.setAlpha(alpha); + sprite.setScale(scale, scale); + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + sprite.draw(canvas); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/MultiSpriteActor.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/MultiSpriteActor.java new file mode 100644 index 000000000..a97cfde45 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/MultiSpriteActor.java @@ -0,0 +1,76 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.actor; + +import android.content.res.Resources; +import com.google.android.apps.santatracker.doodles.shared.Vector2D; +import com.google.android.apps.santatracker.doodles.shared.animation.AnimatedSprite; +import com.google.android.apps.santatracker.util.SantaLog; +import java.util.HashMap; +import java.util.Map; + +/** An actor which has multiple sprites which it can switch between. */ +public class MultiSpriteActor extends SpriteActor { + private static final String TAG = MultiSpriteActor.class.getSimpleName(); + public Map sprites; + + public MultiSpriteActor( + Map sprites, + String selectedSpriteKey, + Vector2D position, + Vector2D velocity) { + super(sprites.get(selectedSpriteKey), position, velocity); + this.sprites = sprites; + } + + public static MultiSpriteActor create( + Data[] data, String selectedSprite, Vector2D position, Resources resources) { + Map sprites = new HashMap<>(); + for (int i = 0; i < data.length; i++) { + sprites.put(data[i].key, data[i].getSprite(resources)); + } + return new MultiSpriteActor(sprites, selectedSprite, position, Vector2D.get()); + } + + public void setSprite(String key) { + if (sprites.containsKey(key)) { + sprite = sprites.get(key); + } else { + SantaLog.w(TAG, "Couldn't set sprite, unrecognized key: " + key); + } + } + + /** A class which makes it easier to re-construct MultiSpriteActors. */ + public static class Data { + public String key; + public int[] idList; + public int numFrames; + + public Data(String key, int[] idList) { + this.key = key; + this.idList = idList; + this.numFrames = idList.length; + } + + public AnimatedSprite getSprite(Resources resources) { + if (idList != null) { + return AnimatedSprite.fromFrames(resources, idList); + } + return null; + } + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/RectangularInstructionActor.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/RectangularInstructionActor.java new file mode 100644 index 000000000..345c8eae0 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/RectangularInstructionActor.java @@ -0,0 +1,140 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.actor; + +import android.content.res.Resources; +import android.graphics.Canvas; +import com.google.android.apps.santatracker.doodles.shared.animation.AnimatedSprite; +import com.google.android.apps.santatracker.doodles.shared.animation.AnimatedSprite.AnimatedSpriteListener; +import com.google.android.apps.santatracker.doodles.shared.animation.Sprites; + +/** An actor that shows instructions for a game. */ +public class RectangularInstructionActor extends Actor { + + private static final int RECTANGLE_CENTER_X = 257; + private static final int RECTANGLE_CENTER_Y = 343; + + private static final int FRAME_BUBBLE_APPEARS = 2; + + public AnimatedSprite rectangle; + public AnimatedSprite diagram; + private float diagramScale = 1; + private float diagramAlpha = 1; + private boolean animationIsReversed = false; + + /** @param diagram Animated sprite showing instructions in a loop. */ + public RectangularInstructionActor(Resources resources, AnimatedSprite diagram) { + this.rectangle = AnimatedSprite.fromFrames(resources, Sprites.tutoappear_new); + this.diagram = diagram; + + // Off-center anchor point lets us match the rectangle's animation with a simple scale. + diagram.setAnchor(diagram.frameWidth / 2, diagram.frameHeight / 2); + + rectangle.setLoop(false); + rectangle.addListener( + new AnimatedSpriteListener() { + @Override + public void onFrame(int index) { + // Scale (and fade) the diagram to match the rectangle. + int maxFrame = rectangle.getNumFrames() - 1; + index = animationIsReversed ? maxFrame - index : index; + float percent = maxFrame == 0 ? 1 : (float) index / maxFrame; + if (index < FRAME_BUBBLE_APPEARS) { + percent = 0; + } + diagramScale = percent; + diagramAlpha = percent; + } + + @Override + public void onFinished() { + if (animationIsReversed) { + hidden = true; + } + } + }); + } + + public void show() { + if (animationIsReversed) { + reverseAnimation(); + } + hidden = false; + rectangle.setFrameIndex(0); + diagramAlpha = 0; + diagramScale = 0; + update(0); + } + + public void hide() { + if (!animationIsReversed) { + reverseAnimation(); + } + rectangle.setFrameIndex(0); + update(0); + } + + private void reverseAnimation() { + rectangle.reverseFrames(); + animationIsReversed = !animationIsReversed; + } + + public void setDiagram(AnimatedSprite diagram) { + diagram.setAnchor(diagram.frameWidth / 2, diagram.frameHeight / 2); + this.diagram = diagram; + } + + public float getScaledWidth() { + return rectangle.frameWidth * scale; + } + + public float getScaledHeight() { + return rectangle.frameHeight * scale; + } + + @Override + public void update(float deltaMs) { + super.update(deltaMs); + + rectangle.update(deltaMs); + rectangle.setPosition(position.x, position.y); + rectangle.setRotation(rotation); + rectangle.setHidden(hidden); + rectangle.setAlpha(alpha); + rectangle.setScale(scale, scale); + + diagram.update(deltaMs); + // Center diagram in rectangle. + diagram.setPosition( + position.x + RECTANGLE_CENTER_X * scale, position.y + RECTANGLE_CENTER_Y * scale); + diagram.setRotation(rotation); + diagram.setHidden(hidden); + // Diagram has to take both this.alpha and diagramAlpha into account. + diagram.setAlpha(alpha * diagramAlpha); + // Same with scale. + diagram.setScale(scale * diagramScale * 1.3f, scale * diagramScale * 1.3f); + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + if (!hidden) { + rectangle.draw(canvas); + diagram.draw(canvas); + } + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/SpriteActor.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/SpriteActor.java new file mode 100644 index 000000000..82a234742 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/SpriteActor.java @@ -0,0 +1,69 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.actor; + +import android.graphics.Canvas; +import com.google.android.apps.santatracker.doodles.shared.Vector2D; +import com.google.android.apps.santatracker.doodles.shared.animation.AnimatedSprite; + +/** A generic actor class for game objects. */ +public class SpriteActor extends Actor { + public static final String TYPE = "Sprite actor"; + private final String type; + public AnimatedSprite sprite; + // If true, then this.scale will be ignored. This would allow you to call sprite.setScale(x, y) + // without the effect getting overwritten. + public boolean ignoreScale = false; + + public SpriteActor(AnimatedSprite sprite, Vector2D position, Vector2D velocity) { + this(sprite, position, velocity, TYPE); + } + + public SpriteActor(AnimatedSprite sprite, Vector2D position, Vector2D velocity, String type) { + super(position, velocity); + this.sprite = sprite; + this.type = type; + } + + @Override + public void update(float deltaMs) { + super.update(deltaMs); + sprite.update(deltaMs); + } + + @Override + public void draw(Canvas canvas) { + draw(canvas, 0, 0, sprite.frameWidth * scale, sprite.frameHeight * scale); + } + + public void draw(Canvas canvas, float xOffset, float yOffset, float width, float height) { + if (!hidden) { + sprite.setRotation(rotation); + sprite.setPosition(position.x + xOffset, position.y + yOffset); + if (!ignoreScale) { + sprite.setScale(width / sprite.frameWidth, height / sprite.frameHeight); + } + sprite.setAlpha(alpha); + sprite.draw(canvas); + } + } + + @Override + public String getType() { + return type; + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/TextActor.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/TextActor.java new file mode 100644 index 000000000..de9f42691 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/actor/TextActor.java @@ -0,0 +1,117 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.actor; + +import android.content.res.AssetManager; +import android.graphics.BlurMaskFilter; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Paint.Align; +import android.graphics.Rect; +import android.graphics.Typeface; +import android.text.TextPaint; + +/** Draws text on the screen. */ +public class TextActor extends Actor { + private static final String TAG = TextActor.class.getSimpleName(); + public boolean hidden; + private String text; + private Paint paint; + private Rect bounds = new Rect(); + private float previousAlpha; + private boolean centeredVertically; + + public TextActor(String text) { + this.paint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG); + // Set text size using px instead of dip so that the scale of text needed to match a bitmap + // sprite stays the same across devices. + paint.setTextSize(12); + setColor(Color.BLACK); + setText(text); + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + paint.getTextBounds(text, 0, text.length(), bounds); + } + + /** @return The scaled width of the text. */ + public float getWidth() { + return bounds.width() * scale; + } + + /** @return The scaled height of the text. */ + public float getHeight() { + return bounds.height() * scale; + } + + public void scaleToFitScreen(int screenWidth, int screenHeight) { + scale = Math.min(screenWidth / bounds.width(), screenHeight / bounds.height()); + } + + public void setColor(int color) { + paint.setColor(color); + previousAlpha = paint.getAlpha() / 255f; + } + + public void setFont(AssetManager assetManager, String fontPath) { + Typeface typeface = Typeface.createFromAsset(assetManager, fontPath); + paint.setTypeface(typeface); + } + + public void enableBlur(float blurRadius) { + paint.setMaskFilter(new BlurMaskFilter(blurRadius, BlurMaskFilter.Blur.NORMAL)); + } + + public void alignCenter() { + paint.setTextAlign(Align.CENTER); + } + + public void setBold(boolean bold) { + paint.setTypeface(bold ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT); + } + + public void centerVertically(boolean center) { + this.centeredVertically = center; + } + + @Override + public void draw(Canvas canvas) { + if (previousAlpha != alpha) { + previousAlpha = alpha; + paint.setAlpha(Math.round(alpha * 255)); + } + if (hidden) { + return; + } + float yOffset = centeredVertically ? -getHeight() / 2 : 0; + canvas.save(); + canvas.scale(scale, scale); + // 1. drawText has y=0 at the baseline of the text. To make this work like other actors, y=0 + // should be the top of the bounding box, so add bounds.top to y. + // 2. drawText also has rounding error on the (x, y) coordinates, which makes text jitter + // around if you are tweening scale, so use canvas.translate() to position instead. + canvas.translate(position.x / scale, (position.y + yOffset) / scale - bounds.top); + canvas.drawText(text, 0, 0, paint); + canvas.restore(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/ActorTween.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/ActorTween.java new file mode 100644 index 000000000..e40027751 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/ActorTween.java @@ -0,0 +1,182 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.animation; + +import com.google.android.apps.santatracker.doodles.shared.actor.Actor; + +/** + * Tweens properties of Actors (currently, position & scale). + * + *

+ * + *

If any of the from-values is left unset, the from value will be initialized on the first + * update of the tween. This allows us to tween from an unspecified value, and have it do so + * smoothly when the tween actually runs, regardless of the actual starting value. + */ +public class ActorTween extends Tween { + private static final String TAG = ActorTween.class.getSimpleName(); + + private final Actor actor; + private Interpolator interpolator; + // Use Float objects set to null so that we can detect & support unspecified values. + private Float xStart = null; + private Float yStart = null; + private Float xEnd = null; + private Float yEnd = null; + private Float scaleStart; + private Float scaleEnd; + private Callback finishedCallback = null; + private Float rotationStart; + private Float rotationEnd; + private Float alphaStart; + private Float alphaEnd; + + private boolean firstUpdate = true; + + public ActorTween(Actor actor) { + super(0); + this.actor = actor; + interpolator = Interpolator.LINEAR; + } + + public ActorTween from(float x, float y) { + fromX(x); + fromY(y); + return this; + } + + public ActorTween fromX(float x) { + xStart = x; + return this; + } + + public ActorTween fromY(float y) { + yStart = y; + return this; + } + + public ActorTween to(float x, float y) { + toX(x); + toY(y); + return this; + } + + public ActorTween toX(float x) { + xEnd = x; + return this; + } + + public ActorTween toY(float y) { + yEnd = y; + return this; + } + + public ActorTween scale(float fromScale, float toScale) { + this.scaleStart = fromScale; + this.scaleEnd = toScale; + return this; + } + + public ActorTween scale(float toScale) { + this.scaleEnd = toScale; + return this; + } + + public ActorTween withRotation(float fromRadians, float toRadians) { + this.rotationStart = fromRadians; + this.rotationEnd = toRadians; + return this; + } + + public ActorTween withRotation(float toRadians) { + this.rotationEnd = toRadians; + return this; + } + + public ActorTween withAlpha(float fromAlpha, float toAlpha) { + this.alphaStart = fromAlpha; + this.alphaEnd = toAlpha; + return this; + } + + public ActorTween withAlpha(float toAlpha) { + this.alphaEnd = toAlpha; + return this; + } + + public ActorTween withDuration(float seconds) { + this.durationSeconds = seconds; + return this; + } + + public ActorTween withInterpolator(Interpolator interpolator) { + this.interpolator = interpolator; + return this; + } + + public ActorTween whenFinished(Callback c) { + finishedCallback = c; + return this; + } + + protected void setInitialValues() { + xStart = (xStart != null) ? xStart : actor.position.x; + yStart = (yStart != null) ? yStart : actor.position.y; + scaleStart = (scaleStart != null) ? scaleStart : actor.scale; + rotationStart = (rotationStart != null) ? rotationStart : actor.rotation; + alphaStart = (alphaStart != null) ? alphaStart : actor.alpha; + } + + @Override + protected void updateValues(float percentDone) { + if (firstUpdate) { + firstUpdate = false; + setInitialValues(); + } + // Perform null checks here so that we don't interpolate over unspecified fields. + if (xEnd != null) { + actor.position.x = interpolator.getValue(percentDone, xStart, xEnd); + } + if (yEnd != null) { + actor.position.y = interpolator.getValue(percentDone, yStart, yEnd); + } + if (scaleEnd != null) { + actor.scale = interpolator.getValue(percentDone, scaleStart, scaleEnd); + } + if (rotationEnd != null) { + actor.rotation = interpolator.getValue(percentDone, rotationStart, rotationEnd); + } + if (alphaEnd != null) { + actor.alpha = interpolator.getValue(percentDone, alphaStart, alphaEnd); + } + } + + @Override + protected void onFinish() { + if (finishedCallback != null) { + finishedCallback.call(); + } + } + + /** + * Callback to be called at the end of a tween (can be used to chain tweens together, to hide an + * actor when a tween finishes, etc.) + */ + public interface Callback { + void call(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/AnimatedSprite.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/AnimatedSprite.java new file mode 100644 index 000000000..af8bfbfdf --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/AnimatedSprite.java @@ -0,0 +1,377 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.animation; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.RectF; +import android.util.Pair; +import com.google.android.apps.santatracker.doodles.shared.BitmapCache; +import com.google.android.apps.santatracker.doodles.shared.CallbackProcess; +import com.google.android.apps.santatracker.doodles.shared.ProcessChain; +import com.google.android.apps.santatracker.doodles.shared.Vector2D; +import com.google.android.apps.santatracker.doodles.shared.WaitProcess; +import com.google.android.apps.santatracker.doodles.shared.physics.Util; +import com.google.android.apps.santatracker.util.SantaLog; +import java.util.ArrayList; +import java.util.List; + +/** + * An animated image. This also handles static, non-animated images: those are just animations with + * only 1 frame. + */ +public class AnimatedSprite { + private static final String TAG = AnimatedSprite.class.getSimpleName(); + private static final int DEFAULT_FPS = 24; + private static final int NUM_TRIES_TO_LOAD_FROM_MEMORY = 3; + + // When loading any sprite, this was the last successful sampleSize. We start loading the next + // Sprite with this sampleSize. + public static int lastUsedSampleSize = 1; + + private static BitmapCache bitmapCache; + public int frameWidth; + public int frameHeight; + public Vector2D anchor = Vector2D.get(); + private Bitmap[] frames; + private int fps = DEFAULT_FPS; + private int numFrames; + private boolean loop = true; + private boolean paused = false; + private boolean flippedX = false; + private List listeners; + private Vector2D position = Vector2D.get(); + private boolean hidden; + private float scaleX = 1; + private float scaleY = 1; + private float rotation; + private Paint paint; + private int sampleSize = 1; + + private float frameIndex; + + // These are fields in order to avoid allocating memory in draw(). Not threadsafe, but why would + // draw get called from multiple threads? + private Rect srcRect = new Rect(); + private RectF dstRect = new RectF(); + + /** Use fromFrames() to construct an AnimatedSprite. */ + private AnimatedSprite(Bitmap[] frames, int sampleSize) { + this.frames = frames; + this.sampleSize = sampleSize; + if (lastUsedSampleSize < sampleSize) { + lastUsedSampleSize = sampleSize; + } + numFrames = this.frames.length; + if (numFrames == 0) { + throw new IllegalArgumentException("Can't have AnimatedSprite with zero frames."); + } + frameWidth = frames[0].getWidth() * sampleSize; + frameHeight = frames[0].getHeight() * sampleSize; + listeners = new ArrayList<>(); + paint = new Paint(); + paint.setAntiAlias(true); + paint.setFilterBitmap(true); + } + + /** Return AnimatedSprite built from separate images (one image per frame). */ + public static AnimatedSprite fromFrames(Resources resources, int[] ids) { + int sampleSize = lastUsedSampleSize; + Bitmap frames[] = new Bitmap[ids.length]; + for (int i = 0; i < ids.length; i++) { + Pair pair = getBitmapFromCache(ids[i], 0); + if (pair != null) { + frames[i] = pair.first; + sampleSize = pair.second; + } + if (frames[i] == null) { + final BitmapFactory.Options options = new BitmapFactory.Options(); + for (int tries = 0; tries < NUM_TRIES_TO_LOAD_FROM_MEMORY; tries++) { + try { + // Decode bitmap with inSampleSize set + options.inSampleSize = sampleSize; + frames[i] = BitmapFactory.decodeResource(resources, ids[i], options); + } catch (OutOfMemoryError oom) { + sampleSize *= 2; + SantaLog.d(TAG, "loading failed, trying sampleSize: " + sampleSize, oom); + } + } + putBitmapInCache(frames[i], ids[i], 0, sampleSize); + } + } + return new AnimatedSprite(frames, sampleSize); + } + + /** Return AnimatedSprite built from the given Bitmap objects. (For testing). */ + public static AnimatedSprite fromBitmapsForTest(Bitmap frames[]) { + return new AnimatedSprite(frames, 1); + } + + /** + * Return AnimatedSprite built from the same frames as another animated sprite. This isn't a + * deep clone, only the frames & FPS of the original sprite are copied. + */ + public static AnimatedSprite fromAnimatedSprite(AnimatedSprite other) { + AnimatedSprite sprite = new AnimatedSprite(other.frames, other.sampleSize); + sprite.setFPS(other.fps); + return sprite; + } + + private static Pair getBitmapFromCache(int id, int frame) { + if (bitmapCache == null) { + bitmapCache = new BitmapCache(); + } + return bitmapCache.getBitmapFromCache(id, frame); + } + + private static void putBitmapInCache(Bitmap bitmap, int id, int frame, int sampleSize) { + if (bitmapCache == null) { + bitmapCache = new BitmapCache(); + } + bitmapCache.putBitmapInCache(bitmap, id, frame, sampleSize); + } + + public static void clearCache() { + if (AnimatedSprite.bitmapCache != null) { + AnimatedSprite.bitmapCache.clear(); + } + } + + /** Set whether to loop the animation or not. */ + public void setLoop(boolean loop) { + this.loop = loop; + } + + public boolean isFlippedX() { + return flippedX; + } + + public void setFlippedX(boolean value) { + this.flippedX = value; + } + + public void setPaused(boolean value) { + this.paused = value; + } + + /** + * Pause this sprite and return a process chain which can be updated to unpause the sprite after + * the specified length of time. + * + * @param durationMs how many milliseconds to pause the sprite for. + * @return a process chain which will unpause the sprite after the duration has completed. + */ + public ProcessChain pauseFor(long durationMs) { + setPaused(true); + CallbackProcess unpause = + new CallbackProcess() { + @Override + public void updateLogic(float deltaMs) { + setPaused(false); + } + }; + return new WaitProcess(durationMs).then(unpause); + } + + /** Change the speed of the animation. */ + public void setFPS(int fps) { + this.fps = fps; + } + + public int getFrameIndex() { + return (int) frameIndex; + } + + /** Sets the current frame. */ + public void setFrameIndex(int frame) { + frameIndex = frame; + } + + public int getNumFrames() { + return numFrames; + } + + public float getDurationSeconds() { + return numFrames / (float) fps; + } + + /** Update the animation based on deltaMs having passed. */ + public void update(float deltaMs) { + if (paused) { + return; + } + + float deltaFrames = (deltaMs / 1000.0f) * fps; + + // In order to make sure that we don't skip any frames when notifying listeners, this + // carefully + // accumulates deltaFrames instead of just immediately adding it into frameIndex. Be careful + // of floating point precision issues below. + while (deltaFrames > 0) { + // First, try accumulating the remaining deltaFrames and see if we make it to the next + // frame. + float newFrameIndex = frameIndex + deltaFrames; + if ((int) newFrameIndex == (int) frameIndex) { + // Didn't make it to the next frame. Done accumulating. + frameIndex = newFrameIndex; + deltaFrames = 0; + } else { + // Move forward to next frame, notify listeners, then keep accumlating. + float oldFrameIndex = frameIndex; + frameIndex = 1 + (int) frameIndex; // ignores numFrames, will handle it below. + deltaFrames -= frameIndex - oldFrameIndex; + + if (frameIndex < numFrames) { + sendOnFrameNotification((int) frameIndex); + } else { + if (loop) { + frameIndex = 0; + sendOnLoopNotification(); + sendOnFrameNotification((int) frameIndex); + } else { + frameIndex = numFrames - 1; + sendOnFinishNotification(); + // In this branch, there are no further onFrame notifications. + deltaFrames = 0; // No more changes to frameIndex, done accumulating. + } + } + } + } + } + + void sendOnLoopNotification() { + for (int i = 0; i < listeners.size(); i++) { // Avoiding iterators to avoid garbage. + // Call the on-loop callbacks. + listeners.get(i).onLoop(); + } + } + + void sendOnFinishNotification() { + for (int i = 0; i < listeners.size(); i++) { // Avoiding iterators to avoid garbage + // Call the on-finished callbacks. + listeners.get(i).onFinished(); + } + } + + void sendOnFrameNotification(int frame) { + for (int i = 0; i < listeners.size(); i++) { // Avoiding iterators to avoid garbage. + listeners.get(i).onFrame(frame); + } + } + + public void draw(Canvas canvas) { + if (!hidden) { + // Integer cast should round down, but clamp it just in case the synchronization with + // the + // update thread isn't perfect. + int frameIndexFloor = Util.clamp((int) frameIndex, 0, numFrames - 1); + float scaleX = flippedX ? -this.scaleX : this.scaleX; + + canvas.save(); + srcRect.set(0, 0, frameWidth, frameHeight); + dstRect.set(-anchor.x, -anchor.y, -anchor.x + frameWidth, -anchor.y + frameHeight); + + canvas.translate(position.x, position.y); + canvas.scale(scaleX, scaleY, 0, 0); + canvas.rotate((float) Math.toDegrees(rotation), 0, 0); + + canvas.drawBitmap(frames[frameIndexFloor], srcRect, dstRect, paint); + canvas.restore(); + } + } + + // Unlike Actors, AnimatedSprites use setters instead of public fields for position, scale, etc. + // This matches how it works on iOS, which uses setters because the actual values must be passed + // down into SKNodes. + public void setPosition(float x, float y) { + position.x = x; + position.y = y; + } + + /** @param alpha: 0.0 = transparent, 1.0 = opaque. */ + public void setAlpha(float alpha) { + paint.setAlpha((int) (alpha * 255)); + } + + // You can use this to more closely match the logic of iOS, where there is no draw method so the + // only way to hide something is to set this flag. On Android, you can also just not call draw + // if you want a sprite hidden. + public void setHidden(boolean hidden) { + this.hidden = hidden; + } + + public void setScale(float scaleX, float scaleY) { + this.scaleX = scaleX; + this.scaleY = scaleY; + } + + public float getScaledWidth() { + return scaleX * frameWidth; + } + + public float getScaledHeight() { + return scaleY * frameHeight; + } + + public void setRotation(float rotation) { + this.rotation = rotation; + } + + // Sets the anchor point which determines where the sprite is drawn relative to its position. + // This + // is also the point around which sprite rotates & scales. (x, y) are in pixels, relative to + // top-left corner. Initially set to the upper-left corner. + public void setAnchor(float x, float y) { + anchor.x = x; + anchor.y = y; + } + + public void addListener(AnimatedSpriteListener listener) { + listeners.add(listener); + } + + public void clearListeners() { + listeners.clear(); + } + + public int getNumListeners() { + return listeners.size(); + } + + // Reverse the frames of the animation. This doesn't update frameIndex, which may or may not + // be what you want. + public void reverseFrames() { + for (int i = 0; i < frames.length / 2; i++) { + Bitmap temp = frames[i]; + frames[i] = frames[frames.length - i - 1]; + frames[frames.length - i - 1] = temp; + } + } + + /** A class which can be implemented to provide callbacks for AnimatedSprite events. */ + public static class AnimatedSpriteListener { + public void onFinished() {} + + public void onLoop() {} + + public void onFrame(int index) {} + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/ElasticOutInterpolator.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/ElasticOutInterpolator.java new file mode 100644 index 000000000..6a0adde61 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/ElasticOutInterpolator.java @@ -0,0 +1,45 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.animation; + +import android.view.animation.Interpolator; + +/** + * An interpolator which has a rubber bound effect around its end point, bouncing back and forth + * before settling at its final value. + * + *

Implementation copied from outElastic here: https://goo.gl/SJZllG + */ +public class ElasticOutInterpolator implements Interpolator { + + private final float period; + + public ElasticOutInterpolator() { + period = 0.4f; + } + + public ElasticOutInterpolator(float period) { + this.period = period; + } + + @Override + public float getInterpolation(float value) { + return (float) + (Math.pow(2, -10 * value) * Math.sin((value - period / 4) * (2 * Math.PI) / period) + + 1); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/EmptyTween.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/EmptyTween.java new file mode 100644 index 000000000..88508ec12 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/EmptyTween.java @@ -0,0 +1,34 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.animation; + +/** + * A tween that does nothing in its updateValues method. Can be used to insert pauses in chains of + * tweens. The useful part of this is that it calls finishedCallback after durationSeconds, and it + * fits into the existing Tween framework. + */ +public class EmptyTween extends Tween { + + public EmptyTween(float durationSeconds) { + super(durationSeconds); + } + + @Override + protected void updateValues(float percentDone) { + // Nothing to do, just waiting for the tween to end. + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/Interpolator.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/Interpolator.java new file mode 100644 index 000000000..4ba175055 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/Interpolator.java @@ -0,0 +1,84 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.animation; + +/** Interpolates values for Tweens. Used to implement easing and repeated movement. */ +public interface Interpolator { + + Interpolator LINEAR = + new Interpolator() { + @Override + public float getValue(float percent, float initialValue, float finalValue) { + return initialValue + (finalValue - initialValue) * percent; + } + }; + Interpolator EASE_IN = + new Interpolator() { + @Override + public float getValue(float percent, float initialValue, float finalValue) { + return initialValue + (finalValue - initialValue) * percent * percent; + } + }; + Interpolator EASE_OUT = + new Interpolator() { + @Override + public float getValue(float percent, float initialValue, float finalValue) { + return initialValue - ((finalValue - initialValue) * percent * (percent - 2)); + } + }; + Interpolator EASE_IN_AND_OUT = + new Interpolator() { + @Override + public float getValue(float percent, float initialValue, float finalValue) { + // Simple sigmoid function: y = 3 * x^2 - 2 * x^3 + return LINEAR.getValue( + 3 * percent * percent - 2 * percent * percent * percent, + initialValue, + finalValue); + } + }; + Interpolator FAST_IN = + new Interpolator() { + @Override + public float getValue(float percent, float initialValue, float finalValue) { + return initialValue + (finalValue - initialValue) * (-percent * (percent - 2)); + } + }; + Interpolator FAST_IN_AND_HOLD = + new Interpolator() { + @Override + public float getValue(float percent, float initialValue, float finalValue) { + percent *= 2; + if (percent > 1) { + percent = 1; + } + return initialValue + (finalValue - initialValue) * (-percent * (percent - 2)); + } + }; + + Interpolator OVERSHOOT = + new Interpolator() { + @Override + public float getValue(float percent, float initialValue, float finalValue) { + percent -= 1; + percent = percent * percent * (3 * percent + 2) + 1; + return initialValue + (finalValue - initialValue) * percent; + } + }; + + float getValue(float percent, float initialValue, float finalValue); +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/Sprites.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/Sprites.java new file mode 100644 index 000000000..2d50614ab --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/Sprites.java @@ -0,0 +1,35 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.animation; + +import com.google.android.apps.santatracker.doodles.R; + +/** Frame data for all the sprites. */ +public interface Sprites { + int[] debug_marker = { + R.drawable.debug_marker, + }; + + int[] tutoappear_new = { + R.drawable.tutoappear_new_00, + R.drawable.tutoappear_new_01, + R.drawable.tutoappear_new_02, + R.drawable.tutoappear_new_03, + R.drawable.tutoappear_new_04, + R.drawable.tutoappear_new_05, + }; +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/Tween.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/Tween.java new file mode 100644 index 000000000..747fbc084 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/Tween.java @@ -0,0 +1,97 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.animation; + +import com.google.android.apps.santatracker.doodles.shared.Process; + +/** + * Base class for tweens. Handles the basic bookkeeping, then delegates to subclasses via + * updateValues() for updating specific values. + */ +public abstract class Tween { + protected float durationSeconds = 0; + private float elapsedSeconds = 0; + private float percentDone = 0; + + public Tween(float durationSeconds) { + this.durationSeconds = durationSeconds; + } + + /** + * @return true if update should continue to be called, false if tween is finished and should be + * removed. + */ + public boolean update(double deltaMs) { + boolean wasFinished = isFinished(); + if (wasFinished) { + return false; + } + elapsedSeconds += deltaMs / 1000f; + percentDone = elapsedSeconds / durationSeconds; + if (percentDone > 1) { + percentDone = 1; + } + updateValues(percentDone); + if (!wasFinished && isFinished()) { + onFinish(); + } + return !isFinished(); + } + + /** + * Subclasses should define this method to update their value(s) every frame. Suggested + * implementation: currentValue = interpolator.getValue(percentDone, startValue, endValue); + */ + protected abstract void updateValues(float percentDone); + + /** Subclasses can override this to execute code when the Tween finishes. */ + protected void onFinish() {} + + // Cancels the tween. Doesn't reset values back to their starting value or the final value. Just + // leaves state where it is and stops updating. onFinish will be called. + public void cancel() { + if (!isFinished()) { + // Advance elapsedSeconds and percentDone to the end so future update calls won't do + // anything. + elapsedSeconds = durationSeconds; + percentDone = 1; + onFinish(); + } + } + + public boolean isFinished() { + return percentDone >= 1; + } + + public float durationSeconds() { + return durationSeconds; + } + + public Process asProcess() { + return new Process() { + @Override + public void updateLogic(float deltaMs) { + Tween.this.update(deltaMs); + } + + @Override + public boolean isFinished() { + return Tween.this.isFinished(); + } + }; + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/TweenManager.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/TweenManager.java new file mode 100644 index 000000000..fdee59f4e --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/animation/TweenManager.java @@ -0,0 +1,90 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.animation; + +import java.util.ArrayList; +import java.util.List; + +/** + * Manages a list of tweens, taking care of removing them when they are done, and adding them (even + * in the middle of iterating over the list of tweens). + */ +public class TweenManager { + private final List tweens = new ArrayList<>(); + private final List incomingTweens = new ArrayList<>(); + private boolean shouldRemoveAll = false; + + public void update(float deltaMs) { + // First, check whether removeAll was called since the last update. + if (shouldRemoveAll) { + finishRemovingAll(); + return; + } + try { + // Move everything from incomingTweens to tweens (before iterating over tweens) + for (int i = 0; i < incomingTweens.size(); i++) { // Avoiding iterator to avoid garbage. + tweens.add(incomingTweens.get(i)); + } + incomingTweens.clear(); + + // Now iterate through tweens. + for (int i = tweens.size() - 1; i >= 0; i--) { // Avoiding iterator to avoid garbage. + Tween tween = tweens.get(i); + boolean finished = tween == null || !tween.update(deltaMs); + if (shouldRemoveAll) { + finishRemovingAll(); + return; + } + if (finished) { + tweens.remove(i); + } + } + } catch (Exception e) { // do nothing + } + } + + public void add(Tween tween) { + if (tween.durationSeconds() < 0) { + throw new IllegalArgumentException("Tween duration should not be negative"); + } + // Don't add to main list of tweens directly, to avoid ConcurrentModificationException. + incomingTweens.add(tween); + } + + /** + * Removes all the tweens at the next possible opportunity. This isn't synchronous, but will + * happen before any more tween.update calls occur. + */ + public void removeAll() { + // Remove incoming tweens immediately. No risk of removing while iterating for these, and we + // shouldn't clear this later in finishRemovingAll in case more have been added since then, + // so clear immediately. + incomingTweens.clear(); + + // There is a risk of removing while iterating for tweens though, so set a flag instead of + // immediately clearing it. + shouldRemoveAll = true; + } + + private void finishRemovingAll() { + // Don't clear incomingTweens here, on the assumption that A) removeAll already cleared it + // and B) there's a possibility more have been added since then, and they *shouldn't* get + // cleared. + tweens.clear(); + shouldRemoveAll = false; + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleDebugLogger.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleDebugLogger.java new file mode 100644 index 000000000..7efcc0f17 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleDebugLogger.java @@ -0,0 +1,30 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.logging; + +import com.google.android.apps.santatracker.util.SantaLog; + +/** + * A stub logger for the purposes of testing output of log statements in the Pineapple 2016 games. + */ +public class DoodleDebugLogger extends DoodleLogger { + private static final String TAG = DoodleDebugLogger.class.getSimpleName(); + + @Override + public void logEvent(DoodleLogEvent event) { + SantaLog.d(TAG, event.toString()); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleLogEvent.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleLogEvent.java new file mode 100644 index 000000000..e794103fb --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleLogEvent.java @@ -0,0 +1,117 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.logging; + +import androidx.annotation.Nullable; + +/** A class used for constructing log events for the Pineapple 2016 games. */ +public class DoodleLogEvent { + public static final String DEFAULT_DOODLE_NAME = "doodle_game"; + + public static final String MUTE_CLICKED = "clicked mute"; + public static final String UNMUTE_CLICKED = "clicked unmute"; + public static final String PAUSE_CLICKED = "clicked pause"; + public static final String UNPAUSE_CLICKED = "clicked unpause"; + public static final String REPLAY_CLICKED = "clicked replay"; + public static final String SHARE_CLICKED = "clicked share"; + public static final String HOME_CLICKED = "clicked home"; + public static final String LOADING_COMPLETE = "loading complete"; + public static final String DOODLE_LAUNCHED = "doodle launched"; + public static final String GAME_OVER = "game over"; + + public static final String DISTINCT_GAMES_PLAYED = "distinct games"; + public static final String RUNNING_GAME_TYPE = "running"; + public static final String PRESENT_TOSS_GAME_TYPE = "tossing"; + public static final String SWIMMING_GAME_TYPE = "swimming"; + + public final String doodleName; + public final String eventName; + @Nullable public final String eventSubType; + @Nullable public final Float eventValue1; + @Nullable public final Float eventValue2; + @Nullable public final Long latencyMs; + + private DoodleLogEvent( + String doodleName, + String eventName, + @Nullable String eventSubType, + @Nullable Float eventValue1, + @Nullable Float eventValue2, + @Nullable Long latencyMs) { + this.doodleName = doodleName; + this.eventName = eventName; + this.eventSubType = eventSubType; + this.eventValue1 = eventValue1; + this.eventValue2 = eventValue2; + this.latencyMs = latencyMs; + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("DoodleLogEvent(" + doodleName); + stringBuilder.append(", " + eventName); + stringBuilder.append(", " + eventSubType); + stringBuilder.append(", " + eventValue1); + stringBuilder.append(", " + eventValue2); + stringBuilder.append(", " + latencyMs + ")"); + return stringBuilder.toString(); + } + + /** A helper class to build PineappleLogEvents. */ + public static class Builder { + private String doodleName; + private String eventName; + @Nullable private String eventSubType; + @Nullable private Float eventValue1; + @Nullable private Float eventValue2; + @Nullable private Long latencyMs; + + public Builder(String doodleName, String eventName) { + this.doodleName = doodleName; + this.eventName = eventName; + this.eventSubType = null; + this.eventValue1 = null; + this.eventValue2 = null; + this.latencyMs = null; + } + + public Builder withEventSubType(String eventSubType) { + this.eventSubType = eventSubType; + return this; + } + + public Builder withEventValue1(float eventValue1) { + this.eventValue1 = eventValue1; + return this; + } + + public Builder withEventValue2(float eventValue2) { + this.eventValue2 = eventValue2; + return this; + } + + public Builder withLatencyMs(long latencyMs) { + this.latencyMs = latencyMs; + return this; + } + + public DoodleLogEvent build() { + return new DoodleLogEvent( + doodleName, eventName, eventSubType, eventValue1, eventValue2, latencyMs); + } + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleLogTimer.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleLogTimer.java new file mode 100644 index 000000000..c6e78c03c --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleLogTimer.java @@ -0,0 +1,80 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.logging; + +import androidx.annotation.VisibleForTesting; + +/** A helper for timing log events in the Pineapple 2016 games. */ +public class DoodleLogTimer { + private static DoodleLogTimer instance; + private long startTimeMs; + private long pauseTimeMs; + private boolean isPaused; + private LogClock clock; + + private DoodleLogTimer() { + this(new LogClock()); + } + + @VisibleForTesting + DoodleLogTimer(LogClock clock) { + this.clock = clock; + startTimeMs = clock.currentTimeMillis(); + } + + public static DoodleLogTimer getInstance() { + if (instance == null) { + instance = new DoodleLogTimer(); + } + return instance; + } + + public void reset() { + startTimeMs = clock.currentTimeMillis(); + pauseTimeMs = clock.currentTimeMillis(); + unpause(); + } + + public long timeElapsedMs() { + if (isPaused) { + return pauseTimeMs - startTimeMs; + } + return clock.currentTimeMillis() - startTimeMs; + } + + public void pause() { + if (!isPaused) { + pauseTimeMs = clock.currentTimeMillis(); + isPaused = true; + } + } + + public void unpause() { + if (isPaused) { + long pauseDurationMs = clock.currentTimeMillis() - pauseTimeMs; + startTimeMs += pauseDurationMs; + isPaused = false; + } + } + + /** Wrapper around System.currentTimeMillis so that we can test DoodleLogTimer. */ + @VisibleForTesting + static class LogClock { + public long currentTimeMillis() { + return System.currentTimeMillis(); + } + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleLogger.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleLogger.java new file mode 100644 index 000000000..2de770a01 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleLogger.java @@ -0,0 +1,57 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.logging; + +import android.content.Context; +import android.content.SharedPreferences; +import android.os.AsyncTask; + +/** Interface for logging DoodleEvents within the pineapple games. */ +public abstract class DoodleLogger { + private static final String PREFS_NAME = "PineappleLoggerPrefs"; + + public abstract void logEvent(DoodleLogEvent event); + + public void logGameLaunchEvent( + final Context context, final String gameType, final String eventName) { + new AsyncTask() { + @Override + protected Void doInBackground(Void... voids) { + SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME, 0); + SharedPreferences.Editor editor = sharedPreferences.edit(); + + int gamePlays = sharedPreferences.getInt(gameType, 0); + int distinctGamesPlayed = + sharedPreferences.getInt(DoodleLogEvent.DISTINCT_GAMES_PLAYED, 0); + if (gamePlays == 0) { + // If this is our first time playing this game, increment distinct games played. + editor.putInt(DoodleLogEvent.DISTINCT_GAMES_PLAYED, ++distinctGamesPlayed); + } + editor.putInt(gameType, ++gamePlays); + editor.commit(); + + logEvent( + new DoodleLogEvent.Builder(DoodleLogEvent.DEFAULT_DOODLE_NAME, eventName) + .withEventSubType(gameType) + .withEventValue1(gamePlays) + .withEventValue2(distinctGamesPlayed) + .build()); + + return null; + } + }.execute(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleNullLogger.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleNullLogger.java new file mode 100644 index 000000000..ef6837e7a --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/logging/DoodleNullLogger.java @@ -0,0 +1,25 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.logging; + +/** A stub of a logger which does nothing. */ +public class DoodleNullLogger extends DoodleLogger { + + @Override + public void logEvent(DoodleLogEvent event) { + // Do nothing. + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/physics/Polygon.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/physics/Polygon.java new file mode 100644 index 000000000..12edc7c0e --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/physics/Polygon.java @@ -0,0 +1,357 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.physics; + +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import com.google.android.apps.santatracker.doodles.shared.Constants; +import com.google.android.apps.santatracker.doodles.shared.Vector2D; +import java.util.ArrayList; +import java.util.List; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * A general polygon class (either concave or convex) which can tell whether or not a point is + * inside of it. + * + *

+ * + *

NOTE: vertex winding order affects the normals of the line segments, and can affect things + * like collisions. A non-inverted (normals pointed out) polygon should have its vertices wound + * clockwise. + */ +public class Polygon { + private static final String TAG = Polygon.class.getSimpleName(); + private static final float EPSILON = 0.0001f; + private static final float VERTEX_RADIUS = 10; + public List vertices; + public List normals; + public Vector2D min; + public Vector2D max; + private Paint vertexPaint; + private Paint midpointPaint; + private Paint linePaint; + private boolean isInverted; + + public Polygon(List vertices) { + this.vertices = vertices; + min = Vector2D.get(0, 0); + max = Vector2D.get(0, 0); + + vertexPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + vertexPaint.setColor(Color.RED); + + midpointPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + midpointPaint.setColor(Color.GREEN); + midpointPaint.setAlpha(100); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(Color.WHITE); + linePaint.setStrokeWidth(5); + + updateExtents(); + updateInversionStatus(); + calculateNormals(); + } + + public static Polygon fromJSON(JSONArray json) throws JSONException { + List vertices = new ArrayList<>(); + for (int i = 0; i < json.length(); i++) { + JSONObject vertexJson = json.getJSONObject(i); + Vector2D vertex = + Vector2D.get( + (float) vertexJson.getDouble("x"), (float) vertexJson.getDouble("y")); + vertices.add(vertex); + } + return new Polygon(vertices); + } + + public void updateExtents() { + min.set(this.vertices.get(0)); + max.set(this.vertices.get(0)); + for (int i = 0; i < vertices.size(); i++) { + Vector2D point = vertices.get(i); + min.x = Math.min(min.x, point.x); + min.y = Math.min(min.y, point.y); + max.x = Math.max(max.x, point.x); + max.y = Math.max(max.y, point.y); + } + } + + public void calculateNormals() { + normals = new ArrayList<>(); + for (int i = 0; i < vertices.size(); i++) { + Vector2D start = vertices.get(i); + Vector2D end = vertices.get((i + 1) % vertices.size()); + normals.add(Vector2D.get(end).subtract(start).toNormal()); + } + } + + public float getWidth() { + return max.x - min.x; + } + + public float getHeight() { + return max.y - min.y; + } + + public void moveTo(float x, float y) { + float deltaX = x - min.x; + float deltaY = y - min.y; + move(deltaX, deltaY); + } + + public void move(float x, float y) { + for (int i = 0; i < vertices.size(); i++) { + Vector2D vertex = vertices.get(i); + vertex.x += x; + vertex.y += y; + } + // Rather than update the extents by checking all of the vertices here, we can just update + // them + // manually (they will move by the same amount as the rest of the vertices). + min.x += x; + min.y += y; + max.x += x; + max.y += y; + } + + public void moveVertex(int index, Vector2D delta) { + Vector2D vertex = vertices.get(index); + vertex.x += delta.x; + vertex.y += delta.y; + updateExtents(); + updateInversionStatus(); + } + + public void addVertexAfter(int index) { + int nextIndex = index < vertices.size() - 1 ? index + 1 : 0; + Vector2D newVertex = Util.getMidpoint(vertices.get(index), vertices.get(nextIndex)); + vertices.add(nextIndex, newVertex); + updateExtents(); + calculateNormals(); + } + + public void removeVertexAt(int index) { + vertices.remove(index); + updateExtents(); + } + + /** + * Return the index of the vertex selected by the given point. + * + * @param point the point at which to check for a selected vertex. + * @param scale the scale of the world, for slackening the selection radius if needed. + * @return the index of the selected vertex, or -1 if no vertex was selected. + */ + public int getSelectedIndex(Vector2D point, float scale) { + for (int i = 0; i < vertices.size(); i++) { + Vector2D vertex = vertices.get(i); + if (point.distanceTo(vertex) + < Math.max(Constants.SELECTION_RADIUS, Constants.SELECTION_RADIUS / scale)) { + return i; + } + } + return -1; + } + + public int getMidpointIndex(Vector2D point, float scale) { + for (int i = 0; i < vertices.size(); i++) { + Vector2D start = vertices.get(i); + Vector2D end = vertices.get(i < vertices.size() - 1 ? i + 1 : 0); + if (point.distanceTo(Util.getMidpoint(start, end)) + < Math.max(Constants.SELECTION_RADIUS, Constants.SELECTION_RADIUS / scale)) { + return i; + } + } + return -1; + } + + /** + * Return whether or not this polygon is inverted (i.e., whether or not the polygon has a normal + * which points inwards. + * + * @return true if the polygon is inverted, false otherwise. + */ + public boolean isInverted() { + return isInverted; + } + + /** + * Calculate whether or not this polygon is inverted. This checks to see if the point which is + * one unit in the normal direction on the polygon's first segment is within the bounds of the + * polygon. If this is the case, then the normal points inwards and the polygon is inverted. + * Otherwise, the polygon is not inverted. + * + *

+ * + *

Note: This doesn't deal with polygons which are partially inverted. These sorts of + * polygons should be avoided, as they will break this function. + */ + private void updateInversionStatus() { + Vector2D start = vertices.get(0); + Vector2D end = vertices.get(1); + Vector2D midpoint = Util.getMidpoint(start, end); + Vector2D normal = Vector2D.get(end).subtract(start).toNormal().scale(0.1f); + + if (contains(midpoint.add(normal))) { + isInverted = true; + } else { + isInverted = false; + } + normal.release(); + midpoint.release(); + } + + /** + * Return whether or not this polygon's collision boundaries contain a given point. A polygon + * contains a point iff the point is contained within the polygon's collision boundaries, + * regardless of the direction of the polygon's normals. + * + * @param point the point to check + * @return true if this polygon contains the point, false otherwise. + */ + public boolean contains(Vector2D point) { + // If the bounding box doesn't contain the point, we don't need to do any more calculations. + if (!Util.pointIsWithinBounds(min, max, point)) { + return false; + } + + // Cast vertical ray from point to outside polygon and counting crossings. Point is in + // polygon + // iff number of edges crossed is odd. + + // Find a Y value that's definitely outside the polygon. + float maxY = max.y + 1; + Vector2D outsidePoint = Vector2D.get(point.x, maxY); + + // Check how many edges lie between (p.x, p.y) and (p.x, maxY). + boolean inside = false; + for (int i = 0; i < vertices.size(); i++) { + Vector2D p1 = vertices.get(i); + Vector2D p2; + if (i < vertices.size() - 1) { + p2 = vertices.get(i + 1); + } else { + p2 = vertices.get(0); + } + + // First check endpoints. Hitting left-most point counts, hitting right-most + // doesn't (to weed out case where ray hits 2 lines at their joining vertex) } + if (p1.y >= point.y && Math.abs(p1.x - point.x) <= EPSILON) { + if (p2.x >= point.x) { + inside = !inside; + } + continue; + } else if (p2.y >= point.y && Math.abs(p2.x - point.x) <= EPSILON) { + if (p1.x >= point.x) { + inside = !inside; + } + continue; + } + + // Now check for intersection. + if (Util.lineSegmentIntersectsLineSegment(p1, p2, point, outsidePoint)) { + inside = !inside; + } + } + outsidePoint.release(); + return inside; + } + + public LineSegment getIntersectingLineSegment(Vector2D p, Vector2D q) { + for (int i = 0; i < vertices.size(); i++) { + Vector2D p1 = vertices.get(i); + Vector2D p2; + if (i < vertices.size() - 1) { + p2 = vertices.get(i + 1); + } else { + p2 = vertices.get(0); + } + + if (Util.lineSegmentIntersectsLineSegment(p1, p2, p, q)) { + return new LineSegment(p1, p2); + } + } + return null; + } + + public void draw(Canvas canvas) { + for (int i = 0; i < vertices.size(); i++) { + Vector2D start = vertices.get(i); + Vector2D end; + if (i < vertices.size() - 1) { + end = vertices.get(i + 1); + } else { + end = vertices.get(0); + } + Vector2D midpoint = Util.getMidpoint(start, end); + Vector2D normal = Vector2D.get(end).subtract(start).toNormal(); + + canvas.drawCircle(start.x, start.y, VERTEX_RADIUS, vertexPaint); + canvas.drawLine(start.x, start.y, end.x, end.y, linePaint); + canvas.drawCircle(midpoint.x, midpoint.y, VERTEX_RADIUS / 2, midpointPaint); + canvas.drawLine( + midpoint.x, + midpoint.y, + midpoint.x + normal.x * 20, + midpoint.y + normal.y * 20, + linePaint); + + midpoint.release(); + normal.release(); + } + } + + public void setPaintColors(int vertexColor, int lineColor, int midpointColor) { + vertexPaint.setColor(vertexColor); + linePaint.setColor(lineColor); + midpointPaint.setColor(midpointColor); + } + + public JSONArray toJSON() throws JSONException { + JSONArray json = new JSONArray(); + for (int i = 0; i < vertices.size(); i++) { + JSONObject vertexJson = new JSONObject(); + Vector2D vertex = vertices.get(i); + vertexJson.put("x", (double) vertex.x); + vertexJson.put("y", (double) vertex.y); + json.put(vertexJson); + } + return json; + } + + /** + * A class to specify the starting and ending point of a line segment. Currently only used in + * determining which line segment is being collided with, so we can determine the normal vector. + */ + public static class LineSegment { + public Vector2D start; + public Vector2D end; + + public LineSegment(Vector2D start, Vector2D end) { + this.start = start; + this.end = end; + } + + public Vector2D getDirection() { + return Vector2D.get(end).subtract(start); + } + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/physics/Util.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/physics/Util.java new file mode 100644 index 000000000..45f3ed6a0 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/physics/Util.java @@ -0,0 +1,176 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.physics; + +import com.google.android.apps.santatracker.doodles.shared.Vector2D; +import java.util.List; + +/** A utility class for physics-related functions. */ +public final class Util { + private static final String TAG = Util.class.getSimpleName(); + private static final float EPSILON = 0.0001f; + private static final int COLLINEAR = 0; + private static final int CLOCKWISE = 1; + private static final int COUNTERCLOCKWISE = 2; + + private Util() { + // Don't allow instantiation of this class. + } + + /** + * Return whether the point is within the axis-aligned rectangle defined by p and q. + * + * @param p first bounding point. + * @param q second bounding point. + * @param point the point to check. + * @return true if point is within the bounds defined by p and q, false otherwise. + */ + public static boolean pointIsWithinBounds(Vector2D p, Vector2D q, Vector2D point) { + return point.x >= Math.min(p.x, q.x) + && point.x <= Math.max(p.x, q.x) + && point.y >= Math.min(p.y, q.y) + && point.y <= Math.max(p.y, q.y); + } + + /** + * Find the orientation of the ordered triplet of points. They are either clockwise, + * counterclockwise, or collinear. Implementation based on: http://goo.gl/a44iML + */ + private static int orientation(Vector2D p, Vector2D q, Vector2D r) { + float value = (q.y - p.y) * (r.x - q.x) - (r.y - q.y) * (q.x - p.x); + + // Use this instead of Math.abs(value) here because it is faster. + if (value < EPSILON && value > -EPSILON) { + return COLLINEAR; + } + return value > 0 ? CLOCKWISE : COUNTERCLOCKWISE; + } + + /** + * Compute whether or not lines 1 and 2 intersect. Implementation based on: + * http://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/ + * + * @param p1 The starting point of line 1 + * @param q1 The ending point of line 1 + * @param p2 The starting point of line 2 + * @param q2 The ending point of line 2 + * @return true if 1 and 2 intersect, false otherwise. + */ + public static boolean lineSegmentIntersectsLineSegment( + Vector2D p1, Vector2D q1, Vector2D p2, Vector2D q2) { + int o1 = orientation(p1, q1, p2); + int o2 = orientation(p1, q1, q2); + int o3 = orientation(p2, q2, p1); + int o4 = orientation(p2, q2, q1); + + // General case + if (o1 != o2 && o3 != o4) { + return true; + } + + // Special cases + if (o1 == 0 && pointIsWithinBounds(p1, q1, p2) + || o2 == 0 && pointIsWithinBounds(p1, q1, q2) + || o3 == 0 && pointIsWithinBounds(p2, q2, p1) + || o4 == 0 && pointIsWithinBounds(p2, q2, q1)) { + return true; + } + return false; + } + + /** + * Return whether or not two rectangles intersect. This uses a basic form of the separating axis + * theorem which should be faster than running a full polygon-to-polygon check. + * + * @return true if the rectangles intersect, false otherwise. + */ + public static boolean rectIntersectsRect( + float x1, float y1, float w1, float h1, float x2, float y2, float w2, float h2) { + float halfWidth1 = w1 / 2; + float halfWidth2 = w2 / 2; + float halfHeight1 = h1 / 2; + float halfHeight2 = h2 / 2; + + float horizontalThreshold = halfWidth1 + halfWidth2; + float verticalThreshold = halfHeight1 + halfHeight2; + + float horizontalDistance = Math.abs(x1 + halfWidth1 - (x2 + halfWidth2)); + float verticalDistance = Math.abs(y1 + halfHeight1 - (y2 + halfHeight2)); + + return horizontalDistance < horizontalThreshold && verticalDistance < verticalThreshold; + } + + /** + * Use the separating axis theorem to determine whether or not two convex polygons intersect. + * + * @return true if the polygons intersect, false otherwise. + */ + public static boolean convexPolygonIntersectsConvexPolygon(Polygon p1, Polygon p2) { + for (int i = 0; i < p1.normals.size(); i++) { + Vector2D normal = p1.normals.get(i); + float p1Min = getMinProjectionInDirection(normal, p1.vertices); + float p1Max = getMaxProjectionInDirection(normal, p1.vertices); + float p2Min = getMinProjectionInDirection(normal, p2.vertices); + float p2Max = getMaxProjectionInDirection(normal, p2.vertices); + if (p1Max < p2Min || p2Max < p1Min) { + // If there is a separating axis, these polygons do not intersect. + return false; + } + } + for (int i = 0; i < p2.normals.size(); i++) { + Vector2D normal = p2.normals.get(i); + float p1Min = getMinProjectionInDirection(normal, p1.vertices); + float p1Max = getMaxProjectionInDirection(normal, p1.vertices); + float p2Min = getMinProjectionInDirection(normal, p2.vertices); + float p2Max = getMaxProjectionInDirection(normal, p2.vertices); + if (p1Max < p2Min || p2Max < p1Min) { + // If there is a separating axis, these polygons do not intersect. + return false; + } + } + return true; + } + + private static float getMaxProjectionInDirection(Vector2D direction, List points) { + float max = points.get(0).dot(direction); + for (int i = 1; i < points.size(); i++) { + max = Math.max(max, points.get(i).dot(direction)); + } + return max; + } + + private static float getMinProjectionInDirection(Vector2D direction, List points) { + float min = points.get(0).dot(direction); + for (int i = 1; i < points.size(); i++) { + min = Math.min(min, points.get(i).dot(direction)); + } + return min; + } + + public static Vector2D getMidpoint(Vector2D p, Vector2D q) { + float deltaX = q.x - p.x; + float deltaY = q.y - p.y; + return Vector2D.get(p.x + deltaX / 2, p.y + deltaY / 2); + } + + public static float clamp(float value, float lowerBound, float upperBound) { + return Math.max(lowerBound, Math.min(value, upperBound)); + } + + public static int clamp(int value, int lowerBound, int upperBound) { + return Math.max(lowerBound, Math.min(value, upperBound)); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/DoodleMediaPlayer.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/DoodleMediaPlayer.java new file mode 100644 index 000000000..c032217e4 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/DoodleMediaPlayer.java @@ -0,0 +1,39 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.sound; + +import android.media.MediaPlayer; + +/** A wrapper around MediaPlayer so that we can extend its behavior. */ +public interface DoodleMediaPlayer { + void start(); + + boolean isPlaying(); + + void pause(); + + MediaPlayer getMediaPlayer(); + + void setNextMediaPlayer(MediaPlayer mediaPlayer); + + void setVolume(float volume); + + void mute(); + + void unmute(); + + void release(); +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/DoodleMediaPlayerImpl.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/DoodleMediaPlayerImpl.java new file mode 100644 index 000000000..334f93807 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/DoodleMediaPlayerImpl.java @@ -0,0 +1,113 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.sound; + +import android.content.Context; +import android.media.MediaPlayer; +import com.google.android.apps.santatracker.util.SantaLog; + +/** + * A wrapper around a MediaPlayer so that we can define our own LoopingMediaPlayer and have it use a + * common interface. + */ +public class DoodleMediaPlayerImpl implements DoodleMediaPlayer { + private static final String TAG = DoodleMediaPlayerImpl.class.getSimpleName(); + + private MediaPlayer mediaPlayer; + private float volume; + + private DoodleMediaPlayerImpl(Context context, int resId) { + mediaPlayer = MediaPlayer.create(context, resId); + } + + public static DoodleMediaPlayerImpl create(Context context, int resId) { + return new DoodleMediaPlayerImpl(context, resId); + } + + @Override + public void start() { + try { + mediaPlayer.start(); + } catch (IllegalStateException e) { + SantaLog.w(TAG, "start() failed: " + e.toString()); + } + } + + @Override + public boolean isPlaying() { + return mediaPlayer.isPlaying(); + } + + @Override + public void pause() { + try { + mediaPlayer.pause(); + } catch (IllegalStateException e) { + SantaLog.w(TAG, "pause() failed: " + e.toString()); + } + } + + @Override + public MediaPlayer getMediaPlayer() { + return mediaPlayer; + } + + @Override + public void setNextMediaPlayer(MediaPlayer next) { + try { + mediaPlayer.setNextMediaPlayer(next); + } catch (IllegalStateException e) { + SantaLog.w(TAG, "setNextMediaPlayer() failed: " + e.toString()); + } + } + + @Override + public void setVolume(float volume) { + this.volume = volume; + try { + mediaPlayer.setVolume(volume, volume); + } catch (IllegalStateException e) { + SantaLog.w(TAG, "setVolume() failed: " + e.toString()); + } + } + + @Override + public void mute() { + try { + mediaPlayer.setVolume(0, 0); + } catch (IllegalStateException e) { + SantaLog.w(TAG, "mute() failed: " + e.toString()); + } + } + + @Override + public void unmute() { + try { + mediaPlayer.setVolume(volume, volume); + } catch (IllegalStateException e) { + SantaLog.w(TAG, "unmute() failed: " + e.toString()); + } + } + + @Override + public void release() { + try { + mediaPlayer.release(); + } catch (IllegalStateException e) { + SantaLog.w(TAG, "release() failed: " + e.toString()); + } + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/LoopingMediaPlayer.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/LoopingMediaPlayer.java new file mode 100644 index 000000000..79c995742 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/LoopingMediaPlayer.java @@ -0,0 +1,159 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.sound; + +import android.content.Context; +import android.content.res.AssetFileDescriptor; +import android.media.MediaPlayer; +import android.media.MediaPlayer.OnCompletionListener; +import com.google.android.apps.santatracker.util.SantaLog; + +/** A wrapper around a MediaPlayer which allows for a gapless, looping track. */ +public class LoopingMediaPlayer implements DoodleMediaPlayer { + private static final String TAG = LoopingMediaPlayer.class.getSimpleName(); + + private MediaPlayer currentPlayer; + private MediaPlayer nextPlayer; + private AssetFileDescriptor soundFileDescriptor; + private float volume; + + private LoopingMediaPlayer(Context context, int resId) { + soundFileDescriptor = context.getResources().openRawResourceFd(resId); + + currentPlayer = MediaPlayer.create(context, resId); + nextPlayer = MediaPlayer.create(context, resId); + currentPlayer.setNextMediaPlayer(nextPlayer); + + currentPlayer.setOnCompletionListener( + new OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mediaPlayer) { + try { + currentPlayer.reset(); + currentPlayer.setDataSource( + soundFileDescriptor.getFileDescriptor(), + soundFileDescriptor.getStartOffset(), + soundFileDescriptor.getLength()); + currentPlayer.prepare(); + nextPlayer.setNextMediaPlayer(currentPlayer); + } catch (Exception e) { + SantaLog.w(TAG, "onCompletion: unexpected exception", e); + } + } + }); + nextPlayer.setOnCompletionListener( + new OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mediaPlayer) { + try { + nextPlayer.reset(); + nextPlayer.setDataSource( + soundFileDescriptor.getFileDescriptor(), + soundFileDescriptor.getStartOffset(), + soundFileDescriptor.getLength()); + nextPlayer.prepare(); + currentPlayer.setNextMediaPlayer(nextPlayer); + } catch (Exception e) { + SantaLog.w(TAG, "onCompletion: unexpected exception", e); + } + } + }); + } + + public static LoopingMediaPlayer create(Context context, int resId) { + return new LoopingMediaPlayer(context, resId); + } + + @Override + public void start() { + try { + currentPlayer.start(); + } catch (IllegalStateException e) { + SantaLog.w(TAG, "start() failed: " + e.toString()); + } + } + + @Override + public boolean isPlaying() { + return currentPlayer.isPlaying() || nextPlayer.isPlaying(); + } + + @Override + public void pause() { + try { + currentPlayer.pause(); + nextPlayer.pause(); + } catch (Exception e) { + SantaLog.w(TAG, "pause() failed: " + e.toString()); + } + } + + @Override + public MediaPlayer getMediaPlayer() { + return currentPlayer; + } + + @Override + public void setNextMediaPlayer(MediaPlayer mediaPlayer) { + try { + currentPlayer.setNextMediaPlayer(mediaPlayer); + } catch (Exception e) { + SantaLog.w(TAG, "setNextMediaPlayer() failed: ", e); + } + } + + @Override + public void setVolume(float volume) { + this.volume = volume; + try { + currentPlayer.setVolume(volume, volume); + nextPlayer.setVolume(volume, volume); + } catch (Exception e) { + SantaLog.w(TAG, "setVolume() failed: ", e); + } + } + + @Override + public void mute() { + try { + currentPlayer.setVolume(0, 0); + nextPlayer.setVolume(0, 0); + } catch (Exception e) { + SantaLog.w(TAG, "mute() failed: ", e); + } + } + + @Override + public void unmute() { + try { + currentPlayer.setVolume(volume, volume); + nextPlayer.setVolume(volume, volume); + } catch (Exception e) { + SantaLog.w(TAG, "unmute() failed: ", e); + } + } + + @Override + public void release() { + try { + currentPlayer.release(); + nextPlayer.release(); + soundFileDescriptor.close(); + } catch (Exception e) { + SantaLog.w(TAG, "release() failed: ", e); + } + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/SoundManager.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/SoundManager.java new file mode 100644 index 000000000..0e31c1a53 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/sound/SoundManager.java @@ -0,0 +1,319 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.apps.santatracker.doodles.shared.sound; + +import android.content.Context; +import android.media.AudioManager; +import android.media.SoundPool; +import android.os.AsyncTask; +import com.google.android.apps.santatracker.AudioConstants; +import com.google.android.apps.santatracker.data.SantaPreferences; +import com.google.android.apps.santatracker.util.SantaLog; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** A manager for all of the different sounds which will be played in the games. */ +public class SoundManager { + private static final String TAG = SoundManager.class.getSimpleName(); + public static boolean soundsAreMuted; + private static SoundManager instance; + private final Object mediaPlayerLock = new Object(); + private final Object soundPoolLock = new Object(); + + // A map from resource ID to a media player which can play the sound clip. + private Map mediaPlayerMap; + // A map from resource ID to a sound pool containing the sound clip. + private Map soundPoolMap; + // A set of resource IDs for sounds which have been individually muted. These shouldn't be + // unmuted + // when the mute option is toggled. + private Set mutedSounds; + + private SantaPreferences mSantaPreferences; + + private SoundManager() { + mediaPlayerMap = new HashMap<>(); + soundPoolMap = new HashMap<>(); + mutedSounds = new HashSet<>(); + } + + public static SoundManager getInstance() { + if (instance == null) { + instance = new SoundManager(); + } + return instance; + } + + public void loadLongSound(Context context, int resId, boolean looping, float volume) { + if (mediaPlayerMap.containsKey(resId)) { + return; + } + DoodleMediaPlayer mediaPlayer; + if (looping) { + mediaPlayer = LoopingMediaPlayer.create(context, resId); + } else { + mediaPlayer = DoodleMediaPlayerImpl.create(context, resId); + } + mediaPlayer.setVolume(volume); + if (soundsAreMuted) { + mediaPlayer.mute(); + } + synchronized (mediaPlayerLock) { + mediaPlayerMap.put(resId, mediaPlayer); + } + } + + public void loadLongSound(Context context, int resId, boolean looping) { + // Make this quiet by default so that it doesn't overpower the in-game sounds. + loadLongSound(context, resId, looping, AudioConstants.DEFAULT_BACKGROUND_VOLUME); + } + + public void loadShortSound( + final Context context, final int resId, final boolean looping, final float volume) { + if (soundPoolMap.containsKey(resId)) { + return; + } + new AsyncTask() { + @Override + protected Void doInBackground(Void... params) { + SoundPoolContainer container = + new SoundPoolContainer(context, resId, looping, volume); + synchronized (soundPoolLock) { + soundPoolMap.put(resId, container); + } + return null; + } + }.execute(); + } + + public void loadShortSound(Context context, int resId) { + loadShortSound(context, resId, false, AudioConstants.DEFAULT_SOUND_EFFECT_VOLUME); + } + + public void play(int resId) { + if (mediaPlayerMap.containsKey(resId)) { + mediaPlayerMap.get(resId).start(); + } else if (soundPoolMap.containsKey(resId)) { + SoundPoolContainer container = soundPoolMap.get(resId); + float vol = soundsAreMuted ? 0 : container.volume; + container.streamId = + container.soundPool.play( + container.soundId, vol, vol, 1, container.looping ? -1 : 0, 1); + } + } + + public void pauseAll() { + synchronized (mediaPlayerLock) { + for (int resId : mediaPlayerMap.keySet()) { + pause(resId); + } + } + synchronized (soundPoolLock) { + for (int resId : soundPoolMap.keySet()) { + pause(resId); + } + } + } + + public void pause(int resId) { + if (mediaPlayerMap.containsKey(resId)) { + DoodleMediaPlayer mediaPlayer = mediaPlayerMap.get(resId); + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + } + } else if (soundPoolMap.containsKey(resId)) { + soundPoolMap.get(resId).soundPool.autoPause(); + } + } + + public void pauseShortSounds() { + synchronized (soundPoolLock) { + for (SoundPoolContainer container : soundPoolMap.values()) { + container.soundPool.autoPause(); + } + } + } + + public void resumeShortSounds() { + synchronized (soundPoolLock) { + for (SoundPoolContainer container : soundPoolMap.values()) { + container.soundPool.autoResume(); + } + } + } + + public void playLongSoundsInSequence(int[] soundIds) { + for (int i = 0; i < soundIds.length; i++) { + if (isPlayingLongSound(soundIds[i])) { + // Don't try to play long sounds which are already playing. + return; + } + } + + try { + DoodleMediaPlayer[] sounds = new DoodleMediaPlayer[soundIds.length]; + for (int i = 0; i < soundIds.length; i++) { + sounds[i] = mediaPlayerMap.get(soundIds[i]); + if (sounds[i] == null) { + return; + } + if (i > 0) { + sounds[i - 1].setNextMediaPlayer(sounds[i].getMediaPlayer()); + } + } + sounds[0].start(); + } catch (IllegalStateException e) { + SantaLog.d(TAG, "playLongSoundsInSequence() failed: " + e.toString()); + } + } + + public boolean isPlayingLongSound(int resId) { + if (mediaPlayerMap.containsKey(resId)) { + return mediaPlayerMap.get(resId).isPlaying(); + } + return false; + } + + public void releaseAll() { + synchronized (mediaPlayerLock) { + for (DoodleMediaPlayer mediaPlayer : mediaPlayerMap.values()) { + mediaPlayer.release(); + } + mediaPlayerMap.clear(); + } + synchronized (soundPoolLock) { + for (SoundPoolContainer container : soundPoolMap.values()) { + container.soundPool.release(); + } + soundPoolMap.clear(); + } + } + + public void release(int resId) { + if (mediaPlayerMap.containsKey(resId)) { + mediaPlayerMap.get(resId).release(); + mediaPlayerMap.remove(resId); + } + if (soundPoolMap.containsKey(resId)) { + soundPoolMap.get(resId).soundPool.release(); + soundPoolMap.remove(resId); + } + } + + public void mute() { + synchronized (mediaPlayerLock) { + for (int resId : mediaPlayerMap.keySet()) { + muteInternal(resId, false); + } + } + synchronized (soundPoolLock) { + for (int resId : soundPoolMap.keySet()) { + muteInternal(resId, false); + } + } + soundsAreMuted = true; + } + + public void mute(int resId) { + muteInternal(resId, true); + } + + private void muteInternal(int resId, boolean addToMutedSounds) { + if (mediaPlayerMap.containsKey(resId)) { + mediaPlayerMap.get(resId).mute(); + } + if (soundPoolMap.containsKey(resId)) { + SoundPoolContainer container = soundPoolMap.get(resId); + container.soundPool.setVolume(container.streamId, 0, 0); + } + if (addToMutedSounds) { + mutedSounds.add(resId); + } + } + + public void unmute() { + soundsAreMuted = false; + synchronized (mediaPlayerLock) { + for (int resId : mediaPlayerMap.keySet()) { + if (!mutedSounds.contains(resId)) { + unmuteInternal(resId, false); + } + } + } + synchronized (soundPoolLock) { + for (int resId : soundPoolMap.keySet()) { + if (!mutedSounds.contains(resId)) { + unmuteInternal(resId, false); + } + } + } + } + + public void unmute(int resId) { + unmuteInternal(resId, true); + } + + private void unmuteInternal(int resId, boolean removeFromMutedSounds) { + if (soundsAreMuted) { + return; + } + if (mediaPlayerMap.containsKey(resId)) { + mediaPlayerMap.get(resId).unmute(); + } + if (soundPoolMap.containsKey(resId)) { + SoundPoolContainer container = soundPoolMap.get(resId); + container.soundPool.setVolume(container.streamId, container.volume, container.volume); + } + if (removeFromMutedSounds) { + mutedSounds.remove(resId); + } + } + + public void storeMutePreference(final Context context) { + if (mSantaPreferences == null) { + mSantaPreferences = new SantaPreferences(context.getApplicationContext()); + } + mSantaPreferences.setMuted(soundsAreMuted); + } + + public void loadMutePreference(final Context context) { + if (mSantaPreferences == null) { + mSantaPreferences = new SantaPreferences(context.getApplicationContext()); + } + if (mSantaPreferences.isMuted()) { + mute(); + } else { + unmute(); + } + } + + private static class SoundPoolContainer { + public final SoundPool soundPool; + public final int soundId; + public final boolean looping; + public final float volume; + public int streamId; + + public SoundPoolContainer(Context context, int resId, boolean looping, float volume) { + soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); + soundId = soundPool.load(context, resId, 1); + this.looping = looping; + this.volume = volume; + } + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/GameFragment.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/GameFragment.java new file mode 100644 index 000000000..0d0c6297b --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/GameFragment.java @@ -0,0 +1,390 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.views; + +import static com.google.android.apps.santatracker.doodles.shared.EventBus.GAME_LOADED; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.DEFAULT_DOODLE_NAME; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.LOADING_COMPLETE; + +import android.app.Activity; +import android.app.ActivityManager; +import android.app.Fragment; +import android.content.Context; +import android.os.AsyncTask; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import com.google.android.apps.santatracker.doodles.BaseDoodleActivity; +import com.google.android.apps.santatracker.doodles.R; +import com.google.android.apps.santatracker.doodles.shared.AndroidUtils; +import com.google.android.apps.santatracker.doodles.shared.EventBus; +import com.google.android.apps.santatracker.doodles.shared.GameLoop; +import com.google.android.apps.santatracker.doodles.shared.HistoryManager; +import com.google.android.apps.santatracker.doodles.shared.LogicRefreshThread; +import com.google.android.apps.santatracker.doodles.shared.UIRefreshHandler; +import com.google.android.apps.santatracker.doodles.shared.UIUtil; +import com.google.android.apps.santatracker.doodles.shared.animation.AnimatedSprite; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.Builder; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogTimer; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogger; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleNullLogger; +import com.google.android.apps.santatracker.doodles.shared.sound.SoundManager; +import com.google.android.apps.santatracker.invites.AppInvitesFragment; + +/** Base class for Pineapple game fragments. */ +public abstract class GameFragment extends Fragment + implements GameLoop, ScoreView.OnShareClickedListener { + + // Minimum length of the title screen. + public static final long TITLE_DURATION_MS = 1000; + + // Require 128MB and if we don't have it, downsample the resources. + private static final int AVAILABLE_MEMORY_REQUIRED = (2 << 27); + + // Note this is a context, not an activity. Use getActivity() for an activity. + public Context context; + public final DoodleLogger logger; + public boolean isDestroyed = false; + protected FrameLayout wrapper; + protected View titleView; + protected ScoreView scoreView; + protected PauseView pauseView; + protected LogicRefreshThread logicRefreshThread; + protected UIRefreshHandler uiRefreshHandler; + protected SoundManager soundManager; + protected HistoryManager historyManager; + protected boolean isFinishedLoading = false; + protected boolean isPaused = false; + protected PauseView.GamePausedListener gamePausedListener = + new PauseView.GamePausedListener() { + @Override + public void onPause() { + onGamePause(); + } + + @Override + public void onResume() { + onGameResume(); + } + + @Override + public void onReplay() { + onGameReplay(); + } + + @Override + public String gameType() { + return getGameType(); + } + + @Override + public float score() { + return getScore(); + } + }; + protected ScoreView.LevelFinishedListener levelFinishedListener = + new ScoreView.LevelFinishedListener() { + @Override + public void onReplay() { + onGameReplay(); + } + + @Override + public String gameType() { + return getGameType(); + } + + @Override + public float score() { + return getScore(); + } + + @Override + public int shareImageId() { + return getShareImageId(); + } + }; + protected boolean resumeAfterLoading; + private ImageView titleImageView; + private AsyncTask asyncLoadGameTask; + + public GameFragment() { + this.logger = new DoodleNullLogger(); + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + // TODO: Remove context from the field. Workaround not to change the existing code + this.context = context; + } + + @Override + public void onDetach() { + super.onDetach(); + this.context = null; + } + + @Override + public void onResume() { + super.onResume(); + if (context == null) { + return; + } + resume(); + if ((pauseView == null || pauseView.isPauseButtonEnabled) + && (scoreView == null || scoreView.getVisibility() != View.VISIBLE)) { + // If we aren't paused or finished, keep the screen on. + AndroidUtils.forceScreenToStayOn(getActivity()); + } + if (soundManager != null) { + soundManager.loadMutePreference(context); + } + } + + @Override + public void onPause() { + super.onPause(); + if (pauseView != null) { + pauseView.pause(); + } + resumeAfterLoading = false; + if (uiRefreshHandler != null) { + logicRefreshThread.stopHandler(); + uiRefreshHandler.stop(); + historyManager.save(); + } + if (soundManager != null) { + soundManager.pauseAll(); + soundManager.storeMutePreference(context); + } + AndroidUtils.allowScreenToTurnOff(getActivity()); + } + + // To be overrided by games if they want to do more cleanup on destroy. + protected void onDestroyHelper() {} + + @Override + public void onDestroyView() { + isDestroyed = true; + if (asyncLoadGameTask != null) { + asyncLoadGameTask.cancel(true); + } + EventBus.getInstance().clearListeners(); + AnimatedSprite.clearCache(); + if (soundManager != null) { + soundManager.releaseAll(); + } + onDestroyHelper(); + super.onDestroyView(); + } + + protected void resume() { + if (uiRefreshHandler == null) { + resumeAfterLoading = true; + } else { + logicRefreshThread.startHandler(this); + if (titleView == null || titleView.getVisibility() != View.VISIBLE) { + playMusic(); + } + } + } + + /** + * Loads the game. Do not override this function. Instead use the three helper functions: + * firstPassLoadOnUiThread, secondPassLoadOnBackgroundThread, finalPassLoadOnUiThread. + */ + public final void loadGame() { + ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); + ActivityManager activityManager = + (ActivityManager) + getActivity().getSystemService(android.content.Context.ACTIVITY_SERVICE); + activityManager.getMemoryInfo(mi); + if (mi.availMem < AVAILABLE_MEMORY_REQUIRED || AnimatedSprite.lastUsedSampleSize > 2) { + // Low available memory, go ahead and load things with a larger sample size. + AnimatedSprite.lastUsedSampleSize = 2; + } + + firstPassLoadOnUiThread(); + secondPassLoadOnBackgroundThread(); + finalPassLoadOnUiThread(); + + asyncLoadGameTask = + new AsyncTask() { + @Override + protected Void doInBackground(Void... params) { + if (getActivity() != null) { + secondPassLoadOnBackgroundThread(); + } + return null; + } + + @Override + protected void onPostExecute(Void result) { + if (getActivity() != null) { + finalPassLoadOnUiThread(); + } + } + }; + asyncLoadGameTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + + protected void firstPassLoadOnUiThread() {} + + protected void secondPassLoadOnBackgroundThread() { + EventBus.getInstance().clearListeners(); + } + + protected void finalPassLoadOnUiThread() {} + + protected void onFinishedLoading() { + DoodleLogTimer logTimer = DoodleLogTimer.getInstance(); + long latencyMs = logTimer.timeElapsedMs(); + logger.logEvent( + new Builder(DEFAULT_DOODLE_NAME, LOADING_COMPLETE) + .withEventSubType(getGameType()) + .withLatencyMs(latencyMs) + .build()); + EventBus.getInstance().sendEvent(GAME_LOADED, latencyMs); + logTimer.reset(); + if (pauseView != null) { + pauseView.onFinishedLoading(); + } + if (scoreView != null) { + scoreView.setVisibility(View.VISIBLE); + } + + isFinishedLoading = true; + } + + public boolean isFinishedLoading() { + return isFinishedLoading; + } + + protected void startHandlers() { + logicRefreshThread = new LogicRefreshThread(); + logicRefreshThread.start(); + uiRefreshHandler = new UIRefreshHandler(); + + // It's annoying when the GC kicks in during gameplay and makes the game stutter. Hint + // that now would be a good time to free up some space before the game starts. + System.gc(); + if (resumeAfterLoading) { + resume(); + } + } + + protected void playMusic() { + soundManager.play(R.raw.fruit_doodle_music); + } + + protected void hideTitle() { + if (titleView != null && titleView.getVisibility() == View.VISIBLE) { + UIUtil.fadeOutAndHide( + titleView, + 1, + 500, + new Runnable() { + @Override + public void run() { + if (titleImageView != null) { + titleImageView.setImageDrawable(null); + titleImageView = null; + } + } + }); + } + + playMusic(); + } + + public boolean isGamePaused() { + return isPaused; + } + + public void onGamePause() { + isPaused = true; + } + + protected void onGameResume() { + isPaused = false; + } + + protected void onGameReplay() { + replay(); + isPaused = false; + DoodleLogTimer.getInstance().reset(); + } + + protected abstract float getScore(); + + protected abstract int getShareImageId(); + + protected boolean onTitleTapped() { + return false; + } + + protected void replay() { + getActivity() + .runOnUiThread( + new Runnable() { + @Override + public void run() { + scoreView.resetToStartState(); + } + }); + } + + protected void loadSounds() { + soundManager.loadLongSound(context, R.raw.fruit_doodle_music, true); + soundManager.loadShortSound(context, R.raw.menu_item_click); + soundManager.loadShortSound(context, R.raw.ui_positive_sound); + } + + protected ScoreView getScoreView() { + ScoreView scoreView = new ScoreView(context, this); + scoreView.setLogger(logger); + scoreView.setListener(levelFinishedListener); + return scoreView; + } + + protected PauseView getPauseView() { + PauseView pauseView = new PauseView(context); + pauseView.setLogger(logger); + pauseView.setListener(gamePausedListener); + return pauseView; + } + + @Override + public void onShareClicked() { + Activity activity = getActivity(); + if (activity instanceof BaseDoodleActivity) { + AppInvitesFragment invites = ((BaseDoodleActivity) activity).getAppInvitesFragment(); + if (invites != null) { + invites.sendGenericInvite(); + } + } + } + + protected abstract String getGameType(); + + public void onBackPressed() { + pauseView.pause(); + } + + public abstract boolean isGameOver(); +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/GameOverlayButton.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/GameOverlayButton.java new file mode 100644 index 000000000..c49f9ae18 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/GameOverlayButton.java @@ -0,0 +1,59 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.views; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import com.google.android.apps.santatracker.doodles.R; + +/** A button in the game overlay screens (pause and end screens). */ +public class GameOverlayButton extends RelativeLayout { + + public GameOverlayButton(Context context) { + this(context, null); + } + + public GameOverlayButton(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public GameOverlayButton(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + inflate(context, R.layout.game_overlay_button, this); + TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.GameOverlayButton, 0, 0); + + int imageRes = + ta.getResourceId( + R.styleable.GameOverlayButton_imageSrc, + com.google.android.apps.santatracker.common.R.drawable.common_btn_pause); + ImageView icon = (ImageView) findViewById(R.id.game_overlay_button_image); + icon.setImageResource(imageRes); + + String text = ta.getString(R.styleable.GameOverlayButton_text); + TextView description = (TextView) findViewById(R.id.game_overlay_button_description); + if (text == null || text.isEmpty()) { + description.setVisibility(GONE); + } else { + description.setText(text); + } + ta.recycle(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/PauseView.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/PauseView.java new file mode 100644 index 000000000..84ac9a9b5 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/PauseView.java @@ -0,0 +1,462 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.views; + +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.DEFAULT_DOODLE_NAME; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.HOME_CLICKED; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.MUTE_CLICKED; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.PAUSE_CLICKED; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.REPLAY_CLICKED; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.UNMUTE_CLICKED; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.UNPAUSE_CLICKED; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.AnimatorSet; +import android.animation.ValueAnimator; +import android.animation.ValueAnimator.AnimatorUpdateListener; +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.OvershootInterpolator; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import com.google.android.apps.santatracker.doodles.R; +import com.google.android.apps.santatracker.doodles.shared.AndroidUtils; +import com.google.android.apps.santatracker.doodles.shared.EventBus; +import com.google.android.apps.santatracker.doodles.shared.UIUtil; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.Builder; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogTimer; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogger; +import com.google.android.apps.santatracker.doodles.shared.sound.SoundManager; + +/** The overlay which is shown when a game is paused. */ +public class PauseView extends FrameLayout { + + public static final int FADE_DURATION_MS = 400; // The pause button fading in and out. + private static final int BIG_PAUSE_FADE_IN_MS = 200; // Fading in paused screen elements. + private static final int FADE_IN_MS = 500; // Fading in paused screen elements. + private static final int FADE_OUT_MS = 200; // Fading out paused screen elements. + private static final int BUMP_MS = 200; // The paused text over-zooms a bit on pause. + private static final int RELAX_MS = 200; // The paused text shrinks a bit after zooming up. + private static final float ZOOM_UP_SCALE_OVERSHOOT = 1.2f; + public boolean isPauseButtonEnabled = true; + private GamePausedListener listener; + private DoodleLogger logger; + + private ImageButton muteButton; + private GameOverlayButton pauseButton; + private View resumeButton; + private View buttonContainer; + private View background; + private float backgroundAlpha; + private float pauseButtonAlpha; + + public PauseView(Context context) { + this(context, null); + } + + public PauseView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PauseView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + loadLayout(context); + hidePauseScreen(); + } + + public void setLogger(DoodleLogger logger) { + this.logger = logger; + } + + public GamePausedListener getListener() { + return this.listener; + } + + public void setListener(GamePausedListener listener) { + this.listener = listener; + } + + public void hidePauseButton() { + isPauseButtonEnabled = false; + UIUtil.fadeOutAndHide(pauseButton, FADE_DURATION_MS, pauseButtonAlpha); + } + + public void showPauseButton() { + isPauseButtonEnabled = true; + UIUtil.showAndFadeIn(pauseButton, FADE_DURATION_MS, pauseButtonAlpha); + } + + public void onFinishedLoading() { + setVisibility(View.VISIBLE); + } + + protected void loadLayout(final Context context) { + setVisibility(View.INVISIBLE); + LayoutInflater inflater = LayoutInflater.from(context); + + View view = inflater.inflate(R.layout.pause_view, this); + + buttonContainer = view.findViewById(R.id.button_container); + + muteButton = (ImageButton) view.findViewById(R.id.mute_button); + if (SoundManager.soundsAreMuted) { + muteButton.setImageResource( + com.google.android.apps.santatracker.common.R.drawable.common_btn_speaker_off); + } + muteButton.setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View view) { + boolean shouldMute = !SoundManager.soundsAreMuted; + + String logEventName = shouldMute ? MUTE_CLICKED : UNMUTE_CLICKED; + logger.logEvent( + new Builder(DEFAULT_DOODLE_NAME, logEventName) + .withEventSubType(listener.gameType()) + .build()); + + muteButton.setImageResource( + shouldMute + ? com.google + .android + .apps + .santatracker + .common + .R + .drawable + .common_btn_speaker_off + : com.google + .android + .apps + .santatracker + .common + .R + .drawable + .common_btn_speaker_on); + muteButton.setContentDescription( + context.getResources() + .getString( + shouldMute + ? com.google + .android + .apps + .santatracker + .common + .R + .string + .unmute + : com.google + .android + .apps + .santatracker + .common + .R + .string + .mute)); + EventBus.getInstance().sendEvent(EventBus.MUTE_SOUNDS, shouldMute); + } + }); + + pauseButton = (GameOverlayButton) view.findViewById(R.id.pause_button); + pauseButtonAlpha = pauseButton.getAlpha(); + pauseButton.setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + pause(); + } + }); + + resumeButton = view.findViewById(R.id.resume_button); + resumeButton.setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View view) { + logger.logEvent( + new Builder(DEFAULT_DOODLE_NAME, UNPAUSE_CLICKED) + .withEventSubType(listener.gameType()) + .build()); + unpause(); + } + }); + + View replayButton = view.findViewById(R.id.replay_button); + replayButton.setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View view) { + logger.logEvent( + new Builder(DEFAULT_DOODLE_NAME, REPLAY_CLICKED) + .withEventSubType(listener.gameType()) + .withLatencyMs(DoodleLogTimer.getInstance().timeElapsedMs()) + .withEventValue1(listener.score()) + .build()); + replay(); + } + }); + + View menuButton = view.findViewById(R.id.menu_button); + menuButton.setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View view) { + EventBus.getInstance() + .sendEvent(EventBus.PLAY_SOUND, R.raw.menu_item_click); + + logger.logEvent( + new Builder(DEFAULT_DOODLE_NAME, HOME_CLICKED) + .withEventSubType(listener.gameType()) + .withLatencyMs(DoodleLogTimer.getInstance().timeElapsedMs()) + .withEventValue1(listener.score()) + .build()); + + AndroidUtils.finishActivity(context); + } + }); + + background = view.findViewById(R.id.pause_view_background); + backgroundAlpha = background.getAlpha(); + } + + private void replay() { + DoodleLogTimer.getInstance().unpause(); + hidePauseScreen(); + if (listener != null) { + EventBus.getInstance().sendEvent(EventBus.PLAY_SOUND, R.raw.menu_item_click); + listener.onReplay(); + } + } + + /** Pauses the current game. */ + public void pause() { + if (!isPauseButtonEnabled) { + return; + } + logger.logEvent( + new Builder(DEFAULT_DOODLE_NAME, PAUSE_CLICKED) + .withEventSubType(listener.gameType()) + .withLatencyMs(DoodleLogTimer.getInstance().timeElapsedMs()) + .build()); + DoodleLogTimer.getInstance().pause(); + if (listener != null) { + EventBus.getInstance().sendEvent(EventBus.PLAY_SOUND, R.raw.menu_item_click); + listener.onPause(); + } + showPauseScreen(); + AndroidUtils.allowScreenToTurnOff(getContext()); + } + + private void unpause() { + DoodleLogTimer.getInstance().unpause(); + hidePauseScreen(); + if (listener != null) { + EventBus.getInstance().sendEvent(EventBus.PLAY_SOUND, R.raw.menu_item_click); + listener.onResume(); + } + AndroidUtils.forceScreenToStayOn(getContext()); + } + + private void showPauseScreen() { + isPauseButtonEnabled = false; + SoundManager soundManager = SoundManager.getInstance(); + soundManager.mute(R.raw.fruit_doodle_music); + soundManager.pauseShortSounds(); + + if (SoundManager.soundsAreMuted) { + muteButton.setImageResource( + com.google.android.apps.santatracker.common.R.drawable.common_btn_speaker_off); + } else { + muteButton.setImageResource( + com.google.android.apps.santatracker.common.R.drawable.common_btn_speaker_on); + } + + muteButton.setAlpha(0.0f); + resumeButton.setAlpha(0.0f); + buttonContainer.setAlpha(0); + background.setAlpha(0); + + muteButton.setVisibility(VISIBLE); + resumeButton.setVisibility(VISIBLE); + buttonContainer.setVisibility(VISIBLE); + background.setVisibility(VISIBLE); + + ValueAnimator fadeBigPauseIn = + UIUtil.animator( + BIG_PAUSE_FADE_IN_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + resumeButton.setAlpha( + (float) valueAnimator.getAnimatedValue("textAlpha")); + background.setAlpha( + (float) valueAnimator.getAnimatedValue("bgAlpha")); + } + }, + UIUtil.floatValue("textAlpha", 0, 1), + UIUtil.floatValue("bgAlpha", 0, backgroundAlpha)); + + ValueAnimator fadePauseButtonOut = + UIUtil.animator( + BIG_PAUSE_FADE_IN_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + pauseButton.setAlpha( + (float) valueAnimator.getAnimatedValue("pauseButtonAlpha")); + } + }, + UIUtil.floatValue("pauseButtonAlpha", pauseButtonAlpha, 0)); + fadePauseButtonOut.addListener( + new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + pauseButton.setVisibility(INVISIBLE); + } + }); + + ValueAnimator zoomUp = + UIUtil.animator( + BUMP_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + float scale = (float) valueAnimator.getAnimatedValue("scale"); + resumeButton.setScaleX(scale); + resumeButton.setScaleY(scale); + } + }, + UIUtil.floatValue("scale", 0, ZOOM_UP_SCALE_OVERSHOOT)); + + ValueAnimator relax = + UIUtil.animator( + RELAX_MS, + new OvershootInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + float scale = (float) valueAnimator.getAnimatedValue("scale"); + resumeButton.setScaleX(scale); + resumeButton.setScaleY(scale); + } + }, + UIUtil.floatValue("scale", ZOOM_UP_SCALE_OVERSHOOT, 1)); + + ValueAnimator fadeIn = + UIUtil.animator( + FADE_IN_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + muteButton.setAlpha( + (float) valueAnimator.getAnimatedValue("alpha")); + buttonContainer.setAlpha( + (float) valueAnimator.getAnimatedValue("alpha")); + } + }, + UIUtil.floatValue("alpha", 0, 1)); + AnimatorSet animations = new AnimatorSet(); + animations.play(fadeBigPauseIn).with(zoomUp); + animations.play(fadePauseButtonOut).with(zoomUp); + animations.play(relax).after(zoomUp); + animations.play(fadeIn).after(zoomUp); + animations.start(); + } + + private void hidePauseScreen() { + SoundManager soundManager = SoundManager.getInstance(); + soundManager.unmute(R.raw.fruit_doodle_music); + soundManager.resumeShortSounds(); + + ValueAnimator fadeOut = + UIUtil.animator( + FADE_OUT_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + muteButton.setAlpha( + (float) valueAnimator.getAnimatedValue("overlayAlpha")); + background.setAlpha( + (float) valueAnimator.getAnimatedValue("bgAlpha")); + buttonContainer.setAlpha( + (float) valueAnimator.getAnimatedValue("overlayAlpha")); + + resumeButton.setAlpha( + (float) valueAnimator.getAnimatedValue("overlayAlpha")); + resumeButton.setScaleX( + (float) valueAnimator.getAnimatedValue("iconScale")); + resumeButton.setScaleY( + (float) valueAnimator.getAnimatedValue("iconScale")); + } + }, + UIUtil.floatValue("overlayAlpha", 1, 0), + UIUtil.floatValue("bgAlpha", backgroundAlpha, 0), + UIUtil.floatValue("iconScale", 1, 2)); + fadeOut.addListener( + new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + muteButton.setVisibility(INVISIBLE); + resumeButton.setVisibility(INVISIBLE); + buttonContainer.setVisibility(INVISIBLE); + background.setVisibility(INVISIBLE); + + isPauseButtonEnabled = true; + } + }); + + pauseButton.setAlpha(0.0f); + pauseButton.setVisibility(VISIBLE); + ValueAnimator fadePauseButtonIn = + UIUtil.animator( + FADE_OUT_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + pauseButton.setAlpha( + (float) valueAnimator.getAnimatedValue("alpha")); + } + }, + UIUtil.floatValue("alpha", 0, pauseButtonAlpha)); + + AnimatorSet animations = new AnimatorSet(); + animations.play(fadeOut).with(fadePauseButtonIn); + animations.start(); + } + + /** A listener for interacting with the PauseView. */ + public interface GamePausedListener { + void onPause(); + + void onResume(); + + void onReplay(); + + String gameType(); + + float score(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/ScoreView.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/ScoreView.java new file mode 100644 index 000000000..18e636687 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/ScoreView.java @@ -0,0 +1,706 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.views; + +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.DEFAULT_DOODLE_NAME; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.GAME_OVER; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.HOME_CLICKED; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.REPLAY_CLICKED; +import static com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.SHARE_CLICKED; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.AnimatorSet; +import android.animation.ValueAnimator; +import android.animation.ValueAnimator.AnimatorUpdateListener; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.os.Build.VERSION; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.View; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.BounceInterpolator; +import android.view.animation.OvershootInterpolator; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import com.google.android.apps.santatracker.doodles.R; +import com.google.android.apps.santatracker.doodles.shared.AndroidUtils; +import com.google.android.apps.santatracker.doodles.shared.EventBus; +import com.google.android.apps.santatracker.doodles.shared.UIUtil; +import com.google.android.apps.santatracker.doodles.shared.animation.ElasticOutInterpolator; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogEvent.Builder; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogTimer; +import com.google.android.apps.santatracker.doodles.shared.logging.DoodleLogger; +import com.google.android.apps.santatracker.util.SantaLog; + +/** Displays the score during the game and shows the end screen when the game is over. */ +public class ScoreView extends FrameLayout { + private static final String TAG = ScoreView.class.getSimpleName(); + // Durations of various animations. + private static final int BUMP_MS = 300; // Bump when a point is scored. + private static final int ZOOM_UP_MS = 900; // Zooming score to middle of screen. + private static final int ZOOM_DOWN_MS = 400; // Zooming score to its end position. + private static final int SHARE_FADE_IN_MS = 500; // Fading in the share image. + private static final int SHARE_DROP_MS = 400; // Dropping the share image into place. + private static final int SHARE_Y_OFFSET_PX = -200; // Offset of the share image before it drops. + private static final int BG_FADE_IN_MS = 400; // Fading in the end screen background. + private static final int RESET_FADE_IN_MS = 300; // Fading in the score view when game is reset. + private static final int STAR_BOUNCE_IN_MS = 600; // Bouncing the stars into the end screen. + private static final int STAR_FADE_IN_MS = 500; // Fading the stars into the end screen. + private static final float STAR_BIG_SCALE = 2.0f; + protected DoodleLogger logger; + protected LevelFinishedListener listener; + // The score in the upper-left corner during the game. This also gets zoomed up to the + // middle of the screen at the end of the game. + private TextView currentScore; + // An invisible placeholder. Lets us use the android layout engine for figuring out where + // the score is positioned on the final screen. At the end of the game, currentScore animates + // from its original position/size to the position/size of finalScorePlaceholder. + private TextView finalScorePlaceholder; + // An invisible placeholder which is positioned at the center of the screen and is used as the + // intermediate position/size before the score drops into its final position. + private TextView centeredScorePlaceholder; + // Text that says "Game Over" + private TextView gameOverText; + // Widgets on the end screen. + private TextView bestScore; + private ImageView shareImage; + private LinearLayout menuItems; + private GameOverlayButton shareButton; + // A semi-opaque background which darkens the game during the end screen. + private View background; + // Initial state for the views involved in the end-screen animation, stored so it can be + // restored if "replay" is tapped. + private float currentScoreX = Float.NaN; + private float currentScoreY = Float.NaN; + private int currentScoreMarginStart; + private int currentScoreMarginTop; + private float currentScoreTextSizePx; + private float currentScoreAlpha; + private float finalScoreMaxWidth; + private float finalScoreMaxHeight; + private float centeredScoreMaxWidth; + private float centeredScoreMaxHeight; + private float backgroundAlpha; + private int mCurrentScoreValue; + private LinearLayout currentStars; + private RelativeLayout finalStars; + private int filledStarCount; + private boolean canReplay; + + private OnShareClickedListener shareClickedListener; + + public ScoreView(Context context, OnShareClickedListener shareClickedListener) { + this(context, (AttributeSet) null); + this.shareClickedListener = shareClickedListener; + } + + public ScoreView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public ScoreView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + loadLayout(context); + resetToStartState(); + } + + public void setLogger(DoodleLogger logger) { + this.logger = logger; + } + + protected void loadLayout(final Context context) { + setVisibility(View.INVISIBLE); + LayoutInflater inflater = LayoutInflater.from(context); + View view = inflater.inflate(R.layout.score_view, this); + + gameOverText = (TextView) view.findViewById(R.id.text_game_over); + gameOverText.setVisibility(INVISIBLE); + + currentScore = (TextView) view.findViewById(R.id.current_score); + // Store these for later so we can put currentScore back where it started after animating + // it. + currentScoreTextSizePx = currentScore.getTextSize(); + currentScoreAlpha = currentScore.getAlpha(); + currentScore.post( + new Runnable() { + @Override + public void run() { + currentScoreX = currentScore.getX(); + currentScoreY = currentScore.getY(); + } + }); + RelativeLayout.LayoutParams params = + (RelativeLayout.LayoutParams) currentScore.getLayoutParams(); + if (VERSION.SDK_INT >= 17) { + currentScoreMarginStart = params.getMarginStart(); + } else { + currentScoreMarginStart = params.leftMargin; + } + currentScoreMarginTop = params.topMargin; + + finalScorePlaceholder = (TextView) view.findViewById(R.id.final_score_placeholder); + finalScorePlaceholder.setVisibility(INVISIBLE); + finalScoreMaxWidth = getResources().getDimension(R.dimen.final_score_max_width); + finalScoreMaxHeight = getResources().getDimension(R.dimen.final_score_max_height); + finalScorePlaceholder.addTextChangedListener( + new TextWatcher() { + @Override + public void beforeTextChanged( + CharSequence charSequence, int i, int i1, int i2) {} + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {} + + @Override + public void afterTextChanged(Editable editable) { + UIUtil.fitToBounds( + finalScorePlaceholder, finalScoreMaxWidth, finalScoreMaxHeight); + } + }); + + centeredScorePlaceholder = (TextView) view.findViewById(R.id.centered_score_placeholder); + centeredScorePlaceholder.setVisibility(INVISIBLE); + centeredScoreMaxWidth = getResources().getDimension(R.dimen.centered_score_max_width); + centeredScoreMaxHeight = getResources().getDimension(R.dimen.centered_score_max_height); + centeredScorePlaceholder.addTextChangedListener( + new TextWatcher() { + @Override + public void beforeTextChanged( + CharSequence charSequence, int i, int i1, int i2) {} + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {} + + @Override + public void afterTextChanged(Editable editable) { + UIUtil.fitToBounds( + centeredScorePlaceholder, + centeredScoreMaxWidth, + centeredScoreMaxHeight); + } + }); + + currentStars = (LinearLayout) view.findViewById(R.id.current_stars); + currentStars + .removeAllViews(); // Remove the stickers that are in the XML for testing layout. + finalStars = (RelativeLayout) view.findViewById(R.id.final_stars); + + bestScore = (TextView) view.findViewById(R.id.best_score); + shareImage = (ImageView) view.findViewById(R.id.share_image); + shareImage.setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View view) { + replay(); + } + }); + + menuItems = (LinearLayout) view.findViewById(R.id.menu_items); + View replayButton = view.findViewById(R.id.replay_button); + replayButton.setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View view) { + replay(); + } + }); + + shareButton = (GameOverlayButton) view.findViewById(R.id.share_button); + shareButton.setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View view) { + EventBus.getInstance() + .sendEvent(EventBus.PLAY_SOUND, R.raw.menu_item_click); + logger.logEvent( + new Builder(DEFAULT_DOODLE_NAME, SHARE_CLICKED) + .withEventSubType(listener.gameType()) + .withEventValue1(listener.shareImageId()) + .build()); + + if (shareClickedListener != null) { + shareClickedListener.onShareClicked(); + } + } + }); + + View moreGamesButton = view.findViewById(R.id.menu_button); + moreGamesButton.setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View view) { + goToMoreGames(context); + } + }); + background = view.findViewById(R.id.score_view_background); + backgroundAlpha = background.getAlpha(); // Store for later use. + } + + protected void goToMoreGames(Context context) { + EventBus.getInstance().sendEvent(EventBus.PLAY_SOUND, R.raw.menu_item_click); + logger.logEvent( + new Builder(DEFAULT_DOODLE_NAME, HOME_CLICKED) + .withEventSubType(listener.gameType()) + .build()); + AndroidUtils.finishActivity(context); + } + + private void replay() { + if (canReplay && listener != null) { + EventBus.getInstance().sendEvent(EventBus.PLAY_SOUND, R.raw.menu_item_click); + logger.logEvent( + new Builder(DEFAULT_DOODLE_NAME, REPLAY_CLICKED) + .withEventSubType(listener.gameType()) + .build()); + + listener.onReplay(); + AndroidUtils.forceScreenToStayOn(getContext()); + } + } + + public void setListener(LevelFinishedListener listener) { + this.listener = listener; + } + + /** + * Updates the best score field on the end screen to display the given best score. + * + * @param newScore The score to be displayed as the best score. + */ + public void updateBestScore(CharSequence newScore) { + bestScore.setText( + AndroidUtils.getText( + getResources(), + com.google.android.apps.santatracker.common.R.string.end_screen_best_score, + newScore)); + } + + /** + * Sets the end screen header to the given text. + * + *

+ * + *

This header will be shown in place of the best score. + * + * @param text The text to be put into the header. + */ + public void setHeaderText(CharSequence text) { + bestScore.setText(text); + } + + public void updateCurrentScore(CharSequence newScore, boolean shouldBump) { + currentScore.setText(newScore); + finalScorePlaceholder.setText(newScore); + centeredScorePlaceholder.setText(newScore); + if (shouldBump) { + animateBump(currentScore); + } + } + + public void setShareDrawable(Drawable drawable) { + shareImage.setImageDrawable(drawable); + } + + public void clearAllStars() { + currentStars.removeAllViews(); + filledStarCount = 0; + for (int i = 0; i < finalStars.getChildCount(); i++) { + FrameLayout star = (FrameLayout) finalStars.getChildAt(i); + star.findViewById(R.id.fill).setVisibility(INVISIBLE); + } + } + + public void addStar() { + if (filledStarCount < 3) { + filledStarCount++; + int currentStarDimens = (int) AndroidUtils.dipToPixels(40); + addStarToLayout( + currentStars, currentStarDimens, LinearLayout.LayoutParams.MATCH_PARENT); + EventBus.getInstance().sendEvent(EventBus.PLAY_SOUND, R.raw.ui_positive_sound); + } + } + + public int getStarCount() { + return filledStarCount; + } + + // Width & height are in pixels. + private void addStarToLayout(LinearLayout layout, int width, int height) { + ImageView image = new ImageView(getContext()); + image.setImageResource(R.drawable.pineapple_star_filled); + animateBump(image); + layout.addView(image, new LinearLayout.LayoutParams(width, height)); + } + + public void resetToStartState() { + SantaLog.i(TAG, "Reset to start state"); + currentStars.setVisibility(VISIBLE); + + bestScore.setVisibility(INVISIBLE); + shareImage.setVisibility(INVISIBLE); + menuItems.setVisibility(INVISIBLE); + shareButton.setVisibility(INVISIBLE); + background.setVisibility(INVISIBLE); + finalStars.setVisibility(INVISIBLE); + gameOverText.setVisibility(INVISIBLE); + + if (!Float.isNaN(currentScoreX)) { + currentScore.setX(currentScoreX); + } + if (!Float.isNaN(currentScoreY)) { + currentScore.setY(currentScoreY); + } + currentScore.setTextSize(TypedValue.COMPLEX_UNIT_PX, currentScoreTextSizePx); + RelativeLayout.LayoutParams params = + (RelativeLayout.LayoutParams) currentScore.getLayoutParams(); + + if (VERSION.SDK_INT >= 17) { + params.setMarginStart(currentScoreMarginStart); + } else { + params.leftMargin = currentScoreMarginStart; + } + params.topMargin = currentScoreMarginTop; + + updateCurrentScore(Integer.toString(0), false); + clearAllStars(); + + currentScore.setAlpha(0); + ValueAnimator fadeInCurrentScore = + UIUtil.animator( + RESET_FADE_IN_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + currentScore.setAlpha( + (float) valueAnimator.getAnimatedValue("alpha")); + } + }, + UIUtil.floatValue("alpha", 0, currentScoreAlpha)); + fadeInCurrentScore.start(); + } + + public void animateToEndState() { + AndroidUtils.allowScreenToTurnOff(getContext()); + SantaLog.i(TAG, "Animate to end state"); + canReplay = false; + setVisibility(View.VISIBLE); + logger.logEvent( + new Builder(DEFAULT_DOODLE_NAME, GAME_OVER) + .withEventSubType(listener.gameType()) + .withLatencyMs(DoodleLogTimer.getInstance().timeElapsedMs()) + .withEventValue1(listener.score()) + .withEventValue2(getStarCount()) + .build()); + + // TODO: Fade this out instead of making it invisible (will have to remove + // the layout:alignComponents that attach it current score, else it will move along with the + // score.) + currentStars.setVisibility(INVISIBLE); + + // Initial state: controls & background are visible but alpha = 0 + bestScore.setAlpha(0); + shareImage.setAlpha(0.0f); + background.setAlpha(0); + finalStars.setAlpha(0); + + bestScore.setVisibility(VISIBLE); + shareImage.setVisibility(VISIBLE); + background.setVisibility(VISIBLE); + finalStars.setVisibility(VISIBLE); + gameOverText.setVisibility(VISIBLE); + + // Offset the share image and stars so that they can bounce in. + final float shareImageY = shareImage.getY(); + final float finalStarsY = finalStars.getY(); + shareImage.setY(shareImageY + SHARE_Y_OFFSET_PX); + + // Zoom the score to center of screen. + // I tried several other ways of doing this animation, none of which worked: + // 1. Using TranslateAnimation & ScaleAnimation instead of .animate(): Positions didn't work + // right when scaling, maybe because these animate how a view is displayed but not the + // actual + // view properties. + // 2. Using TranslateAnimation & ObjectAnimator: couldn't add ObjectAnimator to the same + // Animation set as TranslateAnimation. + // 3. Using .animate() to get a PropertyAnimator. Couldn't tween textSize without using + // .setUpdateListener, which requires API 19. + // 4. Small textSize, scaling up from 1: Text is blurry at scales > 1. + // 5. Large textSize, scaling up to 1: Final position was wrong, I couldn't figure out why. + // 6. Medium textSize, scaling up to 2.5: Error: font size too large to fit in cache. Tried + // turning off HW accel which fixed the cache errors but positioning was still wrong. + ValueAnimator zoomUp = + UIUtil.animator( + ZOOM_UP_MS, + new ElasticOutInterpolator(0.35f), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + currentScore.setX((float) valueAnimator.getAnimatedValue("x")); + currentScore.setY((float) valueAnimator.getAnimatedValue("y")); + currentScore.setTextSize( + TypedValue.COMPLEX_UNIT_PX, + (float) valueAnimator.getAnimatedValue("textSize")); + RelativeLayout.LayoutParams params = + (RelativeLayout.LayoutParams) + currentScore.getLayoutParams(); + if (VERSION.SDK_INT >= 17) { + params.setMarginStart( + (int) + (float) + valueAnimator.getAnimatedValue( + "marginStart")); + } else { + params.leftMargin = + (int) + (float) + valueAnimator.getAnimatedValue( + "marginStart"); + } + params.topMargin = + (int) (float) valueAnimator.getAnimatedValue("topMargin"); + currentScore.setAlpha( + (float) + valueAnimator.getAnimatedValue( + "currentScoreAlpha")); + } + }, + UIUtil.floatValue( + "x", currentScore.getX(), centeredScorePlaceholder.getX()), + UIUtil.floatValue( + "y", currentScore.getY(), centeredScorePlaceholder.getY()), + UIUtil.floatValue( + "textSize", + currentScoreTextSizePx, + centeredScorePlaceholder.getTextSize()), + UIUtil.floatValue("marginStart", currentScoreMarginStart, 0), + UIUtil.floatValue("topMargin", currentScoreMarginTop, 0), + UIUtil.floatValue("currentScoreAlpha", currentScoreAlpha, 1)); + + // Zoom the score up to its final position. + ValueAnimator zoomBackDown = + UIUtil.animator( + ZOOM_DOWN_MS, + new BounceInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + currentScore.setX((float) valueAnimator.getAnimatedValue("x")); + currentScore.setY((float) valueAnimator.getAnimatedValue("y")); + currentScore.setTextSize( + TypedValue.COMPLEX_UNIT_PX, + (float) valueAnimator.getAnimatedValue("textSize")); + } + }, + UIUtil.floatValue( + "x", centeredScorePlaceholder.getX(), finalScorePlaceholder.getX()), + UIUtil.floatValue( + "y", centeredScorePlaceholder.getY(), finalScorePlaceholder.getY()), + UIUtil.floatValue( + "textSize", + centeredScorePlaceholder.getTextSize(), + finalScorePlaceholder.getTextSize())); + + ValueAnimator fadeInBackground = + UIUtil.animator( + BG_FADE_IN_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + background.setAlpha( + (float) valueAnimator.getAnimatedValue("bgAlpha")); + } + }, + UIUtil.floatValue("bgAlpha", 0, backgroundAlpha)); + + ValueAnimator fadeInBestScore = + UIUtil.animator( + BG_FADE_IN_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + bestScore.setAlpha( + (float) valueAnimator.getAnimatedValue("bgAlpha")); + } + }, + UIUtil.floatValue("bgAlpha", 0, backgroundAlpha)); + + ValueAnimator fadeInMenuItems = + UIUtil.animator( + BG_FADE_IN_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + float alpha = (float) valueAnimator.getAnimatedValue("alpha"); + menuItems.setAlpha(alpha); + shareButton.setAlpha(alpha); + } + }, + UIUtil.floatValue("alpha", 0, 1)); + fadeInMenuItems.addListener( + new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + // Don't set menu items to be visible until the animation starts so that + // they aren't + // clickable until they start to appear. + menuItems.setVisibility(VISIBLE); + menuItems.setAlpha(0); + + shareButton.setVisibility(VISIBLE); + shareButton.setAlpha(0); + + canReplay = true; + } + }); + + ValueAnimator fadeInShareImageAndFinalStars = + UIUtil.animator( + SHARE_FADE_IN_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + float alpha = (float) valueAnimator.getAnimatedValue("alpha"); + shareImage.setAlpha(alpha); + finalStars.setAlpha(alpha); + } + }, + UIUtil.floatValue("alpha", 0, 1)); + + ValueAnimator dropShareImageAndFinalStars = + UIUtil.animator( + SHARE_DROP_MS, + new BounceInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + float yOffset = (float) valueAnimator.getAnimatedValue("yOffset"); + shareImage.setY(shareImageY + yOffset); + } + }, + UIUtil.floatValue("yOffset", SHARE_Y_OFFSET_PX, 0)); + + AnimatorSet animations = new AnimatorSet(); + + int numStars = finalStars.getChildCount(); + ValueAnimator bounce = null; + long starStartDelay = ZOOM_UP_MS + SHARE_FADE_IN_MS + SHARE_DROP_MS / 2; + for (int i = 0; i < filledStarCount; i++) { + FrameLayout star = (FrameLayout) finalStars.getChildAt(numStars - i - 1); + ValueAnimator fade = getStarFadeIn((ImageView) star.findViewById(R.id.fill)); + bounce = getStarBounceIn((ImageView) star.findViewById(R.id.fill)); + animations.play(fade).after(starStartDelay + STAR_FADE_IN_MS * i); + animations.play(bounce).after(starStartDelay + STAR_FADE_IN_MS * i); + } + if (bounce != null) { + animations.play(fadeInMenuItems).after(bounce); + } else { + animations.play(fadeInMenuItems).after(starStartDelay + STAR_FADE_IN_MS); + } + animations.play(fadeInBackground).with(zoomUp); + animations.play(fadeInBestScore).after(fadeInBackground); + animations.play(zoomBackDown).after(zoomUp); + animations.play(fadeInShareImageAndFinalStars).after(zoomUp); + animations.play(dropShareImageAndFinalStars).after(fadeInShareImageAndFinalStars); + animations.start(); + } + + private ValueAnimator getStarFadeIn(final ImageView star) { + star.setAlpha(0.0f); + star.setVisibility(VISIBLE); + ValueAnimator fadeIn = + UIUtil.animator( + STAR_FADE_IN_MS, + new AccelerateDecelerateInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + float alpha = (float) valueAnimator.getAnimatedValue("alpha"); + star.setAlpha(alpha); + } + }, + UIUtil.floatValue("alpha", 0, 1)); + fadeIn.addListener( + new AnimatorListenerAdapter() { + @Override + public void onAnimationStart(Animator animation) { + EventBus.getInstance() + .sendEvent(EventBus.PLAY_SOUND, R.raw.ui_positive_sound); + } + }); + return fadeIn; + } + + private ValueAnimator getStarBounceIn(final ImageView star) { + return UIUtil.animator( + STAR_BOUNCE_IN_MS, + new BounceInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + float scale = (float) valueAnimator.getAnimatedValue("scale"); + star.setScaleX(scale); + star.setScaleY(scale); + } + }, + UIUtil.floatValue("scale", STAR_BIG_SCALE, 1)); + } + + private void animateBump(final View view) { + ValueAnimator tween = + UIUtil.animator( + BUMP_MS, + new OvershootInterpolator(), + new AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + float scale = (float) valueAnimator.getAnimatedValue("scale"); + view.setScaleX(scale); + view.setScaleY(scale); + } + }, + UIUtil.floatValue("scale", 1.5f, 1)); + tween.start(); + } + + public interface OnShareClickedListener { + void onShareClicked(); + } + + /** A listener for events which occur from the level finished screen. */ + public interface LevelFinishedListener { + void onReplay(); + + String gameType(); + + float score(); + + int shareImageId(); + } +} diff --git a/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/StarView.java b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/StarView.java new file mode 100644 index 000000000..ca328fdc8 --- /dev/null +++ b/doodles-lib/src/main/java/com/google/android/apps/santatracker/doodles/shared/views/StarView.java @@ -0,0 +1,42 @@ +/* + * Copyright 2019. Google LLC + * + * 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 + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.apps.santatracker.doodles.shared.views; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.FrameLayout; +import com.google.android.apps.santatracker.doodles.R; + +/** + * A view for the stars on the end screen. This is just a wrapper class so that we can contain star + * layout behavior in a single layout file instead of having to specify each one individually. + */ +public class StarView extends FrameLayout { + + public StarView(Context context) { + this(context, null); + } + + public StarView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public StarView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + inflate(context, R.layout.star_view, this); + } +} diff --git a/doodles-lib/src/main/res/drawable-nodpi/debug_marker.webp b/doodles-lib/src/main/res/drawable-nodpi/debug_marker.webp new file mode 100644 index 000000000..ccaf3c161 Binary files /dev/null and b/doodles-lib/src/main/res/drawable-nodpi/debug_marker.webp differ diff --git a/doodles-lib/src/main/res/drawable-nodpi/pineapple_star_empty.webp b/doodles-lib/src/main/res/drawable-nodpi/pineapple_star_empty.webp new file mode 100644 index 000000000..5fc23747a Binary files /dev/null and b/doodles-lib/src/main/res/drawable-nodpi/pineapple_star_empty.webp differ diff --git a/doodles-lib/src/main/res/drawable-nodpi/pineapple_star_filled.webp b/doodles-lib/src/main/res/drawable-nodpi/pineapple_star_filled.webp new file mode 100644 index 000000000..0713e5f40 Binary files /dev/null and b/doodles-lib/src/main/res/drawable-nodpi/pineapple_star_filled.webp differ diff --git a/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_00.webp b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_00.webp new file mode 100644 index 000000000..a898bc520 Binary files /dev/null and b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_00.webp differ diff --git a/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_01.webp b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_01.webp new file mode 100644 index 000000000..d1a3fa91b Binary files /dev/null and b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_01.webp differ diff --git a/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_02.webp b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_02.webp new file mode 100644 index 000000000..faefd61b3 Binary files /dev/null and b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_02.webp differ diff --git a/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_03.webp b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_03.webp new file mode 100644 index 000000000..44335d602 Binary files /dev/null and b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_03.webp differ diff --git a/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_04.webp b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_04.webp new file mode 100644 index 000000000..9a64f83b5 Binary files /dev/null and b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_04.webp differ diff --git a/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_05.webp b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_05.webp new file mode 100644 index 000000000..5e74b7d7b Binary files /dev/null and b/doodles-lib/src/main/res/drawable-nodpi/tutoappear_new_05.webp differ diff --git a/doodles-lib/src/main/res/layout/activity_view.xml b/doodles-lib/src/main/res/layout/activity_view.xml new file mode 100644 index 000000000..937aff3c4 --- /dev/null +++ b/doodles-lib/src/main/res/layout/activity_view.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/doodles-lib/src/main/res/layout/fact_view.xml b/doodles-lib/src/main/res/layout/fact_view.xml new file mode 100644 index 000000000..0c8542626 --- /dev/null +++ b/doodles-lib/src/main/res/layout/fact_view.xml @@ -0,0 +1,26 @@ + + + diff --git a/doodles/src/main/res/layout/game_overlay_button.xml b/doodles-lib/src/main/res/layout/game_overlay_button.xml similarity index 84% rename from doodles/src/main/res/layout/game_overlay_button.xml rename to doodles-lib/src/main/res/layout/game_overlay_button.xml index 77c526e80..c405325e3 100644 --- a/doodles/src/main/res/layout/game_overlay_button.xml +++ b/doodles-lib/src/main/res/layout/game_overlay_button.xml @@ -1,12 +1,12 @@ + + + + + + + + + + + + +