├── .gitignore
├── 01-introduction
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ └── .keep
│ └── starter
│ └── .keep
├── 02-starting-from-the-beginning
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ └── .keep
│ └── starter
│ ├── .gitignore
│ ├── .idea
│ ├── compiler.xml
│ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ ├── domain
│ │ │ │ │ └── .keep
│ │ │ │ └── presentation
│ │ │ │ │ └── AnimalsNearYouFragment.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ └── .keep
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── .keep
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ └── .keep
│ │ │ │ └── presentation
│ │ │ │ └── SearchFragment.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 03-domain-layer
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ └── presentation
│ │ │ │ │ │ └── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── common
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ └── search
│ │ │ │ │ └── presentation
│ │ │ │ │ └── SearchFragment.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ └── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── common
│ │ │ └── domain
│ │ │ └── model
│ │ │ └── animal
│ │ │ └── PhotoTests.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .idea
│ ├── compiler.xml
│ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ └── AnimalsNearYouFragment.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── .keep
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ └── search
│ │ │ │ └── presentation
│ │ │ │ └── SearchFragment.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── .keep
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 04-data-layer-network
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .idea
│ │ ├── compiler.xml
│ │ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── ExampleInstrumentedTest.kt
│ │ │ │ └── common
│ │ │ │ └── data
│ │ │ │ ├── api
│ │ │ │ └── utils
│ │ │ │ │ └── FakeServer.kt
│ │ │ │ └── preferences
│ │ │ │ └── FakePreferences.kt
│ │ │ ├── debug
│ │ │ ├── AndroidManifest.xml
│ │ │ └── assets
│ │ │ │ └── networkresponses
│ │ │ │ ├── animals.json
│ │ │ │ └── validToken.json
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ └── presentation
│ │ │ │ │ │ └── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── common
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ └── search
│ │ │ │ │ └── presentation
│ │ │ │ │ └── SearchFragment.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ └── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── common
│ │ │ ├── data
│ │ │ └── api
│ │ │ │ ├── interceptors
│ │ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ │ └── utils
│ │ │ │ └── JsonReader.kt
│ │ │ └── domain
│ │ │ └── model
│ │ │ └── animal
│ │ │ └── PhotoTests.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .idea
│ ├── compiler.xml
│ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ ├── ExampleInstrumentedTest.kt
│ │ │ └── common
│ │ │ └── data
│ │ │ ├── api
│ │ │ └── utils
│ │ │ │ └── FakeServer.kt
│ │ │ └── preferences
│ │ │ └── FakePreferences.kt
│ │ ├── debug
│ │ ├── AndroidManifest.xml
│ │ └── assets
│ │ │ └── networkresponses
│ │ │ ├── animals.json
│ │ │ └── validToken.json
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ └── AnimalsNearYouFragment.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ └── search
│ │ │ │ └── presentation
│ │ │ │ └── SearchFragment.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── common
│ │ ├── data
│ │ └── api
│ │ │ └── utils
│ │ │ └── JsonReader.kt
│ │ └── domain
│ │ └── model
│ │ └── animal
│ │ └── PhotoTests.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 05-data-layer-caching
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .idea
│ │ ├── compiler.xml
│ │ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── HiltTestRunner.kt
│ │ │ │ └── common
│ │ │ │ └── data
│ │ │ │ ├── PetFinderAnimalRepositoryTest.kt
│ │ │ │ ├── api
│ │ │ │ └── utils
│ │ │ │ │ └── FakeServer.kt
│ │ │ │ └── preferences
│ │ │ │ └── FakePreferences.kt
│ │ │ ├── debug
│ │ │ ├── AndroidManifest.xml
│ │ │ └── assets
│ │ │ │ └── networkresponses
│ │ │ │ ├── animals.json
│ │ │ │ └── validToken.json
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ └── presentation
│ │ │ │ │ │ └── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── common
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ └── search
│ │ │ │ │ └── presentation
│ │ │ │ │ └── SearchFragment.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ └── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── common
│ │ │ ├── data
│ │ │ └── api
│ │ │ │ ├── interceptors
│ │ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ │ └── utils
│ │ │ │ └── JsonReader.kt
│ │ │ └── domain
│ │ │ └── model
│ │ │ └── animal
│ │ │ └── PhotoTests.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .idea
│ ├── compiler.xml
│ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ ├── ExampleInstrumentedTest.kt
│ │ │ └── common
│ │ │ └── data
│ │ │ ├── api
│ │ │ └── utils
│ │ │ │ └── FakeServer.kt
│ │ │ └── preferences
│ │ │ └── FakePreferences.kt
│ │ ├── debug
│ │ ├── AndroidManifest.xml
│ │ └── assets
│ │ │ └── networkresponses
│ │ │ ├── animals.json
│ │ │ └── validToken.json
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ └── AnimalsNearYouFragment.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ └── search
│ │ │ │ └── presentation
│ │ │ │ └── SearchFragment.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── common
│ │ ├── data
│ │ └── api
│ │ │ ├── interceptors
│ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ └── utils
│ │ │ └── JsonReader.kt
│ │ └── domain
│ │ └── model
│ │ └── animal
│ │ └── PhotoTests.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 06-building-features-animals-near-you
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .idea
│ │ ├── compiler.xml
│ │ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── .idea
│ │ │ ├── gradle.xml
│ │ │ ├── misc.xml
│ │ │ ├── modules.xml
│ │ │ └── workspace.xml
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── ExampleInstrumentedTest.kt
│ │ │ │ ├── HiltTestRunner.kt
│ │ │ │ └── common
│ │ │ │ └── data
│ │ │ │ ├── PetFinderAnimalRepositoryTest.kt
│ │ │ │ ├── api
│ │ │ │ └── utils
│ │ │ │ │ └── FakeServer.kt
│ │ │ │ └── preferences
│ │ │ │ └── FakePreferences.kt
│ │ │ ├── debug
│ │ │ ├── AndroidManifest.xml
│ │ │ └── assets
│ │ │ │ └── networkresponses
│ │ │ │ ├── animals.json
│ │ │ │ └── validToken.json
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── common
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ └── ActivityRetainedModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ └── search
│ │ │ │ │ └── presentation
│ │ │ │ │ └── SearchFragment.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ └── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── common
│ │ │ ├── data
│ │ │ └── api
│ │ │ │ ├── interceptors
│ │ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ │ └── utils
│ │ │ │ └── JsonReader.kt
│ │ │ └── domain
│ │ │ └── model
│ │ │ └── animal
│ │ │ └── PhotoTests.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .idea
│ ├── compiler.xml
│ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── .idea
│ │ ├── gradle.xml
│ │ ├── misc.xml
│ │ ├── modules.xml
│ │ └── workspace.xml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ ├── ExampleInstrumentedTest.kt
│ │ │ ├── HiltTestRunner.kt
│ │ │ └── common
│ │ │ └── data
│ │ │ ├── PetFinderAnimalRepositoryTest.kt
│ │ │ ├── api
│ │ │ └── utils
│ │ │ │ └── FakeServer.kt
│ │ │ └── preferences
│ │ │ └── FakePreferences.kt
│ │ ├── debug
│ │ ├── AndroidManifest.xml
│ │ └── assets
│ │ │ └── networkresponses
│ │ │ ├── animals.json
│ │ │ └── validToken.json
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ └── ActivityRetainedModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ └── search
│ │ │ │ └── presentation
│ │ │ │ └── SearchFragment.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── common
│ │ ├── data
│ │ └── api
│ │ │ ├── interceptors
│ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ └── utils
│ │ │ └── JsonReader.kt
│ │ └── domain
│ │ └── model
│ │ └── animal
│ │ └── PhotoTests.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 07-building-features-search
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .idea
│ │ ├── compiler.xml
│ │ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── .idea
│ │ │ ├── gradle.xml
│ │ │ ├── misc.xml
│ │ │ ├── modules.xml
│ │ │ └── workspace.xml
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── HiltTestRunner.kt
│ │ │ │ ├── common
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepositoryTest.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ └── utils
│ │ │ │ │ │ │ └── FakeServer.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ └── TestCacheModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ └── FakePreferences.kt
│ │ │ │ └── di
│ │ │ │ │ └── TestActivityRetainedModule.kt
│ │ │ │ ├── launchFragmentInHiltContainer.kt
│ │ │ │ └── search
│ │ │ │ └── presentation
│ │ │ │ └── SearchFragmentTest.kt
│ │ │ ├── debug
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets
│ │ │ │ └── networkresponses
│ │ │ │ │ ├── animals.json
│ │ │ │ │ └── validToken.json
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── HiltTestActivity.kt
│ │ │ │ ├── RxImmediateSchedulerRule.kt
│ │ │ │ ├── TestCoroutineRule.kt
│ │ │ │ └── common
│ │ │ │ └── data
│ │ │ │ └── FakeRepository.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── common
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ └── ActivityRetainedModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ └── ic_launcher.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ └── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ ├── common
│ │ │ ├── data
│ │ │ │ └── api
│ │ │ │ │ ├── interceptors
│ │ │ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ │ │ └── utils
│ │ │ │ │ └── JsonReader.kt
│ │ │ └── domain
│ │ │ │ └── model
│ │ │ │ └── animal
│ │ │ │ └── PhotoTests.kt
│ │ │ └── search
│ │ │ └── presentation
│ │ │ └── SearchFragmentViewModelTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .idea
│ ├── compiler.xml
│ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── .idea
│ │ ├── gradle.xml
│ │ ├── misc.xml
│ │ ├── modules.xml
│ │ └── workspace.xml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ ├── HiltTestRunner.kt
│ │ │ ├── common
│ │ │ ├── data
│ │ │ │ ├── PetFinderAnimalRepositoryTest.kt
│ │ │ │ ├── api
│ │ │ │ │ └── utils
│ │ │ │ │ │ └── FakeServer.kt
│ │ │ │ ├── di
│ │ │ │ │ └── TestCacheModule.kt
│ │ │ │ └── preferences
│ │ │ │ │ └── FakePreferences.kt
│ │ │ └── di
│ │ │ │ └── TestActivityRetainedModule.kt
│ │ │ ├── launchFragmentInHiltContainer.kt
│ │ │ └── search
│ │ │ └── presentation
│ │ │ └── SearchFragmentTest.kt
│ │ ├── debug
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ │ └── networkresponses
│ │ │ │ ├── animals.json
│ │ │ │ └── validToken.json
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ ├── HiltTestActivity.kt
│ │ │ ├── RxImmediateSchedulerRule.kt
│ │ │ ├── TestCoroutineRule.kt
│ │ │ └── common
│ │ │ └── data
│ │ │ └── FakeRepository.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ └── ActivityRetainedModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ └── .keep
│ │ │ │ └── usecases
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ ├── common
│ │ ├── data
│ │ │ └── api
│ │ │ │ ├── interceptors
│ │ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ │ └── utils
│ │ │ │ └── JsonReader.kt
│ │ └── domain
│ │ │ └── model
│ │ │ └── animal
│ │ │ └── PhotoTests.kt
│ │ └── search
│ │ └── presentation
│ │ └── SearchFragmentViewModelTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 08-multi-module-apps
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .idea
│ │ ├── compiler.xml
│ │ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── android-library.gradle
│ ├── app
│ │ ├── .gitignore
│ │ ├── .idea
│ │ │ ├── gradle.xml
│ │ │ ├── misc.xml
│ │ │ ├── modules.xml
│ │ │ └── workspace.xml
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ └── main
│ │ │ │ ├── domain
│ │ │ │ └── usecases
│ │ │ │ │ └── OnboardingIsComplete.kt
│ │ │ │ └── presentation
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── MainActivityEvent.kt
│ │ │ │ ├── MainActivityViewEffect.kt
│ │ │ │ └── MainActivityViewModel.kt
│ │ │ └── res
│ │ │ ├── drawable
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ └── activity_main.xml
│ │ │ ├── menu
│ │ │ └── menu_bottom_nav.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ └── values
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ ├── build.gradle
│ ├── common
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── consumer-rules.pro
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── common
│ │ │ │ ├── data
│ │ │ │ ├── PetFinderAnimalRepositoryTest.kt
│ │ │ │ ├── api
│ │ │ │ │ └── utils
│ │ │ │ │ │ └── FakeServer.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── TestCacheModule.kt
│ │ │ │ │ └── TestPreferencesModule.kt
│ │ │ │ └── preferences
│ │ │ │ │ └── FakePreferences.kt
│ │ │ │ ├── di
│ │ │ │ └── TestActivityRetainedModule.kt
│ │ │ │ └── testrunners
│ │ │ │ └── HiltTestRunner.kt
│ │ │ ├── debug
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets
│ │ │ │ └── networkresponses
│ │ │ │ │ ├── animals.json
│ │ │ │ │ └── validToken.json
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── common
│ │ │ │ ├── HiltTestActivity.kt
│ │ │ │ ├── RxImmediateSchedulerRule.kt
│ │ │ │ ├── TestCoroutineRule.kt
│ │ │ │ └── data
│ │ │ │ └── FakeRepository.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── common
│ │ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ └── ActivityRetainedModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── search
│ │ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ └── dog_placeholder.png
│ │ │ │ ├── layout
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ └── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── common
│ │ │ ├── data
│ │ │ └── api
│ │ │ │ ├── interceptors
│ │ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ │ └── utils
│ │ │ │ └── JsonReader.kt
│ │ │ └── domain
│ │ │ └── model
│ │ │ └── animal
│ │ │ └── PhotoTests.kt
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── features
│ │ ├── animalsnearyou
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── consumer-rules.pro
│ │ │ ├── proguard-rules.pro
│ │ │ └── src
│ │ │ │ ├── androidTest
│ │ │ │ └── java
│ │ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── animalsnearyou
│ │ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ │ ├── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java
│ │ │ │ │ └── com
│ │ │ │ │ │ └── realworld
│ │ │ │ │ │ └── android
│ │ │ │ │ │ └── petsave
│ │ │ │ │ │ └── animalsnearyou
│ │ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ └── res
│ │ │ │ │ ├── layout
│ │ │ │ │ └── fragment_animals_near_you.xml
│ │ │ │ │ ├── navigation
│ │ │ │ │ └── nav_animalsnearyou.xml
│ │ │ │ │ └── values
│ │ │ │ │ └── strings.xml
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── animalsnearyou
│ │ │ │ └── ExampleUnitTest.kt
│ │ ├── onboarding
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── consumer-rules.pro
│ │ │ ├── proguard-rules.pro
│ │ │ └── src
│ │ │ │ ├── androidTest
│ │ │ │ └── java
│ │ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── onboarding
│ │ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ │ ├── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java
│ │ │ │ │ └── com
│ │ │ │ │ │ └── realworld
│ │ │ │ │ │ └── android
│ │ │ │ │ │ └── petsave
│ │ │ │ │ │ └── onboarding
│ │ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ └── StoreOnboardingData.kt
│ │ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── OnboardingEvent.kt
│ │ │ │ │ │ ├── OnboardingFragment.kt
│ │ │ │ │ │ ├── OnboardingFragmentViewModel.kt
│ │ │ │ │ │ ├── OnboardingViewEffect.kt
│ │ │ │ │ │ └── OnboardingViewState.kt
│ │ │ │ └── res
│ │ │ │ │ ├── layout
│ │ │ │ │ └── fragment_onboarding.xml
│ │ │ │ │ ├── navigation
│ │ │ │ │ └── nav_onboarding.xml
│ │ │ │ │ └── values
│ │ │ │ │ └── strings.xml
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── onboarding
│ │ │ │ └── ExampleUnitTest.kt
│ │ └── search
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── consumer-rules.pro
│ │ │ ├── proguard-rules.pro
│ │ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── search
│ │ │ │ ├── launchFragmentInHiltContainer.kt
│ │ │ │ └── presentation
│ │ │ │ └── SearchFragmentTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ └── no_results_pug.png
│ │ │ │ ├── layout
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ └── fragment_search.xml
│ │ │ │ ├── menu
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── navigation
│ │ │ │ └── nav_search.xml
│ │ │ │ └── values
│ │ │ │ └── strings.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── search
│ │ │ └── presentation
│ │ │ └── SearchFragmentViewModelTest.kt
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .idea
│ ├── compiler.xml
│ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── android-library.gradle
│ ├── app
│ ├── .gitignore
│ ├── .idea
│ │ ├── gradle.xml
│ │ ├── misc.xml
│ │ ├── modules.xml
│ │ └── workspace.xml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ ├── PetSaveApplication.kt
│ │ │ ├── main
│ │ │ ├── domain
│ │ │ │ └── usecases
│ │ │ │ │ └── OnboardingIsComplete.kt
│ │ │ └── presentation
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── MainActivityEvent.kt
│ │ │ │ ├── MainActivityViewEffect.kt
│ │ │ │ └── MainActivityViewModel.kt
│ │ │ └── onboarding
│ │ │ ├── domain
│ │ │ └── usecases
│ │ │ │ └── StoreOnboardingData.kt
│ │ │ └── presentation
│ │ │ ├── OnboardingEvent.kt
│ │ │ ├── OnboardingFragment.kt
│ │ │ ├── OnboardingFragmentViewModel.kt
│ │ │ ├── OnboardingViewEffect.kt
│ │ │ └── OnboardingViewState.kt
│ │ └── res
│ │ ├── drawable
│ │ ├── ic_animals_near_you_24dp.xml
│ │ ├── ic_close_24dp.xml
│ │ └── splash_background.xml
│ │ ├── layout
│ │ ├── activity_main.xml
│ │ └── fragment_onboarding.xml
│ │ ├── menu
│ │ └── menu_bottom_nav.xml
│ │ ├── mipmap-anydpi-v26
│ │ └── ic_launcher.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── navigation
│ │ └── nav_graph.xml
│ │ └── values
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── build.gradle
│ ├── common
│ ├── .gitignore
│ ├── build.gradle
│ ├── consumer-rules.pro
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── common
│ │ │ ├── data
│ │ │ ├── PetFinderAnimalRepositoryTest.kt
│ │ │ ├── api
│ │ │ │ └── utils
│ │ │ │ │ └── FakeServer.kt
│ │ │ ├── di
│ │ │ │ ├── TestCacheModule.kt
│ │ │ │ └── TestPreferencesModule.kt
│ │ │ └── preferences
│ │ │ │ └── FakePreferences.kt
│ │ │ ├── di
│ │ │ └── TestActivityRetainedModule.kt
│ │ │ └── testrunners
│ │ │ └── HiltTestRunner.kt
│ │ ├── debug
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ │ └── networkresponses
│ │ │ │ ├── animals.json
│ │ │ │ └── validToken.json
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── common
│ │ │ ├── HiltTestActivity.kt
│ │ │ ├── RxImmediateSchedulerRule.kt
│ │ │ ├── TestCoroutineRule.kt
│ │ │ └── data
│ │ │ └── FakeRepository.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── common
│ │ │ │ ├── data
│ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ ├── api
│ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ ├── interceptors
│ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ └── MappingException.kt
│ │ │ │ ├── cache
│ │ │ │ │ ├── Cache.kt
│ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ ├── daos
│ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ └── preferences
│ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ └── ActivityRetainedModule.kt
│ │ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── animal
│ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ └── details
│ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ ├── organization
│ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ ├── pagination
│ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── search
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── repositories
│ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ ├── presentation
│ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ ├── Event.kt
│ │ │ │ └── model
│ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ └── mappers
│ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ └── Extensions.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ └── dog_placeholder.png
│ │ │ ├── layout
│ │ │ └── recycler_view_animal_item.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── common
│ │ ├── data
│ │ └── api
│ │ │ ├── interceptors
│ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ └── utils
│ │ │ └── JsonReader.kt
│ │ └── domain
│ │ └── model
│ │ └── animal
│ │ └── PhotoTests.kt
│ ├── configs
│ └── rwcodestyle.xml
│ ├── features
│ ├── animalsnearyou
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── consumer-rules.pro
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── animalsnearyou
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── animalsnearyou
│ │ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ └── res
│ │ │ │ ├── layout
│ │ │ │ └── fragment_animals_near_you.xml
│ │ │ │ ├── navigation
│ │ │ │ └── nav_animalsnearyou.xml
│ │ │ │ └── values
│ │ │ │ └── strings.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── animalsnearyou
│ │ │ └── ExampleUnitTest.kt
│ └── search
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── consumer-rules.pro
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── search
│ │ │ ├── launchFragmentInHiltContainer.kt
│ │ │ └── presentation
│ │ │ └── SearchFragmentTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── ic_search_24dp.xml
│ │ │ └── no_results_pug.png
│ │ │ ├── layout
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ └── fragment_search.xml
│ │ │ ├── menu
│ │ │ └── menu_search.xml
│ │ │ ├── navigation
│ │ │ └── nav_search.xml
│ │ │ └── values
│ │ │ └── strings.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── search
│ │ └── presentation
│ │ └── SearchFragmentViewModelTest.kt
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 09-dynamic-features-theory
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ └── .keep
│ └── starter
│ └── .keep
├── 10-building-a-dynamic-feature
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .idea
│ │ ├── compiler.xml
│ │ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── android-library.gradle
│ ├── app
│ │ ├── .gitignore
│ │ ├── .idea
│ │ │ ├── gradle.xml
│ │ │ ├── misc.xml
│ │ │ ├── modules.xml
│ │ │ └── workspace.xml
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── di
│ │ │ │ └── SharingModuleDependencies.kt
│ │ │ │ └── main
│ │ │ │ ├── domain
│ │ │ │ └── usecases
│ │ │ │ │ └── OnboardingIsComplete.kt
│ │ │ │ └── presentation
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── MainActivityEvent.kt
│ │ │ │ ├── MainActivityViewEffect.kt
│ │ │ │ └── MainActivityViewModel.kt
│ │ │ └── res
│ │ │ ├── drawable
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ └── activity_main.xml
│ │ │ ├── menu
│ │ │ └── menu_bottom_nav.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ └── values
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ ├── build.gradle
│ ├── common
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── consumer-rules.pro
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── common
│ │ │ │ ├── data
│ │ │ │ ├── PetFinderAnimalRepositoryTest.kt
│ │ │ │ ├── api
│ │ │ │ │ └── utils
│ │ │ │ │ │ └── FakeServer.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── TestCacheModule.kt
│ │ │ │ │ └── TestPreferencesModule.kt
│ │ │ │ └── preferences
│ │ │ │ │ └── FakePreferences.kt
│ │ │ │ ├── di
│ │ │ │ └── TestActivityRetainedModule.kt
│ │ │ │ └── testrunners
│ │ │ │ └── HiltTestRunner.kt
│ │ │ ├── debug
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets
│ │ │ │ └── networkresponses
│ │ │ │ │ ├── animals.json
│ │ │ │ │ └── validToken.json
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── common
│ │ │ │ ├── HiltTestActivity.kt
│ │ │ │ ├── RxImmediateSchedulerRule.kt
│ │ │ │ ├── TestCoroutineRule.kt
│ │ │ │ └── data
│ │ │ │ └── FakeRepository.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── common
│ │ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ └── ActivityRetainedModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── search
│ │ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ ├── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ └── GetAnimalDetails.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ └── ic_share_24.xml
│ │ │ │ ├── layout
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ └── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── common
│ │ │ ├── data
│ │ │ └── api
│ │ │ │ ├── interceptors
│ │ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ │ └── utils
│ │ │ │ └── JsonReader.kt
│ │ │ └── domain
│ │ │ └── model
│ │ │ └── animal
│ │ │ └── PhotoTests.kt
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── features
│ │ ├── animalsnearyou
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── consumer-rules.pro
│ │ │ ├── proguard-rules.pro
│ │ │ └── src
│ │ │ │ ├── androidTest
│ │ │ │ └── java
│ │ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── animalsnearyou
│ │ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ │ ├── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java
│ │ │ │ │ └── com
│ │ │ │ │ │ └── realworld
│ │ │ │ │ │ └── android
│ │ │ │ │ │ └── petsave
│ │ │ │ │ │ └── animalsnearyou
│ │ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── animaldetails
│ │ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ │ ├── AnimalDetailsFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalDetailsViewState.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ └── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ └── main
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ └── res
│ │ │ │ │ ├── drawable
│ │ │ │ │ └── ic_call_24dp.xml
│ │ │ │ │ ├── layout
│ │ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ │ └── fragment_details.xml
│ │ │ │ │ ├── menu
│ │ │ │ │ └── menu_share.xml
│ │ │ │ │ ├── navigation
│ │ │ │ │ └── nav_animalsnearyou.xml
│ │ │ │ │ └── values
│ │ │ │ │ └── strings.xml
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── animalsnearyou
│ │ │ │ └── ExampleUnitTest.kt
│ │ ├── onboarding
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── consumer-rules.pro
│ │ │ ├── proguard-rules.pro
│ │ │ └── src
│ │ │ │ ├── androidTest
│ │ │ │ └── java
│ │ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── onboarding
│ │ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ │ ├── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java
│ │ │ │ │ └── com
│ │ │ │ │ │ └── realworld
│ │ │ │ │ │ └── android
│ │ │ │ │ │ └── petsave
│ │ │ │ │ │ └── onboarding
│ │ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ └── StoreOnboardingData.kt
│ │ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── OnboardingEvent.kt
│ │ │ │ │ │ ├── OnboardingFragment.kt
│ │ │ │ │ │ ├── OnboardingFragmentViewModel.kt
│ │ │ │ │ │ ├── OnboardingViewEffect.kt
│ │ │ │ │ │ └── OnboardingViewState.kt
│ │ │ │ └── res
│ │ │ │ │ ├── layout
│ │ │ │ │ └── fragment_onboarding.xml
│ │ │ │ │ ├── navigation
│ │ │ │ │ └── nav_onboarding.xml
│ │ │ │ │ └── values
│ │ │ │ │ └── strings.xml
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── onboarding
│ │ │ │ └── ExampleUnitTest.kt
│ │ ├── search
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── consumer-rules.pro
│ │ │ ├── proguard-rules.pro
│ │ │ └── src
│ │ │ │ ├── androidTest
│ │ │ │ └── java
│ │ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── search
│ │ │ │ │ ├── launchFragmentInHiltContainer.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ └── SearchFragmentTest.kt
│ │ │ │ ├── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── java
│ │ │ │ │ └── com
│ │ │ │ │ │ └── realworld
│ │ │ │ │ │ └── android
│ │ │ │ │ │ └── petsave
│ │ │ │ │ │ └── search
│ │ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ │ └── SearchViewState.kt
│ │ │ │ └── res
│ │ │ │ │ ├── drawable
│ │ │ │ │ ├── card_view_border.xml
│ │ │ │ │ ├── cat_derp.png
│ │ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ │ └── no_results_pug.png
│ │ │ │ │ ├── layout
│ │ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ │ └── fragment_search.xml
│ │ │ │ │ ├── menu
│ │ │ │ │ └── menu_search.xml
│ │ │ │ │ ├── navigation
│ │ │ │ │ └── nav_search.xml
│ │ │ │ │ └── values
│ │ │ │ │ └── strings.xml
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── search
│ │ │ │ └── presentation
│ │ │ │ └── SearchFragmentViewModelTest.kt
│ │ └── sharing
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle
│ │ │ ├── consumer-rules.pro
│ │ │ ├── proguard-rules.pro
│ │ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── sharing
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── sharing
│ │ │ │ │ ├── di
│ │ │ │ │ ├── SharingComponent.kt
│ │ │ │ │ ├── SharingModule.kt
│ │ │ │ │ ├── ViewModelFactory.kt
│ │ │ │ │ └── ViewModelKey.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SharingEvent.kt
│ │ │ │ │ ├── SharingFragment.kt
│ │ │ │ │ ├── SharingFragmentViewModel.kt
│ │ │ │ │ ├── SharingViewState.kt
│ │ │ │ │ └── model
│ │ │ │ │ ├── UIAnimalToShare.kt
│ │ │ │ │ └── mappers
│ │ │ │ │ └── UiAnimalToShareMapper.kt
│ │ │ └── res
│ │ │ │ ├── layout
│ │ │ │ └── fragment_sharing.xml
│ │ │ │ ├── navigation
│ │ │ │ └── nav_sharing.xml
│ │ │ │ └── values
│ │ │ │ └── strings.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── sharing
│ │ │ └── ExampleUnitTest.kt
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .idea
│ ├── compiler.xml
│ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── android-library.gradle
│ ├── app
│ ├── .gitignore
│ ├── .idea
│ │ ├── gradle.xml
│ │ ├── misc.xml
│ │ ├── modules.xml
│ │ └── workspace.xml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ ├── PetSaveApplication.kt
│ │ │ └── main
│ │ │ ├── domain
│ │ │ └── usecases
│ │ │ │ └── OnboardingIsComplete.kt
│ │ │ └── presentation
│ │ │ ├── MainActivity.kt
│ │ │ ├── MainActivityEvent.kt
│ │ │ ├── MainActivityViewEffect.kt
│ │ │ └── MainActivityViewModel.kt
│ │ └── res
│ │ ├── drawable
│ │ ├── ic_animals_near_you_24dp.xml
│ │ ├── ic_close_24dp.xml
│ │ └── splash_background.xml
│ │ ├── layout
│ │ └── activity_main.xml
│ │ ├── menu
│ │ └── menu_bottom_nav.xml
│ │ ├── mipmap-anydpi-v26
│ │ └── ic_launcher.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── navigation
│ │ └── nav_graph.xml
│ │ └── values
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── build.gradle
│ ├── common
│ ├── .gitignore
│ ├── build.gradle
│ ├── consumer-rules.pro
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── common
│ │ │ ├── data
│ │ │ ├── PetFinderAnimalRepositoryTest.kt
│ │ │ ├── api
│ │ │ │ └── utils
│ │ │ │ │ └── FakeServer.kt
│ │ │ ├── di
│ │ │ │ ├── TestCacheModule.kt
│ │ │ │ └── TestPreferencesModule.kt
│ │ │ └── preferences
│ │ │ │ └── FakePreferences.kt
│ │ │ ├── di
│ │ │ └── TestActivityRetainedModule.kt
│ │ │ └── testrunners
│ │ │ └── HiltTestRunner.kt
│ │ ├── debug
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ │ └── networkresponses
│ │ │ │ ├── animals.json
│ │ │ │ └── validToken.json
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── common
│ │ │ ├── HiltTestActivity.kt
│ │ │ ├── RxImmediateSchedulerRule.kt
│ │ │ ├── TestCoroutineRule.kt
│ │ │ └── data
│ │ │ └── FakeRepository.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── common
│ │ │ │ ├── data
│ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ ├── api
│ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ ├── ConnectionManager.kt
│ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ ├── interceptors
│ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ ├── LoggingInterceptor.kt
│ │ │ │ │ │ └── NetworkStatusInterceptor.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ └── MappingException.kt
│ │ │ │ ├── cache
│ │ │ │ │ ├── Cache.kt
│ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ ├── daos
│ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ └── CachedOrganization.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ └── preferences
│ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ └── ActivityRetainedModule.kt
│ │ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── animal
│ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ └── details
│ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ ├── organization
│ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ ├── pagination
│ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── search
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ ├── repositories
│ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ └── usecases
│ │ │ │ │ └── GetAnimalDetails.kt
│ │ │ │ ├── presentation
│ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ ├── Event.kt
│ │ │ │ └── model
│ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ └── mappers
│ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ └── Extensions.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ ├── dog_placeholder.png
│ │ │ └── ic_share_24.xml
│ │ │ ├── layout
│ │ │ └── recycler_view_animal_item.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── common
│ │ ├── data
│ │ └── api
│ │ │ ├── interceptors
│ │ │ └── AuthenticationInterceptorTest.kt
│ │ │ └── utils
│ │ │ └── JsonReader.kt
│ │ └── domain
│ │ └── model
│ │ └── animal
│ │ └── PhotoTests.kt
│ ├── configs
│ └── rwcodestyle.xml
│ ├── features
│ ├── animalsnearyou
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── consumer-rules.pro
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── animalsnearyou
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── animalsnearyou
│ │ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── animaldetails
│ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ ├── AnimalDetailsFragmentViewModel.kt
│ │ │ │ │ ├── AnimalDetailsViewState.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ └── UiAnimalDetailsMapper.kt
│ │ │ │ │ └── main
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ └── ic_call_24dp.xml
│ │ │ │ ├── layout
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ └── fragment_details.xml
│ │ │ │ ├── menu
│ │ │ │ └── menu_share.xml
│ │ │ │ ├── navigation
│ │ │ │ └── nav_animalsnearyou.xml
│ │ │ │ └── values
│ │ │ │ └── strings.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── animalsnearyou
│ │ │ └── ExampleUnitTest.kt
│ ├── onboarding
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── consumer-rules.pro
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── onboarding
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── onboarding
│ │ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ └── StoreOnboardingData.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── OnboardingEvent.kt
│ │ │ │ │ ├── OnboardingFragment.kt
│ │ │ │ │ ├── OnboardingFragmentViewModel.kt
│ │ │ │ │ ├── OnboardingViewEffect.kt
│ │ │ │ │ └── OnboardingViewState.kt
│ │ │ └── res
│ │ │ │ ├── layout
│ │ │ │ └── fragment_onboarding.xml
│ │ │ │ ├── navigation
│ │ │ │ └── nav_onboarding.xml
│ │ │ │ └── values
│ │ │ │ └── strings.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── onboarding
│ │ │ └── ExampleUnitTest.kt
│ ├── search
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── consumer-rules.pro
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── search
│ │ │ │ ├── launchFragmentInHiltContainer.kt
│ │ │ │ └── presentation
│ │ │ │ └── SearchFragmentTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ └── no_results_pug.png
│ │ │ │ ├── layout
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ └── fragment_search.xml
│ │ │ │ ├── menu
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── navigation
│ │ │ │ └── nav_search.xml
│ │ │ │ └── values
│ │ │ │ └── strings.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── search
│ │ │ └── presentation
│ │ │ └── SearchFragmentViewModelTest.kt
│ └── sharing
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── consumer-rules.pro
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── sharing
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── sharing
│ │ │ │ └── presentation
│ │ │ │ ├── SharingEvent.kt
│ │ │ │ ├── SharingFragment.kt
│ │ │ │ ├── SharingFragmentViewModel.kt
│ │ │ │ ├── SharingViewState.kt
│ │ │ │ └── model
│ │ │ │ ├── UIAnimalToShare.kt
│ │ │ │ └── mappers
│ │ │ │ └── UiAnimalToShareMapper.kt
│ │ └── res
│ │ │ ├── layout
│ │ │ └── fragment_sharing.xml
│ │ │ ├── navigation
│ │ │ └── nav_sharing.xml
│ │ │ └── values
│ │ │ └── strings.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── sharing
│ │ └── ExampleUnitTest.kt
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 11-animations
├── assets
│ └── .keep
└── projects
│ ├── final
│ ├── .gitignore
│ ├── .keep
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── core
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ ├── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ ├── details
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ │ ├── easteregg
│ │ │ │ │ └── SecretFragment.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── animator
│ │ │ │ ├── animator_alpha.xml
│ │ │ │ └── animator_heart_fillup.xml
│ │ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── cute_doggo.webp
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── heart_fill_animation.xml
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_call_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_heart_unfilled.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_details.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ ├── fragment_secret.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ └── ic_launcher.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ ├── raw
│ │ │ │ ├── happy_dog.json
│ │ │ │ └── lazy_cat.json
│ │ │ │ └── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .keep
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── core
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ ├── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ ├── details
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ ├── easteregg
│ │ │ │ └── SecretFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── Exceptions.kt
│ │ │ │ ├── model
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── cute_doggo.webp
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_call_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_details.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_secret.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── raw
│ │ │ ├── happy_dog.json
│ │ │ └── lazy_cat.json
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 12-motionlayout-and-motion-editor
├── assets
│ └── .keep
└── projects
│ ├── final
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── common
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ ├── details
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ │ ├── easteregg
│ │ │ │ │ └── SecretFragment.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── animator
│ │ │ │ ├── animator_alpha.xml
│ │ │ │ └── animator_heart_fillup.xml
│ │ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── cute_doggo.webp
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── heart_fill_animation.xml
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_call_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_heart_unfilled.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_details.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ ├── fragment_secret.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ └── ic_launcher.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ ├── raw
│ │ │ │ ├── happy_dog.json
│ │ │ │ └── lazy_cat.json
│ │ │ │ ├── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ │ └── xml
│ │ │ │ └── fragment_details_scene.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ ├── details
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ ├── easteregg
│ │ │ │ └── SecretFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── animator
│ │ │ ├── animator_alpha.xml
│ │ │ └── animator_heart_fillup.xml
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── cute_doggo.webp
│ │ │ ├── dog_placeholder.png
│ │ │ ├── heart_fill_animation.xml
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_call_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_heart_unfilled.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_details.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_secret.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── raw
│ │ │ ├── happy_dog.json
│ │ │ └── lazy_cat.json
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 13-custom-views
├── assets
│ └── .keep
└── projects
│ ├── final
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── common
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ ├── ProgressButton.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ ├── details
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ │ ├── easteregg
│ │ │ │ │ └── SecretFragment.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── animator
│ │ │ │ ├── animator_alpha.xml
│ │ │ │ └── animator_heart_fillup.xml
│ │ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── cute_doggo.webp
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── heart_fill_animation.xml
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_call_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_heart_unfilled.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_details.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ ├── fragment_secret.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ └── ic_launcher.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ └── ic_launcher_foreground.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ ├── raw
│ │ │ │ ├── happy_dog.json
│ │ │ │ └── lazy_cat.json
│ │ │ │ ├── values
│ │ │ │ ├── attrs.xml
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ │ └── xml
│ │ │ │ └── fragment_details_scene.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ ├── details
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ ├── easteregg
│ │ │ │ └── SecretFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── animator
│ │ │ ├── animator_alpha.xml
│ │ │ └── animator_heart_fillup.xml
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── cute_doggo.webp
│ │ │ ├── dog_placeholder.png
│ │ │ ├── heart_fill_animation.xml
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_call_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_heart_unfilled.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_details.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_secret.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── raw
│ │ │ ├── happy_dog.json
│ │ │ └── lazy_cat.json
│ │ │ ├── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── fragment_details_scene.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 14-style-and-theme
├── assets
│ └── .keep
└── projects
│ ├── final
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── common
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ ├── ProgressButton.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ ├── details
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ │ ├── easteregg
│ │ │ │ │ └── SecretFragment.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── animator
│ │ │ │ ├── animator_alpha.xml
│ │ │ │ └── animator_heart_fillup.xml
│ │ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── cute_doggo.webp
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── heart_fill_animation.xml
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_call_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_heart_unfilled.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── font
│ │ │ │ ├── roboto_family.xml
│ │ │ │ └── roboto_regular.ttf
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_details.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ ├── fragment_secret.xml
│ │ │ │ ├── layout_pet_stat.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ ├── menu_search.xml
│ │ │ │ └── theme_options.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ ├── raw
│ │ │ │ ├── happy_dog.json
│ │ │ │ └── lazy_cat.json
│ │ │ │ ├── values-night
│ │ │ │ └── colors.xml
│ │ │ │ ├── values
│ │ │ │ ├── attrs.xml
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ │ └── xml
│ │ │ │ └── fragment_details_scene.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ ├── ProgressButton.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ ├── details
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ ├── easteregg
│ │ │ │ └── SecretFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── animator
│ │ │ ├── animator_alpha.xml
│ │ │ └── animator_heart_fillup.xml
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── cute_doggo.webp
│ │ │ ├── dog_placeholder.png
│ │ │ ├── heart_fill_animation.xml
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_call_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_heart_unfilled.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── font
│ │ │ ├── roboto_family.xml
│ │ │ └── roboto_regular.ttf
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_details.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_secret.xml
│ │ │ ├── layout_pet_stat.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── raw
│ │ │ ├── happy_dog.json
│ │ │ └── lazy_cat.json
│ │ │ ├── values
│ │ │ ├── attrs.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── fragment_details_scene.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 15-user-privacy
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets
│ │ │ └── users.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── core
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── user
│ │ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ │ └── Users.kt
│ │ │ │ │ ├── repositories
│ │ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ │ └── UserRepository.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ ├── Encryption.kt
│ │ │ │ │ ├── Extensions.kt
│ │ │ │ │ └── FileConstants.kt
│ │ │ │ ├── report
│ │ │ │ └── presentation
│ │ │ │ │ └── ReportDetailFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── Exceptions.kt
│ │ │ │ ├── model
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_report_detail.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ └── users.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ ├── PetSaveApplication.kt
│ │ │ ├── animalsnearyou
│ │ │ └── presentation
│ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ └── InfiniteScrollListener.kt
│ │ │ ├── core
│ │ │ ├── MainActivity.kt
│ │ │ ├── data
│ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ ├── api
│ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ ├── interceptors
│ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ └── MappingException.kt
│ │ │ │ ├── cache
│ │ │ │ │ ├── Cache.kt
│ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ ├── daos
│ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ └── preferences
│ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ └── PreferencesConstants.kt
│ │ │ ├── di
│ │ │ │ ├── ApplicationModule.kt
│ │ │ │ └── ViewModelsModule.kt
│ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── animal
│ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ └── Media.kt
│ │ │ │ │ ├── organization
│ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ ├── pagination
│ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── user
│ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ └── Users.kt
│ │ │ │ ├── repositories
│ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ └── UserRepository.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ ├── presentation
│ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ ├── Event.kt
│ │ │ │ └── model
│ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ └── mappers
│ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ └── UiMapper.kt
│ │ │ └── utils
│ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ ├── Encryption.kt
│ │ │ │ ├── Extensions.kt
│ │ │ │ └── FileConstants.kt
│ │ │ ├── report
│ │ │ └── presentation
│ │ │ │ └── ReportDetailFragment.kt
│ │ │ └── search
│ │ │ ├── domain
│ │ │ ├── Exceptions.kt
│ │ │ ├── model
│ │ │ │ ├── SearchFilters.kt
│ │ │ │ ├── SearchParameters.kt
│ │ │ │ └── SearchResults.kt
│ │ │ └── usecases
│ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ ├── SearchAnimals.kt
│ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ └── presentation
│ │ │ ├── SearchEvent.kt
│ │ │ ├── SearchFragment.kt
│ │ │ ├── SearchFragmentViewModel.kt
│ │ │ └── SearchViewState.kt
│ │ └── res
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ ├── card_view_border.xml
│ │ ├── cat_derp.png
│ │ ├── dog_placeholder.png
│ │ ├── ic_animals_near_you_24dp.xml
│ │ ├── ic_close_24dp.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_search_24dp.xml
│ │ ├── no_results_pug.png
│ │ └── splash_background.xml
│ │ ├── layout
│ │ ├── activity_main.xml
│ │ ├── dropdown_menu_popup_item.xml
│ │ ├── exposed_dropdown_menu.xml
│ │ ├── filtered_search_widget.xml
│ │ ├── fragment_animals_near_you.xml
│ │ ├── fragment_report_detail.xml
│ │ ├── fragment_search.xml
│ │ └── recycler_view_animal_item.xml
│ │ ├── menu
│ │ ├── menu_bottom_nav.xml
│ │ └── menu_search.xml
│ │ ├── mipmap-anydpi-v26
│ │ └── ic_launcher.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ └── ic_launcher_foreground.png
│ │ ├── navigation
│ │ └── nav_graph.xml
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 16-securing-data-at-rest
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .idea
│ │ └── codeStyles
│ │ │ └── Project.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets
│ │ │ └── users.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── core
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── user
│ │ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ │ └── Users.kt
│ │ │ │ │ ├── repositories
│ │ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ │ └── UserRepository.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ ├── Encryption.kt
│ │ │ │ │ ├── Extensions.kt
│ │ │ │ │ ├── FileConstants.kt
│ │ │ │ │ └── PreferencesHelper.kt
│ │ │ │ ├── report
│ │ │ │ └── presentation
│ │ │ │ │ └── ReportDetailFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── Exceptions.kt
│ │ │ │ ├── model
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_report_detail.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ └── ic_launcher_foreground.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ └── users.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ ├── PetSaveApplication.kt
│ │ │ ├── animalsnearyou
│ │ │ └── presentation
│ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ └── InfiniteScrollListener.kt
│ │ │ ├── core
│ │ │ ├── MainActivity.kt
│ │ │ ├── data
│ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ ├── api
│ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ ├── interceptors
│ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ └── MappingException.kt
│ │ │ │ ├── cache
│ │ │ │ │ ├── Cache.kt
│ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ ├── daos
│ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ └── preferences
│ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ └── PreferencesConstants.kt
│ │ │ ├── di
│ │ │ │ ├── ApplicationModule.kt
│ │ │ │ └── ViewModelsModule.kt
│ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── animal
│ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ └── Media.kt
│ │ │ │ │ ├── organization
│ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ ├── pagination
│ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── user
│ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ └── Users.kt
│ │ │ │ ├── repositories
│ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ └── UserRepository.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ ├── presentation
│ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ ├── Event.kt
│ │ │ │ └── model
│ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ └── mappers
│ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ └── UiMapper.kt
│ │ │ └── utils
│ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ ├── Encryption.kt
│ │ │ │ ├── Extensions.kt
│ │ │ │ ├── FileConstants.kt
│ │ │ │ └── PreferencesHelper.kt
│ │ │ ├── report
│ │ │ └── presentation
│ │ │ │ └── ReportDetailFragment.kt
│ │ │ └── search
│ │ │ ├── domain
│ │ │ ├── Exceptions.kt
│ │ │ ├── model
│ │ │ │ ├── SearchFilters.kt
│ │ │ │ ├── SearchParameters.kt
│ │ │ │ └── SearchResults.kt
│ │ │ └── usecases
│ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ ├── SearchAnimals.kt
│ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ └── presentation
│ │ │ ├── SearchEvent.kt
│ │ │ ├── SearchFragment.kt
│ │ │ ├── SearchFragmentViewModel.kt
│ │ │ └── SearchViewState.kt
│ │ └── res
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ ├── card_view_border.xml
│ │ ├── cat_derp.png
│ │ ├── dog_placeholder.png
│ │ ├── ic_animals_near_you_24dp.xml
│ │ ├── ic_close_24dp.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_search_24dp.xml
│ │ ├── no_results_pug.png
│ │ └── splash_background.xml
│ │ ├── layout
│ │ ├── activity_main.xml
│ │ ├── dropdown_menu_popup_item.xml
│ │ ├── exposed_dropdown_menu.xml
│ │ ├── filtered_search_widget.xml
│ │ ├── fragment_animals_near_you.xml
│ │ ├── fragment_report_detail.xml
│ │ ├── fragment_search.xml
│ │ └── recycler_view_animal_item.xml
│ │ ├── menu
│ │ ├── menu_bottom_nav.xml
│ │ └── menu_search.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_background.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── navigation
│ │ └── nav_graph.xml
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 17-securing-data-in-transit
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets
│ │ │ │ └── users.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── core
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── Authenticator.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── ReportManager.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ │ └── user
│ │ │ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ │ │ └── Users.kt
│ │ │ │ │ │ ├── repositories
│ │ │ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ │ │ └── UserRepository.kt
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ ├── Encryption.kt
│ │ │ │ │ │ ├── Extensions.kt
│ │ │ │ │ │ ├── FileConstants.kt
│ │ │ │ │ │ └── PreferencesHelper.kt
│ │ │ │ │ ├── report
│ │ │ │ │ └── presentation
│ │ │ │ │ │ └── ReportDetailFragment.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_baseline_report_problem_24.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_report_detail.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ ├── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ │ └── xml
│ │ │ │ └── network_security_config.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ │ └── users.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── core
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── Authenticator.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── ReportManager.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── user
│ │ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ │ └── Users.kt
│ │ │ │ │ ├── repositories
│ │ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ │ └── UserRepository.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ ├── Encryption.kt
│ │ │ │ │ ├── Extensions.kt
│ │ │ │ │ ├── FileConstants.kt
│ │ │ │ │ └── PreferencesHelper.kt
│ │ │ │ ├── report
│ │ │ │ └── presentation
│ │ │ │ │ └── ReportDetailFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── Exceptions.kt
│ │ │ │ ├── model
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_baseline_report_problem_24.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_report_detail.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── network_security_config.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 18-app-hardening
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets
│ │ │ │ └── users.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── core
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── Authenticator.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── ReportManager.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ │ └── user
│ │ │ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ │ │ └── Users.kt
│ │ │ │ │ │ ├── repositories
│ │ │ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ │ │ └── UserRepository.kt
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DataValidator.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ ├── Encryption.kt
│ │ │ │ │ │ ├── Extensions.kt
│ │ │ │ │ │ ├── FileConstants.kt
│ │ │ │ │ │ ├── PreferencesHelper.kt
│ │ │ │ │ │ ├── Timing.kt
│ │ │ │ │ │ └── WatchDog.kt
│ │ │ │ │ ├── report
│ │ │ │ │ └── presentation
│ │ │ │ │ │ └── ReportDetailFragment.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_baseline_report_problem_24.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_report_detail.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ ├── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ │ └── xml
│ │ │ │ └── network_security_config.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ │ └── users.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── core
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── Authenticator.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── ReportManager.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── user
│ │ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ │ └── Users.kt
│ │ │ │ │ ├── repositories
│ │ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ │ └── UserRepository.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DataValidator.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ ├── Encryption.kt
│ │ │ │ │ ├── Extensions.kt
│ │ │ │ │ ├── FileConstants.kt
│ │ │ │ │ ├── PreferencesHelper.kt
│ │ │ │ │ ├── Timing.kt
│ │ │ │ │ └── WatchDog.kt
│ │ │ │ ├── report
│ │ │ │ └── presentation
│ │ │ │ │ └── ReportDetailFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── Exceptions.kt
│ │ │ │ ├── model
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_baseline_report_problem_24.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_report_detail.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── network_security_config.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 19-firebase-integration
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── google-services.json
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── common
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ ├── ProgressButton.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ ├── details
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ │ ├── easteregg
│ │ │ │ │ └── SecretFragment.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── animator
│ │ │ │ ├── animator_alpha.xml
│ │ │ │ └── animator_heart_fillup.xml
│ │ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── cute_doggo.webp
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── heart_fill_animation.xml
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_call_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_heart_unfilled.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── font
│ │ │ │ ├── roboto_family.xml
│ │ │ │ └── roboto_regular.ttf
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_details.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ ├── fragment_secret.xml
│ │ │ │ ├── layout_pet_stat.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ ├── menu_search.xml
│ │ │ │ └── theme_options.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ ├── raw
│ │ │ │ ├── happy_dog.json
│ │ │ │ └── lazy_cat.json
│ │ │ │ ├── values-night
│ │ │ │ └── colors.xml
│ │ │ │ ├── values
│ │ │ │ ├── attrs.xml
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ │ └── xml
│ │ │ │ └── fragment_details_scene.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ ├── remoteconfig
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── consumer-rules.pro
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── remoteconfig
│ │ │ └── RemoteConfigUtil.kt
│ └── settings.gradle
│ └── starter
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ ├── ProgressButton.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ ├── details
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ ├── easteregg
│ │ │ │ └── SecretFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── animator
│ │ │ ├── animator_alpha.xml
│ │ │ └── animator_heart_fillup.xml
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── cute_doggo.webp
│ │ │ ├── dog_placeholder.png
│ │ │ ├── heart_fill_animation.xml
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_call_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_heart_unfilled.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── font
│ │ │ ├── roboto_family.xml
│ │ │ └── roboto_regular.ttf
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_details.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_secret.xml
│ │ │ ├── layout_pet_stat.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ ├── menu_search.xml
│ │ │ └── theme_options.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── raw
│ │ │ ├── happy_dog.json
│ │ │ └── lazy_cat.json
│ │ │ ├── values-night
│ │ │ └── colors.xml
│ │ │ ├── values
│ │ │ ├── attrs.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── fragment_details_scene.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 20-release-optimizations
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .idea
│ │ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.ReportDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.core.data.cache.ReportDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets
│ │ │ │ └── users.xml
│ │ │ ├── cpp
│ │ │ │ ├── include
│ │ │ │ │ └── user_processing_jni.h
│ │ │ │ └── user_processing_jni.cpp
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── core
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── Authenticator.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── ReportManager.kt
│ │ │ │ │ │ │ ├── SN.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── ReportDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ ├── OrganizationsDao.kt
│ │ │ │ │ │ │ │ └── ReportsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── Report.kt
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ │ └── user
│ │ │ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ │ │ └── Users.kt
│ │ │ │ │ │ ├── repositories
│ │ │ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ │ │ └── UserRepository.kt
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DataValidator.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ ├── Encryption.kt
│ │ │ │ │ │ ├── Extensions.kt
│ │ │ │ │ │ ├── FileConstants.kt
│ │ │ │ │ │ ├── PreferencesHelper.kt
│ │ │ │ │ │ ├── Timing.kt
│ │ │ │ │ │ └── WatchDog.kt
│ │ │ │ │ ├── report
│ │ │ │ │ └── presentation
│ │ │ │ │ │ └── ReportDetailFragment.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_baseline_report_problem_24.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_report_detail.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ ├── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ │ └── xml
│ │ │ │ └── network_security_config.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .idea
│ └── vcs.xml
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.ReportDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.core.data.cache.ReportDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ │ └── users.xml
│ │ ├── cpp
│ │ │ ├── include
│ │ │ │ └── user_processing_jni.h
│ │ │ └── user_processing_jni.cpp
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── core
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── Authenticator.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── ReportManager.kt
│ │ │ │ │ │ ├── SN.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── ReportDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ ├── OrganizationsDao.kt
│ │ │ │ │ │ │ └── ReportsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── Report.kt
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── user
│ │ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ │ └── Users.kt
│ │ │ │ │ ├── repositories
│ │ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ │ └── UserRepository.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DataValidator.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ ├── Encryption.kt
│ │ │ │ │ ├── Extensions.kt
│ │ │ │ │ ├── FileConstants.kt
│ │ │ │ │ ├── PreferencesHelper.kt
│ │ │ │ │ ├── Timing.kt
│ │ │ │ │ └── WatchDog.kt
│ │ │ │ ├── report
│ │ │ │ └── presentation
│ │ │ │ │ └── ReportDetailFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── Exceptions.kt
│ │ │ │ ├── model
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_baseline_report_problem_24.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_report_detail.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── network_security_config.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── 21-advanced-debugging
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── google-services.json
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── common
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ ├── ProgressButton.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ └── Extensions.kt
│ │ │ │ │ ├── details
│ │ │ │ │ ├── domain
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ │ ├── easteregg
│ │ │ │ │ └── SecretFragment.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── animator
│ │ │ │ ├── animator_alpha.xml
│ │ │ │ └── animator_heart_fillup.xml
│ │ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── cute_doggo.webp
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── heart_fill_animation.xml
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_call_24dp.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_heart_unfilled.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── font
│ │ │ │ ├── roboto_family.xml
│ │ │ │ └── roboto_regular.ttf
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_details.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ ├── fragment_secret.xml
│ │ │ │ ├── layout_pet_stat.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ ├── menu_search.xml
│ │ │ │ └── theme_options.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ ├── raw
│ │ │ │ ├── happy_dog.json
│ │ │ │ └── lazy_cat.json
│ │ │ │ ├── values-night
│ │ │ │ └── colors.xml
│ │ │ │ ├── values
│ │ │ │ ├── attrs.xml
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ │ └── xml
│ │ │ │ └── fragment_details_scene.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── design_mockup.png
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ ├── remoteconfig
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── consumer-rules.pro
│ │ ├── proguard-rules.pro
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── remoteconfig
│ │ │ └── RemoteConfigUtil.kt
│ └── settings.gradle
│ └── starter
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── google-services.json
│ ├── proguard-rules.pro
│ ├── schemas
│ │ └── com.realworld.android.petsave.common.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── common
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ └── OrganizationsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── Media.kt
│ │ │ │ │ │ │ └── details
│ │ │ │ │ │ │ │ ├── Age.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── Breed.kt
│ │ │ │ │ │ │ │ ├── Coat.kt
│ │ │ │ │ │ │ │ ├── Colors.kt
│ │ │ │ │ │ │ │ ├── Details.kt
│ │ │ │ │ │ │ │ ├── Gender.kt
│ │ │ │ │ │ │ │ ├── HabitatAdaptation.kt
│ │ │ │ │ │ │ │ ├── HealthDetails.kt
│ │ │ │ │ │ │ │ └── Size.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ └── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ └── repositories
│ │ │ │ │ │ └── AnimalRepository.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ ├── ProgressButton.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ ├── UIAnimalDetailed.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalDetailsMapper.kt
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ └── Extensions.kt
│ │ │ │ ├── details
│ │ │ │ ├── domain
│ │ │ │ │ └── usecases
│ │ │ │ │ │ └── AnimalDetails.kt
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalDetailsEvent.kt
│ │ │ │ │ ├── AnimalDetailsFragment.kt
│ │ │ │ │ ├── AnimalDetailsViewModel.kt
│ │ │ │ │ └── AnimalDetailsViewState.kt
│ │ │ │ ├── easteregg
│ │ │ │ └── SecretFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── model
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── animator
│ │ │ ├── animator_alpha.xml
│ │ │ └── animator_heart_fillup.xml
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── cute_doggo.webp
│ │ │ ├── dog_placeholder.png
│ │ │ ├── heart_fill_animation.xml
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_call_24dp.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_heart_unfilled.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── font
│ │ │ ├── roboto_family.xml
│ │ │ └── roboto_regular.ttf
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_details.xml
│ │ │ ├── fragment_search.xml
│ │ │ ├── fragment_secret.xml
│ │ │ ├── layout_pet_stat.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ ├── menu_search.xml
│ │ │ └── theme_options.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── raw
│ │ │ ├── happy_dog.json
│ │ │ └── lazy_cat.json
│ │ │ ├── values-night
│ │ │ └── colors.xml
│ │ │ ├── values
│ │ │ ├── attrs.xml
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── fragment_details_scene.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── design_mockup.png
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ ├── remoteconfig
│ ├── .gitignore
│ ├── build.gradle
│ ├── consumer-rules.pro
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── remoteconfig
│ │ └── RemoteConfigUtil.kt
│ └── settings.gradle
├── 22-app-analysis
├── assets
│ └── .keep
└── projects
│ ├── challenge
│ └── .keep
│ ├── final
│ ├── .gitignore
│ ├── .keep
│ ├── README.md
│ ├── app
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ ├── proguard-rules.pro
│ │ ├── schemas
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.petsave.core.data.cache.ReportDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ ├── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ │ └── 1.json
│ │ │ └── com.realworld.android.petsave.core.data.cache.ReportDatabase
│ │ │ │ └── 1.json
│ │ └── src
│ │ │ ├── androidTest
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ └── ExampleInstrumentedTest.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── assets
│ │ │ │ └── users.xml
│ │ │ ├── cpp
│ │ │ │ ├── include
│ │ │ │ │ └── user_processing_jni.h
│ │ │ │ └── user_processing_jni.cpp
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── realworld
│ │ │ │ │ └── android
│ │ │ │ │ └── petsave
│ │ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ │ ├── animalsnearyou
│ │ │ │ │ └── presentation
│ │ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ │ ├── core
│ │ │ │ │ ├── MainActivity.kt
│ │ │ │ │ ├── data
│ │ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ │ ├── Authenticator.kt
│ │ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ │ ├── ReportManager.kt
│ │ │ │ │ │ │ ├── SN.kt
│ │ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ │ ├── cache
│ │ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ │ ├── ReportDatabase.kt
│ │ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ │ ├── OrganizationsDao.kt
│ │ │ │ │ │ │ │ └── ReportsDao.kt
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ ├── Report.kt
│ │ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ │ ├── di
│ │ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ │ └── preferences
│ │ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ │ ├── model
│ │ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ │ └── user
│ │ │ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ │ │ └── Users.kt
│ │ │ │ │ │ ├── repositories
│ │ │ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ │ │ └── UserRepository.kt
│ │ │ │ │ │ └── usecases
│ │ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ │ ├── Event.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ │ ├── DataValidator.kt
│ │ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ │ ├── Encryption.kt
│ │ │ │ │ │ ├── Extensions.kt
│ │ │ │ │ │ ├── FileConstants.kt
│ │ │ │ │ │ ├── PreferencesHelper.kt
│ │ │ │ │ │ ├── Timing.kt
│ │ │ │ │ │ └── WatchDog.kt
│ │ │ │ │ ├── report
│ │ │ │ │ └── presentation
│ │ │ │ │ │ └── ReportDetailFragment.kt
│ │ │ │ │ └── search
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ │ └── SearchResults.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ │ └── presentation
│ │ │ │ │ ├── SearchEvent.kt
│ │ │ │ │ ├── SearchFragment.kt
│ │ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ │ └── SearchViewState.kt
│ │ │ └── res
│ │ │ │ ├── drawable-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ │ ├── drawable
│ │ │ │ ├── card_view_border.xml
│ │ │ │ ├── cat_derp.png
│ │ │ │ ├── dog_placeholder.png
│ │ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ │ ├── ic_baseline_report_problem_24.xml
│ │ │ │ ├── ic_close_24dp.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── ic_search_24dp.xml
│ │ │ │ ├── no_results_pug.png
│ │ │ │ └── splash_background.xml
│ │ │ │ ├── layout
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ │ ├── exposed_dropdown_menu.xml
│ │ │ │ ├── filtered_search_widget.xml
│ │ │ │ ├── fragment_animals_near_you.xml
│ │ │ │ ├── fragment_report_detail.xml
│ │ │ │ ├── fragment_search.xml
│ │ │ │ └── recycler_view_animal_item.xml
│ │ │ │ ├── menu
│ │ │ │ ├── menu_bottom_nav.xml
│ │ │ │ └── menu_search.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_launcher_background.png
│ │ │ │ ├── ic_launcher_foreground.png
│ │ │ │ └── ic_launcher_round.png
│ │ │ │ ├── navigation
│ │ │ │ └── nav_graph.xml
│ │ │ │ ├── values
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ │ └── xml
│ │ │ │ └── network_security_config.xml
│ │ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ │ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ │ ├── accept_change.png
│ │ ├── modified_default.png
│ │ ├── restore_default.png
│ │ ├── unmodified_default.png
│ │ ├── using_named_code_style.png
│ │ └── working_gif.gif
│ ├── logging
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── TimberLogging.kt
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── logging
│ │ │ │ └── Logger.kt
│ │ │ └── release
│ │ │ └── java
│ │ │ └── com
│ │ │ └── raywenderlich
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ └── settings.gradle
│ └── starter
│ ├── .gitignore
│ ├── .keep
│ ├── README.md
│ ├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ ├── schemas
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.petsave.core.data.cache.ReportDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.raywenderlich.android.realworldandroidbytutorials.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ ├── com.realworld.android.petsave.core.data.cache.PetSaveDatabase
│ │ │ └── 1.json
│ │ └── com.realworld.android.petsave.core.data.cache.ReportDatabase
│ │ │ └── 1.json
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── petsave
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ │ └── users.xml
│ │ ├── cpp
│ │ │ ├── include
│ │ │ │ └── user_processing_jni.h
│ │ │ └── user_processing_jni.cpp
│ │ ├── ic_launcher-web.png
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── realworld
│ │ │ │ └── android
│ │ │ │ └── petsave
│ │ │ │ ├── PetSaveApplication.kt
│ │ │ │ ├── animalsnearyou
│ │ │ │ └── presentation
│ │ │ │ │ ├── AnimalsNearYouEvent.kt
│ │ │ │ │ ├── AnimalsNearYouFragment.kt
│ │ │ │ │ ├── AnimalsNearYouFragmentViewModel.kt
│ │ │ │ │ ├── AnimalsNearYouViewState.kt
│ │ │ │ │ └── InfiniteScrollListener.kt
│ │ │ │ ├── core
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── data
│ │ │ │ │ ├── PetFinderAnimalRepository.kt
│ │ │ │ │ ├── api
│ │ │ │ │ │ ├── ApiConstants.kt
│ │ │ │ │ │ ├── Authenticator.kt
│ │ │ │ │ │ ├── PetFinderApi.kt
│ │ │ │ │ │ ├── ReportManager.kt
│ │ │ │ │ │ ├── SN.kt
│ │ │ │ │ │ ├── interceptors
│ │ │ │ │ │ │ ├── AuthenticationInterceptor.kt
│ │ │ │ │ │ │ └── LoggingInterceptor.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── ApiAnimal.kt
│ │ │ │ │ │ │ ├── ApiPaginatedAnimals.kt
│ │ │ │ │ │ │ ├── ApiToken.kt
│ │ │ │ │ │ │ └── mappers
│ │ │ │ │ │ │ ├── ApiAddressMapper.kt
│ │ │ │ │ │ │ ├── ApiAnimalMapper.kt
│ │ │ │ │ │ │ ├── ApiBreedsMapper.kt
│ │ │ │ │ │ │ ├── ApiColorsMapper.kt
│ │ │ │ │ │ │ ├── ApiContactMapper.kt
│ │ │ │ │ │ │ ├── ApiHabitatAdaptationMapper.kt
│ │ │ │ │ │ │ ├── ApiHealthDetailsMapper.kt
│ │ │ │ │ │ │ ├── ApiMapper.kt
│ │ │ │ │ │ │ ├── ApiPaginationMapper.kt
│ │ │ │ │ │ │ ├── ApiPhotoMapper.kt
│ │ │ │ │ │ │ ├── ApiVideoMapper.kt
│ │ │ │ │ │ │ └── MappingException.kt
│ │ │ │ │ ├── cache
│ │ │ │ │ │ ├── Cache.kt
│ │ │ │ │ │ ├── PetSaveDatabase.kt
│ │ │ │ │ │ ├── ReportDatabase.kt
│ │ │ │ │ │ ├── RoomCache.kt
│ │ │ │ │ │ ├── daos
│ │ │ │ │ │ │ ├── AnimalsDao.kt
│ │ │ │ │ │ │ ├── OrganizationsDao.kt
│ │ │ │ │ │ │ └── ReportsDao.kt
│ │ │ │ │ │ └── model
│ │ │ │ │ │ │ ├── Report.kt
│ │ │ │ │ │ │ ├── cachedanimal
│ │ │ │ │ │ │ ├── CachedAnimal.kt
│ │ │ │ │ │ │ ├── CachedAnimalAggregate.kt
│ │ │ │ │ │ │ ├── CachedAnimalTagCrossRef.kt
│ │ │ │ │ │ │ ├── CachedAnimalWithDetails.kt
│ │ │ │ │ │ │ ├── CachedPhoto.kt
│ │ │ │ │ │ │ ├── CachedTag.kt
│ │ │ │ │ │ │ └── CachedVideo.kt
│ │ │ │ │ │ │ └── cachedorganization
│ │ │ │ │ │ │ ├── CachedOrganization.kt
│ │ │ │ │ │ │ └── CachedOrganizationWithAnimals.kt
│ │ │ │ │ ├── di
│ │ │ │ │ │ ├── ApiModule.kt
│ │ │ │ │ │ ├── CacheModule.kt
│ │ │ │ │ │ └── PreferencesModule.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ │ ├── PetSavePreferences.kt
│ │ │ │ │ │ ├── Preferences.kt
│ │ │ │ │ │ └── PreferencesConstants.kt
│ │ │ │ ├── di
│ │ │ │ │ ├── ApplicationModule.kt
│ │ │ │ │ └── ViewModelsModule.kt
│ │ │ │ ├── domain
│ │ │ │ │ ├── model
│ │ │ │ │ │ ├── Exceptions.kt
│ │ │ │ │ │ ├── animal
│ │ │ │ │ │ │ ├── AdoptionStatus.kt
│ │ │ │ │ │ │ ├── Animal.kt
│ │ │ │ │ │ │ ├── AnimalWithDetails.kt
│ │ │ │ │ │ │ └── Media.kt
│ │ │ │ │ │ ├── organization
│ │ │ │ │ │ │ └── Organization.kt
│ │ │ │ │ │ ├── pagination
│ │ │ │ │ │ │ ├── PaginatedAnimals.kt
│ │ │ │ │ │ │ └── Pagination.kt
│ │ │ │ │ │ └── user
│ │ │ │ │ │ │ ├── User.kt
│ │ │ │ │ │ │ └── Users.kt
│ │ │ │ │ ├── repositories
│ │ │ │ │ │ ├── AnimalRepository.kt
│ │ │ │ │ │ └── UserRepository.kt
│ │ │ │ │ └── usecases
│ │ │ │ │ │ ├── GetAnimals.kt
│ │ │ │ │ │ └── RequestNextPageOfAnimals.kt
│ │ │ │ ├── presentation
│ │ │ │ │ ├── AnimalsAdapter.kt
│ │ │ │ │ ├── Event.kt
│ │ │ │ │ └── model
│ │ │ │ │ │ ├── UIAnimal.kt
│ │ │ │ │ │ └── mappers
│ │ │ │ │ │ ├── UiAnimalMapper.kt
│ │ │ │ │ │ └── UiMapper.kt
│ │ │ │ └── utils
│ │ │ │ │ ├── CoroutineDispatchersProvider.kt
│ │ │ │ │ ├── DataValidator.kt
│ │ │ │ │ ├── DateTimeUtils.kt
│ │ │ │ │ ├── DispatchersProvider.kt
│ │ │ │ │ ├── Encryption.kt
│ │ │ │ │ ├── Extensions.kt
│ │ │ │ │ ├── FileConstants.kt
│ │ │ │ │ ├── PreferencesHelper.kt
│ │ │ │ │ ├── Timing.kt
│ │ │ │ │ └── WatchDog.kt
│ │ │ │ ├── report
│ │ │ │ └── presentation
│ │ │ │ │ └── ReportDetailFragment.kt
│ │ │ │ └── search
│ │ │ │ ├── domain
│ │ │ │ ├── Exceptions.kt
│ │ │ │ ├── model
│ │ │ │ │ ├── SearchFilters.kt
│ │ │ │ │ ├── SearchParameters.kt
│ │ │ │ │ └── SearchResults.kt
│ │ │ │ └── usecases
│ │ │ │ │ ├── GetSearchFilters.kt
│ │ │ │ │ ├── SearchAnimals.kt
│ │ │ │ │ └── SearchAnimalsRemotely.kt
│ │ │ │ └── presentation
│ │ │ │ ├── SearchEvent.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ ├── SearchFragmentViewModel.kt
│ │ │ │ └── SearchViewState.kt
│ │ └── res
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable
│ │ │ ├── card_view_border.xml
│ │ │ ├── cat_derp.png
│ │ │ ├── dog_placeholder.png
│ │ │ ├── ic_animals_near_you_24dp.xml
│ │ │ ├── ic_baseline_report_problem_24.xml
│ │ │ ├── ic_close_24dp.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_search_24dp.xml
│ │ │ ├── no_results_pug.png
│ │ │ └── splash_background.xml
│ │ │ ├── layout
│ │ │ ├── activity_main.xml
│ │ │ ├── dropdown_menu_popup_item.xml
│ │ │ ├── exposed_dropdown_menu.xml
│ │ │ ├── filtered_search_widget.xml
│ │ │ ├── fragment_animals_near_you.xml
│ │ │ ├── fragment_report_detail.xml
│ │ │ ├── fragment_search.xml
│ │ │ └── recycler_view_animal_item.xml
│ │ │ ├── menu
│ │ │ ├── menu_bottom_nav.xml
│ │ │ └── menu_search.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── navigation
│ │ │ └── nav_graph.xml
│ │ │ ├── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── network_security_config.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── realworld
│ │ └── android
│ │ └── petsave
│ │ └── ExampleUnitTest.kt
│ ├── build.gradle
│ ├── configs
│ └── rwcodestyle.xml
│ ├── gradle.properties
│ ├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── img
│ ├── accept_change.png
│ ├── modified_default.png
│ ├── restore_default.png
│ ├── unmodified_default.png
│ ├── using_named_code_style.png
│ └── working_gif.gif
│ ├── logging
│ ├── .gitignore
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── TimberLogging.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── realworld
│ │ │ └── android
│ │ │ └── logging
│ │ │ └── Logger.kt
│ │ └── release
│ │ └── java
│ │ └── com
│ │ └── raywenderlich
│ │ └── android
│ │ └── logging
│ │ └── TimberLogging.kt
│ └── settings.gradle
├── LICENSE
├── README.md
└── scripts
├── make-codex-branch.sh
└── make-codex-subdirectory.sh
/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/.gitignore
--------------------------------------------------------------------------------
/01-introduction/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/01-introduction/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/01-introduction/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/01-introduction/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/02-starting-from-the-beginning/projects/starter/.gitignore
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/02-starting-from-the-beginning/projects/starter/.idea/vcs.xml
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/02-starting-from-the-beginning/projects/starter/README.md
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/app/src/main/java/com/realworld/android/petsave/animalsnearyou/domain/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/app/src/main/java/com/realworld/android/petsave/common/di/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/app/src/main/java/com/realworld/android/petsave/common/domain/repositories/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/app/src/main/java/com/realworld/android/petsave/search/domain/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/02-starting-from-the-beginning/projects/starter/build.gradle
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/02-starting-from-the-beginning/projects/starter/gradlew
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/02-starting-from-the-beginning/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-starting-from-the-beginning/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/02-starting-from-the-beginning/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/03-domain-layer/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-domain-layer/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/.gitignore
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/README.md
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/app/src/main/AndroidManifest.xml
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/build.gradle
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/gradle.properties
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/gradlew
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/img/unmodified_default.png
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/img/using_named_code_style.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/img/using_named_code_style.png
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-domain-layer/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/final/settings.gradle
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/.gitignore
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/.idea/compiler.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/.idea/compiler.xml
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/.idea/vcs.xml
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/README.md
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/app/src/main/java/com/realworld/android/petsave/common/domain/repositories/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/app/src/test/java/com/realworld/android/petsave/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/build.gradle
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/gradlew
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/img/modified_default.png
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/img/restore_default.png
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/img/unmodified_default.png
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/img/using_named_code_style.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/img/using_named_code_style.png
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/03-domain-layer/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/03-domain-layer/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/04-data-layer-network/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/04-data-layer-network/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/.gitignore
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/.idea/compiler.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/.idea/compiler.xml
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/.idea/vcs.xml
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/README.md
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/build.gradle
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/gradle.properties
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/gradlew
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/img/unmodified_default.png
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/04-data-layer-network/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/final/settings.gradle
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/.gitignore
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/.idea/compiler.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/.idea/compiler.xml
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/.idea/vcs.xml
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/README.md
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/build.gradle
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/gradlew
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/img/modified_default.png
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/img/restore_default.png
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/04-data-layer-network/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/04-data-layer-network/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/05-data-layer-caching/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/.gitignore
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/.idea/compiler.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/.idea/compiler.xml
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/.idea/vcs.xml
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/README.md
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/build.gradle
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/gradle.properties
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/gradlew
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/img/unmodified_default.png
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/final/settings.gradle
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/.gitignore
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/.idea/compiler.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/.idea/compiler.xml
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/.idea/vcs.xml
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/README.md
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/build.gradle
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/gradlew
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/img/modified_default.png
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/img/restore_default.png
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/05-data-layer-caching/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/05-data-layer-caching/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/06-building-features-animals-near-you/projects/final/.gitignore
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/06-building-features-animals-near-you/projects/final/README.md
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/06-building-features-animals-near-you/projects/final/gradlew
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/06-building-features-animals-near-you/projects/starter/gradlew
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/06-building-features-animals-near-you/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/07-building-features-search/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/07-building-features-search/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/.gitignore
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/.idea/compiler.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/.idea/compiler.xml
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/.idea/vcs.xml
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/README.md
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/app/.idea/gradle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/app/.idea/gradle.xml
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/app/.idea/misc.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/app/.idea/misc.xml
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/build.gradle
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/gradle.properties
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/gradlew
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/07-building-features-search/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/final/settings.gradle
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/.gitignore
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/.idea/compiler.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/.idea/compiler.xml
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/.idea/vcs.xml
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/README.md
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/app/.idea/misc.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/app/.idea/misc.xml
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/app/src/main/java/com/realworld/android/petsave/search/domain/model/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/build.gradle
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/gradlew
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/07-building-features-search/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/07-building-features-search/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/.gitignore
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/.idea/compiler.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/.idea/compiler.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/.idea/vcs.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/README.md
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/android-library.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/android-library.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/app/.idea/gradle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/app/.idea/gradle.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/app/.idea/misc.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/app/.idea/misc.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/app/.idea/modules.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/app/.idea/modules.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/app/.idea/workspace.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/app/.idea/workspace.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/build.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/common/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/common/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/common/build.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/common/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/common/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/common/proguard-rules.pro
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/features/animalsnearyou/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/features/animalsnearyou/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/features/onboarding/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/features/onboarding/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/features/search/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/features/search/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/gradle.properties
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/gradlew
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/img/unmodified_default.png
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/final/settings.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/.gitignore
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/.idea/compiler.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/.idea/compiler.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/.idea/vcs.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/README.md
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/android-library.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/android-library.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/app/.idea/gradle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/app/.idea/gradle.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/app/.idea/misc.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/app/.idea/misc.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/app/.idea/modules.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/app/.idea/modules.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/app/.idea/workspace.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/app/.idea/workspace.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/build.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/common/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/common/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/common/build.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/common/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/common/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/common/proguard-rules.pro
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/features/animalsnearyou/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/features/animalsnearyou/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/features/search/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/features/search/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/gradlew
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/img/modified_default.png
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/img/restore_default.png
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/08-multi-module-apps/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/08-multi-module-apps/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/09-dynamic-features-theory/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/09-dynamic-features-theory/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/09-dynamic-features-theory/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/09-dynamic-features-theory/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/.gitignore
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/.idea/compiler.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/.idea/compiler.xml
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/.idea/vcs.xml
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/README.md
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/app/.idea/misc.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/app/.idea/misc.xml
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/build.gradle
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/common/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/common/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/features/animalsnearyou/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/features/animalsnearyou/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/features/onboarding/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/features/onboarding/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/features/search/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/features/search/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/features/sharing/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/features/sharing/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/gradle.properties
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/gradlew
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/final/settings.gradle
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/starter/.gitignore
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/starter/.idea/vcs.xml
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/starter/README.md
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/starter/build.gradle
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/common/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/common/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/features/animalsnearyou/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/features/animalsnearyou/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/features/onboarding/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/features/onboarding/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/features/search/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/features/search/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/features/sharing/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/features/sharing/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/starter/gradlew
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/10-building-a-dynamic-feature/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/10-building-a-dynamic-feature/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/11-animations/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/11-animations/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/.gitignore
--------------------------------------------------------------------------------
/11-animations/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/11-animations/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/11-animations/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/11-animations/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/11-animations/projects/final/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/app/src/main/AndroidManifest.xml
--------------------------------------------------------------------------------
/11-animations/projects/final/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/11-animations/projects/final/app/src/main/res/raw/lazy_cat.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/app/src/main/res/raw/lazy_cat.json
--------------------------------------------------------------------------------
/11-animations/projects/final/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/app/src/main/res/values/colors.xml
--------------------------------------------------------------------------------
/11-animations/projects/final/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/app/src/main/res/values/dimens.xml
--------------------------------------------------------------------------------
/11-animations/projects/final/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/app/src/main/res/values/styles.xml
--------------------------------------------------------------------------------
/11-animations/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/build.gradle
--------------------------------------------------------------------------------
/11-animations/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/11-animations/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/gradle.properties
--------------------------------------------------------------------------------
/11-animations/projects/final/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/11-animations/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/gradlew
--------------------------------------------------------------------------------
/11-animations/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/11-animations/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/11-animations/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/11-animations/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/11-animations/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/final/settings.gradle
--------------------------------------------------------------------------------
/11-animations/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/.gitignore
--------------------------------------------------------------------------------
/11-animations/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/11-animations/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/11-animations/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/11-animations/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/11-animations/projects/starter/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/app/src/main/AndroidManifest.xml
--------------------------------------------------------------------------------
/11-animations/projects/starter/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/11-animations/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/build.gradle
--------------------------------------------------------------------------------
/11-animations/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/11-animations/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/11-animations/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/gradlew
--------------------------------------------------------------------------------
/11-animations/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/11-animations/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/11-animations/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/11-animations/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/11-animations/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/11-animations/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/12-motionlayout-and-motion-editor/projects/final/README.md
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/12-motionlayout-and-motion-editor/projects/final/build.gradle
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/12-motionlayout-and-motion-editor/projects/final/gradlew
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/12-motionlayout-and-motion-editor/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/12-motionlayout-and-motion-editor/projects/starter/README.md
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/12-motionlayout-and-motion-editor/projects/starter/build.gradle
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/12-motionlayout-and-motion-editor/projects/starter/gradlew
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/12-motionlayout-and-motion-editor/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/12-motionlayout-and-motion-editor/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/13-custom-views/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/13-custom-views/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/README.md
--------------------------------------------------------------------------------
/13-custom-views/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/13-custom-views/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/13-custom-views/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/13-custom-views/projects/final/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/app/src/main/AndroidManifest.xml
--------------------------------------------------------------------------------
/13-custom-views/projects/final/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/13-custom-views/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/build.gradle
--------------------------------------------------------------------------------
/13-custom-views/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/13-custom-views/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/gradle.properties
--------------------------------------------------------------------------------
/13-custom-views/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/gradlew
--------------------------------------------------------------------------------
/13-custom-views/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/13-custom-views/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/13-custom-views/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/13-custom-views/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/13-custom-views/projects/final/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/img/unmodified_default.png
--------------------------------------------------------------------------------
/13-custom-views/projects/final/img/using_named_code_style.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/img/using_named_code_style.png
--------------------------------------------------------------------------------
/13-custom-views/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/13-custom-views/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/13-custom-views/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/13-custom-views/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/13-custom-views/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/final/settings.gradle
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/README.md
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/build.gradle
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/gradlew
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/img/modified_default.png
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/img/restore_default.png
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/img/unmodified_default.png
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/img/using_named_code_style.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/img/using_named_code_style.png
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/13-custom-views/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/13-custom-views/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/14-style-and-theme/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/README.md
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/build.gradle
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/gradle.properties
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/gradlew
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/img/unmodified_default.png
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/14-style-and-theme/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/final/settings.gradle
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/README.md
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/build.gradle
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/gradlew
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/img/modified_default.png
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/img/restore_default.png
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/img/unmodified_default.png
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/14-style-and-theme/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/14-style-and-theme/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/15-user-privacy/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/15-user-privacy/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/.gitignore
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/README.md
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/app/src/main/AndroidManifest.xml
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/app/src/main/assets/users.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/app/src/main/assets/users.xml
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/build.gradle
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/gradle.properties
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/gradlew
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/img/unmodified_default.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/img/using_named_code_style.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/img/using_named_code_style.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/15-user-privacy/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/final/settings.gradle
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/.gitignore
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/README.md
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/app/src/main/assets/users.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/app/src/main/assets/users.xml
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/build.gradle
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/gradlew
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/img/modified_default.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/img/restore_default.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/img/unmodified_default.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/img/using_named_code_style.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/img/using_named_code_style.png
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/15-user-privacy/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/15-user-privacy/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/16-securing-data-at-rest/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/.gitignore
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/README.md
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/build.gradle
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/gradle.properties
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/gradlew
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/final/settings.gradle
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/.gitignore
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/README.md
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/build.gradle
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/gradlew
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/16-securing-data-at-rest/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/16-securing-data-at-rest/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/17-securing-data-in-transit/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/final/.gitignore
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/final/README.md
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/final/build.gradle
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/final/gradle.properties
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/final/gradlew
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/final/settings.gradle
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/starter/.gitignore
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/starter/README.md
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/starter/build.gradle
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/starter/gradlew
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/17-securing-data-in-transit/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/17-securing-data-in-transit/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/18-app-hardening/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/18-app-hardening/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/.gitignore
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/README.md
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/app/src/main/assets/users.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/app/src/main/assets/users.xml
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/build.gradle
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/gradle.properties
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/gradlew
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/img/unmodified_default.png
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/img/using_named_code_style.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/img/using_named_code_style.png
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/18-app-hardening/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/final/settings.gradle
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/.gitignore
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/README.md
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/app/src/main/assets/users.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/app/src/main/assets/users.xml
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/build.gradle
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/gradlew
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/img/modified_default.png
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/img/restore_default.png
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/img/unmodified_default.png
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/18-app-hardening/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/18-app-hardening/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/19-firebase-integration/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/19-firebase-integration/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/README.md
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/app/google-services.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/app/google-services.json
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/build.gradle
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/gradle.properties
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/gradlew
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/remoteconfig/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/remoteconfig/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/19-firebase-integration/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/final/settings.gradle
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/README.md
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/build.gradle
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/gradlew
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/19-firebase-integration/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/19-firebase-integration/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/20-release-optimizations/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/20-release-optimizations/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/.gitignore
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/.idea/vcs.xml
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/README.md
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/build.gradle
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/gradle.properties
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/gradlew
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/20-release-optimizations/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/final/settings.gradle
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/.gitignore
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/.idea/vcs.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/.idea/vcs.xml
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/README.md
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/build.gradle
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/gradlew
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/20-release-optimizations/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/20-release-optimizations/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/21-advanced-debugging/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/README.md
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/app/google-services.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/app/google-services.json
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/build.gradle
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/design_mockup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/design_mockup.png
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/gradle.properties
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/gradlew
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/img/unmodified_default.png
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/remoteconfig/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/remoteconfig/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/remoteconfig/build.gradle
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/remoteconfig/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/final/settings.gradle
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/README.md
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/app/google-services.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/app/google-services.json
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/build.gradle
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/design_mockup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/design_mockup.png
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/gradlew
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/img/modified_default.png
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/img/restore_default.png
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/remoteconfig/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/remoteconfig/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/21-advanced-debugging/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/21-advanced-debugging/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/22-app-analysis/assets/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/22-app-analysis/projects/challenge/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/.gitignore
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/README.md
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/app/build.gradle
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/app/proguard-rules.pro
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/app/src/main/AndroidManifest.xml
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/app/src/main/assets/users.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/app/src/main/assets/users.xml
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/build.gradle
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/gradle.properties
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/gradlew
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/gradlew.bat
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/img/accept_change.png
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/img/modified_default.png
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/img/restore_default.png
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/img/unmodified_default.png
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/img/working_gif.gif
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/logging/build.gradle
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/22-app-analysis/projects/final/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/final/settings.gradle
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/.gitignore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/.gitignore
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/README.md
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/app/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/app/build.gradle
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/app/proguard-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/app/proguard-rules.pro
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/build.gradle
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/configs/rwcodestyle.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/configs/rwcodestyle.xml
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/gradle.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/gradle.properties
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/gradlew:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/gradlew
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/gradlew.bat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/gradlew.bat
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/img/accept_change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/img/accept_change.png
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/img/modified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/img/modified_default.png
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/img/restore_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/img/restore_default.png
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/img/unmodified_default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/img/unmodified_default.png
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/img/working_gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/img/working_gif.gif
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/logging/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/logging/build.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/logging/build.gradle
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/logging/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/22-app-analysis/projects/starter/settings.gradle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/22-app-analysis/projects/starter/settings.gradle
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/LICENSE
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/README.md
--------------------------------------------------------------------------------
/scripts/make-codex-branch.sh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/scripts/make-codex-branch.sh
--------------------------------------------------------------------------------
/scripts/make-codex-subdirectory.sh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kodecocodes/adva-materials/HEAD/scripts/make-codex-subdirectory.sh
--------------------------------------------------------------------------------