diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b52c533 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +# Project exclude paths +/.gradle/ +/app/build/ +/app/build/intermediates/javac/debug/classes/ \ No newline at end of file diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml new file mode 100644 index 0000000..4319aa7 --- /dev/null +++ b/.idea/assetWizardSettings.xml @@ -0,0 +1,298 @@ + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..526b4c2 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml b/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml new file mode 100644 index 0000000..2e3a81d --- /dev/null +++ b/.idea/libraries/Gradle__androidx_activity_activity_1_2_4_aar.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml b/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml new file mode 100644 index 0000000..7aace70 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_annotation_annotation_1_3_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml new file mode 100644 index 0000000..8c33548 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml b/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml new file mode 100644 index 0000000..d4651cd --- /dev/null +++ b/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_4_1_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml b/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml new file mode 100644 index 0000000..77862d9 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_4_1_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml b/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml new file mode 100644 index 0000000..2208415 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml b/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml new file mode 100644 index 0000000..dfb369e --- /dev/null +++ b/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml b/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml new file mode 100644 index 0000000..4998d73 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml new file mode 100644 index 0000000..9ff0779 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml b/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml new file mode 100644 index 0000000..eafc05e --- /dev/null +++ b/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_3_aar.xml b/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_3_aar.xml new file mode 100644 index 0000000..b4c1d34 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_1_3_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml new file mode 100644 index 0000000..7c283ec --- /dev/null +++ b/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml b/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml new file mode 100644 index 0000000..d04f524 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_core_core_1_7_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_core_core_ktx_1_7_0_aar.xml b/.idea/libraries/Gradle__androidx_core_core_ktx_1_7_0_aar.xml new file mode 100644 index 0000000..7f15920 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_core_core_ktx_1_7_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml new file mode 100644 index 0000000..0dc8b4d --- /dev/null +++ b/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_customview_customview_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_customview_customview_1_1_0_aar.xml new file mode 100644 index 0000000..44dac8b --- /dev/null +++ b/.idea/libraries/Gradle__androidx_customview_customview_1_1_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_databinding_viewbinding_7_1_3_aar.xml b/.idea/libraries/Gradle__androidx_databinding_viewbinding_7_1_3_aar.xml new file mode 100644 index 0000000..259356a --- /dev/null +++ b/.idea/libraries/Gradle__androidx_databinding_viewbinding_7_1_3_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml new file mode 100644 index 0000000..6089e68 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_1_1_aar.xml b/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_1_1_aar.xml new file mode 100644 index 0000000..a8bd8f0 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_1_1_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml new file mode 100644 index 0000000..349c81e --- /dev/null +++ b/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml b/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml new file mode 100644 index 0000000..ab29f3a --- /dev/null +++ b/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_6_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml new file mode 100644 index 0000000..1e29777 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml new file mode 100644 index 0000000..c47438f --- /dev/null +++ b/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml new file mode 100644 index 0000000..9914e49 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_4_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml new file mode 100644 index 0000000..85b626b --- /dev/null +++ b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml new file mode 100644 index 0000000..8c66dd3 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml new file mode 100644 index 0000000..1fef51b --- /dev/null +++ b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml new file mode 100644 index 0000000..94a6e3a --- /dev/null +++ b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_4_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml new file mode 100644 index 0000000..f5f4714 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml new file mode 100644 index 0000000..a3ff2bb --- /dev/null +++ b/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml new file mode 100644 index 0000000..0bfeb60 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml new file mode 100644 index 0000000..febefb7 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml new file mode 100644 index 0000000..22649e4 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml new file mode 100644 index 0000000..50e1377 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml new file mode 100644 index 0000000..b156c5a --- /dev/null +++ b/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml b/.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml new file mode 100644 index 0000000..3f0b818 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_test_core_1_4_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_4_0_aar.xml b/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_4_0_aar.xml new file mode 100644 index 0000000..0cea516 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_4_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_4_0_aar.xml b/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_4_0_aar.xml new file mode 100644 index 0000000..a3e3dea --- /dev/null +++ b/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_4_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_test_ext_junit_1_1_3_aar.xml b/.idea/libraries/Gradle__androidx_test_ext_junit_1_1_3_aar.xml new file mode 100644 index 0000000..cc190b8 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_test_ext_junit_1_1_3_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_test_monitor_1_4_0_aar.xml b/.idea/libraries/Gradle__androidx_test_monitor_1_4_0_aar.xml new file mode 100644 index 0000000..74a09e1 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_test_monitor_1_4_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_test_runner_1_4_0_aar.xml b/.idea/libraries/Gradle__androidx_test_runner_1_4_0_aar.xml new file mode 100644 index 0000000..0edb3bb --- /dev/null +++ b/.idea/libraries/Gradle__androidx_test_runner_1_4_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_test_services_storage_1_4_0_aar.xml b/.idea/libraries/Gradle__androidx_test_services_storage_1_4_0_aar.xml new file mode 100644 index 0000000..4faedf2 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_test_services_storage_1_4_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml b/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml new file mode 100644 index 0000000..a1500b3 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml new file mode 100644 index 0000000..d48adf8 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml b/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml new file mode 100644 index 0000000..7628015 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml b/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml new file mode 100644 index 0000000..d58e2b5 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml new file mode 100644 index 0000000..e486fc8 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml b/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml new file mode 100644 index 0000000..43b1a88 --- /dev/null +++ b/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__com_google_android_material_material_1_5_0_aar.xml b/.idea/libraries/Gradle__com_google_android_material_material_1_5_0_aar.xml new file mode 100644 index 0000000..2588422 --- /dev/null +++ b/.idea/libraries/Gradle__com_google_android_material_material_1_5_0_aar.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml b/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml new file mode 100644 index 0000000..2b834ea --- /dev/null +++ b/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml b/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml new file mode 100644 index 0000000..662b001 --- /dev/null +++ b/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml b/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml new file mode 100644 index 0000000..62012ea --- /dev/null +++ b/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__junit_junit_4_12.xml b/.idea/libraries/Gradle__junit_junit_4_12.xml new file mode 100644 index 0000000..6c078d6 --- /dev/null +++ b/.idea/libraries/Gradle__junit_junit_4_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__junit_junit_4_13_2.xml b/.idea/libraries/Gradle__junit_junit_4_13_2.xml new file mode 100644 index 0000000..c2cb45d --- /dev/null +++ b/.idea/libraries/Gradle__junit_junit_4_13_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml new file mode 100644 index 0000000..09cf23d --- /dev/null +++ b/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml b/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml new file mode 100644 index 0000000..1a77dd8 --- /dev/null +++ b/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml b/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml new file mode 100644 index 0000000..3d45e8e --- /dev/null +++ b/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml b/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml new file mode 100644 index 0000000..1fa0fa9 --- /dev/null +++ b/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml b/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml new file mode 100644 index 0000000..1953391 --- /dev/null +++ b/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_6_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml b/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml new file mode 100644 index 0000000..68fff8a --- /dev/null +++ b/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_6_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml b/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml new file mode 100644 index 0000000..92ea1ff --- /dev/null +++ b/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_6_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml b/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml new file mode 100644 index 0000000..66439c6 --- /dev/null +++ b/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_6_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b0afe08 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..b013c34 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/CalculatorKotlin.iml b/.idea/modules/CalculatorKotlin.iml new file mode 100644 index 0000000..35d9707 --- /dev/null +++ b/.idea/modules/CalculatorKotlin.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/app/CalculatorKotlin.app.iml b/.idea/modules/app/CalculatorKotlin.app.iml new file mode 100644 index 0000000..eaf2c7c --- /dev/null +++ b/.idea/modules/app/CalculatorKotlin.app.iml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/render.experimental.xml b/.idea/render.experimental.xml new file mode 100644 index 0000000..8ec256a --- /dev/null +++ b/.idea/render.experimental.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..234495a --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1649359838915 + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..eb81a1f --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,46 @@ +plugins { + id 'com.android.application' + id 'org.jetbrains.kotlin.android' +} + +android { + compileSdk 31 + + defaultConfig { + applicationId "ru.trilgon.calculatorkotlin" + minSdk 23 + targetSdk 31 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } + buildFeatures{ + viewBinding true + } +} + +dependencies { + + implementation 'androidx.core:core-ktx:1.7.0' + implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'com.google.android.material:material:1.5.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.3' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/ru/trilgon/calculatorkotlin/ExampleInstrumentedTest.kt b/app/src/androidTest/java/ru/trilgon/calculatorkotlin/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..239a06e --- /dev/null +++ b/app/src/androidTest/java/ru/trilgon/calculatorkotlin/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package ru.trilgon.calculatorkotlin + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("ru.trilgon.calculatorkotlin", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..232746b --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..7f58190 Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/ru/trilgon/calculatorkotlin/Calculator.kt b/app/src/main/java/ru/trilgon/calculatorkotlin/Calculator.kt new file mode 100644 index 0000000..6f30497 --- /dev/null +++ b/app/src/main/java/ru/trilgon/calculatorkotlin/Calculator.kt @@ -0,0 +1,107 @@ +package ru.trilgon.calculatorkotlin + +import java.math.BigDecimal +import java.util.* + + +class Calculator() : MainContract.Model { + private val inValues: MutableList = mutableListOf() + + override fun calculate(input: StringBuilder): String { + prepareIn(input) + + var result: BigDecimal = (0).toBigDecimal() + + var index: Int = 0 + while (index <= inValues.lastIndex) { + when { + inValues[index] == "/" -> { + try { + result = inValues[index - 1].toBigDecimal() + .divide(inValues[index + 1].toBigDecimal()) + inValues[index - 1] = result.toString() + inValues.subList(index, index + 2).clear() + index -= 2 + } catch (e: ArithmeticException) { + inValues.clear() + return "Can't divide by zero" + } + } + inValues[index] == "*" -> { + result = inValues[index - 1].toBigDecimal() * inValues[index + 1].toBigDecimal() + inValues[index - 1] = result.toString() + inValues.subList(index, index + 2).clear() + index -= 2 + } + inValues[index] == "%" -> { + try { + result = + inValues[index - 1].toBigDecimal() % inValues[index + 1].toBigDecimal() + inValues[index - 1] = result.toString() + inValues.subList(index, index + 2).clear() + index -= 2 + } catch (e: ArithmeticException) { + inValues.clear() + return "Can't divide by zero" + } + } + } + index++ + } + + index = 0 + while (index <= inValues.lastIndex) { + when { + inValues[index] == "+" -> { + result = inValues[index - 1].toBigDecimal() + inValues[index + 1].toBigDecimal() + inValues[index - 1] = result.toString() + inValues.subList(index, index + 2).clear() + index -= 2 + } + inValues[index] == "-" -> { + result = inValues[index - 1].toBigDecimal() - inValues[index + 1].toBigDecimal() + inValues[index - 1] = result.toString() + inValues.subList(index, index + 2).clear() + index -= 2 + } + } + index++ + } + if (result == 0.toBigDecimal() && inValues.isNotEmpty()) + result = inValues[0].toBigDecimal() + inValues.clear() + + return try { + result.intValueExact().toString() + } catch (e: ArithmeticException) { + result.toString() + } + } + + private fun prepareIn(input: StringBuilder) { + var numDetected = false + var startIndex = 0 + val trimmedIn = input.filter { !it.isWhitespace() } + + for (i in 0..trimmedIn.lastIndex) { + when { + trimmedIn[i].isDigit() && !numDetected -> { + startIndex = i + numDetected = true + } + !trimmedIn[i].isDigit() && numDetected && trimmedIn[i] != '.' -> { + inValues.add(trimmedIn.substring(startIndex, i)) + inValues.add(trimmedIn[i].toString()) + numDetected = false + } + !trimmedIn[i].isDigit() && !numDetected && trimmedIn[i] == '-' -> { + startIndex = i + numDetected = true + } + } + } + if (numDetected) { + inValues.add(trimmedIn.substring(startIndex..trimmedIn.lastIndex)) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/trilgon/calculatorkotlin/MainActivity.kt b/app/src/main/java/ru/trilgon/calculatorkotlin/MainActivity.kt new file mode 100644 index 0000000..147f39a --- /dev/null +++ b/app/src/main/java/ru/trilgon/calculatorkotlin/MainActivity.kt @@ -0,0 +1,116 @@ +package ru.trilgon.calculatorkotlin + +import android.os.Bundle +import android.os.Vibrator +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import ru.trilgon.calculatorkotlin.databinding.ActivityMainBinding + +class MainActivity : AppCompatActivity(), MainContract.View { + private lateinit var biding: ActivityMainBinding + private lateinit var vibrator: Vibrator + private val presenter: MainContract.Presenter = MainPresenter(this) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + biding = ActivityMainBinding.inflate(layoutInflater) + setContentView(biding.root) + @Suppress("DEPRECATION") + vibrator = getSystemService(VIBRATOR_SERVICE) as Vibrator + + biding.apply { + btnZero.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickNumber(it.id) + } + btnOne.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickNumber(it.id) + } + btnTwo.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickNumber(it.id) + } + btnThree.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickNumber(it.id) + } + btnFour.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickNumber(it.id) + } + btnFive.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickNumber(it.id) + } + btnSix.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickNumber(it.id) + } + btnSeven.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickNumber(it.id) + } + btnEight.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickNumber(it.id) + } + btnNine.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickNumber(it.id) + } + + btnPlus.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickAction(it.id) + } + btnMinus.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickAction(it.id) + } + btnMultiply.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickAction(it.id) + } + btnDivide.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickAction(it.id) + } + btnMod.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickAction(it.id) + } + btnClear.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickAction(it.id) + } + btnSign.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickAction(it.id) + } + btnPoint.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickAction(it.id) + } + btnEquals.setOnClickListener { + vibrator.vibrate(40) + presenter.onClickAction(it.id) + } + } + } + + override fun showInput(input: String) { + biding.textIn.text = input + } + + override fun showResult(result: String) { + biding.textOut.text = result + } + + override fun showMessage(message: String) { + Toast.makeText(this, message, Toast.LENGTH_SHORT).show() + } + + override fun getStringRes(stringId: Int): String { + return getString(stringId) + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/trilgon/calculatorkotlin/MainContract.kt b/app/src/main/java/ru/trilgon/calculatorkotlin/MainContract.kt new file mode 100644 index 0000000..6d4c961 --- /dev/null +++ b/app/src/main/java/ru/trilgon/calculatorkotlin/MainContract.kt @@ -0,0 +1,19 @@ +package ru.trilgon.calculatorkotlin + +interface MainContract { + interface Model { + fun calculate(input: StringBuilder): String + } + + interface Presenter { + fun onClickNumber(buttonId: Int) + fun onClickAction(buttonId: Int) + } + + interface View { + fun showInput(input: String) + fun showResult(result: String) + fun showMessage(message: String) + fun getStringRes(stringId: Int): String + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/trilgon/calculatorkotlin/MainPresenter.kt b/app/src/main/java/ru/trilgon/calculatorkotlin/MainPresenter.kt new file mode 100644 index 0000000..8e41a00 --- /dev/null +++ b/app/src/main/java/ru/trilgon/calculatorkotlin/MainPresenter.kt @@ -0,0 +1,166 @@ +package ru.trilgon.calculatorkotlin + +class MainPresenter(private val view: MainContract.View) : MainContract.Presenter { + private var input: StringBuilder = StringBuilder("") + private var canOperation = false + private var wasPoint = false + private val calculator: MainContract.Model = Calculator() + + override fun onClickNumber(buttonId: Int) { + when (buttonId) { + R.id.btnZero -> { + if (input.isEmpty() || input[0].toChar() != '0' || input.length != 1) { + numberClicked(0) + } + } + R.id.btnOne -> { + checkZero() + numberClicked(1) + } + R.id.btnTwo -> { + checkZero() + numberClicked(2) + } + R.id.btnThree -> { + checkZero() + numberClicked(3) + } + R.id.btnFour -> { + checkZero() + numberClicked(4) + } + R.id.btnFive -> { + checkZero() + numberClicked(5) + } + R.id.btnSix -> { + checkZero() + numberClicked(6) + } + R.id.btnSeven -> { + checkZero() + numberClicked(7) + } + R.id.btnEight -> { + checkZero() + numberClicked(8) + } + R.id.btnNine -> { + checkZero() + numberClicked(9) + } + } + } + + private fun checkZero() { + if (input.isNotEmpty() && input[0].toChar() == '0' && input.length == 1) input.clear() + } + + private fun numberClicked(number: Int) { + input.append(number) + canOperation = true + view.showInput(input.toString()) + view.showResult(calculator.calculate(input)) + } + + private fun operationClicked(operation: String) { + input.append(" $operation ") + canOperation = false + wasPoint = false + view.showInput(input.toString()) + } + + override fun onClickAction(buttonId: Int) { + if (canOperation) { + when (buttonId) { + R.id.btnPlus -> { + operationClicked("+") + } + R.id.btnMinus -> { + operationClicked("-") + } + R.id.btnMultiply -> { + operationClicked("*") + } + R.id.btnDivide -> { + operationClicked("/") + } + R.id.btnMod -> { + operationClicked("%") + } + } + } + + when (buttonId) { + R.id.btnPoint -> { + if (!wasPoint) { + if (input.isEmpty() || !input.last().isDigit()) { + input.append("0.") + view.showInput(input.toString()) + } else { + input.append('.') + view.showInput(input.toString()) + } + wasPoint = true + } else { + view.showMessage(view.getStringRes((R.string.warn_point_was))) + } + } + R.id.btnSign -> { + if (input.isNotEmpty() && input.last().isDigit()) { + for (i in input.lastIndex downTo 0) { + if (i == 0 && input[i].isDigit()) { + input.insert(0, '-') + view.showInput(input.toString()) + view.showResult(calculator.calculate(input)) + break + } + if (!input[i].isDigit()) { + if (i == 0) { + input.deleteCharAt(0) + view.showInput(input.toString()) + view.showResult(calculator.calculate(input)) + break + } + if (input[i] == '-') { + input.deleteCharAt(i) + view.showInput(input.toString()) + view.showResult(calculator.calculate(input)) + break + } + if (input[i] != '.') { + input.insert(i + 1, '-') + view.showInput(input.toString()) + view.showResult(calculator.calculate(input)) + break + } + } + } + } + } + R.id.btnClear -> { + input.clear() + view.showInput(input.toString()) + view.showResult("") + wasPoint = false + canOperation = false + } + R.id.btnEquals -> { + if (input.isNotEmpty() && input.last().isDigit()) { + val result = calculator.calculate(input) + wasPoint = if (result != "Can't divide by zero"){ + input.replace(0, input.length, result) + view.showInput(input.toString()) + result.contains('.') + } else{ + input.clear() + view.showInput(input.toString()) + view.showResult("") + false + } + } else view.showMessage(view.getStringRes(R.string.warn_wrong_input)) + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_numbers_selector.xml b/app/src/main/res/drawable/btn_numbers_selector.xml new file mode 100644 index 0000000..272c5dc --- /dev/null +++ b/app/src/main/res/drawable/btn_numbers_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_right_actions_selector.xml b/app/src/main/res/drawable/btn_right_actions_selector.xml new file mode 100644 index 0000000..e26974e --- /dev/null +++ b/app/src/main/res/drawable/btn_right_actions_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_top_actions_selector.xml b/app/src/main/res/drawable/btn_top_actions_selector.xml new file mode 100644 index 0000000..f8096b8 --- /dev/null +++ b/app/src/main/res/drawable/btn_top_actions_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/font/sf_pro_display_regular.otf b/app/src/main/res/font/sf_pro_display_regular.otf new file mode 100644 index 0000000..09aaca9 Binary files /dev/null and b/app/src/main/res/font/sf_pro_display_regular.otf differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..94da125 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,209 @@ + + + + + + + + + + + + +