├── .gitignore ├── 01-kotlin └── 01-kotlin.md ├── 02-introduction-to-android ├── 02-introduction-to-android.md └── dice-roller │ ├── .gitignore │ ├── app │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── org │ │ │ └── example │ │ │ └── diceroller │ │ │ └── ExampleInstrumentedTest.kt │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── org │ │ │ │ └── example │ │ │ │ └── diceroller │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable │ │ │ ├── dice_1.xml │ │ │ ├── dice_2.xml │ │ │ ├── dice_3.xml │ │ │ ├── dice_4.xml │ │ │ ├── dice_5.xml │ │ │ ├── dice_6.xml │ │ │ ├── empty_dice.xml │ │ │ └── ic_launcher_background.xml │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── test │ │ └── java │ │ └── org │ │ └── example │ │ └── diceroller │ │ └── ExampleUnitTest.kt │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ ├── libs.versions.toml │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── 03-layouts ├── 03-layouts.md ├── about-me │ ├── .gitignore │ ├── app │ │ ├── .gitignore │ │ ├── .idea │ │ │ ├── caches │ │ │ │ └── deviceStreaming.xml │ │ │ ├── gradle.xml │ │ │ ├── migrations.xml │ │ │ ├── misc.xml │ │ │ ├── runConfigurations.xml │ │ │ └── workspace.xml │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── aboutme │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── aboutme │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ └── UserName.kt │ │ │ └── res │ │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ │ ├── drawable │ │ │ │ └── ic_launcher_background.xml │ │ │ │ ├── font │ │ │ │ └── roboto.xml │ │ │ │ ├── layout │ │ │ │ └── activity_main.xml │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── font_certs.xml │ │ │ │ ├── preloaded_fonts.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── aboutme │ │ │ └── ExampleUnitTest.kt │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── color-views.png ├── color-views │ ├── .gitignore │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── colormyviews │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── colormyviews │ │ │ │ │ └── MainActivity.kt │ │ │ └── res │ │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ │ ├── drawable │ │ │ │ └── ic_launcher_background.xml │ │ │ │ ├── font │ │ │ │ ├── roboto.xml │ │ │ │ └── roboto_thin.xml │ │ │ │ ├── layout │ │ │ │ └── activity_main.xml │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── font_certs.xml │ │ │ │ ├── preloaded_fonts.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── colormyviews │ │ │ └── ExampleUnitTest.kt │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle └── layout-editor.png ├── 04-navigation ├── 04-navigation.md ├── fragments.png ├── trivia-finish-code │ ├── .gitignore │ ├── .idea │ │ ├── appInsightsSettings.xml │ │ ├── deploymentTargetDropDown.xml │ │ ├── deploymentTargetSelector.xml │ │ ├── jarRepositories.xml │ │ ├── kotlinc.xml │ │ ├── migrations.xml │ │ └── navEditor.xml │ ├── LICENSE.txt │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── navigation │ │ │ │ ├── AboutFragment.kt │ │ │ │ ├── GameFragment.kt │ │ │ │ ├── GameOverFragment.kt │ │ │ │ ├── GameWonFragment.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── RulesFragment.kt │ │ │ │ └── TitleFragment.kt │ │ │ └── res │ │ │ ├── anim │ │ │ ├── fade_in.xml │ │ │ ├── fade_out.xml │ │ │ ├── slide_in_left.xml │ │ │ ├── slide_in_right.xml │ │ │ ├── slide_out_left.xml │ │ │ └── slide_out_right.xml │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable │ │ │ ├── about_android_trivia.xml │ │ │ ├── android.xml │ │ │ ├── android_category_simple.xml │ │ │ ├── android_trivia.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── nav_header.xml │ │ │ ├── rules.xml │ │ │ ├── settings.xml │ │ │ ├── share.xml │ │ │ ├── trivia_rules.xml │ │ │ ├── try_again.xml │ │ │ └── you_win.xml │ │ │ ├── layout │ │ │ ├── activity_main.xml │ │ │ ├── fragment_about.xml │ │ │ ├── fragment_game.xml │ │ │ ├── fragment_game_over.xml │ │ │ ├── fragment_game_won.xml │ │ │ ├── fragment_rules.xml │ │ │ ├── fragment_title.xml │ │ │ └── nav_header.xml │ │ │ ├── menu │ │ │ ├── navdrawer_menu.xml │ │ │ ├── overflow_menu.xml │ │ │ └── winner_menu.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── navigation │ │ │ └── navigation.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle └── trivia-starter-code │ ├── .gitignore │ ├── .idea │ ├── appInsightsSettings.xml │ ├── deploymentTargetDropDown.xml │ ├── deploymentTargetSelector.xml │ ├── jarRepositories.xml │ ├── kotlinc.xml │ └── migrations.xml │ ├── LICENSE.txt │ ├── README.md │ ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── android │ │ │ └── navigation │ │ │ ├── AboutFragment.kt │ │ │ ├── GameFragment.kt │ │ │ ├── GameOverFragment.kt │ │ │ ├── GameWonFragment.kt │ │ │ ├── MainActivity.kt │ │ │ └── RulesFragment.kt │ │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ ├── about_android_trivia.xml │ │ ├── android.xml │ │ ├── android_category_simple.xml │ │ ├── android_trivia.xml │ │ ├── ic_launcher_background.xml │ │ ├── nav_header.xml │ │ ├── rules.xml │ │ ├── settings.xml │ │ ├── share.xml │ │ ├── trivia_rules.xml │ │ ├── try_again.xml │ │ └── you_win.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── fragment_about.xml │ │ ├── fragment_game.xml │ │ ├── fragment_game_over.xml │ │ ├── fragment_game_won.xml │ │ ├── fragment_rules.xml │ │ ├── fragment_title.xml │ │ └── nav_header.xml │ │ ├── menu │ │ └── winner_menu.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── 05-lifecycle ├── 05-lifecycle.md ├── activity-lifecycle.png ├── dessert-pusher-finish-code │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_dessert_pusher-web.png │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── dessertpusher │ │ │ │ ├── DessertTimer.kt │ │ │ │ └── MainActivity.kt │ │ │ └── res │ │ │ ├── drawable │ │ │ ├── bakery_back.xml │ │ │ ├── cupcake.xml │ │ │ ├── donut.xml │ │ │ ├── eclair.xml │ │ │ ├── froyo.xml │ │ │ ├── gingerbread.xml │ │ │ ├── honeycomb.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── icecreamsandwich.xml │ │ │ ├── jellybean.xml │ │ │ ├── kitkat.xml │ │ │ ├── lollipop.xml │ │ │ ├── marshmallow.xml │ │ │ ├── nougat.xml │ │ │ ├── oreo.xml │ │ │ └── white_box.xml │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── menu │ │ │ └── main_menu.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_dessert_pusher.xml │ │ │ └── ic_dessert_pusher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_dessert_pusher.png │ │ │ └── ic_dessert_pusher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_dessert_pusher.png │ │ │ └── ic_dessert_pusher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_dessert_pusher.png │ │ │ └── ic_dessert_pusher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_dessert_pusher.png │ │ │ └── ic_dessert_pusher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_dessert_pusher.png │ │ │ └── ic_dessert_pusher_round.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── dessert-pusher-starter-code │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_dessert_pusher-web.png │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── dessertpusher │ │ │ │ ├── DessertTimer.kt │ │ │ │ └── MainActivity.kt │ │ │ └── res │ │ │ ├── drawable │ │ │ ├── bakery_back.xml │ │ │ ├── cupcake.xml │ │ │ ├── donut.xml │ │ │ ├── eclair.xml │ │ │ ├── froyo.xml │ │ │ ├── gingerbread.xml │ │ │ ├── honeycomb.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── icecreamsandwich.xml │ │ │ ├── jellybean.xml │ │ │ ├── kitkat.xml │ │ │ ├── lollipop.xml │ │ │ ├── marshmallow.xml │ │ │ ├── nougat.xml │ │ │ ├── oreo.xml │ │ │ └── white_box.xml │ │ │ ├── layout │ │ │ └── activity_main.xml │ │ │ ├── menu │ │ │ └── main_menu.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_dessert_pusher.xml │ │ │ └── ic_dessert_pusher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_dessert_pusher.png │ │ │ └── ic_dessert_pusher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_dessert_pusher.png │ │ │ └── ic_dessert_pusher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_dessert_pusher.png │ │ │ └── ic_dessert_pusher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_dessert_pusher.png │ │ │ └── ic_dessert_pusher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_dessert_pusher.png │ │ │ └── ic_dessert_pusher_round.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle └── fragment-lifecycle.png ├── 06-app-architecture-ui ├── 06-app-architecture-ui.md ├── guess-it-finish-code │ ├── .gitignore │ ├── .idea │ │ └── navEditor.xml │ ├── LICENSE.txt │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── guesstheword │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_guess_it-web.png │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── android │ │ │ │ │ └── guesstheword │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ └── screens │ │ │ │ │ ├── game │ │ │ │ │ ├── GameFragment.kt │ │ │ │ │ └── GameViewModel.kt │ │ │ │ │ ├── score │ │ │ │ │ ├── ScoreFragment.kt │ │ │ │ │ ├── ScoreViewModel.kt │ │ │ │ │ └── ScoreViewModelFactory.kt │ │ │ │ │ └── title │ │ │ │ │ └── TitleFragment.kt │ │ │ └── res │ │ │ │ ├── anim │ │ │ │ ├── slide_in_right.xml │ │ │ │ └── slide_out_left.xml │ │ │ │ ├── drawable │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ └── ic_launcher_foreground.xml │ │ │ │ ├── layout │ │ │ │ ├── game_fragment.xml │ │ │ │ ├── main_activity.xml │ │ │ │ ├── score_fragment.xml │ │ │ │ └── title_fragment.xml │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_guess_it.xml │ │ │ │ └── ic_guess_it_round.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_guess_it.png │ │ │ │ └── ic_guess_it_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_guess_it.png │ │ │ │ └── ic_guess_it_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_guess_it.png │ │ │ │ └── ic_guess_it_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_guess_it.png │ │ │ │ └── ic_guess_it_round.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_guess_it.png │ │ │ │ └── ic_guess_it_round.png │ │ │ │ ├── navigation │ │ │ │ └── main_navigation.xml │ │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── android │ │ │ └── guesstheword │ │ │ └── ExampleUnitTest.kt │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── guess-it-mvvm.png ├── guess-it-starter-code │ ├── .gitignore │ ├── .idea │ │ └── navEditor.xml │ ├── LICENSE.txt │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── guesstheword │ │ │ │ └── ExampleInstrumentedTest.kt │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_guess_it-web.png │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── android │ │ │ │ │ └── guesstheword │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ └── screens │ │ │ │ │ ├── game │ │ │ │ │ └── GameFragment.kt │ │ │ │ │ ├── score │ │ │ │ │ └── ScoreFragment.kt │ │ │ │ │ └── title │ │ │ │ │ └── TitleFragment.kt │ │ │ └── res │ │ │ │ ├── anim │ │ │ │ ├── slide_in_right.xml │ │ │ │ └── slide_out_left.xml │ │ │ │ ├── drawable │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ └── ic_launcher_foreground.xml │ │ │ │ ├── layout │ │ │ │ ├── game_fragment.xml │ │ │ │ ├── main_activity.xml │ │ │ │ ├── score_fragment.xml │ │ │ │ └── title_fragment.xml │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_guess_it.xml │ │ │ │ └── ic_guess_it_round.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_guess_it.png │ │ │ │ └── ic_guess_it_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_guess_it.png │ │ │ │ └── ic_guess_it_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_guess_it.png │ │ │ │ └── ic_guess_it_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_guess_it.png │ │ │ │ └── ic_guess_it_round.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_guess_it.png │ │ │ │ └── ic_guess_it_round.png │ │ │ │ ├── navigation │ │ │ │ └── main_navigation.xml │ │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── android │ │ │ └── guesstheword │ │ │ └── ExampleUnitTest.kt │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle └── livedata.png ├── 07-app-architectrure-persistance ├── 07-app-architectrure-persistance.md ├── android-threads.png ├── coroutines-suspend.png ├── mvvm-with-database.png ├── mvvm-with-room.png ├── sleep-tracker-finish-code │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── trackmysleepquality │ │ │ │ └── SleepDatabaseTest.kt │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_launcher_sleep_tracker-web.png │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── trackmysleepquality │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── Util.kt │ │ │ │ ├── database │ │ │ │ ├── SleepDatabase.kt │ │ │ │ ├── SleepDatabaseDao.kt │ │ │ │ └── SleepNight.kt │ │ │ │ ├── sleepquality │ │ │ │ ├── SleepQualityFragment.kt │ │ │ │ ├── SleepQualityViewModel.kt │ │ │ │ └── SleepQualityViewModelFactory.kt │ │ │ │ └── sleeptracker │ │ │ │ ├── SleepTrackerFragment.kt │ │ │ │ ├── SleepTrackerViewModel.kt │ │ │ │ └── SleepTrackerViewModelFactory.kt │ │ │ └── res │ │ │ ├── anim │ │ │ └── slide_in_right.xml │ │ │ ├── drawable │ │ │ ├── ic_launcher_sleep_tracker_background.xml │ │ │ ├── ic_launcher_sleep_tracker_foreground.xml │ │ │ ├── ic_sleep_0.xml │ │ │ ├── ic_sleep_1.xml │ │ │ ├── ic_sleep_2.xml │ │ │ ├── ic_sleep_3.xml │ │ │ ├── ic_sleep_4.xml │ │ │ └── ic_sleep_5.xml │ │ │ ├── font │ │ │ └── roboto.xml │ │ │ ├── layout │ │ │ ├── activity_main.xml │ │ │ ├── fragment_sleep_quality.xml │ │ │ └── fragment_sleep_tracker.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ ├── ic_launcher_round.xml │ │ │ ├── ic_launcher_sleep_tracker.xml │ │ │ └── ic_launcher_sleep_tracker_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── navigation │ │ │ └── navigation.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── font_certs.xml │ │ │ ├── preloaded_fonts.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── screenshots │ │ ├── sleep_quality_tracker_quality.png │ │ ├── sleep_quality_tracker_start.png │ │ └── sleep_quality_tracker_stop.png │ └── settings.gradle ├── sleep-tracker-starter-code │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── trackmysleepquality │ │ │ │ └── SleepDatabaseTest.kt │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_launcher_sleep_tracker-web.png │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── trackmysleepquality │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── Util.kt │ │ │ │ ├── database │ │ │ │ ├── SleepDatabase.kt │ │ │ │ ├── SleepDatabaseDao.kt │ │ │ │ └── SleepNight.kt │ │ │ │ ├── sleepquality │ │ │ │ ├── SleepQualityFragment.kt │ │ │ │ ├── SleepQualityViewModel.kt │ │ │ │ └── SleepQualityViewModelFactory.kt │ │ │ │ └── sleeptracker │ │ │ │ ├── SleepTrackerFragment.kt │ │ │ │ ├── SleepTrackerViewModel.kt │ │ │ │ └── SleepTrackerViewModelFactory.kt │ │ │ └── res │ │ │ ├── anim │ │ │ └── slide_in_right.xml │ │ │ ├── drawable │ │ │ ├── ic_launcher_sleep_tracker_background.xml │ │ │ ├── ic_launcher_sleep_tracker_foreground.xml │ │ │ ├── ic_sleep_0.xml │ │ │ ├── ic_sleep_1.xml │ │ │ ├── ic_sleep_2.xml │ │ │ ├── ic_sleep_3.xml │ │ │ ├── ic_sleep_4.xml │ │ │ └── ic_sleep_5.xml │ │ │ ├── font │ │ │ └── roboto.xml │ │ │ ├── layout │ │ │ ├── activity_main.xml │ │ │ ├── fragment_sleep_quality.xml │ │ │ └── fragment_sleep_tracker.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ ├── ic_launcher_round.xml │ │ │ ├── ic_launcher_sleep_tracker.xml │ │ │ └── ic_launcher_sleep_tracker_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── navigation │ │ │ └── navigation.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── font_certs.xml │ │ │ ├── preloaded_fonts.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle └── sleep-tracker.png ├── 08-recyclerview ├── 08-recyclerview.md ├── adapter-pattern.png ├── list_item_sleep_night.png ├── sleep-tracker-finish-code │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── trackmysleepquality │ │ │ │ └── SleepDatabaseTest.kt │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_launcher_sleep_tracker-web.png │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── trackmysleepquality │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── Util.kt │ │ │ │ ├── database │ │ │ │ ├── SleepDatabase.kt │ │ │ │ ├── SleepDatabaseDao.kt │ │ │ │ └── SleepNight.kt │ │ │ │ ├── sleepquality │ │ │ │ ├── SleepQualityFragment.kt │ │ │ │ ├── SleepQualityViewModel.kt │ │ │ │ └── SleepQualityViewModelFactory.kt │ │ │ │ └── sleeptracker │ │ │ │ ├── SleepNightAdapter.kt │ │ │ │ ├── SleepTrackerFragment.kt │ │ │ │ ├── SleepTrackerViewModel.kt │ │ │ │ └── SleepTrackerViewModelFactory.kt │ │ │ └── res │ │ │ ├── anim │ │ │ └── slide_in_right.xml │ │ │ ├── drawable │ │ │ ├── ic_launcher_sleep_tracker_background.xml │ │ │ ├── ic_launcher_sleep_tracker_foreground.xml │ │ │ ├── ic_sleep_0.xml │ │ │ ├── ic_sleep_1.xml │ │ │ ├── ic_sleep_2.xml │ │ │ ├── ic_sleep_3.xml │ │ │ ├── ic_sleep_4.xml │ │ │ ├── ic_sleep_5.xml │ │ │ └── ic_sleep_active.xml │ │ │ ├── font │ │ │ └── roboto.xml │ │ │ ├── layout │ │ │ ├── activity_main.xml │ │ │ ├── fragment_sleep_quality.xml │ │ │ ├── fragment_sleep_tracker.xml │ │ │ ├── list_item_sleep_night.xml │ │ │ └── text_item_view.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ ├── ic_launcher_round.xml │ │ │ ├── ic_launcher_sleep_tracker.xml │ │ │ └── ic_launcher_sleep_tracker_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── navigation │ │ │ └── navigation.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── font_certs.xml │ │ │ ├── preloaded_fonts.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── screenshots │ │ ├── sleep_quality_tracker_quality.png │ │ ├── sleep_quality_tracker_start.png │ │ └── sleep_quality_tracker_stop.png │ └── settings.gradle ├── sleep-tracker-starter-code │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── trackmysleepquality │ │ │ │ └── SleepDatabaseTest.kt │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_launcher_sleep_tracker-web.png │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── android │ │ │ │ └── trackmysleepquality │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── Util.kt │ │ │ │ ├── database │ │ │ │ ├── SleepDatabase.kt │ │ │ │ ├── SleepDatabaseDao.kt │ │ │ │ └── SleepNight.kt │ │ │ │ ├── sleepquality │ │ │ │ ├── SleepQualityFragment.kt │ │ │ │ ├── SleepQualityViewModel.kt │ │ │ │ └── SleepQualityViewModelFactory.kt │ │ │ │ └── sleeptracker │ │ │ │ ├── SleepTrackerFragment.kt │ │ │ │ ├── SleepTrackerViewModel.kt │ │ │ │ └── SleepTrackerViewModelFactory.kt │ │ │ └── res │ │ │ ├── anim │ │ │ └── slide_in_right.xml │ │ │ ├── drawable │ │ │ ├── ic_launcher_sleep_tracker_background.xml │ │ │ ├── ic_launcher_sleep_tracker_foreground.xml │ │ │ ├── ic_sleep_0.xml │ │ │ ├── ic_sleep_1.xml │ │ │ ├── ic_sleep_2.xml │ │ │ ├── ic_sleep_3.xml │ │ │ ├── ic_sleep_4.xml │ │ │ └── ic_sleep_5.xml │ │ │ ├── font │ │ │ └── roboto.xml │ │ │ ├── layout │ │ │ ├── activity_main.xml │ │ │ ├── fragment_sleep_quality.xml │ │ │ └── fragment_sleep_tracker.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ ├── ic_launcher_round.xml │ │ │ ├── ic_launcher_sleep_tracker.xml │ │ │ └── ic_launcher_sleep_tracker_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ ├── ic_launcher_sleep_tracker.png │ │ │ └── ic_launcher_sleep_tracker_round.png │ │ │ ├── navigation │ │ │ └── navigation.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── font_certs.xml │ │ │ ├── preloaded_fonts.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── screenshots │ │ ├── sleep_quality_tracker_quality.png │ │ ├── sleep_quality_tracker_start.png │ │ └── sleep_quality_tracker_stop.png │ └── settings.gradle └── sleep-tracker-with-recyclerview.png ├── README.md ├── requirements.md └── tasks.md /02-introduction-to-android/dice-roller/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/* 5 | .DS_Store 6 | /build 7 | /captures 8 | .externalNativeBuild 9 | .cxx 10 | -------------------------------------------------------------------------------- /02-introduction-to-android/dice-roller/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /02-introduction-to-android/dice-roller/app/src/androidTest/java/org/example/diceroller/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package org.example.diceroller 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("org.example.diceroller", appContext.packageName) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /02-introduction-to-android/dice-roller/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /02-introduction-to-android/dice-roller/app/src/main/res/drawable/empty_dice.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 22 | 23 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /02-introduction-to-android/dice-roller/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 18 | 19 |