From d95f2dceeb3186b024f67d903c4db2f0ab4fce99 Mon Sep 17 00:00:00 2001 From: Krunal Patel Date: Mon, 29 May 2023 08:25:12 +0530 Subject: [PATCH] TE7-T1046: Add App components - Data passing between Activity <--> Activity - Data passing between Fragment <--> Activity - Data passing between Fragment <--> Fragment - Shared viewModel - registerActivityForResult - Implicit & Explicit intent - Capture image from camera - Activity launch modes - LifecycleOwner demo Add: Navigation component Add: Search Web view --- Demo/app/build.gradle | 9 + Demo/app/src/main/AndroidManifest.xml | 87 +++++++++- .../java/com/krunal/demo/DemoApplication.kt | 8 +- .../com/krunal/demo/UIComponentsActivity.kt | 2 +- .../ui/activities/FirstActivity.kt | 85 ++++++++++ .../ui/activities/FragmentDemoActivity.kt | 58 +++++++ .../ui/activities/ImagePickerActivity.kt | 87 ++++++++++ .../ui/activities/SecondActivity.kt | 53 ++++++ .../ui/fragments/FirstFragment.kt | 72 ++++++++ .../ui/fragments/SecondFragment.kt | 51 ++++++ .../ui/viewmodels/FirstActivityViewModel.kt | 19 +++ .../ui/viewmodels/FirstFragmentViewModel.kt | 18 ++ .../ui/viewmodels/FragmentDemoViewModel.kt | 18 ++ .../ui/viewmodels/ImagePickerViewModel.kt | 18 ++ .../ui/viewmodels/SecondActivityViewModel.kt | 19 +++ .../ui/viewmodels/SecondFragmentViewModel.kt | 18 ++ .../demo/appcomponents/utils/IntentData.kt | 16 ++ .../appcomponents/utils/LifecycleLogger.kt | 28 ++++ .../helpers/PreferenceHelper.kt | 2 +- .../{uicomponents => }/helpers/ThemeHelper.kt | 4 +- .../demo/navigation/data/models/Credential.kt | 6 + .../demo/navigation/data/models/Match.kt | 8 + .../navigation/data/models/RegisterDetail.kt | 36 ++++ .../navigation/data/models/UserProfile.kt | 14 ++ .../data/repositories/MatchRepository.kt | 27 +++ .../repositories/UserProfileRepository.kt | 68 ++++++++ .../ui/activities/TriviaGameActivity.kt | 67 ++++++++ .../ui/adapters/LeaderboardAdapter.kt | 44 +++++ .../ui/fragments/GameOverFragment.kt | 35 ++++ .../navigation/ui/fragments/InGameFragment.kt | 60 +++++++ .../ui/fragments/LeaderboardFragment.kt | 58 +++++++ .../navigation/ui/fragments/MatchFragment.kt | 52 ++++++ .../ui/fragments/RegisterFragment.kt | 47 ++++++ .../ui/fragments/ResultWinnerFragment.kt | 38 +++++ .../ui/fragments/TitleScreenFragment.kt | 55 +++++++ .../ui/fragments/UserProfileFragment.kt | 36 ++++ .../ui/viewmodels/InGameViewModel.kt | 50 ++++++ .../ui/viewmodels/LeaderboardViewModel.kt | 25 +++ .../ui/viewmodels/MatchViewModel.kt | 59 +++++++ .../ui/viewmodels/RegisterViewModel.kt | 50 ++++++ .../ui/viewmodels/TitleScreenViewModel.kt | 25 +++ .../ui/viewmodels/TriviaGameViewModel.kt | 25 +++ .../ui/viewmodels/UserProfileViewModel.kt | 22 +++ .../data/models/PackageDetail.kt | 9 + .../data/repositories/PackagesRepository.kt | 11 ++ .../data/repositories/WebViewRepository.kt | 23 +++ .../searchwebview/helpers/PackageHelper.kt | 38 +++++ .../helpers/SearchCountDownTimer.kt | 12 ++ .../demo/searchwebview/helpers/WebClient.kt | 37 +++++ .../ui/activities/SearchWebActivity.kt | 81 +++++++++ .../ui/adapters/PackageDetailAdapter.kt | 73 +++++++++ .../ui/fragments/SearchViewFragment.kt | 154 ++++++++++++++++++ .../ui/fragments/WebViewFragment.kt | 68 ++++++++ .../ui/viewmodels/SearchViewModel.kt | 60 +++++++ .../ui/viewmodels/WebViewViewModel.kt | 24 +++ .../krunal/demo/uicomponents/ThemeFragment.kt | 2 +- .../utils/PreferenceKeys.kt | 6 +- .../src/main/res/anim/nav_slide_in_bottom.xml | 9 + .../src/main/res/anim/nav_slide_in_left.xml | 9 + .../src/main/res/anim/nav_slide_in_right.xml | 9 + .../app/src/main/res/anim/nav_slide_in_up.xml | 9 + .../main/res/anim/nav_slide_out_bottom.xml | 9 + .../src/main/res/anim/nav_slide_out_left.xml | 9 + .../src/main/res/anim/nav_slide_out_right.xml | 9 + .../src/main/res/anim/nav_slide_out_up.xml | 9 + .../main/res/drawable/avatar_10_raster.png | Bin 0 -> 8332 bytes .../main/res/drawable/avatar_11_raster.png | Bin 0 -> 8158 bytes .../main/res/drawable/avatar_12_raster.png | Bin 0 -> 6466 bytes .../main/res/drawable/avatar_13_raster.png | Bin 0 -> 10615 bytes .../main/res/drawable/avatar_14_raster.png | Bin 0 -> 7070 bytes .../main/res/drawable/avatar_15_raster.png | Bin 0 -> 10125 bytes .../main/res/drawable/avatar_16_raster.png | Bin 0 -> 8128 bytes .../src/main/res/drawable/avatar_1_raster.png | Bin 0 -> 8870 bytes .../src/main/res/drawable/avatar_2_raster.png | Bin 0 -> 9641 bytes .../src/main/res/drawable/avatar_3_raster.png | Bin 0 -> 9543 bytes .../src/main/res/drawable/avatar_4_raster.png | Bin 0 -> 9746 bytes .../src/main/res/drawable/avatar_5_raster.png | Bin 0 -> 10808 bytes .../src/main/res/drawable/avatar_6_raster.png | Bin 0 -> 10665 bytes .../src/main/res/drawable/avatar_7_raster.png | Bin 0 -> 9875 bytes .../src/main/res/drawable/avatar_8_raster.png | Bin 0 -> 9681 bytes .../src/main/res/drawable/avatar_9_raster.png | Bin 0 -> 10186 bytes .../src/main/res/drawable/button_press.xml | 10 ++ .../main/res/drawable/button_press_dark.xml | 10 ++ Demo/app/src/main/res/drawable/circle.xml | 11 ++ Demo/app/src/main/res/drawable/dark_frame.xml | 11 ++ .../main/res/drawable/ic_arrow_outward.xml | 5 + .../app/src/main/res/drawable/ic_feedback.xml | 11 ++ Demo/app/src/main/res/drawable/ic_home.xml | 14 +- Demo/app/src/main/res/drawable/ic_list.xml | 14 +- Demo/app/src/main/res/drawable/ic_termux.xml | 32 ++++ Demo/app/src/main/res/drawable/ic_web.xml | 4 + .../icon_category_leaderboard_raster.png | Bin 0 -> 18218 bytes .../image_category_entertainment_raster.png | Bin 0 -> 67696 bytes .../image_category_tvmovies_raster.png | Bin 0 -> 49135 bytes .../app/src/main/res/drawable/lose_button.xml | 14 ++ Demo/app/src/main/res/drawable/mask.xml | 10 ++ .../src/main/res/drawable/purple_frame.xml | 11 ++ .../src/main/res/drawable/rounded_button.xml | 9 + .../main/res/drawable/rounded_button_dark.xml | 9 + .../res/drawable/rounded_button_white.xml | 9 + .../src/main/res/drawable/rounded_rect.xml | 11 ++ .../src/main/res/drawable/white_outline.xml | 13 ++ Demo/app/src/main/res/drawable/win_button.xml | 12 ++ .../src/main/res/layout/activity_first.xml | 57 +++++++ .../res/layout/activity_fragment_demo.xml | 28 ++++ .../main/res/layout/activity_image_picker.xml | 44 +++++ .../main/res/layout/activity_search_web.xml | 44 +++++ .../src/main/res/layout/activity_second.xml | 57 +++++++ .../main/res/layout/activity_trivia_game.xml | 47 ++++++ .../src/main/res/layout/fragment_chatting.xml | 2 - .../src/main/res/layout/fragment_first.xml | 81 +++++++++ .../main/res/layout/fragment_game_over.xml | 46 ++++++ .../src/main/res/layout/fragment_in_game.xml | 46 ++++++ .../main/res/layout/fragment_leaderboard.xml | 28 ++++ .../src/main/res/layout/fragment_match.xml | 76 +++++++++ .../src/main/res/layout/fragment_register.xml | 100 ++++++++++++ .../res/layout/fragment_result_winner.xml | 71 ++++++++ .../main/res/layout/fragment_search_view.xml | 41 +++++ .../src/main/res/layout/fragment_second.xml | 82 ++++++++++ .../main/res/layout/fragment_title_screen.xml | 88 ++++++++++ .../main/res/layout/fragment_user_profile.xml | 61 +++++++ .../src/main/res/layout/fragment_web_view.xml | 29 ++++ .../main/res/layout/item_leaderboard_user.xml | 71 ++++++++ .../main/res/layout/item_package_detail.xml | 57 +++++++ .../res/layout/item_search_suggestion.xml | 31 ++++ Demo/app/src/main/res/layout/user_card.xml | 148 +++++++++++++++++ .../main/res/menu/search_web_bottom_nav.xml | 19 +++ .../main/res/menu/trivia_game_bottom_nav.xml | 19 +++ .../res/navigation/search_web_nav_graph.xml | 18 ++ .../main/res/navigation/trivia_nav_graph.xml | 151 +++++++++++++++++ Demo/app/src/main/res/raw/unauthorised.html | 39 +++++ Demo/app/src/main/res/values/colors.xml | 5 + Demo/app/src/main/res/values/dimens.xml | 27 +++ Demo/app/src/main/res/values/strings.xml | 40 +++++ Demo/app/src/main/res/xml/provider_paths.xml | 18 ++ Demo/build.gradle | 7 + 136 files changed, 4122 insertions(+), 25 deletions(-) create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/FirstActivity.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/FragmentDemoActivity.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/ImagePickerActivity.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/SecondActivity.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/fragments/FirstFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/fragments/SecondFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FirstActivityViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FirstFragmentViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FragmentDemoViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/ImagePickerViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/SecondActivityViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/SecondFragmentViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/utils/IntentData.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/appcomponents/utils/LifecycleLogger.kt rename Demo/app/src/main/java/com/krunal/demo/{uicomponents => }/helpers/PreferenceHelper.kt (97%) rename Demo/app/src/main/java/com/krunal/demo/{uicomponents => }/helpers/ThemeHelper.kt (96%) create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/data/models/Credential.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/data/models/Match.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/data/models/RegisterDetail.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/data/models/UserProfile.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/data/repositories/MatchRepository.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/data/repositories/UserProfileRepository.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/activities/TriviaGameActivity.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/adapters/LeaderboardAdapter.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/GameOverFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/InGameFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/LeaderboardFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/MatchFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/RegisterFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/ResultWinnerFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/TitleScreenFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/UserProfileFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/InGameViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/LeaderboardViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/MatchViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/RegisterViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/TitleScreenViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/TriviaGameViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/UserProfileViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/data/models/PackageDetail.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/data/repositories/PackagesRepository.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/data/repositories/WebViewRepository.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/PackageHelper.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/SearchCountDownTimer.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/WebClient.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/activities/SearchWebActivity.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/adapters/PackageDetailAdapter.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/fragments/SearchViewFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/fragments/WebViewFragment.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/viewmodels/SearchViewModel.kt create mode 100644 Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/viewmodels/WebViewViewModel.kt rename Demo/app/src/main/java/com/krunal/demo/{uicomponents => }/utils/PreferenceKeys.kt (56%) create mode 100644 Demo/app/src/main/res/anim/nav_slide_in_bottom.xml create mode 100644 Demo/app/src/main/res/anim/nav_slide_in_left.xml create mode 100644 Demo/app/src/main/res/anim/nav_slide_in_right.xml create mode 100644 Demo/app/src/main/res/anim/nav_slide_in_up.xml create mode 100644 Demo/app/src/main/res/anim/nav_slide_out_bottom.xml create mode 100644 Demo/app/src/main/res/anim/nav_slide_out_left.xml create mode 100644 Demo/app/src/main/res/anim/nav_slide_out_right.xml create mode 100644 Demo/app/src/main/res/anim/nav_slide_out_up.xml create mode 100644 Demo/app/src/main/res/drawable/avatar_10_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_11_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_12_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_13_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_14_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_15_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_16_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_1_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_2_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_3_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_4_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_5_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_6_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_7_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_8_raster.png create mode 100644 Demo/app/src/main/res/drawable/avatar_9_raster.png create mode 100644 Demo/app/src/main/res/drawable/button_press.xml create mode 100644 Demo/app/src/main/res/drawable/button_press_dark.xml create mode 100644 Demo/app/src/main/res/drawable/circle.xml create mode 100644 Demo/app/src/main/res/drawable/dark_frame.xml create mode 100644 Demo/app/src/main/res/drawable/ic_arrow_outward.xml create mode 100644 Demo/app/src/main/res/drawable/ic_feedback.xml create mode 100644 Demo/app/src/main/res/drawable/ic_termux.xml create mode 100644 Demo/app/src/main/res/drawable/ic_web.xml create mode 100644 Demo/app/src/main/res/drawable/icon_category_leaderboard_raster.png create mode 100644 Demo/app/src/main/res/drawable/image_category_entertainment_raster.png create mode 100644 Demo/app/src/main/res/drawable/image_category_tvmovies_raster.png create mode 100644 Demo/app/src/main/res/drawable/lose_button.xml create mode 100644 Demo/app/src/main/res/drawable/mask.xml create mode 100644 Demo/app/src/main/res/drawable/purple_frame.xml create mode 100644 Demo/app/src/main/res/drawable/rounded_button.xml create mode 100644 Demo/app/src/main/res/drawable/rounded_button_dark.xml create mode 100644 Demo/app/src/main/res/drawable/rounded_button_white.xml create mode 100644 Demo/app/src/main/res/drawable/rounded_rect.xml create mode 100644 Demo/app/src/main/res/drawable/white_outline.xml create mode 100644 Demo/app/src/main/res/drawable/win_button.xml create mode 100644 Demo/app/src/main/res/layout/activity_first.xml create mode 100644 Demo/app/src/main/res/layout/activity_fragment_demo.xml create mode 100644 Demo/app/src/main/res/layout/activity_image_picker.xml create mode 100644 Demo/app/src/main/res/layout/activity_search_web.xml create mode 100644 Demo/app/src/main/res/layout/activity_second.xml create mode 100644 Demo/app/src/main/res/layout/activity_trivia_game.xml create mode 100644 Demo/app/src/main/res/layout/fragment_first.xml create mode 100644 Demo/app/src/main/res/layout/fragment_game_over.xml create mode 100644 Demo/app/src/main/res/layout/fragment_in_game.xml create mode 100644 Demo/app/src/main/res/layout/fragment_leaderboard.xml create mode 100644 Demo/app/src/main/res/layout/fragment_match.xml create mode 100644 Demo/app/src/main/res/layout/fragment_register.xml create mode 100644 Demo/app/src/main/res/layout/fragment_result_winner.xml create mode 100644 Demo/app/src/main/res/layout/fragment_search_view.xml create mode 100644 Demo/app/src/main/res/layout/fragment_second.xml create mode 100644 Demo/app/src/main/res/layout/fragment_title_screen.xml create mode 100644 Demo/app/src/main/res/layout/fragment_user_profile.xml create mode 100644 Demo/app/src/main/res/layout/fragment_web_view.xml create mode 100644 Demo/app/src/main/res/layout/item_leaderboard_user.xml create mode 100644 Demo/app/src/main/res/layout/item_package_detail.xml create mode 100644 Demo/app/src/main/res/layout/item_search_suggestion.xml create mode 100644 Demo/app/src/main/res/layout/user_card.xml create mode 100644 Demo/app/src/main/res/menu/search_web_bottom_nav.xml create mode 100644 Demo/app/src/main/res/menu/trivia_game_bottom_nav.xml create mode 100644 Demo/app/src/main/res/navigation/search_web_nav_graph.xml create mode 100644 Demo/app/src/main/res/navigation/trivia_nav_graph.xml create mode 100644 Demo/app/src/main/res/raw/unauthorised.html create mode 100644 Demo/app/src/main/res/xml/provider_paths.xml diff --git a/Demo/app/build.gradle b/Demo/app/build.gradle index 8382565..39c8592 100644 --- a/Demo/app/build.gradle +++ b/Demo/app/build.gradle @@ -2,6 +2,7 @@ plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' + id 'androidx.navigation.safeargs.kotlin' } android { @@ -40,6 +41,8 @@ android { dependencies { def lifecycle_version = "2.6.1" + def nav_version = "2.5.3" + implementation 'androidx.core:core-ktx:1.10.1' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.9.0' @@ -49,6 +52,12 @@ dependencies { implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" implementation "androidx.core:core-splashscreen:1.0.1" implementation "androidx.preference:preference-ktx:1.2.0" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1" + implementation 'androidx.fragment:fragment-ktx:1.5.7' + + // Navigation + implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" + implementation "androidx.navigation:navigation-ui-ktx:$nav_version" testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' diff --git a/Demo/app/src/main/AndroidManifest.xml b/Demo/app/src/main/AndroidManifest.xml index 4858a5c..211832d 100644 --- a/Demo/app/src/main/AndroidManifest.xml +++ b/Demo/app/src/main/AndroidManifest.xml @@ -2,6 +2,16 @@ + + + + + + + + + + android:theme="@style/Theme.StackExchange" /> + + - + + android:name=".appcomponents.ui.activities.ImagePickerActivity" + android:exported="true" + android:label="DemoImagePicker" + android:taskAffinity="com.krunal.demo.imagePicker"> + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/DemoApplication.kt b/Demo/app/src/main/java/com/krunal/demo/DemoApplication.kt index 45e7964..212788b 100644 --- a/Demo/app/src/main/java/com/krunal/demo/DemoApplication.kt +++ b/Demo/app/src/main/java/com/krunal/demo/DemoApplication.kt @@ -1,7 +1,8 @@ package com.krunal.demo import android.app.Application -import com.krunal.demo.uicomponents.helpers.PreferenceHelper +import com.krunal.demo.helpers.PreferenceHelper +import com.krunal.demo.searchwebview.helpers.PackageHelper class DemoApplication: Application() { @@ -14,6 +15,11 @@ class DemoApplication: Application() { * Initialize [PreferenceHelper] */ PreferenceHelper.initialize(applicationContext) + + /** + * Initialize [PackageHelper] + */ + PackageHelper.initialize(applicationContext) } companion object { diff --git a/Demo/app/src/main/java/com/krunal/demo/UIComponentsActivity.kt b/Demo/app/src/main/java/com/krunal/demo/UIComponentsActivity.kt index 6713d53..e09a3d6 100644 --- a/Demo/app/src/main/java/com/krunal/demo/UIComponentsActivity.kt +++ b/Demo/app/src/main/java/com/krunal/demo/UIComponentsActivity.kt @@ -11,7 +11,7 @@ import com.krunal.demo.uicomponents.CoordinatorLayoutFragment import com.krunal.demo.uicomponents.ListViewFragment import com.krunal.demo.uicomponents.ThemeFragment import com.krunal.demo.uicomponents.cardscreen.CardFragment -import com.krunal.demo.uicomponents.helpers.ThemeHelper +import com.krunal.demo.helpers.ThemeHelper class UIComponentsActivity : AppCompatActivity() { diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/FirstActivity.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/FirstActivity.kt new file mode 100644 index 0000000..9783b9b --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/FirstActivity.kt @@ -0,0 +1,85 @@ +package com.krunal.demo.appcomponents.ui.activities + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.util.Log +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContract +import androidx.activity.result.contract.ActivityResultContracts +import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.fragment.app.commitNow +import com.krunal.demo.appcomponents.ui.fragments.FirstFragment +import com.krunal.demo.appcomponents.ui.viewmodels.FirstActivityViewModel +import com.krunal.demo.appcomponents.utils.IntentData +import com.krunal.demo.appcomponents.utils.LifecycleLogger +import com.krunal.demo.databinding.ActivityFirstBinding + +class FirstActivity : AppCompatActivity() { + + private lateinit var binding: ActivityFirstBinding + private val viewModel: FirstActivityViewModel by viewModels() + private val activityResultLauncher: ActivityResultLauncher = registerActivityForResult() + + init { + LifecycleLogger(this) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + installSplashScreen() + + binding = ActivityFirstBinding.inflate(layoutInflater) + binding.lifecycleOwner = this + binding.viewModel = viewModel + setContentView(binding.root) + + setupUI() + } + + private fun setupUI() { + binding.btnSecondActivity.setOnClickListener { + val intent = Intent(this, SecondActivity::class.java).apply { + putExtra(IntentData.MESSAGE, viewModel.message.value) + } + startActivityForResult(intent, MESSAGE_REQUEST_CODE) + } + + binding.btnFragment.setOnClickListener { + activityResultLauncher.launch(Unit) + } + } + + private fun registerActivityForResult(): ActivityResultLauncher { + return registerForActivityResult(object : ActivityResultContract() { + override fun createIntent(context: Context, input: Unit): Intent = Intent(this@FirstActivity, FragmentDemoActivity::class.java).apply { + putExtra(IntentData.MESSAGE, viewModel.message.value) + } + + override fun parseResult(resultCode: Int, intent: Intent?): String? { + if (resultCode == Activity.RESULT_OK) { + return intent?.getStringExtra(IntentData.MESSAGE) + } + return null + } + + }) { + it?.let(viewModel::setMessage) + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + + if (requestCode == MESSAGE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { + data?.getStringExtra(IntentData.MESSAGE)?.let(viewModel::setMessage) + } + } + + companion object { + private const val MESSAGE_REQUEST_CODE = 101 + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/FragmentDemoActivity.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/FragmentDemoActivity.kt new file mode 100644 index 0000000..e8e3514 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/FragmentDemoActivity.kt @@ -0,0 +1,58 @@ +package com.krunal.demo.appcomponents.ui.activities + +import android.app.Activity +import android.app.PendingIntent +import android.content.Intent +import android.os.Bundle +import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import androidx.fragment.app.commit +import com.krunal.demo.R +import com.krunal.demo.appcomponents.ui.fragments.FirstFragment +import com.krunal.demo.appcomponents.ui.viewmodels.FragmentDemoViewModel +import com.krunal.demo.appcomponents.utils.IntentData +import com.krunal.demo.databinding.ActivityFragmentDemoBinding + +class FragmentDemoActivity : AppCompatActivity() { + + private lateinit var binding: ActivityFragmentDemoBinding + private val viewModel: FragmentDemoViewModel by viewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + binding = ActivityFragmentDemoBinding.inflate(layoutInflater) + binding.lifecycleOwner = this + binding.viewModel = viewModel + setContentView(binding.root) + setupInitialValue(intent) + setupUI() + } + + private fun setupInitialValue(intent: Intent) { + intent.getStringExtra(Intent.EXTRA_TEXT)?.let(viewModel::setMessage) + intent.getStringExtra(IntentData.MESSAGE)?.let(viewModel::setMessage) + } + + private fun setupUI() { + val data = Bundle().apply { + putString(IntentData.MESSAGE, viewModel.message.value) + } + + supportFragmentManager.commit { + add(R.id.fragmentContainer, FirstFragment().apply { + arguments = data + }) + } + } + + override fun finish() { + val message = viewModel.message.value + val intent = Intent().apply { + putExtra(IntentData.MESSAGE, message) + } + setResult(Activity.RESULT_OK, intent) + super.finish() + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/ImagePickerActivity.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/ImagePickerActivity.kt new file mode 100644 index 0000000..d0109d5 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/ImagePickerActivity.kt @@ -0,0 +1,87 @@ +package com.krunal.demo.appcomponents.ui.activities + +import android.Manifest +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Bundle +import android.os.Environment +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.FileProvider +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.lifecycle.lifecycleScope +import com.krunal.demo.appcomponents.ui.viewmodels.ImagePickerViewModel +import com.krunal.demo.databinding.ActivityImagePickerBinding +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch +import java.io.File + +class ImagePickerActivity : AppCompatActivity() { + + private lateinit var binding: ActivityImagePickerBinding + private val viewModel: ImagePickerViewModel by viewModels() + private val activityResultLauncher: ActivityResultLauncher = + registerActivityResultLauncher() + private val uri: Uri by lazy { + val file = File(Environment.getExternalStorageDirectory().listFiles()[8], "cameraPick") + FileProvider.getUriForFile(this, "${applicationContext.packageName}.provider", file) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + installSplashScreen() + + binding = ActivityImagePickerBinding.inflate(layoutInflater) + binding.lifecycleOwner = this + binding.viewModel = viewModel + setContentView(binding.root) + setupUI() + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (requestCode == MY_CAMERA_REQUEST_CODE && grantResults.first() == PackageManager.PERMISSION_GRANTED) { + takePicture() + } + } + + private fun registerActivityResultLauncher(): ActivityResultLauncher { + return registerForActivityResult(ActivityResultContracts.TakePicture()) { + if (it) viewModel.setImage(uri) + } + } + + private fun setupUI() { + binding.btnPickImage.setOnClickListener { + if (checkCameraPermission()) { + takePicture() + } + } + + lifecycleScope.launch { + viewModel.image.collectLatest { uri -> + binding.imgView.setImageURI(uri) + } + } + } + + private fun takePicture() { + activityResultLauncher.launch(uri) + } + + private fun checkCameraPermission(): Boolean { + if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { + requestPermissions(arrayOf(Manifest.permission.CAMERA), MY_CAMERA_REQUEST_CODE) + return false + } + return true + } + + companion object { + private const val MY_CAMERA_REQUEST_CODE = 100 + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/SecondActivity.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/SecondActivity.kt new file mode 100644 index 0000000..1f7ecd5 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/activities/SecondActivity.kt @@ -0,0 +1,53 @@ +package com.krunal.demo.appcomponents.ui.activities + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity +import com.krunal.demo.appcomponents.ui.viewmodels.SecondActivityViewModel +import com.krunal.demo.appcomponents.utils.IntentData +import com.krunal.demo.databinding.ActivitySecondBinding + +class SecondActivity : AppCompatActivity() { + + private lateinit var binding: ActivitySecondBinding + private val viewModel: SecondActivityViewModel by viewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + binding = ActivitySecondBinding.inflate(layoutInflater) + binding.viewModel = viewModel + setContentView(binding.root) + + setupUI() + setupInitialValue(intent) + } + + private fun setupInitialValue(intent: Intent) { + intent.getStringExtra(IntentData.MESSAGE)?.let(viewModel::setMessage) + } + + private fun setupUI() { + binding.btnGoBackActivity.setOnClickListener { + finish() + } + + binding.btnFragment.setOnClickListener { + val intent = Intent(IntentData.ACTION_MESSAGE).apply { + putExtra(IntentData.MESSAGE, viewModel.message.value) + type = "text/plain" + } + startActivity(intent) + } + } + + override fun finish() { + val intent = Intent().apply { + putExtra(IntentData.MESSAGE, viewModel.message.value) + } + setResult(Activity.RESULT_OK, intent) + super.finish() + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/fragments/FirstFragment.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/fragments/FirstFragment.kt new file mode 100644 index 0000000..1f90fcf --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/fragments/FirstFragment.kt @@ -0,0 +1,72 @@ +package com.krunal.demo.appcomponents.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.fragment.app.commit +import androidx.fragment.app.viewModels +import com.krunal.demo.R +import com.krunal.demo.appcomponents.ui.viewmodels.FirstFragmentViewModel +import com.krunal.demo.appcomponents.ui.viewmodels.FragmentDemoViewModel +import com.krunal.demo.appcomponents.utils.IntentData +import com.krunal.demo.appcomponents.utils.LifecycleLogger +import com.krunal.demo.databinding.FragmentFirstBinding + +class FirstFragment : Fragment() { + + private lateinit var binding: FragmentFirstBinding + private val viewModel: FirstFragmentViewModel by viewModels() + private val activityViewModel: FragmentDemoViewModel by activityViewModels() + + init { + LifecycleLogger(this) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentFirstBinding.inflate(inflater, container, false) + binding.lifecycleOwner = viewLifecycleOwner + binding.viewModel = viewModel + binding.activityViewModel = activityViewModel + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + setupInitialValue() + + val data = Bundle().apply { + putString(IntentData.MESSAGE, viewModel.message.value) + } + + binding.btnSecondFragment.setOnClickListener { + parentFragmentManager.commit { + replace(R.id.fragmentContainer, SecondFragment().apply { + arguments = data + }) + } + } + + binding.btnSecondActivity.setOnClickListener { + activity?.finish() + } + } + + private fun setupInitialValue() { + arguments?.getString(IntentData.MESSAGE)?.let(viewModel::setMessage) + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/fragments/SecondFragment.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/fragments/SecondFragment.kt new file mode 100644 index 0000000..e144a0a --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/fragments/SecondFragment.kt @@ -0,0 +1,51 @@ +package com.krunal.demo.appcomponents.ui.fragments + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.activityViewModels +import androidx.fragment.app.viewModels +import com.krunal.demo.R +import com.krunal.demo.appcomponents.ui.viewmodels.FirstFragmentViewModel +import com.krunal.demo.appcomponents.ui.viewmodels.FragmentDemoViewModel +import com.krunal.demo.appcomponents.ui.viewmodels.SecondFragmentViewModel +import com.krunal.demo.appcomponents.utils.IntentData +import com.krunal.demo.databinding.FragmentFirstBinding +import com.krunal.demo.databinding.FragmentSecondBinding + +class SecondFragment : Fragment() { + + + private lateinit var binding: FragmentSecondBinding + private val viewModel: SecondFragmentViewModel by viewModels() + private val activityViewModel: FragmentDemoViewModel by activityViewModels() + + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentSecondBinding.inflate(inflater, container, false) + binding.viewModel = viewModel + binding.lifecycleOwner = viewLifecycleOwner + binding.activityViewModel = activityViewModel + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + setupUI() + } + + private fun setupUI() { + setupInitialValue() + } + + private fun setupInitialValue() { + arguments?.getString(IntentData.MESSAGE)?.let(viewModel::setMessage) + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FirstActivityViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FirstActivityViewModel.kt new file mode 100644 index 0000000..02a719f --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FirstActivityViewModel.kt @@ -0,0 +1,19 @@ +package com.krunal.demo.appcomponents.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import androidx.recyclerview.widget.RecyclerView +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class FirstActivityViewModel: ViewModel() { + + val message: MutableStateFlow = MutableStateFlow(null) + + fun setMessage(message: String) { + viewModelScope.launch { + this@FirstActivityViewModel.message.emit(message) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FirstFragmentViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FirstFragmentViewModel.kt new file mode 100644 index 0000000..09a5ddf --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FirstFragmentViewModel.kt @@ -0,0 +1,18 @@ +package com.krunal.demo.appcomponents.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class FirstFragmentViewModel: ViewModel() { + + val message: MutableStateFlow = MutableStateFlow(null) + + fun setMessage(message: String) { + viewModelScope.launch { + this@FirstFragmentViewModel.message.emit(message) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FragmentDemoViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FragmentDemoViewModel.kt new file mode 100644 index 0000000..6612650 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/FragmentDemoViewModel.kt @@ -0,0 +1,18 @@ +package com.krunal.demo.appcomponents.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class FragmentDemoViewModel: ViewModel() { + + val message: MutableStateFlow = MutableStateFlow(null) + + fun setMessage(message: String) { + viewModelScope.launch { + this@FragmentDemoViewModel.message.emit(message) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/ImagePickerViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/ImagePickerViewModel.kt new file mode 100644 index 0000000..3cd4ad9 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/ImagePickerViewModel.kt @@ -0,0 +1,18 @@ +package com.krunal.demo.appcomponents.ui.viewmodels + +import android.net.Uri +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.launch + +class ImagePickerViewModel: ViewModel() { + + val image: MutableStateFlow = MutableStateFlow(null) + + fun setImage(image: Uri) { + viewModelScope.launch { + this@ImagePickerViewModel.image.emit(image) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/SecondActivityViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/SecondActivityViewModel.kt new file mode 100644 index 0000000..98fee28 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/SecondActivityViewModel.kt @@ -0,0 +1,19 @@ +package com.krunal.demo.appcomponents.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import androidx.recyclerview.widget.RecyclerView +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class SecondActivityViewModel: ViewModel() { + + val message: MutableStateFlow = MutableStateFlow(null) + + fun setMessage(message: String) { + viewModelScope.launch { + this@SecondActivityViewModel.message.emit(message) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/SecondFragmentViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/SecondFragmentViewModel.kt new file mode 100644 index 0000000..00c7b70 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/ui/viewmodels/SecondFragmentViewModel.kt @@ -0,0 +1,18 @@ +package com.krunal.demo.appcomponents.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class SecondFragmentViewModel: ViewModel() { + + val message: MutableStateFlow = MutableStateFlow(null) + + fun setMessage(message: String) { + viewModelScope.launch { + this@SecondFragmentViewModel.message.emit(message) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/utils/IntentData.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/utils/IntentData.kt new file mode 100644 index 0000000..faaa8df --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/utils/IntentData.kt @@ -0,0 +1,16 @@ +package com.krunal.demo.appcomponents.utils + +object IntentData { + + /** + * Intent data keys + */ + const val MESSAGE = "message" + const val AUTH_KEY = "auth_key" + + /** + * Actions + */ + const val ACTION_MESSAGE = "com.krunal.demo.action.MESSAGE" + const val ACTION_TRIVIA = "com.krunal.demo.action.TRIVIA" +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/appcomponents/utils/LifecycleLogger.kt b/Demo/app/src/main/java/com/krunal/demo/appcomponents/utils/LifecycleLogger.kt new file mode 100644 index 0000000..c3c10b7 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/appcomponents/utils/LifecycleLogger.kt @@ -0,0 +1,28 @@ +package com.krunal.demo.appcomponents.utils + +import android.util.Log +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.LifecycleOwner + +/** + * Observe and log [Lifecycle.Event] for [LifecycleOwner] + */ +class LifecycleLogger(lifecycleOwner: LifecycleOwner) { + + init { + lifecycleOwner.lifecycle.addObserver(object : LifecycleEventObserver { + override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { + log(source::class.simpleName, event.name) + } + }) + } + + private fun log(name: String?, state: String) { + Log.i(TAG, "[$name state]: $state") + } + + companion object { + private const val TAG = "LifecycleLogger" + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/uicomponents/helpers/PreferenceHelper.kt b/Demo/app/src/main/java/com/krunal/demo/helpers/PreferenceHelper.kt similarity index 97% rename from Demo/app/src/main/java/com/krunal/demo/uicomponents/helpers/PreferenceHelper.kt rename to Demo/app/src/main/java/com/krunal/demo/helpers/PreferenceHelper.kt index 4c7cca8..a1d36c3 100644 --- a/Demo/app/src/main/java/com/krunal/demo/uicomponents/helpers/PreferenceHelper.kt +++ b/Demo/app/src/main/java/com/krunal/demo/helpers/PreferenceHelper.kt @@ -1,4 +1,4 @@ -package com.krunal.demo.uicomponents.helpers +package com.krunal.demo.helpers import android.content.Context import android.content.SharedPreferences diff --git a/Demo/app/src/main/java/com/krunal/demo/uicomponents/helpers/ThemeHelper.kt b/Demo/app/src/main/java/com/krunal/demo/helpers/ThemeHelper.kt similarity index 96% rename from Demo/app/src/main/java/com/krunal/demo/uicomponents/helpers/ThemeHelper.kt rename to Demo/app/src/main/java/com/krunal/demo/helpers/ThemeHelper.kt index 2bedaae..edb4552 100644 --- a/Demo/app/src/main/java/com/krunal/demo/uicomponents/helpers/ThemeHelper.kt +++ b/Demo/app/src/main/java/com/krunal/demo/helpers/ThemeHelper.kt @@ -1,11 +1,11 @@ -package com.krunal.demo.uicomponents.helpers +package com.krunal.demo.helpers import android.content.Context import com.krunal.demo.R import com.krunal.demo.uicomponents.models.Theme import com.krunal.demo.uicomponents.models.enums.AccentColor import com.krunal.demo.uicomponents.models.enums.ThemeMode -import com.krunal.demo.uicomponents.utils.PreferenceKeys +import com.krunal.demo.utils.PreferenceKeys object ThemeHelper { fun getThemes(context: Context, isDark: Boolean = false): List { diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/Credential.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/Credential.kt new file mode 100644 index 0000000..acc0a9d --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/Credential.kt @@ -0,0 +1,6 @@ +package com.krunal.demo.navigation.data.models + +data class Credential( + val email: String, + val password: String +) diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/Match.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/Match.kt new file mode 100644 index 0000000..d219a8e --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/Match.kt @@ -0,0 +1,8 @@ +package com.krunal.demo.navigation.data.models + +data class Match( + val matchId: Int, + val user1: UserProfile, + val user2: UserProfile, + val winner: UserProfile? = null +) diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/RegisterDetail.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/RegisterDetail.kt new file mode 100644 index 0000000..f4fae24 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/RegisterDetail.kt @@ -0,0 +1,36 @@ +package com.krunal.demo.navigation.data.models + +import androidx.databinding.BaseObservable +import androidx.databinding.Bindable +import com.krunal.demo.BR + +data class RegisterDetail( + private var _username: String = "", + private var _email: String = "", + private var _password: String = "" +): BaseObservable() { + + @get:Bindable + var username: String = _username + set(value) { + _username = value + field = value + notifyPropertyChanged(BR.username) + } + + @get:Bindable + var email: String = _email + set(value) { + _email = value + field = value + notifyPropertyChanged(BR.email) + } + + @get:Bindable + var password: String = _password + set(value) { + _password = value + field = value + notifyPropertyChanged(BR.password) + } +} diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/UserProfile.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/UserProfile.kt new file mode 100644 index 0000000..80e1162 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/data/models/UserProfile.kt @@ -0,0 +1,14 @@ +package com.krunal.demo.navigation.data.models + +import androidx.annotation.DrawableRes + +data class UserProfile( + val id: Int, + val name: String, + val credential: Credential, + @DrawableRes val profileImage: Int, + val rank: Int = -1, + val wins: Int = 0, + val losses: Int = 0, + val pts: Int = 0 +) diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/data/repositories/MatchRepository.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/data/repositories/MatchRepository.kt new file mode 100644 index 0000000..b7166d5 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/data/repositories/MatchRepository.kt @@ -0,0 +1,27 @@ +package com.krunal.demo.navigation.data.repositories + +import com.krunal.demo.navigation.data.models.Match + +object MatchRepository { + + private val matches = mutableMapOf( + 1 to Match( + 0, + UserProfileRepository.getAllUserProfiles()[0], + UserProfileRepository.getAllUserProfiles()[1] + ), + 2 to Match( + 0, + UserProfileRepository.getAllUserProfiles()[2], + UserProfileRepository.getAllUserProfiles()[3] + ) + ) + + fun getMatch(matchId: Int): Match? = matches[matchId] + + fun getAllMatches(): List = matches.toSortedMap().values.toList() + + fun createMatch(match: Match) { + matches[match.matchId] = match + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/data/repositories/UserProfileRepository.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/data/repositories/UserProfileRepository.kt new file mode 100644 index 0000000..1ad1594 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/data/repositories/UserProfileRepository.kt @@ -0,0 +1,68 @@ +package com.krunal.demo.navigation.data.repositories + +import com.krunal.demo.R +import com.krunal.demo.helpers.PreferenceHelper +import com.krunal.demo.navigation.data.models.Credential +import com.krunal.demo.navigation.data.models.UserProfile +import com.krunal.demo.utils.PreferenceKeys + +object UserProfileRepository { + + private val userProfiles = mutableMapOf( + 1 to UserProfile( + id = 1, + name = "Krunal Patel", + credential = Credential("krunal@gmail.com", "Krunal#321"), + profileImage = R.drawable.avatar_1_raster, + rank = 1, + wins = 10, + losses = 5 + ), 2 to UserProfile( + id = 2, + name = "Harsh Mehta", + credential = Credential("harsh@gmail.com", "Harsh#321"), + profileImage = R.drawable.avatar_3_raster, + rank = 2, + wins = 12, + losses = 8 + ), 3 to UserProfile( + id = 3, + name = "Ankur Gamit", + credential = Credential("ankur@gmail.com", "Ankur@777"), + profileImage = R.drawable.avatar_2_raster, + rank = 3, + wins = 4, + losses = 2 + ), 4 to UserProfile( + id = 4, + name = "Harshit Patel", + credential = Credential("harshit@gmail.com", "Harshit@777"), + profileImage = R.drawable.avatar_4_raster, + rank = 4, + wins = 0, + losses = 2 + ) + ) + + fun getAllUserProfiles(): List = userProfiles.toSortedMap().values.toList() + + fun getCurrentUser(): UserProfile? { + val userId = PreferenceHelper.getInt(PreferenceKeys.TRIVIA_USER_ID, -1) + if (userId == -1) return null + + return userProfiles[userId] + } + + fun getUserProfile(userId: Int): UserProfile? = userProfiles[userId] + + fun setCurrentUser(userProfile: UserProfile) { + userProfiles[userProfile.id] = userProfile + PreferenceHelper.putInt(PreferenceKeys.TRIVIA_USER_ID, userProfile.id) + } + + fun getRandomUser(): UserProfile? = userProfiles.values.randomOrNull() + + fun updateUser(userProfile: UserProfile) { + userProfiles[userProfile.id] = userProfile + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/activities/TriviaGameActivity.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/activities/TriviaGameActivity.kt new file mode 100644 index 0000000..e63098d --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/activities/TriviaGameActivity.kt @@ -0,0 +1,67 @@ +package com.krunal.demo.navigation.ui.activities + +import android.os.Bundle +import android.util.Log +import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import androidx.navigation.NavController +import androidx.navigation.findNavController +import androidx.navigation.fragment.NavHostFragment +import androidx.navigation.ui.setupWithNavController +import com.krunal.demo.R +import com.krunal.demo.databinding.ActivityTriviaGameBinding +import com.krunal.demo.navigation.ui.viewmodels.TriviaGameViewModel +import com.krunal.demo.helpers.ThemeHelper +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch + +class TriviaGameActivity : AppCompatActivity() { + + private lateinit var navController: NavController + private lateinit var binding: ActivityTriviaGameBinding + private val viewModel: TriviaGameViewModel by viewModels() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityTriviaGameBinding.inflate(layoutInflater) + binding.lifecycleOwner = this + binding.viewModel = viewModel + installSplashScreen() + setupTheme() + setContentView(binding.root) + setupUI() + } + + private fun setupTheme() { + setTheme(ThemeHelper.getThemeResource(ThemeHelper.getThemeAccent())) + } + + private fun setupUI() { + setSupportActionBar(binding.toolbar) + (supportFragmentManager.findFragmentById(R.id.navHost) as? NavHostFragment)?.let { + navController = it.navController + } + setupNavigation() + } + + private fun setupNavigation() { + binding.toolbar.setupWithNavController(navController) + binding.bottomNav.setupWithNavController(navController) + + binding.toolbar.setNavigationOnClickListener { + onBackPressedDispatcher.onBackPressed() + } + + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.CREATED) { + navController.currentBackStackEntryFlow.collectLatest { + Log.d("Navigation", "current: ${navController.currentBackStackEntry?.destination?.displayName}") + } + } + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/adapters/LeaderboardAdapter.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/adapters/LeaderboardAdapter.kt new file mode 100644 index 0000000..7f627ad --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/adapters/LeaderboardAdapter.kt @@ -0,0 +1,44 @@ +package com.krunal.demo.navigation.ui.adapters + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.krunal.demo.databinding.ItemLeaderboardUserBinding +import com.krunal.demo.navigation.data.models.UserProfile + +class LeaderboardAdapter(private val onClick: (userId: Int) -> Unit) : + RecyclerView.Adapter() { + + private val userProfiles: MutableList = mutableListOf() + + class UserProfileViewHolder( + private val binding: ItemLeaderboardUserBinding, + private val onClick: (userId: Int) -> Unit + ) : RecyclerView.ViewHolder(binding.root) { + + fun bind(userProfile: UserProfile) { + binding.userProfile = userProfile + binding.root.setOnClickListener { + onClick(userProfile.id) + } + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserProfileViewHolder { + val layoutInflater = LayoutInflater.from(parent.context) + val binding = ItemLeaderboardUserBinding.inflate(layoutInflater, parent, false) + return UserProfileViewHolder(binding, onClick) + } + + override fun getItemCount(): Int = userProfiles.count() + + override fun onBindViewHolder(holder: UserProfileViewHolder, position: Int) { + holder.bind(userProfiles[position]) + } + + fun submitList(list: List) { + userProfiles.clear() + userProfiles.addAll(list) + notifyDataSetChanged() + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/GameOverFragment.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/GameOverFragment.kt new file mode 100644 index 0000000..8507d63 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/GameOverFragment.kt @@ -0,0 +1,35 @@ +package com.krunal.demo.navigation.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController +import com.krunal.demo.databinding.FragmentGameOverBinding + +class GameOverFragment : Fragment() { + + private lateinit var binding: FragmentGameOverBinding + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentGameOverBinding.inflate(layoutInflater, container, false) + + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + binding.apply { + btnPlayAgain.setOnClickListener { + findNavController().navigate(GameOverFragmentDirections.actionGameOverFragmentToMatchFragment()) + } + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/InGameFragment.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/InGameFragment.kt new file mode 100644 index 0000000..d437297 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/InGameFragment.kt @@ -0,0 +1,60 @@ +package com.krunal.demo.navigation.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.activity.addCallback +import androidx.appcompat.widget.Toolbar +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope +import androidx.navigation.fragment.findNavController +import androidx.navigation.fragment.navArgs +import com.google.android.material.appbar.MaterialToolbar +import com.krunal.demo.R +import com.krunal.demo.databinding.FragmentInGameBinding +import com.krunal.demo.navigation.ui.viewmodels.InGameViewModel +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch + +class InGameFragment : Fragment() { + + private lateinit var binding: FragmentInGameBinding + private val viewModel: InGameViewModel by viewModels() + private val args: InGameFragmentArgs by navArgs() + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentInGameBinding.inflate(layoutInflater, container, false) + binding.lifecycleOwner = viewLifecycleOwner + binding.viewModel = viewModel + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + viewModel.loadMatch(args.matchId) + + binding.apply { + btnWin.setOnClickListener { + findNavController().navigate(InGameFragmentDirections.actionInGameFragmentToResultWinnerFragment()) + viewModel?.win() + } + + btnLoss.setOnClickListener { + findNavController().navigate(InGameFragmentDirections.actionInGameFragmentToGameOverFragment()) + viewModel?.loss() + } + } + + requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { + findNavController().popBackStack(R.id.titleScreenFragment, false) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/LeaderboardFragment.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/LeaderboardFragment.kt new file mode 100644 index 0000000..8b248b8 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/LeaderboardFragment.kt @@ -0,0 +1,58 @@ +package com.krunal.demo.navigation.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope +import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.DividerItemDecoration +import com.krunal.demo.databinding.FragmentLeaderboardBinding +import com.krunal.demo.navigation.ui.adapters.LeaderboardAdapter +import com.krunal.demo.navigation.ui.viewmodels.LeaderboardViewModel +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch + +class LeaderboardFragment : Fragment() { + + private lateinit var binding: FragmentLeaderboardBinding + private val viewModel: LeaderboardViewModel by viewModels() + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentLeaderboardBinding.inflate(layoutInflater, container, false) + binding.lifecycleOwner = viewLifecycleOwner + binding.viewModel = viewModel + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + val adapter = LeaderboardAdapter { id -> + findNavController().navigate(LeaderboardFragmentDirections.actionLeaderboardFragmentToUserProfileFragment(id)) + } + + binding.rvLeaderboard.apply { + this.adapter = adapter + addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + } + + lifecycleScope.launch { + viewModel.userProfiles.collectLatest { list -> + adapter.submitList(list) + } + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/MatchFragment.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/MatchFragment.kt new file mode 100644 index 0000000..6dc7480 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/MatchFragment.kt @@ -0,0 +1,52 @@ +package com.krunal.demo.navigation.ui.fragments + +import android.graphics.ColorFilter +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.activity.addCallback +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController +import androidx.navigation.fragment.navArgs +import androidx.navigation.navOptions +import com.krunal.demo.R +import com.krunal.demo.databinding.FragmentMatchBinding +import com.krunal.demo.navigation.ui.viewmodels.MatchViewModel + +class MatchFragment : Fragment() { + + private lateinit var binding: FragmentMatchBinding + private val viewModel: MatchViewModel by viewModels() + private val args: MatchFragmentArgs by navArgs() + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentMatchBinding.inflate(layoutInflater, container, false) + binding.lifecycleOwner = viewLifecycleOwner + binding.viewModel = viewModel + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + viewModel.setUser(args.userId) + viewModel.createMatch() + + binding.btnStart.setOnClickListener { + viewModel.match.value?.let { match -> + findNavController().navigate(MatchFragmentDirections.actionMatchFragmentToInGameFragment(match.matchId)) + } + } + + requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { + findNavController().popBackStack(R.id.titleScreenFragment, false) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/RegisterFragment.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/RegisterFragment.kt new file mode 100644 index 0000000..bfac004 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/RegisterFragment.kt @@ -0,0 +1,47 @@ +package com.krunal.demo.navigation.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController +import com.krunal.demo.databinding.FragmentRegisterBinding +import com.krunal.demo.navigation.ui.viewmodels.RegisterViewModel + +class RegisterFragment : Fragment() { + + private lateinit var binding: FragmentRegisterBinding + private val viewModel: RegisterViewModel by viewModels() + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentRegisterBinding.inflate(layoutInflater, container, false) + binding.lifecycleOwner = viewLifecycleOwner + binding.viewModel = viewModel + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + binding.btnSave.setOnClickListener { + viewModel.saveUser() + } + + binding.btnStart.setOnClickListener { + viewModel.userProfile.value?.id?.let { userId -> + findNavController().navigate( + RegisterFragmentDirections.actionRegisterFragmentToMatchFragment( + userId + ) + ) + } + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/ResultWinnerFragment.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/ResultWinnerFragment.kt new file mode 100644 index 0000000..76b31c4 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/ResultWinnerFragment.kt @@ -0,0 +1,38 @@ +package com.krunal.demo.navigation.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController +import com.krunal.demo.databinding.FragmentResultWinnerBinding + +class ResultWinnerFragment : Fragment() { + + private lateinit var binding: FragmentResultWinnerBinding + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentResultWinnerBinding.inflate(layoutInflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + binding.apply { + btnLeaderboard.setOnClickListener { + findNavController().navigate(ResultWinnerFragmentDirections.actionResultWinnerFragmentToLeaderboardFragment()) + } + + btnPlay.setOnClickListener { + findNavController().navigate(ResultWinnerFragmentDirections.actionResultWinnerFragmentToMatchFragment()) + } + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/TitleScreenFragment.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/TitleScreenFragment.kt new file mode 100644 index 0000000..510d223 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/TitleScreenFragment.kt @@ -0,0 +1,55 @@ +package com.krunal.demo.navigation.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController +import com.krunal.demo.R +import com.krunal.demo.databinding.FragmentTitleScreenBinding +import com.krunal.demo.navigation.ui.viewmodels.TitleScreenViewModel + +class TitleScreenFragment : Fragment(R.layout.fragment_title_screen) { + + private lateinit var binding: FragmentTitleScreenBinding + private val viewModel: TitleScreenViewModel by viewModels() + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentTitleScreenBinding.inflate(layoutInflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + binding.apply { + btnLeaderboard.setOnClickListener { + findNavController().navigate(TitleScreenFragmentDirections.actionTitleScreenFragmentToLeaderboardFragment()) + } + + btnPlay.setOnClickListener { + val userProfile = viewModel.userProfile.value + findNavController().navigate( + if (userProfile == null) { + TitleScreenFragmentDirections.actionTitleScreenFragmentToRegisterFragment() + } else { + TitleScreenFragmentDirections.actionTitleScreenFragmentToMatchFragment( + userProfile.id + ) + } + ) + } + + btnAbout.setOnClickListener { + // TODO: Go to about + } + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/UserProfileFragment.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/UserProfileFragment.kt new file mode 100644 index 0000000..6d36107 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/fragments/UserProfileFragment.kt @@ -0,0 +1,36 @@ +package com.krunal.demo.navigation.ui.fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.navigation.fragment.navArgs +import com.krunal.demo.databinding.FragmentUserProfileBinding +import com.krunal.demo.navigation.ui.viewmodels.UserProfileViewModel + +class UserProfileFragment : Fragment() { + + private lateinit var binding: FragmentUserProfileBinding + private val viewModel: UserProfileViewModel by viewModels() + private val args: UserProfileFragmentArgs by navArgs() + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentUserProfileBinding.inflate(layoutInflater, container, false) + binding.lifecycleOwner = viewLifecycleOwner + binding.viewModel = viewModel + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + viewModel.setUser(args.userId) + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/InGameViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/InGameViewModel.kt new file mode 100644 index 0000000..e3e2a4d --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/InGameViewModel.kt @@ -0,0 +1,50 @@ +package com.krunal.demo.navigation.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.krunal.demo.navigation.data.models.Match +import com.krunal.demo.navigation.data.repositories.MatchRepository +import com.krunal.demo.navigation.data.repositories.UserProfileRepository +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class InGameViewModel : ViewModel() { + + private val _match: MutableStateFlow = MutableStateFlow(null) + val match: StateFlow = _match + + fun loadMatch(matchId: Int) { + viewModelScope.launch { + _match.emit(MatchRepository.getMatch(matchId)) + } + } + + fun win() { + viewModelScope.launch { + match.value?.let { match -> + val userProfile = match.user1.copy( + wins = match.user1.wins + 1 + ) + UserProfileRepository.updateUser(userProfile) + _match.emit( + match.copy(user1 = userProfile, winner = match.user1) + ) + } + } + } + + fun loss() { + viewModelScope.launch { + match.value?.let { match -> + val userProfile = match.user2.copy( + wins = match.user2.wins + 1 + ) + UserProfileRepository.updateUser(userProfile) + _match.emit( + match.copy(user2 = userProfile, winner = match.user2) + ) + } + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/LeaderboardViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/LeaderboardViewModel.kt new file mode 100644 index 0000000..59dc9bd --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/LeaderboardViewModel.kt @@ -0,0 +1,25 @@ +package com.krunal.demo.navigation.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.krunal.demo.navigation.data.models.UserProfile +import com.krunal.demo.navigation.data.repositories.UserProfileRepository +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class LeaderboardViewModel : ViewModel() { + + private val _userProfiles: MutableStateFlow> = MutableStateFlow(emptyList()) + val userProfiles: StateFlow> = _userProfiles + + init { + setupInitialData() + } + + private fun setupInitialData() { + viewModelScope.launch { + _userProfiles.emit(UserProfileRepository.getAllUserProfiles().sortedBy { it.rank }) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/MatchViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/MatchViewModel.kt new file mode 100644 index 0000000..7d4c870 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/MatchViewModel.kt @@ -0,0 +1,59 @@ +package com.krunal.demo.navigation.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.krunal.demo.navigation.data.models.Match +import com.krunal.demo.navigation.data.models.UserProfile +import com.krunal.demo.navigation.data.repositories.MatchRepository +import com.krunal.demo.navigation.data.repositories.UserProfileRepository +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class MatchViewModel : ViewModel() { + + private val _userProfile1: MutableStateFlow = MutableStateFlow(null) + val userProfile1: StateFlow = _userProfile1 + + private val _userProfile2: MutableStateFlow = MutableStateFlow(null) + val userProfile2: StateFlow = _userProfile2 + + private val _match: MutableStateFlow = MutableStateFlow(null) + val match: StateFlow = _match + + fun setUser(userId: Int) { + viewModelScope.launch { + val user = if (userId == -1) { + UserProfileRepository.getCurrentUser() + } else { + UserProfileRepository.getUserProfile(userId) + } + _userProfile1.emit(user) + } + } + + fun createMatch() { + + viewModelScope.launch { + delay(1200) + + // Insufficient players + if (UserProfileRepository.getAllUserProfiles().count() <= 1) return@launch + + val user1 = userProfile1.value ?: return@launch + var user2: UserProfile + do { + user2 = UserProfileRepository.getRandomUser() ?: return@launch + } while (user2.id == user1.id) + + _userProfile2.emit(user2) + + val id = MatchRepository.getAllMatches().count() + val match = Match(id, user1, user2) + + MatchRepository.createMatch(match) + _match.emit(match) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/RegisterViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/RegisterViewModel.kt new file mode 100644 index 0000000..3f2f384 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/RegisterViewModel.kt @@ -0,0 +1,50 @@ +package com.krunal.demo.navigation.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.krunal.demo.R +import com.krunal.demo.navigation.data.models.Credential +import com.krunal.demo.navigation.data.models.RegisterDetail +import com.krunal.demo.navigation.data.models.UserProfile +import com.krunal.demo.navigation.data.repositories.UserProfileRepository +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class RegisterViewModel : ViewModel() { + + val registerDetail: MutableStateFlow = + MutableStateFlow(RegisterDetail()) + + private val _userProfile: MutableStateFlow = MutableStateFlow(null) + val userProfile: StateFlow = _userProfile + + init { + setupInitialData() + } + + private fun setupInitialData() { + viewModelScope.launch { + val userDetail = UserProfileRepository.getCurrentUser() ?: return@launch + + registerDetail.emit(RegisterDetail(userDetail.name, userDetail.credential.email, userDetail.credential.password)) + _userProfile.emit(userDetail) + } + } + + fun saveUser() { + viewModelScope.launch { + registerDetail.value.let { details -> + val userProfile = UserProfile( + 1, + details.username, + Credential(details.email, details.password), + R.drawable.avatar_5_raster + ) + + UserProfileRepository.setCurrentUser(userProfile) + _userProfile.emit(userProfile) + } + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/TitleScreenViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/TitleScreenViewModel.kt new file mode 100644 index 0000000..84b4790 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/TitleScreenViewModel.kt @@ -0,0 +1,25 @@ +package com.krunal.demo.navigation.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.krunal.demo.navigation.data.models.UserProfile +import com.krunal.demo.navigation.data.repositories.UserProfileRepository +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class TitleScreenViewModel : ViewModel() { + + private val _userProfile: MutableStateFlow = MutableStateFlow(null) + val userProfile: StateFlow = _userProfile + + init { + setupInitialData() + } + + private fun setupInitialData() { + viewModelScope.launch { + _userProfile.emit(UserProfileRepository.getCurrentUser()) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/TriviaGameViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/TriviaGameViewModel.kt new file mode 100644 index 0000000..a81d945 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/TriviaGameViewModel.kt @@ -0,0 +1,25 @@ +package com.krunal.demo.navigation.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.krunal.demo.navigation.data.models.UserProfile +import com.krunal.demo.navigation.data.repositories.UserProfileRepository +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class TriviaGameViewModel : ViewModel() { + + private val _userProfiles: MutableStateFlow> = MutableStateFlow(emptyList()) + val userProfile: StateFlow> = _userProfiles + + init { + setupInitialData() + } + + private fun setupInitialData() { + viewModelScope.launch { + _userProfiles.emit(UserProfileRepository.getAllUserProfiles()) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/UserProfileViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/UserProfileViewModel.kt new file mode 100644 index 0000000..ce9af0b --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/navigation/ui/viewmodels/UserProfileViewModel.kt @@ -0,0 +1,22 @@ +package com.krunal.demo.navigation.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.krunal.demo.navigation.data.models.UserProfile +import com.krunal.demo.navigation.data.repositories.UserProfileRepository +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class UserProfileViewModel : ViewModel() { + + private val _userProfile: MutableStateFlow = MutableStateFlow(null) + val userProfile: StateFlow = _userProfile + + fun setUser(userId: Int) { + viewModelScope.launch { + _userProfile.emit(UserProfileRepository.getAllUserProfiles() + .firstOrNull { it.id == userId }) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/data/models/PackageDetail.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/data/models/PackageDetail.kt new file mode 100644 index 0000000..c5278ef --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/data/models/PackageDetail.kt @@ -0,0 +1,9 @@ +package com.krunal.demo.searchwebview.data.models + +import android.graphics.drawable.Drawable + +data class PackageDetail( + val name: String, + val packageName: String, + val icon: Drawable +) \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/data/repositories/PackagesRepository.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/data/repositories/PackagesRepository.kt new file mode 100644 index 0000000..553b8ac --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/data/repositories/PackagesRepository.kt @@ -0,0 +1,11 @@ +package com.krunal.demo.searchwebview.data.repositories + +import com.krunal.demo.searchwebview.data.models.PackageDetail +import com.krunal.demo.searchwebview.helpers.PackageHelper + +object PackagesRepository { + + fun getPackageDetails(): List = PackageHelper.getPackageDetails() + + fun getPackageNames(): List = PackageHelper.getPackageDetails().map { it.name } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/data/repositories/WebViewRepository.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/data/repositories/WebViewRepository.kt new file mode 100644 index 0000000..01ade6b --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/data/repositories/WebViewRepository.kt @@ -0,0 +1,23 @@ +package com.krunal.demo.searchwebview.data.repositories + +object WebViewRepository { + + private val urls = listOf( + "https://krunalpatel.me", + "https://blog.krunalpatel.me", + "https://instagram.com", + "https://facebook.com", + "https://m.facebook.com", + "https://youtube.com", + "https://shodan.io" + ) + + fun getBlockedUrls(): List = listOf( + "facebook.com", + "m.facebook.com", + "youtube.com", + "m.youtube.com" + ) + + fun getRandomUrl(): String = urls.random() +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/PackageHelper.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/PackageHelper.kt new file mode 100644 index 0000000..73e894c --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/PackageHelper.kt @@ -0,0 +1,38 @@ +package com.krunal.demo.searchwebview.helpers + +import android.content.Context +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.os.Build +import com.krunal.demo.searchwebview.data.models.PackageDetail + +object PackageHelper { + + private lateinit var packageManager: PackageManager + + private val packages: List by lazy { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + packageManager.getInstalledPackages(PackageManager.PackageInfoFlags.of(PackageManager.GET_META_DATA.toLong())) + } else { + @Suppress("DEPRECATION") packageManager.getInstalledPackages(PackageManager.GET_META_DATA) + } + } + + /** + * set the context that is being used to access the shared preferences + */ + fun initialize(context: Context) { + + packageManager = context.packageManager + } + + fun getPackageDetails(): List = packages.map { + PackageDetail( + name = it.applicationInfo.loadLabel( + packageManager + ).toString(), + packageName = it.packageName, + icon = it.applicationInfo.loadIcon(packageManager) + ) + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/SearchCountDownTimer.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/SearchCountDownTimer.kt new file mode 100644 index 0000000..443bcd1 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/SearchCountDownTimer.kt @@ -0,0 +1,12 @@ +package com.krunal.demo.searchwebview.helpers + +import android.os.CountDownTimer + +class SearchCountDownTimer(delay: Long, val onComplete: () -> Unit): CountDownTimer(delay, delay) { + override fun onTick(millisUntilFinished: Long) { + } + + override fun onFinish() { + onComplete() + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/WebClient.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/WebClient.kt new file mode 100644 index 0000000..65555a0 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/helpers/WebClient.kt @@ -0,0 +1,37 @@ +package com.krunal.demo.searchwebview.helpers + +import android.content.Intent +import android.net.Uri +import android.webkit.WebResourceRequest +import android.webkit.WebView +import android.webkit.WebViewClient +import androidx.core.net.toUri +import com.krunal.demo.R +import com.krunal.demo.searchwebview.data.repositories.WebViewRepository + +class WebClient : WebViewClient() { + + override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { + if (view == null || request == null) return true + + if ("${request.url.scheme}:" in listOf(WebView.SCHEME_MAILTO, WebView.SCHEME_TEL)) { + Intent(Intent.ACTION_VIEW, request.url.normalizeScheme()).also { intent -> + view.context.startActivity(intent) + } + return true + } + + val blocked = request.url?.host in WebViewRepository.getBlockedUrls() + if (blocked) { + val unauthorised = + view.resources.openRawResource(R.raw.unauthorised).readBytes()?.decodeToString() + ?: "" + + // https://issuetracker.google.com/issues/36915138 + // view?.loadData(unauthorised, "text/html", "charset=UTF-8") + + view.loadDataWithBaseURL(null, unauthorised, "text/html", "charset=UTF-8", null) + } + return blocked + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/activities/SearchWebActivity.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/activities/SearchWebActivity.kt new file mode 100644 index 0000000..889fa00 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/activities/SearchWebActivity.kt @@ -0,0 +1,81 @@ +package com.krunal.demo.searchwebview.ui.activities + +import android.os.Bundle +import android.util.Log +import android.view.KeyEvent +import androidx.appcompat.app.AppCompatActivity +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import androidx.navigation.NavController +import androidx.navigation.fragment.NavHostFragment +import androidx.navigation.ui.setupWithNavController +import com.krunal.demo.R +import com.krunal.demo.databinding.ActivitySearchWebBinding +import com.krunal.demo.helpers.ThemeHelper +import com.krunal.demo.searchwebview.ui.fragments.WebViewFragment +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch + +class SearchWebActivity : AppCompatActivity() { + + private lateinit var navController: NavController + private lateinit var binding: ActivitySearchWebBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivitySearchWebBinding.inflate(layoutInflater) + installSplashScreen() + setupTheme() + setContentView(binding.root) + setupUI() + } + + private fun setupTheme() { + setTheme(ThemeHelper.getThemeResource(ThemeHelper.getThemeAccent())) + } + + private fun setupUI() { + setSupportActionBar(binding.toolbar) + (supportFragmentManager.findFragmentById(R.id.navHost) as? NavHostFragment)?.let { + navController = it.navController + } + setupNavigation() + } + + private fun setupNavigation() { + binding.toolbar.setupWithNavController(navController) + binding.bottomNav.setupWithNavController(navController) + + binding.toolbar.setNavigationOnClickListener { + onBackPressedDispatcher.onBackPressed() + } + + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.CREATED) { + navController.currentBackStackEntryFlow.collectLatest { + Log.d( + "Navigation", + "current: ${navController.currentBackStackEntry?.destination?.displayName}" + ) + } + } + } + } + + + /** + * Forward [KeyEvent.KEYCODE_BACK] event to [WebViewFragment] + */ + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK) { + supportFragmentManager.fragments.firstOrNull()?.childFragmentManager?.let { navHostFragment -> + (navHostFragment.fragments.firstOrNull() as? WebViewFragment)?.let { webViewFragment -> + if (webViewFragment.onBackPressed()) return true + } + } + } + return super.onKeyDown(keyCode, event) + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/adapters/PackageDetailAdapter.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/adapters/PackageDetailAdapter.kt new file mode 100644 index 0000000..b608c42 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/adapters/PackageDetailAdapter.kt @@ -0,0 +1,73 @@ +package com.krunal.demo.searchwebview.ui.adapters + +import android.annotation.SuppressLint +import android.view.LayoutInflater +import android.view.ViewGroup +import android.widget.Filter +import android.widget.Filterable +import androidx.recyclerview.widget.RecyclerView +import com.krunal.demo.databinding.ItemPackageDetailBinding +import com.krunal.demo.searchwebview.data.models.PackageDetail + +class PackageDetailAdapter(private val onClick: (packageDetail: PackageDetail) -> Unit) : + RecyclerView.Adapter(), Filterable { + + private val filteredPackageDetails: MutableList = mutableListOf() + private val originalPackageDetails: MutableList = mutableListOf() + + class PackageDetailsViewHolder( + private val binding: ItemPackageDetailBinding, private val onClick: (packageDetail: PackageDetail) -> Unit + ) : RecyclerView.ViewHolder(binding.root) { + + fun bind(packageDetail: PackageDetail) { + binding.packageDetail = packageDetail + binding.root.setOnClickListener { + onClick(packageDetail) + } + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PackageDetailsViewHolder { + val layoutInflater = LayoutInflater.from(parent.context) + val binding = ItemPackageDetailBinding.inflate(layoutInflater, parent, false) + return PackageDetailsViewHolder(binding, onClick) + } + + override fun getItemCount(): Int = filteredPackageDetails.count() + + override fun onBindViewHolder(holder: PackageDetailsViewHolder, position: Int) { + holder.bind(filteredPackageDetails[position]) + } + + @SuppressLint("NotifyDataSetChanged") + fun submitList(list: List) { + originalPackageDetails.clear() + originalPackageDetails.addAll(list) + filteredPackageDetails.clear() + filteredPackageDetails.addAll(list) + notifyDataSetChanged() + } + + override fun getFilter(): Filter = object : Filter() { + override fun performFiltering(constraint: CharSequence?): FilterResults { + val filterString = constraint.toString().lowercase() + val filteredList = + originalPackageDetails.filter { it.name.contains(filterString, true) } + + return FilterResults().apply { + values = filteredList + count = filteredList.count() + } + } + + @SuppressLint("NotifyDataSetChanged") + @Suppress("UNCHECKED_CAST") + override fun publishResults(constraint: CharSequence?, results: FilterResults?) { + (results?.values as? List)?.let { filteredList -> + filteredPackageDetails.clear() + filteredPackageDetails.addAll(filteredList) + } + notifyDataSetChanged() + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/fragments/SearchViewFragment.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/fragments/SearchViewFragment.kt new file mode 100644 index 0000000..ff0445f --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/fragments/SearchViewFragment.kt @@ -0,0 +1,154 @@ +package com.krunal.demo.searchwebview.ui.fragments + +import android.app.SearchManager +import android.database.MatrixCursor +import android.os.Bundle +import android.provider.BaseColumns +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import androidx.appcompat.widget.SearchView +import androidx.cursoradapter.widget.SimpleCursorAdapter +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import androidx.recyclerview.widget.DividerItemDecoration +import com.krunal.demo.R +import com.krunal.demo.databinding.FragmentSearchViewBinding +import com.krunal.demo.searchwebview.ui.adapters.PackageDetailAdapter +import com.krunal.demo.searchwebview.ui.viewmodels.SearchViewModel +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch + +class SearchViewFragment : Fragment() { + + private lateinit var binding: FragmentSearchViewBinding + private val viewModel: SearchViewModel by viewModels() + private lateinit var packageDetailAdapter: PackageDetailAdapter + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentSearchViewBinding.inflate(layoutInflater, container, false) + binding.lifecycleOwner = viewLifecycleOwner + binding.viewModel = viewModel + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + setupSearchView() + setupPackageDetails() + + lifecycleScope.launch { + viewModel.query.collectLatest { query -> + filterPackageDetails(query) + } + } + } + + private fun setupSearchView() { + val from = arrayOf(SearchManager.SUGGEST_COLUMN_TEXT_1) + val to = intArrayOf(R.id.searchItemID) + val cursorAdapter = SimpleCursorAdapter( + requireContext(), + R.layout.item_search_suggestion, + null, + from, + to, + SimpleCursorAdapter.NO_SELECTION + ) + + binding.searchView.apply { + suggestionsAdapter = cursorAdapter + + setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String?): Boolean { + query?.let(viewModel::searchQuery) + return false + } + + override fun onQueryTextChange(newText: String?): Boolean { + val suggestions = viewModel.suggestions.value + val cursor = + MatrixCursor(arrayOf(BaseColumns._ID, SearchManager.SUGGEST_COLUMN_TEXT_1)) + newText?.let { text -> + suggestions.filter { it.contains(text, true) } + .forEachIndexed { index, suggestion -> + cursor.addRow(arrayOf(index, suggestion)) + } + } + suggestionsAdapter.changeCursor(cursor) + newText?.let(viewModel::searchQuery) + return true + } + }) + + setOnSuggestionListener(object : SearchView.OnSuggestionListener { + override fun onSuggestionSelect(position: Int): Boolean { + return false + } + + override fun onSuggestionClick(position: Int): Boolean { + val query = suggestionsAdapter.cursor.getString(1) + setQuery(query, false) + viewModel.searchQuery(query) + return true + } + }) + + setOnCloseListener { + viewModel.searchQuery(query.toString()) + true + } + } + } + + private fun filterPackageDetails(query: String) { + packageDetailAdapter.filter.filter(query) + } + + private fun setupPackageDetails() { + packageDetailAdapter = PackageDetailAdapter { packageDetails -> + val intent = + activity?.packageManager?.getLaunchIntentForPackage(packageDetails.packageName) + + if (intent == null) { + Toast.makeText( + requireContext(), + "can't start ${packageDetails.name} \nno intent for launch", + Toast.LENGTH_SHORT + ).show() + return@PackageDetailAdapter + } + + runCatching { + startActivity(intent) + } + } + + binding.rvPackageDetail.apply { + this.adapter = packageDetailAdapter + addItemDecoration( + DividerItemDecoration( + requireContext(), DividerItemDecoration.VERTICAL + ) + ) + } + + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.CREATED) { + viewModel.packageDetails.collectLatest { list -> + packageDetailAdapter.submitList(list) + } + } + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/fragments/WebViewFragment.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/fragments/WebViewFragment.kt new file mode 100644 index 0000000..3f01b84 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/fragments/WebViewFragment.kt @@ -0,0 +1,68 @@ +package com.krunal.demo.searchwebview.ui.fragments + +import android.annotation.SuppressLint +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import com.krunal.demo.databinding.FragmentWebViewBinding +import com.krunal.demo.searchwebview.helpers.WebClient +import com.krunal.demo.searchwebview.ui.viewmodels.WebViewViewModel +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch + +class WebViewFragment : Fragment() { + + private lateinit var binding: FragmentWebViewBinding + private val viewModel: WebViewViewModel by viewModels() + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View { + binding = FragmentWebViewBinding.inflate(layoutInflater, container, false) + binding.lifecycleOwner = viewLifecycleOwner + binding.viewModel = viewModel + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUI() + } + + private fun setupUI() { + setupWebView() + } + + @SuppressLint("SetJavaScriptEnabled") + private fun setupWebView() { + binding.webView.apply { + webViewClient = WebClient() + settings.javaScriptEnabled = true + } + + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.CREATED) { + viewModel.url.collectLatest { url -> + binding.webView.loadUrl(url) + } + } + } + } + + fun onBackPressed(): Boolean { + binding.webView.apply { + return if (canGoBack()) { + goBack() + true + } else { + false + } + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/viewmodels/SearchViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/viewmodels/SearchViewModel.kt new file mode 100644 index 0000000..9293e23 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/viewmodels/SearchViewModel.kt @@ -0,0 +1,60 @@ +package com.krunal.demo.searchwebview.ui.viewmodels + +import android.os.CountDownTimer +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.krunal.demo.searchwebview.data.models.PackageDetail +import com.krunal.demo.searchwebview.data.repositories.PackagesRepository +import com.krunal.demo.searchwebview.helpers.SearchCountDownTimer +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class SearchViewModel : ViewModel() { + + private val _suggestions: MutableStateFlow> = MutableStateFlow(emptyList()) + val suggestions: StateFlow> = _suggestions + + private val _packageDetails: MutableStateFlow> = MutableStateFlow(emptyList()) + val packageDetails: StateFlow> = _packageDetails + + private val _query: MutableStateFlow = MutableStateFlow("") + val query: StateFlow = _query + + private var job: Job? = null + private var countDownTimer: CountDownTimer? = null + + init { + setupInitialData() + } + + private fun setupInitialData() { + viewModelScope.launch { + _packageDetails.emit(PackagesRepository.getPackageDetails()) + _suggestions.emit(PackagesRepository.getPackageNames()) + } + } + + fun searchQuery(query: String) { + job?.cancel() + job = viewModelScope.launch { + delay(DELAY) + _query.emit(query) + } + } + + fun searchQueryWithCountDown(query: String) { + countDownTimer?.cancel() + countDownTimer = SearchCountDownTimer(DELAY) { + viewModelScope.launch { + _query.emit(query) + } + }.start() + } + + companion object { + private const val DELAY = 1500L + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/viewmodels/WebViewViewModel.kt b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/viewmodels/WebViewViewModel.kt new file mode 100644 index 0000000..cf4f0b8 --- /dev/null +++ b/Demo/app/src/main/java/com/krunal/demo/searchwebview/ui/viewmodels/WebViewViewModel.kt @@ -0,0 +1,24 @@ +package com.krunal.demo.searchwebview.ui.viewmodels + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.krunal.demo.searchwebview.data.repositories.WebViewRepository +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch + +class WebViewViewModel : ViewModel() { + + private val _url: MutableStateFlow = MutableStateFlow("") + val url: StateFlow = _url + + init { + loadUrl(WebViewRepository.getRandomUrl()) + } + + fun loadUrl(url: String) { + viewModelScope.launch { + _url.emit(url) + } + } +} \ No newline at end of file diff --git a/Demo/app/src/main/java/com/krunal/demo/uicomponents/ThemeFragment.kt b/Demo/app/src/main/java/com/krunal/demo/uicomponents/ThemeFragment.kt index 7fc27ed..7f21876 100644 --- a/Demo/app/src/main/java/com/krunal/demo/uicomponents/ThemeFragment.kt +++ b/Demo/app/src/main/java/com/krunal/demo/uicomponents/ThemeFragment.kt @@ -10,7 +10,7 @@ import androidx.lifecycle.lifecycleScope import com.krunal.demo.databinding.FragmentThemeBinding import com.krunal.demo.uicomponents.adapters.ThemeAdapter import com.krunal.demo.uicomponents.extentions.isDarkMode -import com.krunal.demo.uicomponents.helpers.ThemeHelper +import com.krunal.demo.helpers.ThemeHelper import kotlinx.coroutines.delay import kotlinx.coroutines.launch diff --git a/Demo/app/src/main/java/com/krunal/demo/uicomponents/utils/PreferenceKeys.kt b/Demo/app/src/main/java/com/krunal/demo/utils/PreferenceKeys.kt similarity index 56% rename from Demo/app/src/main/java/com/krunal/demo/uicomponents/utils/PreferenceKeys.kt rename to Demo/app/src/main/java/com/krunal/demo/utils/PreferenceKeys.kt index 70f4061..0ba9724 100644 --- a/Demo/app/src/main/java/com/krunal/demo/uicomponents/utils/PreferenceKeys.kt +++ b/Demo/app/src/main/java/com/krunal/demo/utils/PreferenceKeys.kt @@ -1,4 +1,4 @@ -package com.krunal.demo.uicomponents.utils +package com.krunal.demo.utils object PreferenceKeys { @@ -8,4 +8,8 @@ object PreferenceKeys { const val THEME_MODE = "theme_mode" const val ACCENT_COLOR = "accent_color" + /** + * Trivia game + */ + const val TRIVIA_USER_ID = "trivia_user_id" } diff --git a/Demo/app/src/main/res/anim/nav_slide_in_bottom.xml b/Demo/app/src/main/res/anim/nav_slide_in_bottom.xml new file mode 100644 index 0000000..80f1088 --- /dev/null +++ b/Demo/app/src/main/res/anim/nav_slide_in_bottom.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/anim/nav_slide_in_left.xml b/Demo/app/src/main/res/anim/nav_slide_in_left.xml new file mode 100644 index 0000000..00a1df4 --- /dev/null +++ b/Demo/app/src/main/res/anim/nav_slide_in_left.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/anim/nav_slide_in_right.xml b/Demo/app/src/main/res/anim/nav_slide_in_right.xml new file mode 100644 index 0000000..7a41221 --- /dev/null +++ b/Demo/app/src/main/res/anim/nav_slide_in_right.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/anim/nav_slide_in_up.xml b/Demo/app/src/main/res/anim/nav_slide_in_up.xml new file mode 100644 index 0000000..fbc0fb7 --- /dev/null +++ b/Demo/app/src/main/res/anim/nav_slide_in_up.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/anim/nav_slide_out_bottom.xml b/Demo/app/src/main/res/anim/nav_slide_out_bottom.xml new file mode 100644 index 0000000..fbc0fb7 --- /dev/null +++ b/Demo/app/src/main/res/anim/nav_slide_out_bottom.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/anim/nav_slide_out_left.xml b/Demo/app/src/main/res/anim/nav_slide_out_left.xml new file mode 100644 index 0000000..821243c --- /dev/null +++ b/Demo/app/src/main/res/anim/nav_slide_out_left.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/anim/nav_slide_out_right.xml b/Demo/app/src/main/res/anim/nav_slide_out_right.xml new file mode 100644 index 0000000..6c9825a --- /dev/null +++ b/Demo/app/src/main/res/anim/nav_slide_out_right.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/anim/nav_slide_out_up.xml b/Demo/app/src/main/res/anim/nav_slide_out_up.xml new file mode 100644 index 0000000..0f61a9e --- /dev/null +++ b/Demo/app/src/main/res/anim/nav_slide_out_up.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/drawable/avatar_10_raster.png b/Demo/app/src/main/res/drawable/avatar_10_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..f65c0b29bf961fa0b9b0200f6a568b7057cd6875 GIT binary patch literal 8332 zcmZ`;WmH>Fun)nV;tqijic_Gt2Djivio3gOD8WjLTXC0Cpm=d>k+w*2DG;DI6f15o z|M%^Ec<1ikJ+u3p+1c4SyLaZsYr~WY@o4b?005z?ih?exMgCWDuuyMW9_MvbgW({j zDF*;FB;ns%VWMa>A6;cApl+Og4@EHBsOV|}0KpId0FD3vZc$zET>!w39{||51OUXd z0RSq`ybc{n)Bu*Xy0QY`>A$C_yD|;cgX^hc>;nM2b^5QOHP|%?002y;stR)YflEjE zi%Im#1=+nLKRY@)K6cg+3onA%_Gyi$Mp&K7Qns7z{kskrZ1|`@qtWrt!O>){N1uiz zX-}fij+ch$%@4;v?M%JfnUag|h#^%>NmofJ8G+nY{q3ml8X(r0UFqtq`N+j3xQU)q z0&bKL;Ox17*r0m$0s8$|O^8;LnOaUnwlrSQMD{&Iwi!;V33o($nFII*bQVG@!JKgf ze#PrR%L)H7|2+k#BQnRV1d~1_xDmIE{7YT@fk|LNwWVr{LFXuLT($(T4Hjk8_1+Y1GO&P{pKHDAC3(9!srR!e(j@92s9LldJN@ zR=};IvW6UwqHz%tvtF!7z*yW?@*bUZzU6sFh4Jg$a+9$QQA*~&pk>Bzs3B5efGw-0 z>GNl~V(tD$`sTR)Vphu{70HPbqdY4+yF?Q=(lrqhC=25DX|RO7@gT?59j3>-GrC2~ z&08lZ@p_=qv^lO+8K0U&7uu4uvp=h-R$k4paTI}KQBadBPc41*qp`;vIg)bl=e(uv zI!C7%lU|H;Sk?1r39Zh;qOX;VmF(C)n8h6>x5iE^&@;choPrcLKQj@J2N~xi)EIiZ zXC*9B2@j#rSBfHWCJNsAE{C#RB15N|@G?P%af2+rC=>D;`7Sj6Lk(GP4+TH#!p@xtE1mKNhb*TOGJcX334b93AO ziAc0bYzdV@B>RfvO5gmE4qdbK@{-zxC{i+@U45|jic!x>^xeYmc-g6p<4K>Uo<*d` zP5H(hX8Q~HmoC*?Y~ovja%aYP(Q;EjIs%v1ToT%z=a7AnN*hh-X_4H#?8Iv(4(-gx zQ(OvSN1$kq{~$FPO6sDf&G0+;&Ii+;E`{1m!vED_=D?WO!hGQTXHhO02Wq%)X^H;e zAX;T)ULHra!N}6jPkOgP0c9uclx7pB%q(Kp{OJVJ9*@smp>TV_D41fb{68gCxJtW} zY$^FeFit~QREjQfzEx3(m*Yt7`!SvLdSyO}+E?tqbUZzq;qp+msM%RDdiH0&dY25t z4MxTvrgc1Vb{XmMQk7T-hlYI1N-c;%;PO;)x#Ci!r6XGG8%rA-tYsM1N^*+TGVa@N zH2)gP`zL`!Xu}PyiB#X>y@T+U6T`oE7doP0D^XaKnA~)c?awHfP}yK9;EVF_|044G z4cfR<3P`Gg$=@mBi!v8DXxBSLxhq+s7H=vNE>dWPau}R=H+Gw>@XKAd8TU55U7==~ zW;ps(h^M=$7k$DjE;3(1sCuaKc(P+#nuugeu*@@bdQSbMOzQCTRNYDEawYEv9n^Fr zZ~P^q(+5M|T+9Xh{SGPrdL<<}G3Z5aI^XZ*Nn$BOY#WYB3R_CCnLv)V{)B zZuO#XlLk_4%#TKK16t3A_4N6rdD(RrBrkR=isO zEz~OJ<|fFyoxZ|pMMq(c%A`;F7m(;{x1JDNfmZD+J2$uY@81)e)Dr2cAxPxkdqz#= zN^sJ==H_cNGBaZ>oIo8*vc=lWA2e3w6uOBP{<8-uc#EX|Ul6s;wc_ zE{PVVzH>=o5rdq(A6rJIrndh6msrmT2a~px5LQK)^Z=0URd=w+Q-EU&t!Z!g``KAP zafXn?l9kmuJ;iTo<)c$!Otfk0 z>G^(k_A+OTl5-65RwZ21*r*5^Y_sy9@ z`VWdw3nitl+-FeaT`J06<+|Ul1nH#@(KjVWEPc+@EOT$sh}G$hBT`V&bYzx=|A}PaV-UW2(igf(j$Pg=eQ@t}bY?vh z0x%yvZ|)QL;De{`M za*x$y+R3$7Y#O^+%nA6NN)cukdL4d!*M|3PbEbz8PI0DZ_)|zgO)^D5GrUbsE%3@L zD~<+#+`|fTW|n8ut0pHrQuoqN5{ih(-zL4J2xt=dVK7+ zB%d2VK|A?@N2&4M@Z;X&hK~J%86OQ%pP>W;ImjH)-Bksa|8|}sAa5@p6neFCZ3}Lo zJc%MURbw*?q+v(ElVmP!nlyP@f$r{V()aw3wndU(%Urkp*r!IMZ)@QW6T#xQ?>V4- z(fHCeHNQmoGl9aisXjZt|L6>ZefmY|jo+5Tvv_Yl)$V=Y`Qr1~rCdvSglBw+@lWzX z)+}tsvFjOhY?{v^(Vv!90!>6XG&3tIA-n>lViFUczs2imcD>8WH>FP6Kz1_4Rv0Xm zy^+AjM$EHyvptR7g6NdRF*3j8$SPgdYapHU%Ye&ew2@WxZw^-k-KH291ldwbVRlP& zTWh4xW7x1+wsWH|`$O2s&o~mfZJ$9;wuY$!134mMuWDU_Q3m9AHv6*Q2siL3N2~Oi z#w|w*{p&o`_furL?Gz=Sboa=BhLU<96#||?@zO1hrGfP1dj=BnuNpBLrG9fnrKU1^ z?;GPG;}iE=LHAg>8y#9j#-$@wK~9IZ>^8dZ%+FN9$A&-cL^NjqrC*3c%-=E9L%KzU z)5#I{7`{oeNJiT5?6XNmWPTtO4x@A)dw$2*K_pl*+%?8SvRwsgsN|85zMlfp$-^E} z>a*6Fa(-_v%K^%52t3gy`m22VXpbel(*{4Q`BdQelw?*=-}$AAjO)1hcohJC_77 zEpG0C79nQ3gDfjq(Sv3}IjzoqvNnOqLPA8EI4~xp#fJ;S_xPvNR72fBx}>9N&t5!B zPLcUHo0Y1Z1oJx7cAx*{!4AA;ztTG0v5*>AZ~v5tc#c*&N8CX2c{Wvae3zvtoj+IW z^xo#&Xd57-Kadiw`nZ3f9JIdd>Q6bnc&J zG+**K*!0p=AFmhL9{((|*?XUAs=Coh@|n!LW3Iq;kfLFBkzrOifq#FAF?M5IstkUSt?-Q zi*)jf>R9`mGcx?_A?Y}fRdMpVmWAj~R^_ui(WY_lhWK=ajZ<3EWL*}7cynGe!ITsF zkJN?4uL3P_&{yWd9OUA}mT|VKV20+$!Ox^it;0&SgBR9mHQyjD71Q&UnY#JD5!)%o zJ&)1oV6vf;k~O#RY&#srZjT&Rd}Eje=jm!R={L0ymy;O6#RstzBql^ar8E zW<`jbWi~Qcnr9ef6VT@_SAx!RzgLxf*16vMb{T{z#9mww3!^Rbsxby8BSWOibH)}Y zIJ=%kA>}#UF1TSFqZK>_5v~OeO!=%b*vvE@jbY0J|3=?hh6Ewt*b^xZMO^w57)_+$sNTEs4EaYKJ%sM3DxDIc=C!QDc zvL_r~&ipK*{36=YU3^TBm?H4-(W&vn*WHhj0dAeQ-@GJWsk`xV8@2~_D>Y2@`%8ie z-0CEr>kc$TrQMJEsQ-kOV;}U6;{7C-=dfzVXx7s<#bEy?8&sr?nKQ3df4Yxd6Ih@? z{YGQT*2(?N1VjEtzr5JlBI5RZb0G@4HDB90Y|{R%l8dmePQ<9b*{Rh`(!!t5?;li+ zLrk)8Yof~O;C`L`g+FkHIiD~iIN++&r6l}c0za-`i+`uuJajo-Z1rxmU#7v{?4nNxF9yC52CjXes!4iBhQHB@PM z$d#&`_dcNVV?i)H6-+>`=LE51*_mX+@JL&8sAA%F75dcBzBkD~wHDO-Pf~Z!?^}kj@p%8o@ZUJ<5^}iIC3`B@dfIEu+yR~WD#%i;SAh?I z*!B0_7$pUU4GV+f2K46LnCt@55B(vDZ1X?_)1>tvO~ z&M4j70;1K|SB3BtJXI1~nuLVBv--3gB$$a_O=Q&$QZB+l*O-~LH}xRE{_3VunRb6+ z(IY$TFBCg#f96;_Ov z;M^n`v+}t^&+9&+E2e^P0?L6U(rQNtZTF$XL^zCej@Uoo8v+9jr?fKxmgt~>t1c0Z z80ZksqhlG6!9Gm+Jj;8{Z=k@2yhGk>id7BHjE~~k*2uM4PbetMYTrbtFliRiz(+rJ z+{D-(d9eR_K5%H;2pou=%3G?cjpv1aRMydOi@B_z8+(>h8@X2w}xS(~%NSb>MJt{~bo{?Zmhbd899)>ZFPS>G^!2Lizo{GBB%B@kNh^8S#x4si#Y zJSc}_m(Xw*YNg3DK36gOfEIZ&CX_E5tA@_K4)Qu>-*Ti1=vf}l0yB8t+J&(>xCVKZkX#i>foL0~mwyt5ed zH$D^^t|#MQFQV~kRu_hV)gNP<^mSYNw`nRK+FnlX9_{5B&xbYRH^U#2o#pDteYu8+ zL9+t#3kBMY%qD%|qXxcK>-LbE;15Q4=q%WQk9%Y@q8

*8DmQ%@iI}{cf-dMsl7>0^4(`~UEe+8=fSbz^FyVE@KP~m!%>&qS;&&HC= zAI`T>d{Khb{J+Ih*-|qcR?6E9gmS2i2p;MXW3g9^(~wv0MMDMEn8lY85D7UETSV4j zKxvP;KQ#sq@-u&EcHFNfO;Ta7n{}2yF%1urUsYuDG#isczd32J<*%SgpOv-PO4|9e zBs{2pX(3Do8t1bXiL)AdBnYu5{`k&`@DrC$Q}rn z2Ih0?ViA;{3)$|HZ^=yhicx6cfu#OwK(WP^Ft`~$s5Ih^@$LkWftm=VwJ`Lfm}R=4 z5Jz8A+@)e77Eh7=u}bk;u_y|fBTZt-9`BnY#e!mkP@c2m!qmE(l>|vTu&>b9-i3R5 zrtYf?lAr`_(jh-6^vD)lEDDpOutOrVhV+hhn?AL7C{?Od3>e=1_&oxXlaT*Y`XEi3 zmLkB3piNKV8}LoRnmOMu%;}kw645Aw!*X^FEn9hw#?W7r?LJ>%LP_3$=wrN_woC^) zPY3fZu%i|PnhhOkdgDH_>*P?Bg5N<=jLIW%m*Li`Zls0(Rgm>ls>i>Kr1X5Q^787S zEZ*R@olFER0~(5_E&t!X1<&?<;gB`zwbe`0;^IS;k+g}jw^P+sNJS9p=diT{knHG+2NiQmt?@o@& z8m}z|L?7}_x!`&vP|{2D@2MIU%=!%EPIfm?N$MF~9r{l4;4-}?-5>Y~ z^VK?}?Byyn_ojZgMDEJFOHhJh6}iq#)jGarB6?3xPP{v|?1*+8sU1?oCtREgDqv^0 zjK9SA#Psf=^(7C|?M2@y@=W}GBkbBk=1surqz4AAFpTtV!elnEcfJkyk{i?O%le+e zJr;)0(n&u>;DcmdC($hBwRCzo5t&oq+2TTh=n_>K?y+g)m6ohH+O)B#P;JllIsXSN zt0Hl!V1{~33|ZOX$N;|ndac1>u1T+c5@rl)teM=CBpIwh1bac^h7q+Cmggz>{$%*` zt350!vZY@olFX0M@l>a3m!kdjT5LaTcCn=%bfnqJ=rYmS2`LO>B_&>RU9sNx}MuS znN_yrR9|3wR}F`b9X&qsT#wOsnqI8`rQ`tRBRqO=EN&oRL6d*-VrA-@Y&;j!pR?BP?8e0k8{V zqnE&2yAk|yoO1M3u{cDc-GRsVfB`F5hOuKS`u9!<4kOpXXo$v1gmG=aMQ}B}(W`Ct z&fI`Q%C*=5q5CGP^$%3cQpKepUp61)<`uHsqCaDHJuX172Z2q6lnIqDuK=a;LxBGC zSC88Ufm@{y#%o9AWl2(4YqvI{z6eon@Y=IMxc#%lCra}$eA@i=)qn0oS)OHpr&Gni zeu=Q$PsTmO(ZKQEN0)cXjQzgLU)2<>;D>$D#K^YZXstTmokiAN zbc=y0g8NF3{v9GxEZovwim|kl^DCrbrSf?YHI}RE_v7-upYW(6)PPrrs51!=4oTA#ukmKYL*k+mN;nD*xrTT^$ED^rj@ht z9p_3HT?|~$5b1E--y0Mju~UFfs)L4UYN8j=uWLgf4TyIDS3CSI%`gGm)Tg?cv2W>< zOs%;4Q1cV?MW1noUNd%`V;h+pR`-C0b_L3o=I`30oIhA=lv-k7l52k&SnI(u6d9K7 z$@f*%U@A`$SNYD7=2oBFnqXv}d#b5r&>0FIIx`M@0*3|?&8ZF0(U_;Lek!ufw$6MbQ3K{v1QM+ zUo}Yy#^;ax`c5xv-mSLo(G$DC?Wd>xV%1JkzAxG!eJzOk&6J!GHV7y7CZ93Aaa-cU<_WE%;y zrk($}k;^f)iY0XP_dO56!}3;u!}=*(;5OP251x{GpW%4_#M-gDA700c5IO&dm!3cA zVGw00AL{A0hAu4CO0}ulloQ%)bNuN5k|~?d{bigj1u1=k)1t2^m%m%R4l)%?Z~!k7 zd652+pe6qpuDB9M$KbcI6^YI-XwLqeg{26tSJ+RyMjx8yfpjG%no!xG;Si4pssZb{ z?C_^OY;GC2>)-FSy$Hnyg<SfmT=@cDez2)OK!*XNY;U1^D!xP(jLGc=?GUu>GQl)&2Hv^99Kj1IV(JNJa{`6_p!p#c6|^x9y&d zmuHW(QCWlM-CrPRxjZbaO(9Jnl&_zjpZw4Z&U5nD8aB}JY#J9;q1Hvi3~j`VxPmn2 zdF?7|8tooYJY4KGh>9{m(K@kRB0PbwYQ!&Q{zd9f06RXbO$HpF;4Zv&eL}v?)S703 zR=vH^()wsu1HkhepT+{W7u)c^$eU%ceu7v^~( zqW?lrT;QcR{|heu7vlW*LpsEN{sDoO*`5%Lap9cT{ literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/avatar_11_raster.png b/Demo/app/src/main/res/drawable/avatar_11_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..18b842b89ec815ac469b3be6405eddc031b17573 GIT binary patch literal 8158 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 literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/avatar_14_raster.png b/Demo/app/src/main/res/drawable/avatar_14_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7a8713abbfb51743f68ab15d67e51656ae107d GIT binary patch literal 7070 zcmb7pWmHsM`0v0V2!comL+1-a4?~JbcQYuG(p{2+w313mw?m4ENOz4O-60)U`fp#oG zAgN3ci1uY}i@r3_KxnP0ssy_IcjUL1rT`S;mukk|AkaIfe-~c0T`e52>aMON|I~kB zf7!*=Y&&@M_|SWlbYSg>3sJ0OZrEtP|Mg>XMz1?_&18v1~m zOz$)jOucol)Nx8e{+`D~$M(G0f^d0VFM;_J%`#+v6QX6nWM6qVkcxgwkA z(!s)t@5_f)}QpP^heeH(!}>4F5Azii_ub}ZjR8;fjLq{XtOWNyCkX+L8;Tz6w9O^ z1!e|?q~@A)X7DA~#u}x!pEOYp{*ng-U5Q2^+7CoM+k8#-@0g6@C$uW`EwYp5L?kH| zKZ%pi6`NyVqun4g7hhcwawZPE2QgD= zyq=**Xw_-Q%A{Q;I@V!cwv%;L#S5>Ud%Quk(`>0O7A(q(aw)iw%ewybn{lec1l;N- z1i43ajT@_|eiaeB;r&%KCL$^sZa0q*VHW;R6~U=m=58t7sZoE!oRfB_?}CGj@fB#x zHFE9FI9}TY$cq`xfE2^0wBkC@!_%9RVmI(`EV16C))Nv0m@A(_TD!LWd%(7v_|R&> zK7T-zMCDO6kh-&bVggazCx|Z5>kQq}uCeh#_wkG8aQ&r+|Y%Txt zrF~#w#?+^+A~QSV+G^Y~A3)4o1ht9F5`vpa^0DoS5L*tXzF~E(ZNSoKmfxnNx2hrU zZuk=(S`miht3(N%OgCFt`CWP>4L#(H31-KOODkB(wF$xIq<%ik_kHP_oqZL;rD9_Y z9@e_?{c47L)~oVitvD!#(E)y!3S7b(C-uc0$3kP+5xHor%5(KSs`4tAKaSW~s9n3= zH@2KMG|yWklxUGTb>Zj%XISt@>ZUw_1HtR(h7zj^46+!Ck)n_gad(G2)05jI6_~yPdaWa(Fy8rQm|vsF!eR9g+^*kbtlRt0?$` zwp*nr>z=)eX7KLRF1ab95*zn|k(BWB)?YL|y6|n_T~(#2+eZ;p36buadYq&zb}B9! zOHBl~Un2$!H~9bjA`gi^t7uGmaF8e}Pd-xBg5@3-XnTD)3xC+*reW+Kl7(8iCRbYc zh07Y_KZW&gpxP7vVNO=_Cy?6o5N@qLa$!Ug7Z`ro)oF7%DcjW$zj1r`t0HL87Dw8s=fE=HGD!fWGw$JJ1w32>f=Sh{J&eytTr3O z-UfBCr~>KhXC_6c?oUCJJx>q_Fh15Y?PRF4$99{%%4f5BWX$bP;l9Ci(C`@Bp@;rU zcVYd&l=#}tf!@7NIn$nE%^+KNsKC5_-o4n{_D{2-7nF))<%0?!`toB=9wDmr2 zHth5ZDmYmSX&v`w;7_CEGpr)}m8;J(es_6I_DE7@k+I6j%%R^csM9L$SyTV+ zg8LZ_eb;EvA{w7$qMpP_yQd!ObM=2$()|dADot{RDR8RcLzUkA-w$vmxguAs28%Z~ z1D5hCI&}TLwLx((iTG-gf2!?SYq(>+OlY}|kGO);@I1Dh+P?8+`4{Pu+-d3-qQI1< z2o5IoyMplE;OIW5bh5`*CsMeP>*rm<7Y2Jr|7sCE$QM1)b&R`pE4z~j2B(#U$_1}y zz)wPK;bFbffB&2~7`NcaoJ%`mgwq+%k_o_3(rH;1n>Rh7;SEtKf)hyt!%5V=VRm$c zgu%ecuUS;D4EcSu=iqp~*XiKuMtc3N@mpDb9m*$3)7-3O+r6iG-`L1YNPD4OtkF}VOW` z$oP@6dq8>t-*f0NwbSakk-28eQ&qltJW)bdQ}6RGsplW^9D-`1?6y~AW&Xx7LHMybh)G?xvzAhO1{nQ#T!KWEH=BOu!q6WM1XiojrF~Z@1l?1vIoJHY zkNMU4(O4Z`p_W)UWo>I`g=NzgO!D`XI|lAu9K1tl)v|Wte>^48j2p&pU>YzE=YFkE zO8S@d;Zm`tS22PXZ6>(hth=(lRPv)Zmi>HSRGBnUGK>DL&T|l%SzF8ZNWP)004f7T zIxgMkReO7FugZw?g<u!zadPwV zH$uWEUu7h8Wl-@v`A-SPArM|4$v`%n6g4MX>M4gt$v{s5s(MRa{JSvWXLkNd&YhxF zdokr>qXy8HGIA?teE%JvhePQd7QB$2Ii+yTSsDXbmdtmcg$8@ux-=i*No~CJ^?u3% zQrb#E5gB7mUjd-eq`}@&jYhXmg@D&I2@@g?&b?W|O^6*4Y#DGV6=xh!uk!Y)@!qdG`dMGTlqO}~R#f$GqI$iz? zPBiDCq0dh$^9SYCplk&V6?JisxAw0aN!z_=WY|IpK!g8Ov-B>`HMiK;mO5xBGM1E< zQ0D19l_bn$Gtbu-lFKN0h#mSeQ^-yd`6?3VAH=hJ9}9mKQ;Y7}O!HD{jk#-R&j~FY zmFY_N2;Fw^;U-KE*L;Ff5xF^Zn|v0R{H49I(f9Lb>55IVm!`U*cF=@|YW|dL`NpRN z4_HZE4G+vMoj<0w*lQ#MP+MRp9bO%88?SV>s#rOOjkWn?mD677UGa2Z_nfrduH5?+ zTxT~$DWj$jN_!K3MSpAg2~RH};%W zELbiKJ?4GIJ-aP=2ku?7t3QG1wumkvt?0dbw&QPDOH|AsrXg?Vl58sRVfTK&+TFzZ z$zG=*57upKPF^wX@nyhEP*KzQlDSH64pdV!{CsL<&}i-167bK7X~dKv_gZmI|l* z9+B3VgQ5#%m}HP+7Il+GzKS3!-cG>PEQybQ7f@pKf=fj zNK8i9C02spHs_2DE?F(57W`l=&`-f^0(-%O7Ph!9#(zFAtlo0&_r^rPR5nIW5*Bj+aok;nX@atmIef#Rx zbCK;DMh;4Jw5#s(C0wXbH4OQ%V&lJ^jKLYs7bN6{Ql!l-%<^Riqwjz|`gN}Rl}Z_I z;cp~WQ-a0br9}7XeGZ&hdUZ=L8+=IBZfD?i#ux*atgv!Udkd^+dukxrC}EllcZ+pQ ztI&{4x8kQ%uI(m8`1R2P;-4R&h8d%tzm_vR7rQCDg5e9vm`xis(1qhwe=G`j6uBbz z#!Ne~kW?oy(;548^1nyvoMBh_)L$xxy>?Z{hSZm?^!RkgJ&UneC?y(fWZcx>we-vh zvHx259WaXO(odhfBRB%Z87{T^#-F8mPf`a{+8r&ieJ&XQTys?ikrztnN+M5;P0sX* z*QkJ53;696A`?Y$6xLGenfP+^+95_^n_MPYKUG49O4%#xNkSVu8gM``&&F3jyD*XR z?<-!@Nn8*m@lQ78q#oRoSgxVILQ@W0bjPNSo&#vX2U>XU#4kW&k%9wky5wc9Iu!jr zBUI|3tKT>6_e4K?bqqH^`}G%cHCiBj9|)?*8yaB(BeH3qA73!y?rbwZnMf_-mPse5 zN}PFa?=(|F6LGL2`zT=j7ofqmmB!38`@h}CI=;3BE4j&O3W2P6d$nh2#!{ntelGHM zTat>?|Ii>PK9Unqf@eJ7*qyljp*vSCD2lamX!EbLPqes^^%6i71fMZ4w zeogr8v!rm*K}k3MDSl1zPFBbqH?d_LZdC39H%?0W{i$Y(l9jlO>*YUfC9I_05%QO% z?7-|Q;ViefuYeCJg4RsQ@+?0N=y=AG_HFE+6*U(=D%H7JUMl$YOCZ6Qq#JjVrJ92B znx_0C@N`Ng+r=s5_;h}M;Q-6IH+IFj{Jc-ta5C){qkIF^EeY2oR{7FH1;slT>URnK7mxM}|~4?mu?0vR7p08>dX8QACo z7;^%A8OPGPGwv(mLukPbOi4qfqG2lf0@{OXn$etiac}Xwnql>Lq~VP9gGxZYcnlyr zNPfA@<+v~!r61*2u4a1QLP``sgQS~j&rFKQYUhV%^MxXd8p!4;#81yDHwyO7c{`O~ zb{9-+sg?R>{ZopMu=QFXc)H|vmKKO$t~n;D+J3TUOV-X&BDMziMHesuBLor$5@m_) z!taHKGXD*YT`B>cw^rEwGe4t+La#`G*KYgvES3Pq^()19FKAFjF0d3O_Sr@~gHsF; zuj216E2CfD{_Ep3qq^O{?GVg?w9U~b@1o7HNIt?FwF5R<5^V3Y2FGE0`Gk=LK0=}yb;}o&D-Ax zs-D1<8W`T=>Y4Dn%tj6VL=qO?(ozvyviv4e7=2Qoy};nvkj>%4xP99Ld}L7TMgQI= zp)#mH{Sop6eoM;&tPArEn69+6Q-LSD!V85j=yY2kW&hzx6WCZYp_j*lUcApceCTp#U|;ucW3}zc&*wTmF#B53f$3qrmLNA$`jY}1 z2=%+EQij||o$}d-BTJv+2e3lI8vA@#pTg+CNx}pwzf`kzsMnR)bRg^JH!C+QvF!L2 ztrjX&&hfor+cF;`dp10w;lQelZCS>g}q<7t(f^p*JT zej<|bT`k%PoCc!|AN*8e%Y%NOZGTBuYp}cjV>!JLN5p|E?_6DvEPdl%pT#c!zEnTu z#v)fo3B+=L!A~2reV3cmi4d>;1)8@*b>za4Kt=~L`Ia5OXhJ2liMXsK@eA{1=(LRN z&Z=n*cHuDbk7;P-h|6sI>2$>4xD)M56R#VG+yrw_E1UmO@F%i7Xd#oIOHIw}JofV? za|J6po*kd5ATYQguMa_v|52~nOs(NgY`ES380n(~fSoS}%IW9gPn z=Plt& z`LNE&m$5-QqvdewtwQ08iiTDXKgRI$@0;ZD*ouf1@dXW6l?(8GVOtK8M!fg+8~4tFE~%-CIm=M~cuvS^06fK6k5zT8X~nL_UE*vk13z zf@cvjvXM4~hs7P=v;Mj1BxZ+y1C@q{kHMDLl8YD+ zjgdD~_G?|+;jc1g;yG#2CDd~y^n$ob7R;-wYiU#m~0NkE0D(m>JU6LcjG@b%q z7ImtbM*K+AxAd;_V!c`UH$=Je{OWj!!F+v4kIg1&^Pk?c;1{7Q zn^c?O2euvSj@_SH9<$ow-#Grh@!6Nr+~+F)s>pGKy!1*x-AITiTonC5c;ITZ^n&F# zd8cgulmmMR#<_pY?BvzCS^snlSH@w<%g1riWF?nJt5%@;fDanRerT45XSj?`2ftY_ z_E&^k!S@l6uzBKq%>&p}T{ptcpoa^j6P{>@~G-|c(Z>Piw>4sIIrKCu~qfia+ zgH#NzET)WNLl0x)Ta=fd`Mhx# zkfy%V_Tm(Rg7ydhOhi{NlCjAQBKD@OL+&z=^_VPUDrxp#tTKAh{Pu>u4{y7JHIoPn zv0PJ)VnqhydG$kuN#dx4j$Q=dl8a`upZzde zGxc$&1^$5QABlBAY(F2wePrx1lOkxiqYk<=&V;utFrB>-piN`jr-cuNsT6f5u2}js zzvw0}0!tUp@e${vmFTI0CBsPO9K}8bPLju^5a{`28!rL7oJWKfBB*~() zXhZZK*ERaDI!Huk_kbDQcU%+`>1>Pv+W;a>%bMfN4h1H?_qw0R6wZ+oTlQ`z5~m}o zW?c3Bau3$@3M)Co=q`#W^tPCHr%#`x+e)$1P@+jidh?4CJxo+gyh{F^>CBH9=T`JWD{ z(?0SA44iv%V;35 zvQUZah8(xp0Ke2!*%-OP+MfxZq}2=)F((6j_oePsn-+^THi*aA8V?r$&Ti!c zFz~dLTYvVl-}*=R_!vLnFTEa*a*waA=lMT9y^#3rsV%z)%1a9i?|bH>0pKB2PI23- zr{5InwKQoQSmtht3~&=yFAgYNf!|U8`6wIt*joA6N!fVW0R;#S6BZMIi3AzS@UZtmT6x)lkVvGUle>$z cjnzv#K@Ts7oC9fkfC;3otfTZ*!Sc=j0@prJzyJUM literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/avatar_15_raster.png b/Demo/app/src/main/res/drawable/avatar_15_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..2860447ea5bf3d8977d33ebc8f82a580abf60441 GIT binary patch literal 10125 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�R4e z>J(P~)|gh89+mFP8DrifcnY{AY0aNQS9vGRuuYx_rm5e*d|rdI5K;~YqX8lN3)I1S zGK}}(w(Wqh57yN}%3F0o*)hPH1 zNov^sdkVOtT5X|8(GEFKvc!bc(w2utoV*h91*j+FDr8)kv~TxrOn)~LR7AXUx(_dWZ-z-1^ezYsXZo8nynO&q_UMGR+c?_tXxL0h&BHWuj7_h*r^;sT~JwqLm0)Ae7*zNx*BS+ zG0ibO3)57~EaemO-wDypgd7YX%pr}PJEMfKmdgC_V9-H%@_08Qn3D1MHij zRoI~86*(RJl%kytThbF!I5OkLMy$lsX!JN>?E<)X0`0%EN8#xmr=Q$cmpeG9zW~~g z#Kl2L@3_&F<~LRIW$gsQnR;l=-M#kK9B-f)&j^eV)xCbzBoQq!27u*LkcAAY_ZF6z z5Y^MVod_bLIF!F5>iQJpnf&j}`xc!c7AJjg&x%bsbPAOdZ9{d+(oLp+YH4%%TIWRItC#7$Nfd5NivF z4amyP23EoG@$d?A@(6MA3hVIlgZKnNJiP2YydWMPT@i$V|8Ib!v-L+?pZ|FPvrVfn yYyjzh2-?oJ5HAZi8#pg7FRqVHpWUr2Tx__U-R!c@#K>Ts;FRSx%Mzx*G|*-112 literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/avatar_16_raster.png b/Demo/app/src/main/res/drawable/avatar_16_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..52ee27ad821d437fa0ea80572fff6031d1dc9c70 GIT binary patch literal 8128 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 P1g9vgCQ~hC68wJvBNJ!= literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/avatar_3_raster.png b/Demo/app/src/main/res/drawable/avatar_3_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..8ecc7fbf96b5f1d1e4e061cdb957ed96f240f8bf GIT binary patch literal 9543 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 D*(EEQ literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/avatar_4_raster.png b/Demo/app/src/main/res/drawable/avatar_4_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..a04de0ac65f41d46b6feae4317d2b4940b85c5dc GIT binary patch literal 9746 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 F{|`Fsu3G>A literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/avatar_5_raster.png b/Demo/app/src/main/res/drawable/avatar_5_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ebf8ca9f66f2e31d3fd14122a7d87d0c25f4d8 GIT binary patch literal 10808 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 Vj#;M?)F>i=ih`zmjhq$ye*h-}y}bYc literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/avatar_6_raster.png b/Demo/app/src/main/res/drawable/avatar_6_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..410f7ee2d569df3a80569e5b5d719dbf03592d66 GIT binary patch literal 10665 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 literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/avatar_7_raster.png b/Demo/app/src/main/res/drawable/avatar_7_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..42df954b6aed4af5e3f36f2cf2240127d36e2cff GIT binary patch literal 9875 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

-XnpjjjKb;op@_6TLsS&SV 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�Q_C&?tVAZf74EdV^3@JBBVVla4luG`_YkW((M4r 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 literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/button_press.xml b/Demo/app/src/main/res/drawable/button_press.xml new file mode 100644 index 0000000..86b4589 --- /dev/null +++ b/Demo/app/src/main/res/drawable/button_press.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Demo/app/src/main/res/drawable/button_press_dark.xml b/Demo/app/src/main/res/drawable/button_press_dark.xml new file mode 100644 index 0000000..c874f22 --- /dev/null +++ b/Demo/app/src/main/res/drawable/button_press_dark.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/Demo/app/src/main/res/drawable/circle.xml b/Demo/app/src/main/res/drawable/circle.xml new file mode 100644 index 0000000..24ee8e0 --- /dev/null +++ b/Demo/app/src/main/res/drawable/circle.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/Demo/app/src/main/res/drawable/dark_frame.xml b/Demo/app/src/main/res/drawable/dark_frame.xml new file mode 100644 index 0000000..118891e --- /dev/null +++ b/Demo/app/src/main/res/drawable/dark_frame.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/drawable/ic_arrow_outward.xml b/Demo/app/src/main/res/drawable/ic_arrow_outward.xml new file mode 100644 index 0000000..d0a2177 --- /dev/null +++ b/Demo/app/src/main/res/drawable/ic_arrow_outward.xml @@ -0,0 +1,5 @@ + + + diff --git a/Demo/app/src/main/res/drawable/ic_feedback.xml b/Demo/app/src/main/res/drawable/ic_feedback.xml new file mode 100644 index 0000000..a14523a --- /dev/null +++ b/Demo/app/src/main/res/drawable/ic_feedback.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/Demo/app/src/main/res/drawable/ic_home.xml b/Demo/app/src/main/res/drawable/ic_home.xml index 4c5e854..f8d24e9 100644 --- a/Demo/app/src/main/res/drawable/ic_home.xml +++ b/Demo/app/src/main/res/drawable/ic_home.xml @@ -1,5 +1,11 @@ - - + + + + diff --git a/Demo/app/src/main/res/drawable/ic_list.xml b/Demo/app/src/main/res/drawable/ic_list.xml index 2610659..05526e8 100644 --- a/Demo/app/src/main/res/drawable/ic_list.xml +++ b/Demo/app/src/main/res/drawable/ic_list.xml @@ -1,5 +1,11 @@ - - + + + + diff --git a/Demo/app/src/main/res/drawable/ic_termux.xml b/Demo/app/src/main/res/drawable/ic_termux.xml new file mode 100644 index 0000000..472e1f8 --- /dev/null +++ b/Demo/app/src/main/res/drawable/ic_termux.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/drawable/ic_web.xml b/Demo/app/src/main/res/drawable/ic_web.xml new file mode 100644 index 0000000..fa17c74 --- /dev/null +++ b/Demo/app/src/main/res/drawable/ic_web.xml @@ -0,0 +1,4 @@ + + + diff --git a/Demo/app/src/main/res/drawable/icon_category_leaderboard_raster.png b/Demo/app/src/main/res/drawable/icon_category_leaderboard_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..47db9798e3b3b1d7aefa81c11db88475470701b3 GIT binary patch literal 18218 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 Nm#?T-Ub4UU{{hw=AtL|) literal 0 HcmV?d00001 diff --git a/Demo/app/src/main/res/drawable/image_category_entertainment_raster.png b/Demo/app/src/main/res/drawable/image_category_entertainment_raster.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6cc5263fb866c67be3220a3245dfc6d0113d08 GIT binary patch literal 67696 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 _Q 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 + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/drawable/mask.xml b/Demo/app/src/main/res/drawable/mask.xml new file mode 100644 index 0000000..9e51e2f --- /dev/null +++ b/Demo/app/src/main/res/drawable/mask.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/drawable/purple_frame.xml b/Demo/app/src/main/res/drawable/purple_frame.xml new file mode 100644 index 0000000..d44965f --- /dev/null +++ b/Demo/app/src/main/res/drawable/purple_frame.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/Demo/app/src/main/res/drawable/rounded_button.xml b/Demo/app/src/main/res/drawable/rounded_button.xml new file mode 100644 index 0000000..126b4c7 --- /dev/null +++ b/Demo/app/src/main/res/drawable/rounded_button.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Demo/app/src/main/res/drawable/rounded_button_dark.xml b/Demo/app/src/main/res/drawable/rounded_button_dark.xml new file mode 100644 index 0000000..a872fba --- /dev/null +++ b/Demo/app/src/main/res/drawable/rounded_button_dark.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/drawable/rounded_button_white.xml b/Demo/app/src/main/res/drawable/rounded_button_white.xml new file mode 100644 index 0000000..6d7dc73 --- /dev/null +++ b/Demo/app/src/main/res/drawable/rounded_button_white.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/drawable/rounded_rect.xml b/Demo/app/src/main/res/drawable/rounded_rect.xml new file mode 100644 index 0000000..46ce684 --- /dev/null +++ b/Demo/app/src/main/res/drawable/rounded_rect.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/Demo/app/src/main/res/drawable/white_outline.xml b/Demo/app/src/main/res/drawable/white_outline.xml new file mode 100644 index 0000000..9b55f87 --- /dev/null +++ b/Demo/app/src/main/res/drawable/white_outline.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/drawable/win_button.xml b/Demo/app/src/main/res/drawable/win_button.xml new file mode 100644 index 0000000..fd4904e --- /dev/null +++ b/Demo/app/src/main/res/drawable/win_button.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/activity_first.xml b/Demo/app/src/main/res/layout/activity_first.xml new file mode 100644 index 0000000..6bc23db --- /dev/null +++ b/Demo/app/src/main/res/layout/activity_first.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/activity_fragment_demo.xml b/Demo/app/src/main/res/layout/activity_fragment_demo.xml new file mode 100644 index 0000000..ce0f534 --- /dev/null +++ b/Demo/app/src/main/res/layout/activity_fragment_demo.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/activity_image_picker.xml b/Demo/app/src/main/res/layout/activity_image_picker.xml new file mode 100644 index 0000000..5f488f8 --- /dev/null +++ b/Demo/app/src/main/res/layout/activity_image_picker.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/activity_search_web.xml b/Demo/app/src/main/res/layout/activity_search_web.xml new file mode 100644 index 0000000..26e9fc8 --- /dev/null +++ b/Demo/app/src/main/res/layout/activity_search_web.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/activity_second.xml b/Demo/app/src/main/res/layout/activity_second.xml new file mode 100644 index 0000000..f60127c --- /dev/null +++ b/Demo/app/src/main/res/layout/activity_second.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/activity_trivia_game.xml b/Demo/app/src/main/res/layout/activity_trivia_game.xml new file mode 100644 index 0000000..a428936 --- /dev/null +++ b/Demo/app/src/main/res/layout/activity_trivia_game.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_chatting.xml b/Demo/app/src/main/res/layout/fragment_chatting.xml index 78fdbe8..e599bb8 100644 --- a/Demo/app/src/main/res/layout/fragment_chatting.xml +++ b/Demo/app/src/main/res/layout/fragment_chatting.xml @@ -23,7 +23,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_game_over.xml b/Demo/app/src/main/res/layout/fragment_game_over.xml new file mode 100644 index 0000000..e24bbd6 --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_game_over.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_in_game.xml b/Demo/app/src/main/res/layout/fragment_in_game.xml new file mode 100644 index 0000000..30509c4 --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_in_game.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_leaderboard.xml b/Demo/app/src/main/res/layout/fragment_leaderboard.xml new file mode 100644 index 0000000..132337b --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_leaderboard.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_match.xml b/Demo/app/src/main/res/layout/fragment_match.xml new file mode 100644 index 0000000..e815378 --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_match.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_register.xml b/Demo/app/src/main/res/layout/fragment_register.xml new file mode 100644 index 0000000..16b3708 --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_register.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_result_winner.xml b/Demo/app/src/main/res/layout/fragment_result_winner.xml new file mode 100644 index 0000000..80a8bf1 --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_result_winner.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_search_view.xml b/Demo/app/src/main/res/layout/fragment_search_view.xml new file mode 100644 index 0000000..369e10c --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_search_view.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_second.xml b/Demo/app/src/main/res/layout/fragment_second.xml new file mode 100644 index 0000000..2e542a5 --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_second.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_title_screen.xml b/Demo/app/src/main/res/layout/fragment_title_screen.xml new file mode 100644 index 0000000..d06c1bd --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_title_screen.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_user_profile.xml b/Demo/app/src/main/res/layout/fragment_user_profile.xml new file mode 100644 index 0000000..d38c8dd --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_user_profile.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/fragment_web_view.xml b/Demo/app/src/main/res/layout/fragment_web_view.xml new file mode 100644 index 0000000..72d8228 --- /dev/null +++ b/Demo/app/src/main/res/layout/fragment_web_view.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/item_leaderboard_user.xml b/Demo/app/src/main/res/layout/item_leaderboard_user.xml new file mode 100644 index 0000000..9b601af --- /dev/null +++ b/Demo/app/src/main/res/layout/item_leaderboard_user.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/item_package_detail.xml b/Demo/app/src/main/res/layout/item_package_detail.xml new file mode 100644 index 0000000..31b9e1b --- /dev/null +++ b/Demo/app/src/main/res/layout/item_package_detail.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/item_search_suggestion.xml b/Demo/app/src/main/res/layout/item_search_suggestion.xml new file mode 100644 index 0000000..d72f220 --- /dev/null +++ b/Demo/app/src/main/res/layout/item_search_suggestion.xml @@ -0,0 +1,31 @@ + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/layout/user_card.xml b/Demo/app/src/main/res/layout/user_card.xml new file mode 100644 index 0000000..881727a --- /dev/null +++ b/Demo/app/src/main/res/layout/user_card.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/menu/search_web_bottom_nav.xml b/Demo/app/src/main/res/menu/search_web_bottom_nav.xml new file mode 100644 index 0000000..45a232f --- /dev/null +++ b/Demo/app/src/main/res/menu/search_web_bottom_nav.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/menu/trivia_game_bottom_nav.xml b/Demo/app/src/main/res/menu/trivia_game_bottom_nav.xml new file mode 100644 index 0000000..258eb2a --- /dev/null +++ b/Demo/app/src/main/res/menu/trivia_game_bottom_nav.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/navigation/search_web_nav_graph.xml b/Demo/app/src/main/res/navigation/search_web_nav_graph.xml new file mode 100644 index 0000000..e6a623f --- /dev/null +++ b/Demo/app/src/main/res/navigation/search_web_nav_graph.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/navigation/trivia_nav_graph.xml b/Demo/app/src/main/res/navigation/trivia_nav_graph.xml new file mode 100644 index 0000000..ce8e5be --- /dev/null +++ b/Demo/app/src/main/res/navigation/trivia_nav_graph.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/app/src/main/res/raw/unauthorised.html b/Demo/app/src/main/res/raw/unauthorised.html new file mode 100644 index 0000000..5b728b3 --- /dev/null +++ b/Demo/app/src/main/res/raw/unauthorised.html @@ -0,0 +1,39 @@ + + + + Access Denied + + + + + +
    +

    + Access Denied +

    +
    +

    You don't have permission to view this site.

    +

    🚫🚫🚫🚫

    +
    error: website is blocked
    +
    + + \ No newline at end of file diff --git a/Demo/app/src/main/res/values/colors.xml b/Demo/app/src/main/res/values/colors.xml index 44ee837..40a2d0a 100644 --- a/Demo/app/src/main/res/values/colors.xml +++ b/Demo/app/src/main/res/values/colors.xml @@ -444,4 +444,9 @@ #7E8084 #729975 #d26e6d + + #35A571 + #B7F8C9 + #FF897D + #FFE2DF \ No newline at end of file diff --git a/Demo/app/src/main/res/values/dimens.xml b/Demo/app/src/main/res/values/dimens.xml index b89e01b..aae23bd 100644 --- a/Demo/app/src/main/res/values/dimens.xml +++ b/Demo/app/src/main/res/values/dimens.xml @@ -15,4 +15,31 @@ 4dp 16dp 30dp + 1dp + 6dp + 0dp + 13sp + 18sp + 2dp + 8dp + 40dp + 30sp + 20dp + 200dp + 36sp + 362dp + 279dp + 42dp + 160dp + 24dp + 120dp + 225dp + 62sp + 34dp + 70dp + 16sp + 22sp + 52dp + 15sp + 4dp \ No newline at end of file diff --git a/Demo/app/src/main/res/values/strings.xml b/Demo/app/src/main/res/values/strings.xml index 00b0f15..5991873 100644 --- a/Demo/app/src/main/res/values/strings.xml +++ b/Demo/app/src/main/res/values/strings.xml @@ -183,4 +183,44 @@ 🎪 Coming to you live from Shoreline, it\'s #GoogleIO! \nJoin developers around the world for thoughtful discussions, interactive learning, and a first look at our latest product updates. Library Type something... + Enter message to forward + Second activity + Send back to first + Send to Fragment + Second Fragment + Message with bundle + Message with shared viewModel + Send to implicit Fragment + Bottom navigation home + Home + Bottom navigation list + List + Bottom navigation registration form + Register + Rank + # %1$d + Losses + Wins + Congratulations + Next match + Leaderboards + Game over + Try again + VS + Welcome + About + Name + Email + Sign Up + Profile image + %1$s pts + Play + win + Loss + Save details + Web + Bottom navigation web + Bottom navigation packages + Application icon + Search app or package name \ No newline at end of file diff --git a/Demo/app/src/main/res/xml/provider_paths.xml b/Demo/app/src/main/res/xml/provider_paths.xml new file mode 100644 index 0000000..262d6d6 --- /dev/null +++ b/Demo/app/src/main/res/xml/provider_paths.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file diff --git a/Demo/build.gradle b/Demo/build.gradle index c84cccf..0dc935f 100644 --- a/Demo/build.gradle +++ b/Demo/build.gradle @@ -1,4 +1,11 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + dependencies { + def nav_version = "2.5.3" + classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" + } +} + plugins { id 'com.android.application' version '8.0.0' apply false id 'com.android.library' version '8.0.0' apply false